From b737b0e24572348b1c73783ccb2ddbc1a5734212 Mon Sep 17 00:00:00 2001 From: John Turpish Date: Sat, 6 Jan 2024 00:16:59 -0500 Subject: [PATCH] Close #66 Providers requests. And parsing the responses. We add more gateways. --- .github/tour.sh | 20 +- .../chrome/browser/flag-metadata.json.patch | 16 - .../chrome/browser/flag_descriptions.h.patch | 24 - .../121.0.6147.0/url/url_canon_ipfs.cc | 64 - .../121.0.6147.0/url/url_util.cc.patch | 17 - .../chrome/browser/BUILD.gn.patch | 23 - .../121.0.6156.3/url/BUILD.gn.patch | 32 - .../121.0.6156.3/url/url_canon.h.patch | 28 - .../121.0.6156.3/url/url_util.cc.patch | 17 - .../chrome/browser/about_flags.cc.patch | 38 - ...me_autocomplete_scheme_classifier.cc.patch | 50 - .../chrome_content_browser_client.cc.patch | 63 - .../chrome/browser/flag_descriptions.cc.patch | 16 - .../common/chrome_content_client.cc.patch | 17 - .../components/cbor/reader.cc.patch | 44 - .../components/cbor/reader.h.patch | 26 - .../components/cbor/reader_unittest.cc.patch | 47 - .../components/cbor/values.cc.patch | 145 - .../components/cbor/values.h.patch | 79 - .../components/cbor/writer.cc.patch | 14 - .../components/cbor/writer_unittest.cc.patch | 36 - .../clipboard_recent_content_generic.cc.patch | 13 - .../net/dns/dns_config_service_linux.cc.patch | 18 - .../weborigin/scheme_registry.cc.patch | 13 - .../121.0.6167.8/url/url_util.cc.patch | 17 - .../chrome/browser/BUILD.gn.patch | 10 +- .../chrome/browser/about_flags.cc.patch | 10 +- ...me_autocomplete_scheme_classifier.cc.patch | 0 .../chrome_content_browser_client.cc.patch | 32 +- .../chrome/browser/flag-metadata.json.patch | 4 +- .../chrome/browser/flag_descriptions.cc.patch | 2 +- .../chrome/browser/flag_descriptions.h.patch | 4 +- .../chrome/browser/ipfs_extra_parts.cc | 10 + .../chrome/browser/ipfs_extra_parts.h | 10 + .../browser/prefs/browser_prefs.cc.patch | 36 + .../common/chrome_content_client.cc.patch | 0 .../components/cbor/reader.cc.patch | 0 .../components/cbor/reader.h.patch | 0 .../components/cbor/reader_unittest.cc.patch | 0 .../components/cbor/values.cc.patch | 0 .../components/cbor/values.h.patch | 0 .../components/cbor/writer.cc.patch | 0 .../components/cbor/writer_unittest.cc.patch | 0 .../clipboard_recent_content_generic.cc.patch | 0 .../net/dns/dns_config_service_linux.cc.patch | 0 .../weborigin/scheme_registry.cc.patch | 0 .../url/BUILD.gn.patch | 6 +- .../url/url_canon.h.patch | 4 +- .../url/url_canon_ipfs.cc | 35 +- .../122.0.6226.2/url/url_util.cc.patch | 22 + .../chrome/browser/BUILD.gn.patch | 10 +- .../chrome/browser/about_flags.cc.patch | 10 +- ...me_autocomplete_scheme_classifier.cc.patch | 0 .../chrome_content_browser_client.cc.patch | 30 +- .../chrome/browser/flag-metadata.json.patch | 4 +- .../chrome/browser/flag_descriptions.cc.patch | 4 +- .../chrome/browser/flag_descriptions.h.patch | 6 +- .../chrome/browser/ipfs_extra_parts.cc | 10 + .../chrome/browser/ipfs_extra_parts.h | 10 + .../browser/prefs/browser_prefs.cc.patch | 36 + .../common/chrome_content_client.cc.patch | 0 .../components/cbor/reader.cc.patch | 0 .../components/cbor/reader.h.patch | 0 .../components/cbor/reader_unittest.cc.patch | 0 .../components/cbor/values.cc.patch | 0 .../components/cbor/values.h.patch | 0 .../components/cbor/writer.cc.patch | 0 .../components/cbor/writer_unittest.cc.patch | 0 .../clipboard_recent_content_generic.cc.patch | 0 .../net/dns/dns_config_service_linux.cc.patch | 0 .../weborigin/scheme_registry.cc.patch | 0 .../url/BUILD.gn.patch | 6 +- .../url/url_canon.h.patch | 4 +- .../url/url_canon_ipfs.cc | 35 +- .../122.0.6236.2/url/url_util.cc.patch | 22 + cmake/GNU.cmake | 1 + cmake/patch.py | 12 +- component/block_http_request.cc | 2 - component/chromium_ipfs_context.cc | 3 + component/chromium_ipfs_context.h | 1 + component/patches/121.0.6147.0.patch | 837 -- ...{121.0.6167.8.patch => 122.0.6226.2.patch} | 169 +- ...{121.0.6156.3.patch => 122.0.6236.2.patch} | 167 +- ...c59146681c9207a4610d12669dd4a0603af2.patch | 11532 ---------------- library/BUILD.gn.in | 4 - library/CMakeLists.txt | 43 +- library/include/ipfs_client/context_api.h | 3 +- .../ipfs_client/gw/block_request_splitter.h | 5 + library/include/ipfs_client/ipfs_request.h | 2 - library/include/ipfs_client/pb_dag.h | 43 +- library/include/ipfs_client/test_context.h | 12 +- library/include/vocab/html_escape.h | 2 +- library/src/ipfs_client/context_api.cc | 6 +- .../ipfs_client/crypto/openssl_sha2_256.cc | 3 +- library/src/ipfs_client/gateways.cc | 31 +- library/src/ipfs_client/gateways_unittest.cc | 2 +- .../ipfs_client/gw/block_request_splitter.cc | 11 +- .../gw/block_request_splitter_unittest.cc | 28 +- .../src/ipfs_client/gw/default_requestor.cc | 1 - .../ipfs_client/gw/gateway_http_requestor.h | 34 - library/src/ipfs_client/gw/gateway_request.cc | 27 +- library/src/ipfs_client/gw/gateway_state.cc | 6 +- library/src/ipfs_client/gw/gateway_state.h | 3 + .../ipfs_client/gw/multi_gateway_requestor.cc | 75 +- .../src/ipfs_client/gw/providers_response.cc | 86 + .../src/ipfs_client/gw/providers_response.h | 14 + .../ipfs_client/gw/terminating_requestor.cc | 5 +- library/src/ipfs_client/ipfs_request.cc | 11 - library/src/ipfs_client/ipld/dag_node.cc | 4 +- .../src/ipfs_client/ipns_record_unittest.cc | 3 +- library/src/ipfs_client/orchestrator.cc | 8 +- .../src/ipfs_client/orchestrator_unittest.cc | 2 + library/src/ipfs_client/pb_dag.cc | 57 +- library/src/ipfs_client/test_context.cc | 167 +- library/src/vocab/html_escape_unittest.cc | 4 +- ...d4PC2FKNG46Gew68Try6cmXDkkxKHo21U64yUqZyKu | 2 - ...U6TzmfpRuvCHSwR1fbdjYXLAGmdTnTQYLYN5S1jKy9 | 2 - ...m8JS1FjtHvG4iaXKW14xuZUfoyAJLpuhGUK1VSS8Bt | 2 - ...F8bLEMzjgnUZBRMAkyUyZUQax2PJBKgDuSzqW8CVT4 | 2 - ...xaA3HnB2SrGsrFdJyhXVGHLkXSXXyCc5iZCqYsWf6x | 2 - ...kb75JctBPndJ1vxwcmNMJP9WNq9MXUKkHWi1MpadAP | 2 - ...UfZs5Gm8LjT4BxouNDEPY2eqYpqpLrZc7T2isPHdgi | 2 - ...4KVCJDJtkuNN8d2CBn6fHBfy7vkwytpVct5EEpyF8b | 2 - ...HusdPJcQKn7M4VkkLCccm3robyr6hiJzywvZqyJPK8 | 2 - ...ZNKE9s8fsHoEnArsZXnzMWijKddhXXDsAev8LdTT5z | 3 - ...SG3PL3pmpwThwEQoaTtPD3tCYtomHrYJGmeZyhnHJP | 2 - ...qw3vXsbtFcqKukUwL1L4gAEzuJxVtUiPhWndR92H1m | 2 - ...5WEvzAQMnTX2VUmWf3yjjoXBtxNbLk1jaKSnSnxStL | 2 - ...YaLhN3Tanoa5AzxTYmMikiLFsTMdLBDRNLasZUAVhN | 2 - ...A6TUXLM2bbJNDvADRQJ7h7QQDWVi76SvDoHgCqDxPk | 2 - ...Jfjp858emhSLfzUvVT2xYANwtQ1rj61YKavYTEL3WC | 2 - ...xFhRagQGubsUWWV6Th3C8WRubdsG64FKA62ZpaFiV4 | 94 - ...rEdppsp1HPGxE7x4w7gZpCmdmf8MyPo2w3kXXRSfdM | 94 - ...DLb4gnJcJbT1Df5X3j91ysiwkkyxw6329NLiC1KMDR | 3 - ...2YVGixJwh2HHRpy91H2x9KqpnzgyaqHxm3XAgzTWK5 | 195 - ...DRcZcAQPBensuRn4edoJa7NK8qUfWBSJULnGo8aYZj | Bin 30972 -> 0 bytes ...FUG5JR8f37w7WqbaZfRFGM9wh33yWgMMncSHhAxnBW | 4 - ...o2QuaXiXjwsQMVQwK5PHZwqoFv8NYqndJBGa5junwA | 2 - ...6Rpt8DVLp6DrPuq1yhVNcvCywWMEeaNW13sNkSoRtH | 2 - ...ustWHXRkcFFt1g37mxBmC1bSmZM5oXmDVDdT6tTELJ | 2 - ...4HtFeHfGeawV5jVUrssu2r7bLiEc4Xrf1digi2bAWD | 2 - ...vAZqcgbb4ijk8KqvUZ8hAAQ7rNToeU1Q8cEWb1czzY | 4 - ...sRowJSgkv1NCFCmXJ29wyYXAF2xU1jdCppwTazyQCx | 2 - ...ok6yujnnx2y37tk4ajlk4eooz6pzyp4sluhffpvpre | 1 - ...jum6k3gzvynfks7wpbd27mgfr5xbf6rjvr657suzia | 1 - ...bsicmwdtp35b6oxjzb4ppqzhuwn5byxhmlb6bbdmzu | Bin 0 -> 262158 bytes ...ydhubchh46lxjxlagnmfo64mges5zbddwmzaglnixi | Bin 0 -> 262158 bytes ...ukqvjnyitmvwse6oarnbcqhfc5udwdv4ct7qkfboee | Bin 0 -> 262158 bytes ...lmmqsz2in66tafzvrsv6dgydpcb2xgt2vcrzj6jzae | Bin 0 -> 262158 bytes ...dtpwkrbifvob3kli25ns4axif76m3hqcjsnjqllhhq | Bin 0 -> 262158 bytes test_data/include/mock_api.h | 2 + 151 files changed, 946 insertions(+), 14170 deletions(-) delete mode 100644 chromium_edits/121.0.6147.0/chrome/browser/flag-metadata.json.patch delete mode 100644 chromium_edits/121.0.6147.0/chrome/browser/flag_descriptions.h.patch delete mode 100644 chromium_edits/121.0.6147.0/url/url_canon_ipfs.cc delete mode 100644 chromium_edits/121.0.6147.0/url/url_util.cc.patch delete mode 100644 chromium_edits/121.0.6156.3/chrome/browser/BUILD.gn.patch delete mode 100644 chromium_edits/121.0.6156.3/url/BUILD.gn.patch delete mode 100644 chromium_edits/121.0.6156.3/url/url_canon.h.patch delete mode 100644 chromium_edits/121.0.6156.3/url/url_util.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/chrome/browser/about_flags.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/chrome/browser/chrome_content_browser_client.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/chrome/browser/flag_descriptions.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/chrome/common/chrome_content_client.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/components/cbor/reader.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/components/cbor/reader.h.patch delete mode 100644 chromium_edits/121.0.6167.8/components/cbor/reader_unittest.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/components/cbor/values.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/components/cbor/values.h.patch delete mode 100644 chromium_edits/121.0.6167.8/components/cbor/writer.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/components/cbor/writer_unittest.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/net/dns/dns_config_service_linux.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch delete mode 100644 chromium_edits/121.0.6167.8/url/url_util.cc.patch rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/chrome/browser/BUILD.gn.patch (72%) rename chromium_edits/{121.0.6156.3 => 122.0.6226.2}/chrome/browser/about_flags.cc.patch (88%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/chrome/browser/chrome_content_browser_client.cc.patch (75%) rename chromium_edits/{121.0.6156.3 => 122.0.6226.2}/chrome/browser/flag-metadata.json.patch (88%) rename chromium_edits/{121.0.6156.3 => 122.0.6226.2}/chrome/browser/flag_descriptions.cc.patch (94%) rename chromium_edits/{121.0.6167.8 => 122.0.6226.2}/chrome/browser/flag_descriptions.h.patch (89%) create mode 100644 chromium_edits/122.0.6226.2/chrome/browser/ipfs_extra_parts.cc create mode 100644 chromium_edits/122.0.6226.2/chrome/browser/ipfs_extra_parts.h create mode 100644 chromium_edits/122.0.6226.2/chrome/browser/prefs/browser_prefs.cc.patch rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/chrome/common/chrome_content_client.cc.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/components/cbor/reader.cc.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/components/cbor/reader.h.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/components/cbor/reader_unittest.cc.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/components/cbor/values.cc.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/components/cbor/values.h.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/components/cbor/writer.cc.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/components/cbor/writer_unittest.cc.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/net/dns/dns_config_service_linux.cc.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6226.2}/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch (100%) rename chromium_edits/{121.0.6167.8 => 122.0.6226.2}/url/BUILD.gn.patch (87%) rename chromium_edits/{121.0.6167.8 => 122.0.6226.2}/url/url_canon.h.patch (91%) rename chromium_edits/{121.0.6156.3 => 122.0.6226.2}/url/url_canon_ipfs.cc (62%) create mode 100644 chromium_edits/122.0.6226.2/url/url_util.cc.patch rename chromium_edits/{121.0.6167.8 => 122.0.6236.2}/chrome/browser/BUILD.gn.patch (72%) rename chromium_edits/{121.0.6147.0 => 122.0.6236.2}/chrome/browser/about_flags.cc.patch (88%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/chrome/browser/chrome_content_browser_client.cc.patch (76%) rename chromium_edits/{121.0.6167.8 => 122.0.6236.2}/chrome/browser/flag-metadata.json.patch (88%) rename chromium_edits/{121.0.6147.0 => 122.0.6236.2}/chrome/browser/flag_descriptions.cc.patch (85%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/chrome/browser/flag_descriptions.h.patch (87%) create mode 100644 chromium_edits/122.0.6236.2/chrome/browser/ipfs_extra_parts.cc create mode 100644 chromium_edits/122.0.6236.2/chrome/browser/ipfs_extra_parts.h create mode 100644 chromium_edits/122.0.6236.2/chrome/browser/prefs/browser_prefs.cc.patch rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/chrome/common/chrome_content_client.cc.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/components/cbor/reader.cc.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/components/cbor/reader.h.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/components/cbor/reader_unittest.cc.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/components/cbor/values.cc.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/components/cbor/values.h.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/components/cbor/writer.cc.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/components/cbor/writer_unittest.cc.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/net/dns/dns_config_service_linux.cc.patch (100%) rename chromium_edits/{121.0.6156.3 => 122.0.6236.2}/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch (100%) rename chromium_edits/{121.0.6147.0 => 122.0.6236.2}/url/BUILD.gn.patch (87%) rename chromium_edits/{121.0.6147.0 => 122.0.6236.2}/url/url_canon.h.patch (91%) rename chromium_edits/{121.0.6167.8 => 122.0.6236.2}/url/url_canon_ipfs.cc (62%) create mode 100644 chromium_edits/122.0.6236.2/url/url_util.cc.patch delete mode 100644 component/patches/121.0.6147.0.patch rename component/patches/{121.0.6167.8.patch => 122.0.6226.2.patch} (87%) rename component/patches/{121.0.6156.3.patch => 122.0.6236.2.patch} (88%) delete mode 100644 component/patches/2f84c59146681c9207a4610d12669dd4a0603af2.patch delete mode 100644 library/src/ipfs_client/gw/gateway_http_requestor.h create mode 100644 library/src/ipfs_client/gw/providers_response.cc create mode 100644 library/src/ipfs_client/gw/providers_response.h delete mode 100644 test_data/blocks/QmR6d4PC2FKNG46Gew68Try6cmXDkkxKHo21U64yUqZyKu delete mode 100644 test_data/blocks/QmR9U6TzmfpRuvCHSwR1fbdjYXLAGmdTnTQYLYN5S1jKy9 delete mode 100644 test_data/blocks/QmRJm8JS1FjtHvG4iaXKW14xuZUfoyAJLpuhGUK1VSS8Bt delete mode 100644 test_data/blocks/QmRRF8bLEMzjgnUZBRMAkyUyZUQax2PJBKgDuSzqW8CVT4 delete mode 100644 test_data/blocks/QmRcxaA3HnB2SrGsrFdJyhXVGHLkXSXXyCc5iZCqYsWf6x delete mode 100644 test_data/blocks/QmRekb75JctBPndJ1vxwcmNMJP9WNq9MXUKkHWi1MpadAP delete mode 100644 test_data/blocks/QmRgUfZs5Gm8LjT4BxouNDEPY2eqYpqpLrZc7T2isPHdgi delete mode 100644 test_data/blocks/QmRi4KVCJDJtkuNN8d2CBn6fHBfy7vkwytpVct5EEpyF8b delete mode 100644 test_data/blocks/QmS4HusdPJcQKn7M4VkkLCccm3robyr6hiJzywvZqyJPK8 delete mode 100644 test_data/blocks/QmS6ZNKE9s8fsHoEnArsZXnzMWijKddhXXDsAev8LdTT5z delete mode 100644 test_data/blocks/QmS8SG3PL3pmpwThwEQoaTtPD3tCYtomHrYJGmeZyhnHJP delete mode 100644 test_data/blocks/QmSGqw3vXsbtFcqKukUwL1L4gAEzuJxVtUiPhWndR92H1m delete mode 100644 test_data/blocks/QmSH5WEvzAQMnTX2VUmWf3yjjoXBtxNbLk1jaKSnSnxStL delete mode 100644 test_data/blocks/QmSLYaLhN3Tanoa5AzxTYmMikiLFsTMdLBDRNLasZUAVhN delete mode 100644 test_data/blocks/QmSRA6TUXLM2bbJNDvADRQJ7h7QQDWVi76SvDoHgCqDxPk delete mode 100644 test_data/blocks/QmT4Jfjp858emhSLfzUvVT2xYANwtQ1rj61YKavYTEL3WC delete mode 100644 test_data/blocks/QmUBxFhRagQGubsUWWV6Th3C8WRubdsG64FKA62ZpaFiV4 delete mode 100644 test_data/blocks/QmVKrEdppsp1HPGxE7x4w7gZpCmdmf8MyPo2w3kXXRSfdM delete mode 100644 test_data/blocks/QmaWDLb4gnJcJbT1Df5X3j91ysiwkkyxw6329NLiC1KMDR delete mode 100644 test_data/blocks/Qmb92YVGixJwh2HHRpy91H2x9KqpnzgyaqHxm3XAgzTWK5 delete mode 100644 test_data/blocks/QmdVDRcZcAQPBensuRn4edoJa7NK8qUfWBSJULnGo8aYZj delete mode 100644 test_data/blocks/QmdvFUG5JR8f37w7WqbaZfRFGM9wh33yWgMMncSHhAxnBW delete mode 100644 test_data/blocks/QmeMo2QuaXiXjwsQMVQwK5PHZwqoFv8NYqndJBGa5junwA delete mode 100644 test_data/blocks/Qmew6Rpt8DVLp6DrPuq1yhVNcvCywWMEeaNW13sNkSoRtH delete mode 100644 test_data/blocks/QmexustWHXRkcFFt1g37mxBmC1bSmZM5oXmDVDdT6tTELJ delete mode 100644 test_data/blocks/Qmf34HtFeHfGeawV5jVUrssu2r7bLiEc4Xrf1digi2bAWD delete mode 100644 test_data/blocks/QmfAvAZqcgbb4ijk8KqvUZ8hAAQ7rNToeU1Q8cEWb1czzY delete mode 100644 test_data/blocks/QmfBsRowJSgkv1NCFCmXJ29wyYXAF2xU1jdCppwTazyQCx delete mode 100644 test_data/blocks/bafkreiaehjyyo5gfok6yujnnx2y37tk4ajlk4eooz6pzyp4sluhffpvpre delete mode 100644 test_data/blocks/bafkreiaurxu4lj5ejum6k3gzvynfks7wpbd27mgfr5xbf6rjvr657suzia create mode 100644 test_data/blocks/bafybeid7szco6ai6bsicmwdtp35b6oxjzb4ppqzhuwn5byxhmlb6bbdmzu create mode 100644 test_data/blocks/bafybeidcikfflh4rydhubchh46lxjxlagnmfo64mges5zbddwmzaglnixi create mode 100644 test_data/blocks/bafybeiedwcidxo7uukqvjnyitmvwse6oarnbcqhfc5udwdv4ct7qkfboee create mode 100644 test_data/blocks/bafybeieymwabzccklmmqsz2in66tafzvrsv6dgydpcb2xgt2vcrzj6jzae create mode 100644 test_data/blocks/bafybeifbzvpq6r72dtpwkrbifvob3kli25ns4axif76m3hqcjsnjqllhhq diff --git a/.github/tour.sh b/.github/tour.sh index e516f1ef..7c03223a 100755 --- a/.github/tour.sh +++ b/.github/tour.sh @@ -1,6 +1,6 @@ #!/bin/bash -ex echo Clone tester repo. -git clone https://github.com/John-LittleBearLabs/ipfs_client_clitester.git +git clone --single-branch --branch simplify https://github.com/John-LittleBearLabs/ipfs_client_clitester.git echo Install dependencies. sudo apt-get update @@ -38,8 +38,12 @@ do done function url_case() { - echo "url_case(" "${@}" ")" - if timeout 360 ./tester_build/clitester warning "${1}://${2}" + echo "namespace =${1}" + echo "path remaining =${2}" + echo "output hash =${3}" + echo "test case description =${4}" + echo "log level =${5-trace}" + if timeout 360 ./tester_build/clitester "${5-trace}" "${1}://${2}" then echo clitester exited with successful status else @@ -47,7 +51,12 @@ function url_case() { exit 7 fi n=`sed 's,[^A-Za-z0-9\.],_,g' <<< ${2}` - if cat "_${1}_${n}" | md5sum | cut -d ' ' -f 1 > actual + if [ ! -f "_${1}_${n}" ] + then + echo "Failed to produce expected file _${1}_${n} for test case " "${@}" + ls -lrth + exit 7 + elif cat "_${1}_${n}" | md5sum | cut -d ' ' -f 1 > actual then ls -lrth _ip?s_* if [ $# -ge 3 ] @@ -57,6 +66,7 @@ function url_case() { then echo good else + xxd "_${1}_${n}" echo "Got wrong result: " "${@}" exit 8 fi @@ -74,7 +84,7 @@ url_case ipfs bafkqacdjmrsw45djor4q ff483d1ff591898a9942916050d2ca3f 'Identity ( url_case ipfs baguqeerah2nswg7r2pvlpbnsz5y4c4pr4wsgbzixdl632w5qxvedqzryf54q 7750fd7b0928f007e1d181763c0dbdb5 'A DAG-JSON document. The block itself md5s to b92348005af4ae4795e6f312844fb359, but the response we are hashing here is an HTML preview page. This does mean this test breaks if you make the preview less ugly.' url_case ipns en.wikipedia-on-ipfs.org/I/HFE_Too_Slow_1.JPG.webp 09c09b2654e8529740b5a7625e39e0c8 'An image fetched through DNSLink and HAMT sharded directories.' -url_case ipfs bafybeieb33pqideyl5ncd33kho622thym5rqv6sujrmelcuhkjlf2hdpu4/Big%20Buck%20Bunny.webm 06d51286e56badb4455594ebed6daba2 'A large UnixFS file - several hundred blocks.' +echo 'Skip as it takes too long.' url_case ipfs bafybeieb33pqideyl5ncd33kho622thym5rqv6sujrmelcuhkjlf2hdpu4/Big%20Buck%20Bunny.webm 06d51286e56badb4455594ebed6daba2 'A large UnixFS file - several hundred blocks.' error url_case ipns k51qzi5uqu5dijv526o4z2z10ejylnel0bfvrtw53itcmsecffo8yf0zb4g9gi/symlinks/relative_link.txt cfe9b69523140b5b5e63874a8e4997e4 'A relative symlink resolves successfully to the file pointed to.' echo Stop test server. diff --git a/chromium_edits/121.0.6147.0/chrome/browser/flag-metadata.json.patch b/chromium_edits/121.0.6147.0/chrome/browser/flag-metadata.json.patch deleted file mode 100644 index 476c7cb6..00000000 --- a/chromium_edits/121.0.6147.0/chrome/browser/flag-metadata.json.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index f8609c4f6e389..7f329f8ab9bfb 100644 ---- a/chrome/browser/flag-metadata.json -+++ b/chrome/browser/flag-metadata.json -@@ -2889,6 +2889,11 @@ - "owners": [ "hanxi@chromium.org", "wychen@chromium.org" ], - "expiry_milestone": 130 - }, -+ { -+ "name": "enable-ipfs", -+ "owners": [ "//components/ipfs/OWNERS" ], -+ "expiry_milestone": 150 -+ }, - { - "name": "enable-isolated-sandboxed-iframes", - "owners": [ "wjmaclean@chromium.org", "alexmos@chromium.org", "creis@chromium.org" ], diff --git a/chromium_edits/121.0.6147.0/chrome/browser/flag_descriptions.h.patch b/chromium_edits/121.0.6147.0/chrome/browser/flag_descriptions.h.patch deleted file mode 100644 index 449fbccc..00000000 --- a/chromium_edits/121.0.6147.0/chrome/browser/flag_descriptions.h.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index ca4c8f927ba26..ab6f0ee6cb103 100644 ---- a/chrome/browser/flag_descriptions.h -+++ b/chrome/browser/flag_descriptions.h -@@ -22,6 +22,7 @@ - #include "pdf/buildflags.h" - #include "printing/buildflags/buildflags.h" - #include "third_party/blink/public/common/buildflags.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" - - // This file declares strings used in chrome://flags. These messages are not - // translated, because instead of end-users they target Chromium developers and -@@ -172,6 +173,11 @@ extern const char kDownloadWarningImprovementsDescription[]; - extern const char kEnableBenchmarkingName[]; - extern const char kEnableBenchmarkingDescription[]; - -+#if BUILDFLAG(ENABLE_IPFS) -+extern const char kEnableIpfsName[]; -+extern const char kEnableIpfsDescription[]; -+#endif -+ - #if BUILDFLAG(USE_FONTATIONS_BACKEND) - extern const char kFontationsFontBackendName[]; - extern const char kFontationsFontBackendDescription[]; diff --git a/chromium_edits/121.0.6147.0/url/url_canon_ipfs.cc b/chromium_edits/121.0.6147.0/url/url_canon_ipfs.cc deleted file mode 100644 index c25912fa..00000000 --- a/chromium_edits/121.0.6147.0/url/url_canon_ipfs.cc +++ /dev/null @@ -1,64 +0,0 @@ -#include "url_canon_internal.h" - -#include -#include - -#include - -namespace m = libp2p::multi; -using Cid = m::ContentIdentifier; -using CidCodec = m::ContentIdentifierCodec; - -bool url::CanonicalizeIpfsURL(const char* spec, - int spec_len, - const Parsed& parsed, - SchemeType scheme_type, - CharsetConverter* charset_converter, - CanonOutput* output, - Parsed* output_parsed) { - if (spec_len < 1 || !spec) { - return false; - } - if (parsed.host.len < 1) { - return false; - } - std::string cid_str{spec + parsed.host.begin, - static_cast(parsed.host.len)}; - auto maybe_cid = CidCodec::fromString(cid_str); - if (!maybe_cid.has_value()) { - auto e = libp2p::multi::Stringify(maybe_cid.error()); - std::ostringstream err; - err << e << ' ' - << std::string_view{spec, static_cast(spec_len)}; - maybe_cid = ipfs::id_cid::forText(err.str()); - } - auto cid = maybe_cid.value(); - if (cid.version == Cid::Version::V0) { - cid = Cid{Cid::Version::V1, cid.content_type, cid.content_address}; - } - auto as_str = CidCodec::toString(cid); - if (!as_str.has_value()) { - return false; - } - std::string stdurl{spec, static_cast(parsed.host.begin)}; - stdurl.append(as_str.value()); - stdurl.append(spec + parsed.host.end(), spec_len - parsed.host.end()); - spec = stdurl.data(); - spec_len = static_cast(stdurl.size()); - Parsed parsed_input; - ParseStandardURL(spec, spec_len, &parsed_input); - return CanonicalizeStandardURL(spec, spec_len, parsed_input, scheme_type, - charset_converter, output, output_parsed); -} -bool url::CanonicalizeIpfsURL(const char16_t* spec, - int spec_len, - const Parsed& parsed, - SchemeType scheme_type, - CharsetConverter* query_converter, - CanonOutput* output, - Parsed* new_parsed) { - RawCanonOutput<2048> as8; - ConvertUTF16ToUTF8(spec, spec_len, &as8); - return CanonicalizeIpfsURL(as8.data(), as8.length(), parsed, scheme_type, - query_converter, output, new_parsed); -} diff --git a/chromium_edits/121.0.6147.0/url/url_util.cc.patch b/chromium_edits/121.0.6147.0/url/url_util.cc.patch deleted file mode 100644 index 0332e847..00000000 --- a/chromium_edits/121.0.6147.0/url/url_util.cc.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/url/url_util.cc b/url/url_util.cc -index 9258cfcfada47..daf10e4c3b741 100644 ---- a/url/url_util.cc -+++ b/url/url_util.cc -@@ -277,6 +277,12 @@ bool DoCanonicalize(const CHAR* spec, - charset_converter, output, - output_parsed); - -+ } else if (DoCompareSchemeComponent(spec, scheme, "ipfs")) { -+ // Switch multibase away from case-sensitive ones before continuing canonicalization. -+ ParseStandardURL(spec, spec_len, &parsed_input); -+ success = CanonicalizeIpfsURL(spec, spec_len, parsed_input, scheme_type, -+ charset_converter, output, output_parsed); -+ - } else if (DoIsStandard(spec, scheme, &scheme_type)) { - // All "normal" URLs. - ParseStandardURL(spec, spec_len, &parsed_input); diff --git a/chromium_edits/121.0.6156.3/chrome/browser/BUILD.gn.patch b/chromium_edits/121.0.6156.3/chrome/browser/BUILD.gn.patch deleted file mode 100644 index 9af9be4d..00000000 --- a/chromium_edits/121.0.6156.3/chrome/browser/BUILD.gn.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index 4ec6cf79062ea..dc9d3637464bb 100644 ---- a/chrome/browser/BUILD.gn -+++ b/chrome/browser/BUILD.gn -@@ -40,6 +40,7 @@ import("//rlz/buildflags/buildflags.gni") - import("//sandbox/features.gni") - import("//testing/libfuzzer/fuzzer_test.gni") - import("//third_party/blink/public/public_features.gni") -+import("//third_party/ipfs_client/args.gni") - import("//third_party/protobuf/proto_library.gni") - import("//third_party/webrtc/webrtc.gni") - import("//third_party/widevine/cdm/widevine.gni") -@@ -2630,6 +2631,10 @@ static_library("browser") { - ] - } - -+ if (enable_ipfs) { -+ deps += [ "//components/ipfs" ] -+ } -+ - if (is_chromeos_ash) { - deps += [ "//chrome/browser/screen_ai:screen_ai_dlc_installer" ] - } diff --git a/chromium_edits/121.0.6156.3/url/BUILD.gn.patch b/chromium_edits/121.0.6156.3/url/BUILD.gn.patch deleted file mode 100644 index 63fb8f8b..00000000 --- a/chromium_edits/121.0.6156.3/url/BUILD.gn.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/url/BUILD.gn b/url/BUILD.gn -index c525c166979d6..ce2b1ae43c0a7 100644 ---- a/url/BUILD.gn -+++ b/url/BUILD.gn -@@ -5,6 +5,7 @@ - import("//build/buildflag_header.gni") - import("//testing/libfuzzer/fuzzer_test.gni") - import("//testing/test.gni") -+import("//third_party/ipfs_client/args.gni") - import("features.gni") - - import("//build/config/cronet/config.gni") -@@ -67,6 +68,7 @@ component("url") { - public_deps = [ - "//base", - "//build:robolectric_buildflags", -+ "//third_party/ipfs_client:ipfs_buildflags", - ] - - configs += [ "//build/config/compiler:wexit_time_destructors" ] -@@ -89,6 +91,11 @@ component("url") { - public_configs = [ "//third_party/jdk" ] - } - -+ if (enable_ipfs) { -+ sources += [ "url_canon_ipfs.cc" ] -+ deps += [ "//third_party/ipfs_client:ipfs_client" ] -+ } -+ - if (is_win) { - # Don't conflict with Windows' "url.dll". - output_name = "url_lib" diff --git a/chromium_edits/121.0.6156.3/url/url_canon.h.patch b/chromium_edits/121.0.6156.3/url/url_canon.h.patch deleted file mode 100644 index 24ae1ba4..00000000 --- a/chromium_edits/121.0.6156.3/url/url_canon.h.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff --git a/url/url_canon.h b/url/url_canon.h -index d3a7fabf09fa8..06db17242248f 100644 ---- a/url/url_canon.h -+++ b/url/url_canon.h -@@ -697,6 +697,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, - CanonOutput* output, - Parsed* new_parsed); - -+COMPONENT_EXPORT(URL) -+bool CanonicalizeIpfsURL(const char* spec, -+ int spec_len, -+ const Parsed& parsed, -+ SchemeType scheme_type, -+ CharsetConverter* query_converter, -+ CanonOutput* output, -+ Parsed* new_parsed); -+COMPONENT_EXPORT(URL) -+bool CanonicalizeIpfsURL(const char16_t* spec, -+ int spec_len, -+ const Parsed& parsed, -+ SchemeType scheme_type, -+ CharsetConverter* query_converter, -+ CanonOutput* output, -+ Parsed* new_parsed); -+ - // Part replacer -------------------------------------------------------------- - - // Internal structure used for storing separate strings for each component. diff --git a/chromium_edits/121.0.6156.3/url/url_util.cc.patch b/chromium_edits/121.0.6156.3/url/url_util.cc.patch deleted file mode 100644 index 0332e847..00000000 --- a/chromium_edits/121.0.6156.3/url/url_util.cc.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/url/url_util.cc b/url/url_util.cc -index 9258cfcfada47..daf10e4c3b741 100644 ---- a/url/url_util.cc -+++ b/url/url_util.cc -@@ -277,6 +277,12 @@ bool DoCanonicalize(const CHAR* spec, - charset_converter, output, - output_parsed); - -+ } else if (DoCompareSchemeComponent(spec, scheme, "ipfs")) { -+ // Switch multibase away from case-sensitive ones before continuing canonicalization. -+ ParseStandardURL(spec, spec_len, &parsed_input); -+ success = CanonicalizeIpfsURL(spec, spec_len, parsed_input, scheme_type, -+ charset_converter, output, output_parsed); -+ - } else if (DoIsStandard(spec, scheme, &scheme_type)) { - // All "normal" URLs. - ParseStandardURL(spec, spec_len, &parsed_input); diff --git a/chromium_edits/121.0.6167.8/chrome/browser/about_flags.cc.patch b/chromium_edits/121.0.6167.8/chrome/browser/about_flags.cc.patch deleted file mode 100644 index 6f181024..00000000 --- a/chromium_edits/121.0.6167.8/chrome/browser/about_flags.cc.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index b3954a5fec88e..162b64711b3ca 100644 ---- a/chrome/browser/about_flags.cc -+++ b/chrome/browser/about_flags.cc -@@ -212,6 +212,7 @@ - #include "third_party/blink/public/common/features_generated.h" - #include "third_party/blink/public/common/forcedark/forcedark_switches.h" - #include "third_party/blink/public/common/switches.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" - #include "ui/accessibility/accessibility_features.h" - #include "ui/accessibility/accessibility_switches.h" - #include "ui/base/ui_base_features.h" -@@ -312,6 +313,10 @@ - #include "extensions/common/switches.h" - #endif // BUILDFLAG(ENABLE_EXTENSIONS) - -+#if BUILDFLAG(ENABLE_IPFS) -+#include "components/ipfs/ipfs_features.h" -+#endif -+ - #if BUILDFLAG(ENABLE_PDF) - #include "pdf/pdf_features.h" - #endif -@@ -9846,6 +9851,14 @@ const FeatureEntry kFeatureEntries[] = { - flag_descriptions::kOmitCorsClientCertDescription, kOsAll, - FEATURE_VALUE_TYPE(network::features::kOmitCorsClientCert)}, - -+#if BUILDFLAG(ENABLE_IPFS) -+ {"enable-ipfs", -+ flag_descriptions::kEnableIpfsName, -+ flag_descriptions::kEnableIpfsDescription, -+ kOsMac | kOsWin | kOsLinux,//TODO: These are the only variants currently getting built, but that is not likely to remain the case -+ FEATURE_VALUE_TYPE(ipfs::kEnableIpfs)}, -+#endif -+ - {"use-idna2008-non-transitional", - flag_descriptions::kUseIDNA2008NonTransitionalName, - flag_descriptions::kUseIDNA2008NonTransitionalDescription, kOsAll, diff --git a/chromium_edits/121.0.6167.8/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch b/chromium_edits/121.0.6167.8/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch deleted file mode 100644 index 4d172311..00000000 --- a/chromium_edits/121.0.6167.8/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch +++ /dev/null @@ -1,50 +0,0 @@ -diff --git a/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc b/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc -index 4c88614c68c25..f8bb12a3b0c2e 100644 ---- a/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc -+++ b/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc -@@ -10,6 +10,8 @@ - #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" - #include "chrome/browser/external_protocol/external_protocol_handler.h" - #include "chrome/browser/profiles/profile.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" -+ - #if BUILDFLAG(IS_ANDROID) - #include "chrome/browser/profiles/profile_android.h" - #endif -@@ -18,6 +20,9 @@ - #include "chrome/browser/ui/android/omnibox/jni_headers/ChromeAutocompleteSchemeClassifier_jni.h" - #endif - #include "components/custom_handlers/protocol_handler_registry.h" -+#if BUILDFLAG(ENABLE_IPFS) -+#include "components/ipfs/ipfs_features.h" -+#endif - #include "content/public/common/url_constants.h" - #include "url/url_util.h" - -@@ -55,12 +60,20 @@ ChromeAutocompleteSchemeClassifier::GetInputTypeForScheme( - if (scheme.empty()) { - return metrics::OmniboxInputType::EMPTY; - } -- if (base::IsStringASCII(scheme) && -- (ProfileIOData::IsHandledProtocol(scheme) || -- base::EqualsCaseInsensitiveASCII(scheme, content::kViewSourceScheme) || -- base::EqualsCaseInsensitiveASCII(scheme, url::kJavaScriptScheme) || -- base::EqualsCaseInsensitiveASCII(scheme, url::kDataScheme))) { -- return metrics::OmniboxInputType::URL; -+ if (base::IsStringASCII(scheme)) { -+ if (ProfileIOData::IsHandledProtocol(scheme) || -+ base::EqualsCaseInsensitiveASCII(scheme, content::kViewSourceScheme) || -+ base::EqualsCaseInsensitiveASCII(scheme, url::kJavaScriptScheme) || -+ base::EqualsCaseInsensitiveASCII(scheme, url::kDataScheme)) { -+ return metrics::OmniboxInputType::URL; -+ } -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs) && -+ (base::EqualsCaseInsensitiveASCII(scheme, "ipfs") || base::EqualsCaseInsensitiveASCII(scheme, "ipns")) -+ ) { -+ return metrics::OmniboxInputType::URL; -+ } -+#endif - } - - // Also check for schemes registered via registerProtocolHandler(), which diff --git a/chromium_edits/121.0.6167.8/chrome/browser/chrome_content_browser_client.cc.patch b/chromium_edits/121.0.6167.8/chrome/browser/chrome_content_browser_client.cc.patch deleted file mode 100644 index f212961c..00000000 --- a/chromium_edits/121.0.6167.8/chrome/browser/chrome_content_browser_client.cc.patch +++ /dev/null @@ -1,63 +0,0 @@ -diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index a9b87ac2fcd74..987686c621664 100644 ---- a/chrome/browser/chrome_content_browser_client.cc -+++ b/chrome/browser/chrome_content_browser_client.cc -@@ -377,6 +377,7 @@ - #include "third_party/blink/public/common/switches.h" - #include "third_party/blink/public/mojom/browsing_topics/browsing_topics.mojom.h" - #include "third_party/blink/public/public_buildflags.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" - #include "third_party/widevine/cdm/buildflags.h" - #include "ui/base/clipboard/clipboard_format_type.h" - #include "ui/base/l10n/l10n_util.h" -@@ -499,6 +500,12 @@ - #include "chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h" - #endif - -+#if BUILDFLAG(ENABLE_IPFS) -+#include "components/ipfs/interceptor.h" -+#include "components/ipfs/ipfs_features.h" -+#include "components/ipfs/url_loader_factory.h" -+#endif -+ - #if BUILDFLAG(IS_CHROMEOS) - #include "base/debug/leak_annotations.h" - #include "chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.h" -@@ -6157,12 +6164,23 @@ void ChromeContentBrowserClient:: - const absl::optional& request_initiator_origin, - NonNetworkURLLoaderFactoryMap* factories) { - #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ -- !BUILDFLAG(IS_ANDROID) -+ !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_IPFS) - content::RenderFrameHost* frame_host = - RenderFrameHost::FromID(render_process_id, render_frame_id); - WebContents* web_contents = WebContents::FromRenderFrameHost(frame_host); - #endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ -- // !BUILDFLAG(IS_ANDROID) -+ // !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_IPFS) -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { -+ network::mojom::URLLoaderFactory* default_factory = g_browser_process->system_network_context_manager()->GetURLLoaderFactory(); -+ ipfs::IpfsURLLoaderFactory::Create( -+ factories, -+ web_contents->GetBrowserContext(), -+ default_factory, -+ GetSystemNetworkContext() -+ ); -+ } -+#endif // BUILDFLAG(ENABLE_IPFS) - - #if BUILDFLAG(IS_CHROMEOS_ASH) - if (web_contents) { -@@ -6304,6 +6322,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( - scoped_refptr navigation_response_task_runner) { - std::vector> - interceptors; -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { -+ interceptors.push_back(std::make_unique(g_browser_process->system_network_context_manager()->GetURLLoaderFactory(), GetSystemNetworkContext())); -+ } -+#endif - #if BUILDFLAG(ENABLE_OFFLINE_PAGES) - interceptors.push_back( - std::make_unique( diff --git a/chromium_edits/121.0.6167.8/chrome/browser/flag_descriptions.cc.patch b/chromium_edits/121.0.6167.8/chrome/browser/flag_descriptions.cc.patch deleted file mode 100644 index acd0588e..00000000 --- a/chromium_edits/121.0.6167.8/chrome/browser/flag_descriptions.cc.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 879831885f22f..03877bb2c3254 100644 ---- a/chrome/browser/flag_descriptions.cc -+++ b/chrome/browser/flag_descriptions.cc -@@ -288,6 +288,11 @@ const char kEnableBenchmarkingDescription[] = - "after 3 restarts. On the third restart, the flag will appear to be off " - "but the effect is still active."; - -+#if BUILDFLAG(ENABLE_IPFS) -+extern const char kEnableIpfsName[] = "Enable IPFS"; -+extern const char kEnableIpfsDescription[] = "Enable ipfs:// and ipns:// URLs"; -+#endif -+ - const char kPreloadingOnPerformancePageName[] = - "Preloading Settings on Performance Page"; - const char kPreloadingOnPerformancePageDescription[] = diff --git a/chromium_edits/121.0.6167.8/chrome/common/chrome_content_client.cc.patch b/chromium_edits/121.0.6167.8/chrome/common/chrome_content_client.cc.patch deleted file mode 100644 index 5bd09f16..00000000 --- a/chromium_edits/121.0.6167.8/chrome/common/chrome_content_client.cc.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc -index 246ec9c5c911f..5d66d133a7907 100644 ---- a/chrome/common/chrome_content_client.cc -+++ b/chrome/common/chrome_content_client.cc -@@ -296,6 +296,12 @@ void ChromeContentClient::AddAdditionalSchemes(Schemes* schemes) { - #if BUILDFLAG(IS_ANDROID) - schemes->local_schemes.push_back(url::kContentScheme); - #endif -+ for ( const char* ip_s : {"ipfs", "ipns"} ) { -+ schemes->standard_schemes.push_back(ip_s); -+ schemes->cors_enabled_schemes.push_back(ip_s); -+ schemes->secure_schemes.push_back(ip_s); -+ schemes->csp_bypassing_schemes.push_back(ip_s); -+ } - } - - std::u16string ChromeContentClient::GetLocalizedString(int message_id) { diff --git a/chromium_edits/121.0.6167.8/components/cbor/reader.cc.patch b/chromium_edits/121.0.6167.8/components/cbor/reader.cc.patch deleted file mode 100644 index aed86452..00000000 --- a/chromium_edits/121.0.6167.8/components/cbor/reader.cc.patch +++ /dev/null @@ -1,44 +0,0 @@ -diff --git a/components/cbor/reader.cc b/components/cbor/reader.cc -index 306ba52fa4944..6b13b3a679a65 100644 ---- a/components/cbor/reader.cc -+++ b/components/cbor/reader.cc -@@ -22,7 +22,7 @@ - namespace cbor { - - namespace constants { --const char kUnsupportedMajorType[] = "Unsupported major type."; -+const char kUnsupportedMajorType[] = "Unsupported major type operation."; - } - - namespace { -@@ -156,7 +156,11 @@ absl::optional Reader::DecodeCompleteDataItem(const Config& config, - case Value::Type::FLOAT_VALUE: - // Floating point values also go here since they are also type 7. - return DecodeToSimpleValueOrFloat(*header, config); -- case Value::Type::TAG: // We explicitly don't support TAG. -+ case Value::Type::TAG: -+ if (config.parse_tags) { -+ return ReadTagContent(*header, config, max_nesting_level); -+ } -+ break; - case Value::Type::NONE: - case Value::Type::INVALID_UTF8: - break; -@@ -347,6 +351,17 @@ absl::optional Reader::ReadByteStringContent( - return Value(std::move(cbor_byte_string)); - } - -+absl::optional Reader::ReadTagContent( -+ const Reader::DataItemHeader& header, -+ const Config& config, -+ int max_nesting_level) { -+ auto tagged_content = DecodeCompleteDataItem(config, max_nesting_level); -+ if (tagged_content.has_value()) { -+ tagged_content.value().SetTag(header.value); -+ } -+ return tagged_content; -+} -+ - absl::optional Reader::ReadArrayContent( - const Reader::DataItemHeader& header, - const Config& config, diff --git a/chromium_edits/121.0.6167.8/components/cbor/reader.h.patch b/chromium_edits/121.0.6167.8/components/cbor/reader.h.patch deleted file mode 100644 index fb821165..00000000 --- a/chromium_edits/121.0.6167.8/components/cbor/reader.h.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/components/cbor/reader.h b/components/cbor/reader.h -index f0b43a5517528..a57e277a1bc66 100644 ---- a/components/cbor/reader.h -+++ b/components/cbor/reader.h -@@ -130,6 +130,11 @@ class CBOR_EXPORT Reader { - // during decoding will set raise the `UNSUPPORTED_FLOATING_POINT_VALUE` - // error. - bool allow_floating_point = false; -+ -+ // If the parser encounters a TAG element, should it be parsed out and -+ // the tag value saved (true), or should the entire node and its content -+ // be discarded (false) -+ bool parse_tags = false; - }; - - Reader(const Reader&) = delete; -@@ -204,6 +209,9 @@ class CBOR_EXPORT Reader { - absl::optional ReadMapContent(const DataItemHeader& header, - const Config& config, - int max_nesting_level); -+ absl::optional ReadTagContent(const DataItemHeader& header, -+ const Config& config, -+ int max_nesting_level); - absl::optional ReadByte(); - absl::optional> ReadBytes(uint64_t num_bytes); - bool IsKeyInOrder(const Value& new_key, diff --git a/chromium_edits/121.0.6167.8/components/cbor/reader_unittest.cc.patch b/chromium_edits/121.0.6167.8/components/cbor/reader_unittest.cc.patch deleted file mode 100644 index 3f657dc3..00000000 --- a/chromium_edits/121.0.6167.8/components/cbor/reader_unittest.cc.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff --git a/components/cbor/reader_unittest.cc b/components/cbor/reader_unittest.cc -index 83d44a48d6dfa..a6ec5299b3241 100644 ---- a/components/cbor/reader_unittest.cc -+++ b/components/cbor/reader_unittest.cc -@@ -1451,5 +1451,42 @@ TEST(CBORReaderTest, AllowInvalidUTF8) { - EXPECT_FALSE(cbor); - EXPECT_EQ(Reader::DecoderError::INVALID_UTF8, error); - } -+TEST(CBORReaderTest, RejectsTagUnderDefaultConfig) { -+ static const uint8_t kTaggedCbor[] = { -+ 0xd8, 0x2a, 0x58, 0x25, 0x00, 0x01, 0x71, 0x12, 0x20, 0x69, 0xea, 0x07, -+ 0x40, 0xf9, 0x80, 0x7a, 0x28, 0xf4, 0xd9, 0x32, 0xc6, 0x2e, 0x7c, 0x1c, -+ 0x83, 0xbe, 0x05, 0x5e, 0x55, 0x07, 0x2c, 0x90, 0x26, 0x6a, 0xb3, 0xe7, -+ 0x9d, 0xf6, 0x3a, 0x36, 0x5b -+ }; -+ Reader::Config config; -+ absl::optional cbor = Reader::Read(kTaggedCbor, config); -+ EXPECT_FALSE(cbor.has_value()); -+} -+TEST(CBORReaderTest, ReadsTagWhenConfiguredToDoSo) { -+ static const uint8_t kTaggedCbor[] = { -+ 0xd8, 0x2a, 0x58, 0x25, 0x00, 0x01, 0x71, 0x12, 0x20, 0x69, 0xea, 0x07, -+ 0x40, 0xf9, 0x80, 0x7a, 0x28, 0xf4, 0xd9, 0x32, 0xc6, 0x2e, 0x7c, 0x1c, -+ 0x83, 0xbe, 0x05, 0x5e, 0x55, 0x07, 0x2c, 0x90, 0x26, 0x6a, 0xb3, 0xe7, -+ 0x9d, 0xf6, 0x3a, 0x36, 0x5b -+ }; -+ Reader::Config config; -+ config.parse_tags = true; -+ absl::optional cbor = Reader::Read(kTaggedCbor, config); -+ EXPECT_TRUE(cbor.has_value()); -+ auto& v = cbor.value(); -+ EXPECT_TRUE(v.has_tag()); -+ EXPECT_EQ(v.GetTag(),42UL); -+ EXPECT_TRUE(v.is_bytestring()); -+ EXPECT_EQ(v.type(), Value::Type::BYTE_STRING); -+ auto& bytes = v.GetBytestring(); -+ EXPECT_EQ(bytes.size(), 37UL); -+ EXPECT_EQ(bytes.at(0), 0x00);//identity multibase (e.g. not base-encoded, bytes are themselves) -+ EXPECT_EQ(bytes.at(1), 0x01);//CID version 1 -+ EXPECT_EQ(bytes.at(2), 0x71);//codec = dag-cbor -+ EXPECT_EQ(bytes.at(3), 0x12);//multihash = 18 = sha2-256 -+ EXPECT_EQ(bytes.at(4), 0x20);//hash length = 32 bytes -+ EXPECT_EQ(bytes.at(5), 0x69);//first byte of hash digest -+ EXPECT_EQ(bytes.at(36),0x5b);//last byte of hash digest -+} - - } // namespace cbor diff --git a/chromium_edits/121.0.6167.8/components/cbor/values.cc.patch b/chromium_edits/121.0.6167.8/components/cbor/values.cc.patch deleted file mode 100644 index ddbab2b3..00000000 --- a/chromium_edits/121.0.6167.8/components/cbor/values.cc.patch +++ /dev/null @@ -1,145 +0,0 @@ -diff --git a/components/cbor/values.cc b/components/cbor/values.cc -index 02498209c820e..34055aef24cfe 100644 ---- a/components/cbor/values.cc -+++ b/components/cbor/values.cc -@@ -66,32 +66,34 @@ Value::Value(Type type) : type_(type) { - NOTREACHED(); - } - --Value::Value(SimpleValue in_simple) -- : type_(Type::SIMPLE_VALUE), simple_value_(in_simple) { -+Value::Value(SimpleValue in_simple, uint64_t tag) -+ : type_(Type::SIMPLE_VALUE), simple_value_(in_simple), tag_(tag) { - CHECK(static_cast(in_simple) >= 20 && static_cast(in_simple) <= 23); - } - --Value::Value(bool boolean_value) : type_(Type::SIMPLE_VALUE) { -+Value::Value(bool boolean_value, uint64_t tag) : type_(Type::SIMPLE_VALUE), tag_(tag) { - simple_value_ = boolean_value ? Value::SimpleValue::TRUE_VALUE - : Value::SimpleValue::FALSE_VALUE; - } - --Value::Value(double float_value) -- : type_(Type::FLOAT_VALUE), float_value_(float_value) {} -+Value::Value(double float_value, uint64_t tag) -+ : type_(Type::FLOAT_VALUE), float_value_(float_value), tag_(tag) {} - --Value::Value(int integer_value) -- : Value(base::checked_cast(integer_value)) {} -+Value::Value(int integer_value, uint64_t tag) -+ : Value(base::checked_cast(integer_value), tag) {} - --Value::Value(int64_t integer_value) : integer_value_(integer_value) { -+Value::Value(int64_t integer_value, uint64_t tag) : integer_value_(integer_value), tag_(tag) { - type_ = integer_value >= 0 ? Type::UNSIGNED : Type::NEGATIVE; - } - --Value::Value(base::span in_bytes) -+Value::Value(base::span in_bytes, uint64_t tag) - : type_(Type::BYTE_STRING), -- bytestring_value_(in_bytes.begin(), in_bytes.end()) {} -+ bytestring_value_(in_bytes.begin(), in_bytes.end()), -+ tag_(tag) -+ {} - --Value::Value(base::span in_bytes, Type type) -- : type_(type), bytestring_value_(in_bytes.begin(), in_bytes.end()) { -+Value::Value(base::span in_bytes, Type type, uint64_t tag) -+ : type_(type), bytestring_value_(in_bytes.begin(), in_bytes.end()), tag_(tag) { - DCHECK(type_ == Type::BYTE_STRING || type_ == Type::INVALID_UTF8); - } - -@@ -117,7 +119,8 @@ Value::Value(std::string&& in_string, Type type) noexcept : type_(type) { - } - } - --Value::Value(base::StringPiece in_string, Type type) : type_(type) { -+Value::Value(base::StringPiece in_string, Type type, uint64_t tag) -+: type_(type), tag_(tag) { - switch (type_) { - case Type::STRING: - new (&string_value_) std::string(); -@@ -133,16 +136,18 @@ Value::Value(base::StringPiece in_string, Type type) : type_(type) { - } - } - --Value::Value(const ArrayValue& in_array) : type_(Type::ARRAY), array_value_() { -+Value::Value(const ArrayValue& in_array, uint64_t tag) -+: type_(Type::ARRAY), array_value_(), tag_(tag) { - array_value_.reserve(in_array.size()); - for (const auto& val : in_array) - array_value_.emplace_back(val.Clone()); - } - --Value::Value(ArrayValue&& in_array) noexcept -- : type_(Type::ARRAY), array_value_(std::move(in_array)) {} -+Value::Value(ArrayValue&& in_array, uint64_t tag) noexcept -+ : type_(Type::ARRAY), array_value_(std::move(in_array)), tag_(tag) {} - --Value::Value(const MapValue& in_map) : type_(Type::MAP), map_value_() { -+Value::Value(const MapValue& in_map, uint64_t tag) -+: type_(Type::MAP), map_value_(), tag_(tag) { - map_value_.reserve(in_map.size()); - for (const auto& it : in_map) - map_value_.emplace_hint(map_value_.end(), it.first.Clone(), -@@ -168,31 +173,36 @@ Value Value::Clone() const { - case Type::NONE: - return Value(); - case Type::INVALID_UTF8: -- return Value(bytestring_value_, Type::INVALID_UTF8); -+ return Value(bytestring_value_, Type::INVALID_UTF8, tag_); - case Type::UNSIGNED: - case Type::NEGATIVE: -- return Value(integer_value_); -+ return Value(integer_value_, tag_); - case Type::BYTE_STRING: -- return Value(bytestring_value_); -+ return Value(bytestring_value_, tag_); - case Type::STRING: -- return Value(string_value_); -+ return Value(string_value_, Type::STRING, tag_); - case Type::ARRAY: -- return Value(array_value_); -+ return Value(array_value_, tag_); - case Type::MAP: -- return Value(map_value_); -+ return Value(map_value_, tag_); - case Type::TAG: - NOTREACHED() << constants::kUnsupportedMajorType; - return Value(); - case Type::SIMPLE_VALUE: -- return Value(simple_value_); -+ return Value(simple_value_, tag_); - case Type::FLOAT_VALUE: -- return Value(float_value_); -+ return Value(float_value_, tag_); - } - - NOTREACHED(); - return Value(); - } - -+Value& Value::SetTag(uint64_t tag) noexcept { -+ tag_ = tag; -+ return *this; -+} -+ - Value::SimpleValue Value::GetSimpleValue() const { - CHECK(is_simple()); - return simple_value_; -@@ -258,9 +268,14 @@ const Value::BinaryValue& Value::GetInvalidUTF8() const { - return bytestring_value_; - } - -+uint64_t Value::GetTag() const { -+ CHECK(has_tag()); -+ return tag_; -+} -+ - void Value::InternalMoveConstructFrom(Value&& that) { - type_ = that.type_; -- -+ tag_ = that.tag_; - switch (type_) { - case Type::UNSIGNED: - case Type::NEGATIVE: diff --git a/chromium_edits/121.0.6167.8/components/cbor/values.h.patch b/chromium_edits/121.0.6167.8/components/cbor/values.h.patch deleted file mode 100644 index ca39df01..00000000 --- a/chromium_edits/121.0.6167.8/components/cbor/values.h.patch +++ /dev/null @@ -1,79 +0,0 @@ -diff --git a/components/cbor/values.h b/components/cbor/values.h -index d81ef5607c55a..10216a8dcdc57 100644 ---- a/components/cbor/values.h -+++ b/components/cbor/values.h -@@ -127,28 +127,29 @@ class CBOR_EXPORT Value { - - explicit Value(Type type); - -- explicit Value(SimpleValue in_simple); -- explicit Value(bool boolean_value); -- explicit Value(double in_float); -+ explicit Value(SimpleValue in_simple, uint64_t tag = NO_TAG); -+ explicit Value(bool boolean_value, uint64_t tag = NO_TAG); -+ explicit Value(double in_float, uint64_t tag = NO_TAG); - -- explicit Value(int integer_value); -- explicit Value(int64_t integer_value); -+ explicit Value(int integer_value, uint64_t tag = NO_TAG); -+ explicit Value(int64_t integer_value, uint64_t tag = NO_TAG); - explicit Value(uint64_t integer_value) = delete; - -- explicit Value(base::span in_bytes); -+ explicit Value(base::span in_bytes, uint64_t tag = NO_TAG); - explicit Value(BinaryValue&& in_bytes) noexcept; - - explicit Value(const char* in_string, Type type = Type::STRING); - explicit Value(std::string&& in_string, Type type = Type::STRING) noexcept; -- explicit Value(base::StringPiece in_string, Type type = Type::STRING); -+ explicit Value(base::StringPiece in_string, Type type = Type::STRING, uint64_t tag = NO_TAG); - -- explicit Value(const ArrayValue& in_array); -- explicit Value(ArrayValue&& in_array) noexcept; -+ explicit Value(const ArrayValue& in_array, uint64_t tag = NO_TAG); -+ explicit Value(ArrayValue&& in_array, uint64_t tag = NO_TAG) noexcept; - -- explicit Value(const MapValue& in_map); -+ explicit Value(const MapValue& in_map, uint64_t tag = NO_TAG); - explicit Value(MapValue&& in_map) noexcept; - - Value& operator=(Value&& that) noexcept; -+ Value& SetTag(uint64_t) noexcept; - - Value(const Value&) = delete; - Value& operator=(const Value&) = delete; -@@ -179,6 +180,7 @@ class CBOR_EXPORT Value { - bool is_string() const { return type() == Type::STRING; } - bool is_array() const { return type() == Type::ARRAY; } - bool is_map() const { return type() == Type::MAP; } -+ bool has_tag() const { return tag_ != NO_TAG; } - - // These will all fatally assert if the type doesn't match. - SimpleValue GetSimpleValue() const; -@@ -194,12 +196,13 @@ class CBOR_EXPORT Value { - const ArrayValue& GetArray() const; - const MapValue& GetMap() const; - const BinaryValue& GetInvalidUTF8() const; -+ uint64_t GetTag() const; - - private: - friend class Reader; - // This constructor allows INVALID_UTF8 values to be created, which only - // |Reader| and InvalidUTF8StringValueForTesting() may do. -- Value(base::span in_bytes, Type type); -+ Value(base::span in_bytes, Type type, uint64_t tag = NO_TAG); - - Type type_; - -@@ -213,6 +216,11 @@ class CBOR_EXPORT Value { - MapValue map_value_; - }; - -+ //This value specified as Invalid, -+ // used here to represent absence of TAG -+ constexpr static uint64_t NO_TAG = 0xFFFF; -+ uint64_t tag_ = NO_TAG; -+ - void InternalMoveConstructFrom(Value&& that); - void InternalCleanup(); - }; diff --git a/chromium_edits/121.0.6167.8/components/cbor/writer.cc.patch b/chromium_edits/121.0.6167.8/components/cbor/writer.cc.patch deleted file mode 100644 index 21fe28ce..00000000 --- a/chromium_edits/121.0.6167.8/components/cbor/writer.cc.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/components/cbor/writer.cc b/components/cbor/writer.cc -index bb22754d36a07..aae4027836377 100644 ---- a/components/cbor/writer.cc -+++ b/components/cbor/writer.cc -@@ -47,6 +47,9 @@ bool Writer::EncodeCBOR(const Value& node, - if (max_nesting_level < 0) - return false; - -+ if (node.has_tag()) { -+ StartItem(Value::Type::TAG, node.GetTag()); -+ } - switch (node.type()) { - case Value::Type::NONE: { - StartItem(Value::Type::BYTE_STRING, 0); diff --git a/chromium_edits/121.0.6167.8/components/cbor/writer_unittest.cc.patch b/chromium_edits/121.0.6167.8/components/cbor/writer_unittest.cc.patch deleted file mode 100644 index 240fee83..00000000 --- a/chromium_edits/121.0.6167.8/components/cbor/writer_unittest.cc.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git a/components/cbor/writer_unittest.cc b/components/cbor/writer_unittest.cc -index e3bffe20734bc..0ed569ae164a0 100644 ---- a/components/cbor/writer_unittest.cc -+++ b/components/cbor/writer_unittest.cc -@@ -522,4 +522,31 @@ TEST(CBORWriterTest, OverlyNestedCBOR) { - EXPECT_FALSE(Writer::Write(Value(map), 4).has_value()); - } - -+TEST(CBORWriterTest, CanWriteTag) { -+ std::array content{ -+ 0x00, 0x01, 0x71, 0x12, 0x20, -+ 0x69, 0xea, 0x07, 0x40, 0xf9, -+ 0x80, 0x7a, 0x28, 0xf4, 0xd9, -+ 0x32, 0xc6, 0x2e, 0x7c, 0x1c, -+ 0x83, 0xbe, 0x05, 0x5e, 0x55, -+ 0x07, 0x2c, 0x90, 0x26, 0x6a, -+ 0xb3, 0xe7, 0x9d, 0xf6, 0x3a, -+ 0x36, 0x5b -+ }; -+ Value to_write(content); -+ to_write.SetTag(42); -+ auto result = Writer::Write(to_write); -+ EXPECT_TRUE(result.has_value()); -+ auto& bytes = result.value(); -+ EXPECT_EQ(bytes.size(), 41UL); -+ EXPECT_EQ(bytes.at(0), 0xd8); -+ EXPECT_EQ(bytes.at(1), 0x2a); -+ EXPECT_EQ(bytes.at(2), 0x58); -+ EXPECT_EQ(bytes.at(3), 0x25); -+ for (auto i = 0UL; i < content.size(); ++i) { -+ ASSERT_LT(i + 4UL, bytes.size()); -+ ASSERT_EQ(content.at(i), bytes.at(i+4UL)); -+ } -+} -+ - } // namespace cbor diff --git a/chromium_edits/121.0.6167.8/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch b/chromium_edits/121.0.6167.8/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch deleted file mode 100644 index 891b53df..00000000 --- a/chromium_edits/121.0.6167.8/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/components/open_from_clipboard/clipboard_recent_content_generic.cc b/components/open_from_clipboard/clipboard_recent_content_generic.cc -index 4dcafecbc66c6..d205209c08162 100644 ---- a/components/open_from_clipboard/clipboard_recent_content_generic.cc -+++ b/components/open_from_clipboard/clipboard_recent_content_generic.cc -@@ -20,7 +20,7 @@ - namespace { - // Schemes appropriate for suggestion by ClipboardRecentContent. - const char* kAuthorizedSchemes[] = { -- url::kAboutScheme, url::kDataScheme, url::kHttpScheme, url::kHttpsScheme, -+ url::kAboutScheme, url::kDataScheme, url::kHttpScheme, url::kHttpsScheme, "ipfs", "ipns" - // TODO(mpearson): add support for chrome:// URLs. Right now the scheme - // for that lives in content and is accessible via - // GetEmbedderRepresentationOfAboutScheme() or content::kChromeUIScheme diff --git a/chromium_edits/121.0.6167.8/net/dns/dns_config_service_linux.cc.patch b/chromium_edits/121.0.6167.8/net/dns/dns_config_service_linux.cc.patch deleted file mode 100644 index a5e9863f..00000000 --- a/chromium_edits/121.0.6167.8/net/dns/dns_config_service_linux.cc.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/net/dns/dns_config_service_linux.cc b/net/dns/dns_config_service_linux.cc -index 5273da5190277..12b28b86a4c00 100644 ---- a/net/dns/dns_config_service_linux.cc -+++ b/net/dns/dns_config_service_linux.cc -@@ -272,11 +272,11 @@ bool IsNsswitchConfigCompatible( - // Ignore any entries after `kDns` because Chrome will fallback to the - // system resolver if a result was not found in DNS. - return true; -- -+ case NsswitchReader::Service::kResolve: -+ break; - case NsswitchReader::Service::kMdns: - case NsswitchReader::Service::kMdns4: - case NsswitchReader::Service::kMdns6: -- case NsswitchReader::Service::kResolve: - case NsswitchReader::Service::kNis: - RecordIncompatibleNsswitchReason( - IncompatibleNsswitchReason::kIncompatibleService, diff --git a/chromium_edits/121.0.6167.8/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch b/chromium_edits/121.0.6167.8/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch deleted file mode 100644 index 119d72b2..00000000 --- a/chromium_edits/121.0.6167.8/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/third_party/blink/renderer/platform/weborigin/scheme_registry.cc b/third_party/blink/renderer/platform/weborigin/scheme_registry.cc -index 4eadf46ea0c24..d62fc7fb14e01 100644 ---- a/third_party/blink/renderer/platform/weborigin/scheme_registry.cc -+++ b/third_party/blink/renderer/platform/weborigin/scheme_registry.cc -@@ -67,7 +67,7 @@ class URLSchemesRegistry final { - // is considered secure. Additional checks are performed to ensure that - // other http pages are filtered out. - service_worker_schemes({"http", "https"}), -- fetch_api_schemes({"http", "https"}), -+ fetch_api_schemes({"http", "https", "ipfs", "ipns"}), - allowed_in_referrer_schemes({"http", "https"}) { - for (auto& scheme : url::GetCorsEnabledSchemes()) - cors_enabled_schemes.insert(scheme.c_str()); diff --git a/chromium_edits/121.0.6167.8/url/url_util.cc.patch b/chromium_edits/121.0.6167.8/url/url_util.cc.patch deleted file mode 100644 index 0332e847..00000000 --- a/chromium_edits/121.0.6167.8/url/url_util.cc.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/url/url_util.cc b/url/url_util.cc -index 9258cfcfada47..daf10e4c3b741 100644 ---- a/url/url_util.cc -+++ b/url/url_util.cc -@@ -277,6 +277,12 @@ bool DoCanonicalize(const CHAR* spec, - charset_converter, output, - output_parsed); - -+ } else if (DoCompareSchemeComponent(spec, scheme, "ipfs")) { -+ // Switch multibase away from case-sensitive ones before continuing canonicalization. -+ ParseStandardURL(spec, spec_len, &parsed_input); -+ success = CanonicalizeIpfsURL(spec, spec_len, parsed_input, scheme_type, -+ charset_converter, output, output_parsed); -+ - } else if (DoIsStandard(spec, scheme, &scheme_type)) { - // All "normal" URLs. - ParseStandardURL(spec, spec_len, &parsed_input); diff --git a/chromium_edits/121.0.6147.0/chrome/browser/BUILD.gn.patch b/chromium_edits/122.0.6226.2/chrome/browser/BUILD.gn.patch similarity index 72% rename from chromium_edits/121.0.6147.0/chrome/browser/BUILD.gn.patch rename to chromium_edits/122.0.6226.2/chrome/browser/BUILD.gn.patch index c04a0748..289c0b9c 100644 --- a/chromium_edits/121.0.6147.0/chrome/browser/BUILD.gn.patch +++ b/chromium_edits/122.0.6226.2/chrome/browser/BUILD.gn.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index 8704f445741b4..2c0cae5d77b6d 100644 +index 516f8d3bc275f..3188eaaf003a1 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -40,6 +40,7 @@ import("//rlz/buildflags/buildflags.gni") +@@ -39,6 +39,7 @@ import("//rlz/buildflags/buildflags.gni") import("//sandbox/features.gni") import("//testing/libfuzzer/fuzzer_test.gni") import("//third_party/blink/public/public_features.gni") @@ -10,11 +10,15 @@ index 8704f445741b4..2c0cae5d77b6d 100644 import("//third_party/protobuf/proto_library.gni") import("//third_party/webrtc/webrtc.gni") import("//third_party/widevine/cdm/widevine.gni") -@@ -2634,6 +2635,10 @@ static_library("browser") { +@@ -2618,6 +2619,14 @@ static_library("browser") { ] } + if (enable_ipfs) { ++ sources += [ ++ "ipfs_extra_parts.cc", ++ "ipfs_extra_parts.h", ++ ] + deps += [ "//components/ipfs" ] + } + diff --git a/chromium_edits/121.0.6156.3/chrome/browser/about_flags.cc.patch b/chromium_edits/122.0.6226.2/chrome/browser/about_flags.cc.patch similarity index 88% rename from chromium_edits/121.0.6156.3/chrome/browser/about_flags.cc.patch rename to chromium_edits/122.0.6226.2/chrome/browser/about_flags.cc.patch index a5bf782d..004c6748 100644 --- a/chromium_edits/121.0.6156.3/chrome/browser/about_flags.cc.patch +++ b/chromium_edits/122.0.6226.2/chrome/browser/about_flags.cc.patch @@ -1,16 +1,16 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index af66a784e629e..36d2a2de39e38 100644 +index cba0c0e2bc1c2..91e14f34800de 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -209,6 +209,7 @@ +@@ -214,6 +214,7 @@ #include "third_party/blink/public/common/features_generated.h" #include "third_party/blink/public/common/forcedark/forcedark_switches.h" #include "third_party/blink/public/common/switches.h" +#include "third_party/ipfs_client/ipfs_buildflags.h" #include "ui/accessibility/accessibility_features.h" #include "ui/accessibility/accessibility_switches.h" - #include "ui/base/ui_base_features.h" -@@ -309,6 +310,10 @@ + #include "ui/base/ozone_buildflags.h" +@@ -310,6 +311,10 @@ #include "extensions/common/switches.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) @@ -21,7 +21,7 @@ index af66a784e629e..36d2a2de39e38 100644 #if BUILDFLAG(ENABLE_PDF) #include "pdf/pdf_features.h" #endif -@@ -9855,6 +9860,14 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9379,6 +9384,14 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOmitCorsClientCertDescription, kOsAll, FEATURE_VALUE_TYPE(network::features::kOmitCorsClientCert)}, diff --git a/chromium_edits/121.0.6147.0/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch b/chromium_edits/122.0.6226.2/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch similarity index 100% rename from chromium_edits/121.0.6147.0/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch rename to chromium_edits/122.0.6226.2/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch diff --git a/chromium_edits/121.0.6147.0/chrome/browser/chrome_content_browser_client.cc.patch b/chromium_edits/122.0.6226.2/chrome/browser/chrome_content_browser_client.cc.patch similarity index 75% rename from chromium_edits/121.0.6147.0/chrome/browser/chrome_content_browser_client.cc.patch rename to chromium_edits/122.0.6226.2/chrome/browser/chrome_content_browser_client.cc.patch index 8e038617..f6f88ae7 100644 --- a/chromium_edits/121.0.6147.0/chrome/browser/chrome_content_browser_client.cc.patch +++ b/chromium_edits/122.0.6226.2/chrome/browser/chrome_content_browser_client.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index 69237f32680f9..be754dca72ffb 100644 +index 23ee785c34a30..8550b43c61f2f 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -374,6 +374,7 @@ +@@ -376,6 +376,7 @@ #include "third_party/blink/public/common/switches.h" #include "third_party/blink/public/mojom/browsing_topics/browsing_topics.mojom.h" #include "third_party/blink/public/public_buildflags.h" @@ -10,11 +10,12 @@ index 69237f32680f9..be754dca72ffb 100644 #include "third_party/widevine/cdm/buildflags.h" #include "ui/base/clipboard/clipboard_format_type.h" #include "ui/base/l10n/l10n_util.h" -@@ -496,6 +497,12 @@ +@@ -499,6 +500,13 @@ #include "chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h" #endif +#if BUILDFLAG(ENABLE_IPFS) ++#include "chrome/browser/ipfs_extra_parts.h" +#include "components/ipfs/interceptor.h" +#include "components/ipfs/ipfs_features.h" +#include "components/ipfs/url_loader_factory.h" @@ -23,7 +24,19 @@ index 69237f32680f9..be754dca72ffb 100644 #if BUILDFLAG(IS_CHROMEOS) #include "base/debug/leak_annotations.h" #include "chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.h" -@@ -6130,12 +6137,23 @@ void ChromeContentBrowserClient:: +@@ -1711,6 +1719,11 @@ ChromeContentBrowserClient::CreateBrowserMainParts(bool is_integration_test) { + main_parts->AddParts( + std::make_unique()); + ++#if BUILDFLAG(ENABLE_IPFS) ++ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { ++ main_parts->AddParts(std::make_unique()); ++ } ++#endif + return main_parts; + } + +@@ -6057,12 +6070,25 @@ void ChromeContentBrowserClient:: const absl::optional& request_initiator_origin, NonNetworkURLLoaderFactoryMap* factories) { #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ @@ -33,23 +46,24 @@ index 69237f32680f9..be754dca72ffb 100644 RenderFrameHost::FromID(render_process_id, render_frame_id); WebContents* web_contents = WebContents::FromRenderFrameHost(frame_host); #endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ -- // !BUILDFLAG(IS_ANDROID) -+ // !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_IPFS) + // !BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(ENABLE_IPFS) + if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { + network::mojom::URLLoaderFactory* default_factory = g_browser_process->system_network_context_manager()->GetURLLoaderFactory(); ++ auto* context = web_contents->GetBrowserContext(); + ipfs::IpfsURLLoaderFactory::Create( + factories, -+ web_contents->GetBrowserContext(), ++ context, + default_factory, -+ GetSystemNetworkContext() ++ GetSystemNetworkContext(), ++ Profile::FromBrowserContext(context)->GetPrefs() + ); + } +#endif // BUILDFLAG(ENABLE_IPFS) #if BUILDFLAG(IS_CHROMEOS_ASH) if (web_contents) { -@@ -6277,6 +6295,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( +@@ -6204,6 +6230,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( scoped_refptr navigation_response_task_runner) { std::vector> interceptors; diff --git a/chromium_edits/121.0.6156.3/chrome/browser/flag-metadata.json.patch b/chromium_edits/122.0.6226.2/chrome/browser/flag-metadata.json.patch similarity index 88% rename from chromium_edits/121.0.6156.3/chrome/browser/flag-metadata.json.patch rename to chromium_edits/122.0.6226.2/chrome/browser/flag-metadata.json.patch index 16bf283e..8ad099bd 100644 --- a/chromium_edits/121.0.6156.3/chrome/browser/flag-metadata.json.patch +++ b/chromium_edits/122.0.6226.2/chrome/browser/flag-metadata.json.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 4c152d2b20941..d348a33e0c1b5 100644 +index ae98bbb22d81a..c85d48a4a77c1 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -2922,6 +2922,11 @@ +@@ -2946,6 +2946,11 @@ "owners": [ "hanxi@chromium.org", "wychen@chromium.org" ], "expiry_milestone": 130 }, diff --git a/chromium_edits/121.0.6156.3/chrome/browser/flag_descriptions.cc.patch b/chromium_edits/122.0.6226.2/chrome/browser/flag_descriptions.cc.patch similarity index 94% rename from chromium_edits/121.0.6156.3/chrome/browser/flag_descriptions.cc.patch rename to chromium_edits/122.0.6226.2/chrome/browser/flag_descriptions.cc.patch index 3ef7683d..2cd5dcc0 100644 --- a/chromium_edits/121.0.6156.3/chrome/browser/flag_descriptions.cc.patch +++ b/chromium_edits/122.0.6226.2/chrome/browser/flag_descriptions.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 9f35b91158262..0dc974246fe82 100644 +index ec5799f66a720..7be72282040c1 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc @@ -284,6 +284,11 @@ const char kEnableBenchmarkingDescription[] = diff --git a/chromium_edits/121.0.6167.8/chrome/browser/flag_descriptions.h.patch b/chromium_edits/122.0.6226.2/chrome/browser/flag_descriptions.h.patch similarity index 89% rename from chromium_edits/121.0.6167.8/chrome/browser/flag_descriptions.h.patch rename to chromium_edits/122.0.6226.2/chrome/browser/flag_descriptions.h.patch index 7b22a391..18c0b4cc 100644 --- a/chromium_edits/121.0.6167.8/chrome/browser/flag_descriptions.h.patch +++ b/chromium_edits/122.0.6226.2/chrome/browser/flag_descriptions.h.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 067e8d3c0b793..95ceadb06622a 100644 +index 3224ecf17e6c8..14976704c1345 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h @@ -23,6 +23,7 @@ @@ -10,7 +10,7 @@ index 067e8d3c0b793..95ceadb06622a 100644 // This file declares strings used in chrome://flags. These messages are not // translated, because instead of end-users they target Chromium developers and -@@ -179,6 +180,11 @@ extern const char kDownloadWarningImprovementsDescription[]; +@@ -176,6 +177,11 @@ extern const char kDownloadWarningImprovementsDescription[]; extern const char kEnableBenchmarkingName[]; extern const char kEnableBenchmarkingDescription[]; diff --git a/chromium_edits/122.0.6226.2/chrome/browser/ipfs_extra_parts.cc b/chromium_edits/122.0.6226.2/chrome/browser/ipfs_extra_parts.cc new file mode 100644 index 00000000..90d2596f --- /dev/null +++ b/chromium_edits/122.0.6226.2/chrome/browser/ipfs_extra_parts.cc @@ -0,0 +1,10 @@ +#include "ipfs_extra_parts.h" + +#include "profiles/profile.h" + +#include + +void IpfsExtraParts::PostProfileInit(Profile* profile, bool /* is_initial_profile */ ) { + DCHECK(profile); + ipfs::InterRequestState::CreateForBrowserContext(profile, profile->GetPrefs()); +} diff --git a/chromium_edits/122.0.6226.2/chrome/browser/ipfs_extra_parts.h b/chromium_edits/122.0.6226.2/chrome/browser/ipfs_extra_parts.h new file mode 100644 index 00000000..2059c437 --- /dev/null +++ b/chromium_edits/122.0.6226.2/chrome/browser/ipfs_extra_parts.h @@ -0,0 +1,10 @@ +#ifndef IPFS_EXTRA_PART_H_ +#define IPFS_EXTRA_PART_H_ + +#include + +class IpfsExtraParts : public ChromeBrowserMainExtraParts { + void PostProfileInit(Profile* profile, bool is_initial_profile) override; +}; + +#endif // IPFS_EXTRA_PART_H_ diff --git a/chromium_edits/122.0.6226.2/chrome/browser/prefs/browser_prefs.cc.patch b/chromium_edits/122.0.6226.2/chrome/browser/prefs/browser_prefs.cc.patch new file mode 100644 index 00000000..08688d58 --- /dev/null +++ b/chromium_edits/122.0.6226.2/chrome/browser/prefs/browser_prefs.cc.patch @@ -0,0 +1,36 @@ +diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc +index e4e82350ade4a..7023d6c5e07c3 100644 +--- a/chrome/browser/prefs/browser_prefs.cc ++++ b/chrome/browser/prefs/browser_prefs.cc +@@ -189,6 +189,7 @@ + #include "printing/buildflags/buildflags.h" + #include "rlz/buildflags/buildflags.h" + #include "third_party/abseil-cpp/absl/types/optional.h" ++#include "third_party/ipfs_client/ipfs_buildflags.h" + + #if BUILDFLAG(ENABLE_BACKGROUND_MODE) + #include "chrome/browser/background/background_mode_manager.h" +@@ -233,6 +234,11 @@ + #include "chrome/browser/pdf/pdf_pref_names.h" + #endif // BUILDFLAG(ENABLE_PDF) + ++#if BUILDFLAG(ENABLE_IPFS) ++#include "components/ipfs/ipfs_features.h" ++#include "components/ipfs/preferences.h" ++#endif ++ + #if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) + #include "chrome/browser/screen_ai/pref_names.h" + #endif +@@ -1685,6 +1691,11 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, + IncognitoModePrefs::RegisterProfilePrefs(registry); + invalidation::PerUserTopicSubscriptionManager::RegisterProfilePrefs(registry); + invalidation::InvalidatorRegistrarWithMemory::RegisterProfilePrefs(registry); ++#if BUILDFLAG(ENABLE_IPFS) ++ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { ++ ipfs::RegisterPreferences(registry); ++ } ++#endif + language::LanguagePrefs::RegisterProfilePrefs(registry); + login_detection::prefs::RegisterProfilePrefs(registry); + lookalikes::RegisterProfilePrefs(registry); diff --git a/chromium_edits/121.0.6147.0/chrome/common/chrome_content_client.cc.patch b/chromium_edits/122.0.6226.2/chrome/common/chrome_content_client.cc.patch similarity index 100% rename from chromium_edits/121.0.6147.0/chrome/common/chrome_content_client.cc.patch rename to chromium_edits/122.0.6226.2/chrome/common/chrome_content_client.cc.patch diff --git a/chromium_edits/121.0.6147.0/components/cbor/reader.cc.patch b/chromium_edits/122.0.6226.2/components/cbor/reader.cc.patch similarity index 100% rename from chromium_edits/121.0.6147.0/components/cbor/reader.cc.patch rename to chromium_edits/122.0.6226.2/components/cbor/reader.cc.patch diff --git a/chromium_edits/121.0.6147.0/components/cbor/reader.h.patch b/chromium_edits/122.0.6226.2/components/cbor/reader.h.patch similarity index 100% rename from chromium_edits/121.0.6147.0/components/cbor/reader.h.patch rename to chromium_edits/122.0.6226.2/components/cbor/reader.h.patch diff --git a/chromium_edits/121.0.6147.0/components/cbor/reader_unittest.cc.patch b/chromium_edits/122.0.6226.2/components/cbor/reader_unittest.cc.patch similarity index 100% rename from chromium_edits/121.0.6147.0/components/cbor/reader_unittest.cc.patch rename to chromium_edits/122.0.6226.2/components/cbor/reader_unittest.cc.patch diff --git a/chromium_edits/121.0.6147.0/components/cbor/values.cc.patch b/chromium_edits/122.0.6226.2/components/cbor/values.cc.patch similarity index 100% rename from chromium_edits/121.0.6147.0/components/cbor/values.cc.patch rename to chromium_edits/122.0.6226.2/components/cbor/values.cc.patch diff --git a/chromium_edits/121.0.6147.0/components/cbor/values.h.patch b/chromium_edits/122.0.6226.2/components/cbor/values.h.patch similarity index 100% rename from chromium_edits/121.0.6147.0/components/cbor/values.h.patch rename to chromium_edits/122.0.6226.2/components/cbor/values.h.patch diff --git a/chromium_edits/121.0.6147.0/components/cbor/writer.cc.patch b/chromium_edits/122.0.6226.2/components/cbor/writer.cc.patch similarity index 100% rename from chromium_edits/121.0.6147.0/components/cbor/writer.cc.patch rename to chromium_edits/122.0.6226.2/components/cbor/writer.cc.patch diff --git a/chromium_edits/121.0.6147.0/components/cbor/writer_unittest.cc.patch b/chromium_edits/122.0.6226.2/components/cbor/writer_unittest.cc.patch similarity index 100% rename from chromium_edits/121.0.6147.0/components/cbor/writer_unittest.cc.patch rename to chromium_edits/122.0.6226.2/components/cbor/writer_unittest.cc.patch diff --git a/chromium_edits/121.0.6147.0/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch b/chromium_edits/122.0.6226.2/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch similarity index 100% rename from chromium_edits/121.0.6147.0/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch rename to chromium_edits/122.0.6226.2/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch diff --git a/chromium_edits/121.0.6147.0/net/dns/dns_config_service_linux.cc.patch b/chromium_edits/122.0.6226.2/net/dns/dns_config_service_linux.cc.patch similarity index 100% rename from chromium_edits/121.0.6147.0/net/dns/dns_config_service_linux.cc.patch rename to chromium_edits/122.0.6226.2/net/dns/dns_config_service_linux.cc.patch diff --git a/chromium_edits/121.0.6147.0/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch b/chromium_edits/122.0.6226.2/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch similarity index 100% rename from chromium_edits/121.0.6147.0/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch rename to chromium_edits/122.0.6226.2/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch diff --git a/chromium_edits/121.0.6167.8/url/BUILD.gn.patch b/chromium_edits/122.0.6226.2/url/BUILD.gn.patch similarity index 87% rename from chromium_edits/121.0.6167.8/url/BUILD.gn.patch rename to chromium_edits/122.0.6226.2/url/BUILD.gn.patch index 63fb8f8b..cc358ad4 100644 --- a/chromium_edits/121.0.6167.8/url/BUILD.gn.patch +++ b/chromium_edits/122.0.6226.2/url/BUILD.gn.patch @@ -1,5 +1,5 @@ diff --git a/url/BUILD.gn b/url/BUILD.gn -index c525c166979d6..ce2b1ae43c0a7 100644 +index b5edb89f7698f..d299856674d7d 100644 --- a/url/BUILD.gn +++ b/url/BUILD.gn @@ -5,6 +5,7 @@ @@ -10,7 +10,7 @@ index c525c166979d6..ce2b1ae43c0a7 100644 import("features.gni") import("//build/config/cronet/config.gni") -@@ -67,6 +68,7 @@ component("url") { +@@ -68,6 +69,7 @@ component("url") { public_deps = [ "//base", "//build:robolectric_buildflags", @@ -18,7 +18,7 @@ index c525c166979d6..ce2b1ae43c0a7 100644 ] configs += [ "//build/config/compiler:wexit_time_destructors" ] -@@ -89,6 +91,11 @@ component("url") { +@@ -90,6 +92,11 @@ component("url") { public_configs = [ "//third_party/jdk" ] } diff --git a/chromium_edits/121.0.6167.8/url/url_canon.h.patch b/chromium_edits/122.0.6226.2/url/url_canon.h.patch similarity index 91% rename from chromium_edits/121.0.6167.8/url/url_canon.h.patch rename to chromium_edits/122.0.6226.2/url/url_canon.h.patch index 24ae1ba4..7ffd3a2f 100644 --- a/chromium_edits/121.0.6167.8/url/url_canon.h.patch +++ b/chromium_edits/122.0.6226.2/url/url_canon.h.patch @@ -1,8 +1,8 @@ diff --git a/url/url_canon.h b/url/url_canon.h -index d3a7fabf09fa8..06db17242248f 100644 +index 8c48f9825d8cf..b9ad961e1b123 100644 --- a/url/url_canon.h +++ b/url/url_canon.h -@@ -697,6 +697,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, +@@ -804,6 +804,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, CanonOutput* output, Parsed* new_parsed); diff --git a/chromium_edits/121.0.6156.3/url/url_canon_ipfs.cc b/chromium_edits/122.0.6226.2/url/url_canon_ipfs.cc similarity index 62% rename from chromium_edits/121.0.6156.3/url/url_canon_ipfs.cc rename to chromium_edits/122.0.6226.2/url/url_canon_ipfs.cc index da3a5f03..d7c9fdc7 100644 --- a/chromium_edits/121.0.6156.3/url/url_canon_ipfs.cc +++ b/chromium_edits/122.0.6226.2/url/url_canon_ipfs.cc @@ -1,14 +1,10 @@ #include "url_canon_internal.h" -#include +#include #include #include -namespace m = libp2p::multi; -using Cid = m::ContentIdentifier; -using CidCodec = m::ContentIdentifierCodec; - bool url::CanonicalizeIpfsURL(const char* spec, int spec_len, const Parsed& parsed, @@ -22,37 +18,24 @@ bool url::CanonicalizeIpfsURL(const char* spec, if ( parsed.host.len < 1 ) { return false; } - std::string cid_str{ spec + parsed.host.begin, static_cast(parsed.host.len) }; - auto maybe_cid = CidCodec::fromString(cid_str); - if ( !maybe_cid.has_value() ) { - auto e = libp2p::multi::Stringify(maybe_cid.error()); - std::ostringstream err; - err << e << ' ' - << std::string_view{spec,static_cast(spec_len)}; - maybe_cid = ipfs::id_cid::forText( err.str() ); - } - auto cid = maybe_cid.value(); - if ( cid.version == Cid::Version::V0 ) { - //TODO dcheck content_type == DAG_PB && content_address.getType() == sha256 - cid = Cid{ - Cid::Version::V1, - cid.content_type, - cid.content_address - }; + std::string_view cid_str{ spec + parsed.host.begin, static_cast(parsed.host.len) }; + auto cid = ipfs::Cid(cid_str); + if ( !cid.valid() ) { + cid = ipfs::id_cid::forText( std::string{cid_str} + " is not a valid CID." ); } - auto as_str = CidCodec::toString(cid); - if ( !as_str.has_value() ) { + auto as_str = cid.to_string(); + if ( as_str.empty() ) { return false; } std::string stdurl{ spec, static_cast(parsed.host.begin) }; - stdurl.append( as_str.value() ); + stdurl.append( as_str ); stdurl.append( spec + parsed.host.end(), spec_len - parsed.host.end() ); spec = stdurl.data(); spec_len = static_cast(stdurl.size()); Parsed parsed_input; ParseStandardURL(spec, spec_len, &parsed_input); return CanonicalizeStandardURL( - spec, spec_len, + spec, parsed_input, scheme_type, charset_converter, diff --git a/chromium_edits/122.0.6226.2/url/url_util.cc.patch b/chromium_edits/122.0.6226.2/url/url_util.cc.patch new file mode 100644 index 00000000..814f4b82 --- /dev/null +++ b/chromium_edits/122.0.6226.2/url/url_util.cc.patch @@ -0,0 +1,22 @@ +diff --git a/url/url_util.cc b/url/url_util.cc +index 6f83f33c01c6b..a248e11c49445 100644 +--- a/url/url_util.cc ++++ b/url/url_util.cc +@@ -273,8 +273,15 @@ bool DoCanonicalize(const CHAR* spec, + } else if (DoCompareSchemeComponent(spec, scheme, url::kFileSystemScheme)) { + // Filesystem URLs are special. + ParseFileSystemURL(spec, spec_len, &parsed_input); +- success = CanonicalizeFileSystemURL(spec, parsed_input, charset_converter, +- output, output_parsed); ++ success = CanonicalizeFileSystemURL(spec, parsed_input, ++ charset_converter, output, ++ output_parsed); ++ ++ } else if (DoCompareSchemeComponent(spec, scheme, "ipfs")) { ++ // Switch multibase away from case-sensitive ones before continuing canonicalization. ++ ParseStandardURL(spec, spec_len, &parsed_input); ++ success = CanonicalizeIpfsURL(spec, spec_len, parsed_input, scheme_type, ++ charset_converter, output, output_parsed); + + } else if (DoIsStandard(spec, scheme, &scheme_type)) { + // All "normal" URLs. diff --git a/chromium_edits/121.0.6167.8/chrome/browser/BUILD.gn.patch b/chromium_edits/122.0.6236.2/chrome/browser/BUILD.gn.patch similarity index 72% rename from chromium_edits/121.0.6167.8/chrome/browser/BUILD.gn.patch rename to chromium_edits/122.0.6236.2/chrome/browser/BUILD.gn.patch index 68259c43..eb61fe43 100644 --- a/chromium_edits/121.0.6167.8/chrome/browser/BUILD.gn.patch +++ b/chromium_edits/122.0.6236.2/chrome/browser/BUILD.gn.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index 6572022524828..d5956c31511df 100644 +index 9e7f057a1c35d..846fe6d119c66 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -40,6 +40,7 @@ import("//rlz/buildflags/buildflags.gni") +@@ -39,6 +39,7 @@ import("//rlz/buildflags/buildflags.gni") import("//sandbox/features.gni") import("//testing/libfuzzer/fuzzer_test.gni") import("//third_party/blink/public/public_features.gni") @@ -10,11 +10,15 @@ index 6572022524828..d5956c31511df 100644 import("//third_party/protobuf/proto_library.gni") import("//third_party/webrtc/webrtc.gni") import("//third_party/widevine/cdm/widevine.gni") -@@ -2632,6 +2633,10 @@ static_library("browser") { +@@ -2619,6 +2620,14 @@ static_library("browser") { ] } + if (enable_ipfs) { ++ sources += [ ++ "ipfs_extra_parts.cc", ++ "ipfs_extra_parts.h", ++ ] + deps += [ "//components/ipfs" ] + } + diff --git a/chromium_edits/121.0.6147.0/chrome/browser/about_flags.cc.patch b/chromium_edits/122.0.6236.2/chrome/browser/about_flags.cc.patch similarity index 88% rename from chromium_edits/121.0.6147.0/chrome/browser/about_flags.cc.patch rename to chromium_edits/122.0.6236.2/chrome/browser/about_flags.cc.patch index 91648f23..bbc45911 100644 --- a/chromium_edits/121.0.6147.0/chrome/browser/about_flags.cc.patch +++ b/chromium_edits/122.0.6236.2/chrome/browser/about_flags.cc.patch @@ -1,16 +1,16 @@ diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 680632024bb1b..27ea3c7c74620 100644 +index 61699cdf19305..5b99fd9811eb0 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -209,6 +209,7 @@ +@@ -214,6 +214,7 @@ #include "third_party/blink/public/common/features_generated.h" #include "third_party/blink/public/common/forcedark/forcedark_switches.h" #include "third_party/blink/public/common/switches.h" +#include "third_party/ipfs_client/ipfs_buildflags.h" #include "ui/accessibility/accessibility_features.h" #include "ui/accessibility/accessibility_switches.h" - #include "ui/base/ui_base_features.h" -@@ -309,6 +310,10 @@ + #include "ui/base/ozone_buildflags.h" +@@ -310,6 +311,10 @@ #include "extensions/common/switches.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) @@ -21,7 +21,7 @@ index 680632024bb1b..27ea3c7c74620 100644 #if BUILDFLAG(ENABLE_PDF) #include "pdf/pdf_features.h" #endif -@@ -9912,6 +9917,14 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9413,6 +9418,14 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOmitCorsClientCertDescription, kOsAll, FEATURE_VALUE_TYPE(network::features::kOmitCorsClientCert)}, diff --git a/chromium_edits/121.0.6156.3/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch b/chromium_edits/122.0.6236.2/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch similarity index 100% rename from chromium_edits/121.0.6156.3/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch rename to chromium_edits/122.0.6236.2/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc.patch diff --git a/chromium_edits/121.0.6156.3/chrome/browser/chrome_content_browser_client.cc.patch b/chromium_edits/122.0.6236.2/chrome/browser/chrome_content_browser_client.cc.patch similarity index 76% rename from chromium_edits/121.0.6156.3/chrome/browser/chrome_content_browser_client.cc.patch rename to chromium_edits/122.0.6236.2/chrome/browser/chrome_content_browser_client.cc.patch index 1f6d393d..a991fd2e 100644 --- a/chromium_edits/121.0.6156.3/chrome/browser/chrome_content_browser_client.cc.patch +++ b/chromium_edits/122.0.6236.2/chrome/browser/chrome_content_browser_client.cc.patch @@ -1,5 +1,5 @@ diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index 5746f7c712514..2c56ac60c0e74 100644 +index a9f0eb5ab9151..8956d3ca5519e 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc @@ -374,6 +374,7 @@ @@ -10,11 +10,12 @@ index 5746f7c712514..2c56ac60c0e74 100644 #include "third_party/widevine/cdm/buildflags.h" #include "ui/base/clipboard/clipboard_format_type.h" #include "ui/base/l10n/l10n_util.h" -@@ -496,6 +497,12 @@ +@@ -497,6 +498,13 @@ #include "chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h" #endif +#if BUILDFLAG(ENABLE_IPFS) ++#include "chrome/browser/ipfs_extra_parts.h" +#include "components/ipfs/interceptor.h" +#include "components/ipfs/ipfs_features.h" +#include "components/ipfs/url_loader_factory.h" @@ -23,7 +24,19 @@ index 5746f7c712514..2c56ac60c0e74 100644 #if BUILDFLAG(IS_CHROMEOS) #include "base/debug/leak_annotations.h" #include "chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.h" -@@ -6130,12 +6137,23 @@ void ChromeContentBrowserClient:: +@@ -1709,6 +1717,11 @@ ChromeContentBrowserClient::CreateBrowserMainParts(bool is_integration_test) { + main_parts->AddParts( + std::make_unique()); + ++#if BUILDFLAG(ENABLE_IPFS) ++ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { ++ main_parts->AddParts(std::make_unique()); ++ } ++#endif + return main_parts; + } + +@@ -6049,12 +6062,25 @@ void ChromeContentBrowserClient:: const absl::optional& request_initiator_origin, NonNetworkURLLoaderFactoryMap* factories) { #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ @@ -33,23 +46,24 @@ index 5746f7c712514..2c56ac60c0e74 100644 RenderFrameHost::FromID(render_process_id, render_frame_id); WebContents* web_contents = WebContents::FromRenderFrameHost(frame_host); #endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ -- // !BUILDFLAG(IS_ANDROID) -+ // !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_IPFS) + // !BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(ENABLE_IPFS) + if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { + network::mojom::URLLoaderFactory* default_factory = g_browser_process->system_network_context_manager()->GetURLLoaderFactory(); ++ auto* context = web_contents->GetBrowserContext(); + ipfs::IpfsURLLoaderFactory::Create( + factories, -+ web_contents->GetBrowserContext(), ++ context, + default_factory, -+ GetSystemNetworkContext() ++ GetSystemNetworkContext(), ++ Profile::FromBrowserContext(context)->GetPrefs() + ); + } +#endif // BUILDFLAG(ENABLE_IPFS) #if BUILDFLAG(IS_CHROMEOS_ASH) if (web_contents) { -@@ -6277,6 +6295,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( +@@ -6196,6 +6222,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( scoped_refptr navigation_response_task_runner) { std::vector> interceptors; diff --git a/chromium_edits/121.0.6167.8/chrome/browser/flag-metadata.json.patch b/chromium_edits/122.0.6236.2/chrome/browser/flag-metadata.json.patch similarity index 88% rename from chromium_edits/121.0.6167.8/chrome/browser/flag-metadata.json.patch rename to chromium_edits/122.0.6236.2/chrome/browser/flag-metadata.json.patch index 834d2929..7827ee94 100644 --- a/chromium_edits/121.0.6167.8/chrome/browser/flag-metadata.json.patch +++ b/chromium_edits/122.0.6236.2/chrome/browser/flag-metadata.json.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 0cdc387bf20b7..10e6b164bfdbf 100644 +index 91740e0cc9e2b..916f584f37a54 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -2944,6 +2944,11 @@ +@@ -2943,6 +2943,11 @@ "owners": [ "hanxi@chromium.org", "wychen@chromium.org" ], "expiry_milestone": 130 }, diff --git a/chromium_edits/121.0.6147.0/chrome/browser/flag_descriptions.cc.patch b/chromium_edits/122.0.6236.2/chrome/browser/flag_descriptions.cc.patch similarity index 85% rename from chromium_edits/121.0.6147.0/chrome/browser/flag_descriptions.cc.patch rename to chromium_edits/122.0.6236.2/chrome/browser/flag_descriptions.cc.patch index 96f7d80e..9a74068e 100644 --- a/chromium_edits/121.0.6147.0/chrome/browser/flag_descriptions.cc.patch +++ b/chromium_edits/122.0.6236.2/chrome/browser/flag_descriptions.cc.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 4f92be79c3e35..780bdad269134 100644 +index bddee4563e255..9e84641ac307f 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -274,6 +274,11 @@ const char kEnableBenchmarkingDescription[] = +@@ -284,6 +284,11 @@ const char kEnableBenchmarkingDescription[] = "after 3 restarts. On the third restart, the flag will appear to be off " "but the effect is still active."; diff --git a/chromium_edits/121.0.6156.3/chrome/browser/flag_descriptions.h.patch b/chromium_edits/122.0.6236.2/chrome/browser/flag_descriptions.h.patch similarity index 87% rename from chromium_edits/121.0.6156.3/chrome/browser/flag_descriptions.h.patch rename to chromium_edits/122.0.6236.2/chrome/browser/flag_descriptions.h.patch index b3836144..e3bc6464 100644 --- a/chromium_edits/121.0.6156.3/chrome/browser/flag_descriptions.h.patch +++ b/chromium_edits/122.0.6236.2/chrome/browser/flag_descriptions.h.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index afe0f24f278d3..3e0fe1ba84040 100644 +index dc09da6e1897a..f139e88d67ae1 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -22,6 +22,7 @@ +@@ -23,6 +23,7 @@ #include "pdf/buildflags.h" #include "printing/buildflags/buildflags.h" #include "third_party/blink/public/common/buildflags.h" @@ -10,7 +10,7 @@ index afe0f24f278d3..3e0fe1ba84040 100644 // This file declares strings used in chrome://flags. These messages are not // translated, because instead of end-users they target Chromium developers and -@@ -175,6 +176,11 @@ extern const char kDownloadWarningImprovementsDescription[]; +@@ -176,6 +177,11 @@ extern const char kDownloadWarningImprovementsDescription[]; extern const char kEnableBenchmarkingName[]; extern const char kEnableBenchmarkingDescription[]; diff --git a/chromium_edits/122.0.6236.2/chrome/browser/ipfs_extra_parts.cc b/chromium_edits/122.0.6236.2/chrome/browser/ipfs_extra_parts.cc new file mode 100644 index 00000000..90d2596f --- /dev/null +++ b/chromium_edits/122.0.6236.2/chrome/browser/ipfs_extra_parts.cc @@ -0,0 +1,10 @@ +#include "ipfs_extra_parts.h" + +#include "profiles/profile.h" + +#include + +void IpfsExtraParts::PostProfileInit(Profile* profile, bool /* is_initial_profile */ ) { + DCHECK(profile); + ipfs::InterRequestState::CreateForBrowserContext(profile, profile->GetPrefs()); +} diff --git a/chromium_edits/122.0.6236.2/chrome/browser/ipfs_extra_parts.h b/chromium_edits/122.0.6236.2/chrome/browser/ipfs_extra_parts.h new file mode 100644 index 00000000..2059c437 --- /dev/null +++ b/chromium_edits/122.0.6236.2/chrome/browser/ipfs_extra_parts.h @@ -0,0 +1,10 @@ +#ifndef IPFS_EXTRA_PART_H_ +#define IPFS_EXTRA_PART_H_ + +#include + +class IpfsExtraParts : public ChromeBrowserMainExtraParts { + void PostProfileInit(Profile* profile, bool is_initial_profile) override; +}; + +#endif // IPFS_EXTRA_PART_H_ diff --git a/chromium_edits/122.0.6236.2/chrome/browser/prefs/browser_prefs.cc.patch b/chromium_edits/122.0.6236.2/chrome/browser/prefs/browser_prefs.cc.patch new file mode 100644 index 00000000..ddda775c --- /dev/null +++ b/chromium_edits/122.0.6236.2/chrome/browser/prefs/browser_prefs.cc.patch @@ -0,0 +1,36 @@ +diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc +index e406d936c277c..0aff4e87587ae 100644 +--- a/chrome/browser/prefs/browser_prefs.cc ++++ b/chrome/browser/prefs/browser_prefs.cc +@@ -189,6 +189,7 @@ + #include "printing/buildflags/buildflags.h" + #include "rlz/buildflags/buildflags.h" + #include "third_party/abseil-cpp/absl/types/optional.h" ++#include "third_party/ipfs_client/ipfs_buildflags.h" + + #if BUILDFLAG(ENABLE_BACKGROUND_MODE) + #include "chrome/browser/background/background_mode_manager.h" +@@ -233,6 +234,11 @@ + #include "chrome/browser/pdf/pdf_pref_names.h" + #endif // BUILDFLAG(ENABLE_PDF) + ++#if BUILDFLAG(ENABLE_IPFS) ++#include "components/ipfs/ipfs_features.h" ++#include "components/ipfs/preferences.h" ++#endif ++ + #if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) + #include "chrome/browser/screen_ai/pref_names.h" + #endif +@@ -1658,6 +1664,11 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, + IncognitoModePrefs::RegisterProfilePrefs(registry); + invalidation::PerUserTopicSubscriptionManager::RegisterProfilePrefs(registry); + invalidation::InvalidatorRegistrarWithMemory::RegisterProfilePrefs(registry); ++#if BUILDFLAG(ENABLE_IPFS) ++ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { ++ ipfs::RegisterPreferences(registry); ++ } ++#endif + language::LanguagePrefs::RegisterProfilePrefs(registry); + login_detection::prefs::RegisterProfilePrefs(registry); + lookalikes::RegisterProfilePrefs(registry); diff --git a/chromium_edits/121.0.6156.3/chrome/common/chrome_content_client.cc.patch b/chromium_edits/122.0.6236.2/chrome/common/chrome_content_client.cc.patch similarity index 100% rename from chromium_edits/121.0.6156.3/chrome/common/chrome_content_client.cc.patch rename to chromium_edits/122.0.6236.2/chrome/common/chrome_content_client.cc.patch diff --git a/chromium_edits/121.0.6156.3/components/cbor/reader.cc.patch b/chromium_edits/122.0.6236.2/components/cbor/reader.cc.patch similarity index 100% rename from chromium_edits/121.0.6156.3/components/cbor/reader.cc.patch rename to chromium_edits/122.0.6236.2/components/cbor/reader.cc.patch diff --git a/chromium_edits/121.0.6156.3/components/cbor/reader.h.patch b/chromium_edits/122.0.6236.2/components/cbor/reader.h.patch similarity index 100% rename from chromium_edits/121.0.6156.3/components/cbor/reader.h.patch rename to chromium_edits/122.0.6236.2/components/cbor/reader.h.patch diff --git a/chromium_edits/121.0.6156.3/components/cbor/reader_unittest.cc.patch b/chromium_edits/122.0.6236.2/components/cbor/reader_unittest.cc.patch similarity index 100% rename from chromium_edits/121.0.6156.3/components/cbor/reader_unittest.cc.patch rename to chromium_edits/122.0.6236.2/components/cbor/reader_unittest.cc.patch diff --git a/chromium_edits/121.0.6156.3/components/cbor/values.cc.patch b/chromium_edits/122.0.6236.2/components/cbor/values.cc.patch similarity index 100% rename from chromium_edits/121.0.6156.3/components/cbor/values.cc.patch rename to chromium_edits/122.0.6236.2/components/cbor/values.cc.patch diff --git a/chromium_edits/121.0.6156.3/components/cbor/values.h.patch b/chromium_edits/122.0.6236.2/components/cbor/values.h.patch similarity index 100% rename from chromium_edits/121.0.6156.3/components/cbor/values.h.patch rename to chromium_edits/122.0.6236.2/components/cbor/values.h.patch diff --git a/chromium_edits/121.0.6156.3/components/cbor/writer.cc.patch b/chromium_edits/122.0.6236.2/components/cbor/writer.cc.patch similarity index 100% rename from chromium_edits/121.0.6156.3/components/cbor/writer.cc.patch rename to chromium_edits/122.0.6236.2/components/cbor/writer.cc.patch diff --git a/chromium_edits/121.0.6156.3/components/cbor/writer_unittest.cc.patch b/chromium_edits/122.0.6236.2/components/cbor/writer_unittest.cc.patch similarity index 100% rename from chromium_edits/121.0.6156.3/components/cbor/writer_unittest.cc.patch rename to chromium_edits/122.0.6236.2/components/cbor/writer_unittest.cc.patch diff --git a/chromium_edits/121.0.6156.3/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch b/chromium_edits/122.0.6236.2/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch similarity index 100% rename from chromium_edits/121.0.6156.3/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch rename to chromium_edits/122.0.6236.2/components/open_from_clipboard/clipboard_recent_content_generic.cc.patch diff --git a/chromium_edits/121.0.6156.3/net/dns/dns_config_service_linux.cc.patch b/chromium_edits/122.0.6236.2/net/dns/dns_config_service_linux.cc.patch similarity index 100% rename from chromium_edits/121.0.6156.3/net/dns/dns_config_service_linux.cc.patch rename to chromium_edits/122.0.6236.2/net/dns/dns_config_service_linux.cc.patch diff --git a/chromium_edits/121.0.6156.3/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch b/chromium_edits/122.0.6236.2/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch similarity index 100% rename from chromium_edits/121.0.6156.3/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch rename to chromium_edits/122.0.6236.2/third_party/blink/renderer/platform/weborigin/scheme_registry.cc.patch diff --git a/chromium_edits/121.0.6147.0/url/BUILD.gn.patch b/chromium_edits/122.0.6236.2/url/BUILD.gn.patch similarity index 87% rename from chromium_edits/121.0.6147.0/url/BUILD.gn.patch rename to chromium_edits/122.0.6236.2/url/BUILD.gn.patch index 63fb8f8b..cc358ad4 100644 --- a/chromium_edits/121.0.6147.0/url/BUILD.gn.patch +++ b/chromium_edits/122.0.6236.2/url/BUILD.gn.patch @@ -1,5 +1,5 @@ diff --git a/url/BUILD.gn b/url/BUILD.gn -index c525c166979d6..ce2b1ae43c0a7 100644 +index b5edb89f7698f..d299856674d7d 100644 --- a/url/BUILD.gn +++ b/url/BUILD.gn @@ -5,6 +5,7 @@ @@ -10,7 +10,7 @@ index c525c166979d6..ce2b1ae43c0a7 100644 import("features.gni") import("//build/config/cronet/config.gni") -@@ -67,6 +68,7 @@ component("url") { +@@ -68,6 +69,7 @@ component("url") { public_deps = [ "//base", "//build:robolectric_buildflags", @@ -18,7 +18,7 @@ index c525c166979d6..ce2b1ae43c0a7 100644 ] configs += [ "//build/config/compiler:wexit_time_destructors" ] -@@ -89,6 +91,11 @@ component("url") { +@@ -90,6 +92,11 @@ component("url") { public_configs = [ "//third_party/jdk" ] } diff --git a/chromium_edits/121.0.6147.0/url/url_canon.h.patch b/chromium_edits/122.0.6236.2/url/url_canon.h.patch similarity index 91% rename from chromium_edits/121.0.6147.0/url/url_canon.h.patch rename to chromium_edits/122.0.6236.2/url/url_canon.h.patch index 24ae1ba4..7ffd3a2f 100644 --- a/chromium_edits/121.0.6147.0/url/url_canon.h.patch +++ b/chromium_edits/122.0.6236.2/url/url_canon.h.patch @@ -1,8 +1,8 @@ diff --git a/url/url_canon.h b/url/url_canon.h -index d3a7fabf09fa8..06db17242248f 100644 +index 8c48f9825d8cf..b9ad961e1b123 100644 --- a/url/url_canon.h +++ b/url/url_canon.h -@@ -697,6 +697,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, +@@ -804,6 +804,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, CanonOutput* output, Parsed* new_parsed); diff --git a/chromium_edits/121.0.6167.8/url/url_canon_ipfs.cc b/chromium_edits/122.0.6236.2/url/url_canon_ipfs.cc similarity index 62% rename from chromium_edits/121.0.6167.8/url/url_canon_ipfs.cc rename to chromium_edits/122.0.6236.2/url/url_canon_ipfs.cc index da3a5f03..d7c9fdc7 100644 --- a/chromium_edits/121.0.6167.8/url/url_canon_ipfs.cc +++ b/chromium_edits/122.0.6236.2/url/url_canon_ipfs.cc @@ -1,14 +1,10 @@ #include "url_canon_internal.h" -#include +#include #include #include -namespace m = libp2p::multi; -using Cid = m::ContentIdentifier; -using CidCodec = m::ContentIdentifierCodec; - bool url::CanonicalizeIpfsURL(const char* spec, int spec_len, const Parsed& parsed, @@ -22,37 +18,24 @@ bool url::CanonicalizeIpfsURL(const char* spec, if ( parsed.host.len < 1 ) { return false; } - std::string cid_str{ spec + parsed.host.begin, static_cast(parsed.host.len) }; - auto maybe_cid = CidCodec::fromString(cid_str); - if ( !maybe_cid.has_value() ) { - auto e = libp2p::multi::Stringify(maybe_cid.error()); - std::ostringstream err; - err << e << ' ' - << std::string_view{spec,static_cast(spec_len)}; - maybe_cid = ipfs::id_cid::forText( err.str() ); - } - auto cid = maybe_cid.value(); - if ( cid.version == Cid::Version::V0 ) { - //TODO dcheck content_type == DAG_PB && content_address.getType() == sha256 - cid = Cid{ - Cid::Version::V1, - cid.content_type, - cid.content_address - }; + std::string_view cid_str{ spec + parsed.host.begin, static_cast(parsed.host.len) }; + auto cid = ipfs::Cid(cid_str); + if ( !cid.valid() ) { + cid = ipfs::id_cid::forText( std::string{cid_str} + " is not a valid CID." ); } - auto as_str = CidCodec::toString(cid); - if ( !as_str.has_value() ) { + auto as_str = cid.to_string(); + if ( as_str.empty() ) { return false; } std::string stdurl{ spec, static_cast(parsed.host.begin) }; - stdurl.append( as_str.value() ); + stdurl.append( as_str ); stdurl.append( spec + parsed.host.end(), spec_len - parsed.host.end() ); spec = stdurl.data(); spec_len = static_cast(stdurl.size()); Parsed parsed_input; ParseStandardURL(spec, spec_len, &parsed_input); return CanonicalizeStandardURL( - spec, spec_len, + spec, parsed_input, scheme_type, charset_converter, diff --git a/chromium_edits/122.0.6236.2/url/url_util.cc.patch b/chromium_edits/122.0.6236.2/url/url_util.cc.patch new file mode 100644 index 00000000..814f4b82 --- /dev/null +++ b/chromium_edits/122.0.6236.2/url/url_util.cc.patch @@ -0,0 +1,22 @@ +diff --git a/url/url_util.cc b/url/url_util.cc +index 6f83f33c01c6b..a248e11c49445 100644 +--- a/url/url_util.cc ++++ b/url/url_util.cc +@@ -273,8 +273,15 @@ bool DoCanonicalize(const CHAR* spec, + } else if (DoCompareSchemeComponent(spec, scheme, url::kFileSystemScheme)) { + // Filesystem URLs are special. + ParseFileSystemURL(spec, spec_len, &parsed_input); +- success = CanonicalizeFileSystemURL(spec, parsed_input, charset_converter, +- output, output_parsed); ++ success = CanonicalizeFileSystemURL(spec, parsed_input, ++ charset_converter, output, ++ output_parsed); ++ ++ } else if (DoCompareSchemeComponent(spec, scheme, "ipfs")) { ++ // Switch multibase away from case-sensitive ones before continuing canonicalization. ++ ParseStandardURL(spec, spec_len, &parsed_input); ++ success = CanonicalizeIpfsURL(spec, spec_len, parsed_input, scheme_type, ++ charset_converter, output, output_parsed); + + } else if (DoIsStandard(spec, scheme, &scheme_type)) { + // All "normal" URLs. diff --git a/cmake/GNU.cmake b/cmake/GNU.cmake index 6545949f..5eaf8f05 100644 --- a/cmake/GNU.cmake +++ b/cmake/GNU.cmake @@ -1,2 +1,3 @@ set(CHROMIUM_COMPILER_FLAGS -nostdinc++ -fno-rtti) set(WARNING_FLAGS -Wall -Wextra -Wpedantic -Werror=switch-enum -Werror=return-type -Werror=reorder -Werror=implicit-fallthrough -fmax-errors=3) +set(coverage_debug_flags -fno-inline -g3 -ggdb3 -O0 ) diff --git a/cmake/patch.py b/cmake/patch.py index 4d98c109..b4d280d0 100755 --- a/cmake/patch.py +++ b/cmake/patch.py @@ -212,11 +212,7 @@ def recommend(self) -> str: raise EnvironmentError(f"Can't find an appropriate tag for {osname()}, anymore!") def available(self): - for f in listdir(self.pdir): - if splitext(f)[1] != '.patch': - print(f"Warning: {f} does not belong in {self.pdir}. Removing.", file=stderr) - remove(join(self.pdir, f)) - return map(lambda p: splitext(p)[0], listdir(self.pdir)) + return listdir(self.edir) def distances(self, frm, ref): a = int(self.git(['rev-list', '--count', frm+'..'+ref], Result.Output)) @@ -258,7 +254,7 @@ def electron_version(self, branch='main'): def unavailable(self): avail = list(map(as_int, self.available())) version_set = {} - fudge = 59893 + fudge = 59895 def check(version, version_set, s): i = as_int(version) by = (fudge,0) @@ -348,6 +344,10 @@ def list_ood(self, to_check: list[str], sense: bool): if len(rels) > 1: print(f'Prev {chan:9}{os:7}', rels[1][1]) print("Electron's main branch:", p.electron_version()) + elif argv[1] == 'available': + pr = Patcher('/mnt/big/lbl/code/chromium/src', 'git', 'Debug') + print(list(pr.available())) + print(pr.edir) elif argv[1] == 'old': pr = Patcher('/mnt/big/lbl/code/chromium/src', 'git', 'Debug') if len(argv) > 2: diff --git a/component/block_http_request.cc b/component/block_http_request.cc index 76244b0a..a2fff2d5 100644 --- a/component/block_http_request.cc +++ b/component/block_http_request.cc @@ -62,8 +62,6 @@ void Self::OnResponse(std::shared_ptr, status = 200; break; case net::Error::ERR_TIMED_OUT: - VLOG(2) << "HTTP request timed out: " << inf_.url << " after " - << inf_.timeout_seconds << "s."; status = 408; break; default: diff --git a/component/chromium_ipfs_context.cc b/component/chromium_ipfs_context.cc index d4b180a9..db708ea9 100644 --- a/component/chromium_ipfs_context.cc +++ b/component/chromium_ipfs_context.cc @@ -121,6 +121,9 @@ auto Self::GetGateway(std::size_t index) const -> std::optional { } return std::nullopt; } +void Self ::AddGateway(std::string_view prefix) { + rates_.SetRate(prefix, 120U); +} Self::ChromiumIpfsContext(InterRequestState& state, PrefService* prefs) : state_{state}, rates_{prefs} {} diff --git a/component/chromium_ipfs_context.h b/component/chromium_ipfs_context.h index b274746e..e48e64ef 100644 --- a/component/chromium_ipfs_context.h +++ b/component/chromium_ipfs_context.h @@ -54,6 +54,7 @@ class ChromiumIpfsContext final : public ContextApi { std::optional GetGateway(std::size_t index) const override; unsigned int GetGatewayRate(std::string_view) override; void SetGatewayRate(std::string_view, unsigned int) override; + void AddGateway(std::string_view) override; public: ChromiumIpfsContext(InterRequestState&, PrefService* prefs); diff --git a/component/patches/121.0.6147.0.patch b/component/patches/121.0.6147.0.patch deleted file mode 100644 index 586c4e7e..00000000 --- a/component/patches/121.0.6147.0.patch +++ /dev/null @@ -1,837 +0,0 @@ -diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index 8704f445741b4..2c0cae5d77b6d 100644 ---- a/chrome/browser/BUILD.gn -+++ b/chrome/browser/BUILD.gn -@@ -40,6 +40,7 @@ import("//rlz/buildflags/buildflags.gni") - import("//sandbox/features.gni") - import("//testing/libfuzzer/fuzzer_test.gni") - import("//third_party/blink/public/public_features.gni") -+import("//third_party/ipfs_client/args.gni") - import("//third_party/protobuf/proto_library.gni") - import("//third_party/webrtc/webrtc.gni") - import("//third_party/widevine/cdm/widevine.gni") -@@ -2634,6 +2635,10 @@ static_library("browser") { - ] - } - -+ if (enable_ipfs) { -+ deps += [ "//components/ipfs" ] -+ } -+ - if (is_chromeos_ash) { - deps += [ "//chrome/browser/screen_ai:screen_ai_dlc_installer" ] - } -diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index 680632024bb1b..27ea3c7c74620 100644 ---- a/chrome/browser/about_flags.cc -+++ b/chrome/browser/about_flags.cc -@@ -209,6 +209,7 @@ - #include "third_party/blink/public/common/features_generated.h" - #include "third_party/blink/public/common/forcedark/forcedark_switches.h" - #include "third_party/blink/public/common/switches.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" - #include "ui/accessibility/accessibility_features.h" - #include "ui/accessibility/accessibility_switches.h" - #include "ui/base/ui_base_features.h" -@@ -309,6 +310,10 @@ - #include "extensions/common/switches.h" - #endif // BUILDFLAG(ENABLE_EXTENSIONS) - -+#if BUILDFLAG(ENABLE_IPFS) -+#include "components/ipfs/ipfs_features.h" -+#endif -+ - #if BUILDFLAG(ENABLE_PDF) - #include "pdf/pdf_features.h" - #endif -@@ -9912,6 +9917,14 @@ const FeatureEntry kFeatureEntries[] = { - flag_descriptions::kOmitCorsClientCertDescription, kOsAll, - FEATURE_VALUE_TYPE(network::features::kOmitCorsClientCert)}, - -+#if BUILDFLAG(ENABLE_IPFS) -+ {"enable-ipfs", -+ flag_descriptions::kEnableIpfsName, -+ flag_descriptions::kEnableIpfsDescription, -+ kOsMac | kOsWin | kOsLinux,//TODO: These are the only variants currently getting built, but that is not likely to remain the case -+ FEATURE_VALUE_TYPE(ipfs::kEnableIpfs)}, -+#endif -+ - {"use-idna2008-non-transitional", - flag_descriptions::kUseIDNA2008NonTransitionalName, - flag_descriptions::kUseIDNA2008NonTransitionalDescription, kOsAll, -diff --git a/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc b/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc -index 4c88614c68c25..f8bb12a3b0c2e 100644 ---- a/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc -+++ b/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc -@@ -10,6 +10,8 @@ - #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" - #include "chrome/browser/external_protocol/external_protocol_handler.h" - #include "chrome/browser/profiles/profile.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" -+ - #if BUILDFLAG(IS_ANDROID) - #include "chrome/browser/profiles/profile_android.h" - #endif -@@ -18,6 +20,9 @@ - #include "chrome/browser/ui/android/omnibox/jni_headers/ChromeAutocompleteSchemeClassifier_jni.h" - #endif - #include "components/custom_handlers/protocol_handler_registry.h" -+#if BUILDFLAG(ENABLE_IPFS) -+#include "components/ipfs/ipfs_features.h" -+#endif - #include "content/public/common/url_constants.h" - #include "url/url_util.h" - -@@ -55,12 +60,20 @@ ChromeAutocompleteSchemeClassifier::GetInputTypeForScheme( - if (scheme.empty()) { - return metrics::OmniboxInputType::EMPTY; - } -- if (base::IsStringASCII(scheme) && -- (ProfileIOData::IsHandledProtocol(scheme) || -- base::EqualsCaseInsensitiveASCII(scheme, content::kViewSourceScheme) || -- base::EqualsCaseInsensitiveASCII(scheme, url::kJavaScriptScheme) || -- base::EqualsCaseInsensitiveASCII(scheme, url::kDataScheme))) { -- return metrics::OmniboxInputType::URL; -+ if (base::IsStringASCII(scheme)) { -+ if (ProfileIOData::IsHandledProtocol(scheme) || -+ base::EqualsCaseInsensitiveASCII(scheme, content::kViewSourceScheme) || -+ base::EqualsCaseInsensitiveASCII(scheme, url::kJavaScriptScheme) || -+ base::EqualsCaseInsensitiveASCII(scheme, url::kDataScheme)) { -+ return metrics::OmniboxInputType::URL; -+ } -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs) && -+ (base::EqualsCaseInsensitiveASCII(scheme, "ipfs") || base::EqualsCaseInsensitiveASCII(scheme, "ipns")) -+ ) { -+ return metrics::OmniboxInputType::URL; -+ } -+#endif - } - - // Also check for schemes registered via registerProtocolHandler(), which -diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index 69237f32680f9..be754dca72ffb 100644 ---- a/chrome/browser/chrome_content_browser_client.cc -+++ b/chrome/browser/chrome_content_browser_client.cc -@@ -374,6 +374,7 @@ - #include "third_party/blink/public/common/switches.h" - #include "third_party/blink/public/mojom/browsing_topics/browsing_topics.mojom.h" - #include "third_party/blink/public/public_buildflags.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" - #include "third_party/widevine/cdm/buildflags.h" - #include "ui/base/clipboard/clipboard_format_type.h" - #include "ui/base/l10n/l10n_util.h" -@@ -496,6 +497,12 @@ - #include "chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h" - #endif - -+#if BUILDFLAG(ENABLE_IPFS) -+#include "components/ipfs/interceptor.h" -+#include "components/ipfs/ipfs_features.h" -+#include "components/ipfs/url_loader_factory.h" -+#endif -+ - #if BUILDFLAG(IS_CHROMEOS) - #include "base/debug/leak_annotations.h" - #include "chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.h" -@@ -6130,12 +6137,23 @@ void ChromeContentBrowserClient:: - const absl::optional& request_initiator_origin, - NonNetworkURLLoaderFactoryMap* factories) { - #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ -- !BUILDFLAG(IS_ANDROID) -+ !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_IPFS) - content::RenderFrameHost* frame_host = - RenderFrameHost::FromID(render_process_id, render_frame_id); - WebContents* web_contents = WebContents::FromRenderFrameHost(frame_host); - #endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ -- // !BUILDFLAG(IS_ANDROID) -+ // !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_IPFS) -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { -+ network::mojom::URLLoaderFactory* default_factory = g_browser_process->system_network_context_manager()->GetURLLoaderFactory(); -+ ipfs::IpfsURLLoaderFactory::Create( -+ factories, -+ web_contents->GetBrowserContext(), -+ default_factory, -+ GetSystemNetworkContext() -+ ); -+ } -+#endif // BUILDFLAG(ENABLE_IPFS) - - #if BUILDFLAG(IS_CHROMEOS_ASH) - if (web_contents) { -@@ -6277,6 +6295,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( - scoped_refptr navigation_response_task_runner) { - std::vector> - interceptors; -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { -+ interceptors.push_back(std::make_unique(g_browser_process->system_network_context_manager()->GetURLLoaderFactory(), GetSystemNetworkContext())); -+ } -+#endif - #if BUILDFLAG(ENABLE_OFFLINE_PAGES) - interceptors.push_back( - std::make_unique( -diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index f8609c4f6e389..7f329f8ab9bfb 100644 ---- a/chrome/browser/flag-metadata.json -+++ b/chrome/browser/flag-metadata.json -@@ -2889,6 +2889,11 @@ - "owners": [ "hanxi@chromium.org", "wychen@chromium.org" ], - "expiry_milestone": 130 - }, -+ { -+ "name": "enable-ipfs", -+ "owners": [ "//components/ipfs/OWNERS" ], -+ "expiry_milestone": 150 -+ }, - { - "name": "enable-isolated-sandboxed-iframes", - "owners": [ "wjmaclean@chromium.org", "alexmos@chromium.org", "creis@chromium.org" ], -diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 4f92be79c3e35..780bdad269134 100644 ---- a/chrome/browser/flag_descriptions.cc -+++ b/chrome/browser/flag_descriptions.cc -@@ -274,6 +274,11 @@ const char kEnableBenchmarkingDescription[] = - "after 3 restarts. On the third restart, the flag will appear to be off " - "but the effect is still active."; - -+#if BUILDFLAG(ENABLE_IPFS) -+extern const char kEnableIpfsName[] = "Enable IPFS"; -+extern const char kEnableIpfsDescription[] = "Enable ipfs:// and ipns:// URLs"; -+#endif -+ - const char kPreloadingOnPerformancePageName[] = - "Preloading Settings on Performance Page"; - const char kPreloadingOnPerformancePageDescription[] = -diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index ca4c8f927ba26..ab6f0ee6cb103 100644 ---- a/chrome/browser/flag_descriptions.h -+++ b/chrome/browser/flag_descriptions.h -@@ -22,6 +22,7 @@ - #include "pdf/buildflags.h" - #include "printing/buildflags/buildflags.h" - #include "third_party/blink/public/common/buildflags.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" - - // This file declares strings used in chrome://flags. These messages are not - // translated, because instead of end-users they target Chromium developers and -@@ -172,6 +173,11 @@ extern const char kDownloadWarningImprovementsDescription[]; - extern const char kEnableBenchmarkingName[]; - extern const char kEnableBenchmarkingDescription[]; - -+#if BUILDFLAG(ENABLE_IPFS) -+extern const char kEnableIpfsName[]; -+extern const char kEnableIpfsDescription[]; -+#endif -+ - #if BUILDFLAG(USE_FONTATIONS_BACKEND) - extern const char kFontationsFontBackendName[]; - extern const char kFontationsFontBackendDescription[]; -diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc -index 246ec9c5c911f..5d66d133a7907 100644 ---- a/chrome/common/chrome_content_client.cc -+++ b/chrome/common/chrome_content_client.cc -@@ -296,6 +296,12 @@ void ChromeContentClient::AddAdditionalSchemes(Schemes* schemes) { - #if BUILDFLAG(IS_ANDROID) - schemes->local_schemes.push_back(url::kContentScheme); - #endif -+ for ( const char* ip_s : {"ipfs", "ipns"} ) { -+ schemes->standard_schemes.push_back(ip_s); -+ schemes->cors_enabled_schemes.push_back(ip_s); -+ schemes->secure_schemes.push_back(ip_s); -+ schemes->csp_bypassing_schemes.push_back(ip_s); -+ } - } - - std::u16string ChromeContentClient::GetLocalizedString(int message_id) { -diff --git a/components/cbor/reader.cc b/components/cbor/reader.cc -index 306ba52fa4944..6b13b3a679a65 100644 ---- a/components/cbor/reader.cc -+++ b/components/cbor/reader.cc -@@ -22,7 +22,7 @@ - namespace cbor { - - namespace constants { --const char kUnsupportedMajorType[] = "Unsupported major type."; -+const char kUnsupportedMajorType[] = "Unsupported major type operation."; - } - - namespace { -@@ -156,7 +156,11 @@ absl::optional Reader::DecodeCompleteDataItem(const Config& config, - case Value::Type::FLOAT_VALUE: - // Floating point values also go here since they are also type 7. - return DecodeToSimpleValueOrFloat(*header, config); -- case Value::Type::TAG: // We explicitly don't support TAG. -+ case Value::Type::TAG: -+ if (config.parse_tags) { -+ return ReadTagContent(*header, config, max_nesting_level); -+ } -+ break; - case Value::Type::NONE: - case Value::Type::INVALID_UTF8: - break; -@@ -347,6 +351,17 @@ absl::optional Reader::ReadByteStringContent( - return Value(std::move(cbor_byte_string)); - } - -+absl::optional Reader::ReadTagContent( -+ const Reader::DataItemHeader& header, -+ const Config& config, -+ int max_nesting_level) { -+ auto tagged_content = DecodeCompleteDataItem(config, max_nesting_level); -+ if (tagged_content.has_value()) { -+ tagged_content.value().SetTag(header.value); -+ } -+ return tagged_content; -+} -+ - absl::optional Reader::ReadArrayContent( - const Reader::DataItemHeader& header, - const Config& config, -diff --git a/components/cbor/reader.h b/components/cbor/reader.h -index f0b43a5517528..a57e277a1bc66 100644 ---- a/components/cbor/reader.h -+++ b/components/cbor/reader.h -@@ -130,6 +130,11 @@ class CBOR_EXPORT Reader { - // during decoding will set raise the `UNSUPPORTED_FLOATING_POINT_VALUE` - // error. - bool allow_floating_point = false; -+ -+ // If the parser encounters a TAG element, should it be parsed out and -+ // the tag value saved (true), or should the entire node and its content -+ // be discarded (false) -+ bool parse_tags = false; - }; - - Reader(const Reader&) = delete; -@@ -204,6 +209,9 @@ class CBOR_EXPORT Reader { - absl::optional ReadMapContent(const DataItemHeader& header, - const Config& config, - int max_nesting_level); -+ absl::optional ReadTagContent(const DataItemHeader& header, -+ const Config& config, -+ int max_nesting_level); - absl::optional ReadByte(); - absl::optional> ReadBytes(uint64_t num_bytes); - bool IsKeyInOrder(const Value& new_key, -diff --git a/components/cbor/reader_unittest.cc b/components/cbor/reader_unittest.cc -index 83d44a48d6dfa..a6ec5299b3241 100644 ---- a/components/cbor/reader_unittest.cc -+++ b/components/cbor/reader_unittest.cc -@@ -1451,5 +1451,42 @@ TEST(CBORReaderTest, AllowInvalidUTF8) { - EXPECT_FALSE(cbor); - EXPECT_EQ(Reader::DecoderError::INVALID_UTF8, error); - } -+TEST(CBORReaderTest, RejectsTagUnderDefaultConfig) { -+ static const uint8_t kTaggedCbor[] = { -+ 0xd8, 0x2a, 0x58, 0x25, 0x00, 0x01, 0x71, 0x12, 0x20, 0x69, 0xea, 0x07, -+ 0x40, 0xf9, 0x80, 0x7a, 0x28, 0xf4, 0xd9, 0x32, 0xc6, 0x2e, 0x7c, 0x1c, -+ 0x83, 0xbe, 0x05, 0x5e, 0x55, 0x07, 0x2c, 0x90, 0x26, 0x6a, 0xb3, 0xe7, -+ 0x9d, 0xf6, 0x3a, 0x36, 0x5b -+ }; -+ Reader::Config config; -+ absl::optional cbor = Reader::Read(kTaggedCbor, config); -+ EXPECT_FALSE(cbor.has_value()); -+} -+TEST(CBORReaderTest, ReadsTagWhenConfiguredToDoSo) { -+ static const uint8_t kTaggedCbor[] = { -+ 0xd8, 0x2a, 0x58, 0x25, 0x00, 0x01, 0x71, 0x12, 0x20, 0x69, 0xea, 0x07, -+ 0x40, 0xf9, 0x80, 0x7a, 0x28, 0xf4, 0xd9, 0x32, 0xc6, 0x2e, 0x7c, 0x1c, -+ 0x83, 0xbe, 0x05, 0x5e, 0x55, 0x07, 0x2c, 0x90, 0x26, 0x6a, 0xb3, 0xe7, -+ 0x9d, 0xf6, 0x3a, 0x36, 0x5b -+ }; -+ Reader::Config config; -+ config.parse_tags = true; -+ absl::optional cbor = Reader::Read(kTaggedCbor, config); -+ EXPECT_TRUE(cbor.has_value()); -+ auto& v = cbor.value(); -+ EXPECT_TRUE(v.has_tag()); -+ EXPECT_EQ(v.GetTag(),42UL); -+ EXPECT_TRUE(v.is_bytestring()); -+ EXPECT_EQ(v.type(), Value::Type::BYTE_STRING); -+ auto& bytes = v.GetBytestring(); -+ EXPECT_EQ(bytes.size(), 37UL); -+ EXPECT_EQ(bytes.at(0), 0x00);//identity multibase (e.g. not base-encoded, bytes are themselves) -+ EXPECT_EQ(bytes.at(1), 0x01);//CID version 1 -+ EXPECT_EQ(bytes.at(2), 0x71);//codec = dag-cbor -+ EXPECT_EQ(bytes.at(3), 0x12);//multihash = 18 = sha2-256 -+ EXPECT_EQ(bytes.at(4), 0x20);//hash length = 32 bytes -+ EXPECT_EQ(bytes.at(5), 0x69);//first byte of hash digest -+ EXPECT_EQ(bytes.at(36),0x5b);//last byte of hash digest -+} - - } // namespace cbor -diff --git a/components/cbor/values.cc b/components/cbor/values.cc -index 02498209c820e..34055aef24cfe 100644 ---- a/components/cbor/values.cc -+++ b/components/cbor/values.cc -@@ -66,32 +66,34 @@ Value::Value(Type type) : type_(type) { - NOTREACHED(); - } - --Value::Value(SimpleValue in_simple) -- : type_(Type::SIMPLE_VALUE), simple_value_(in_simple) { -+Value::Value(SimpleValue in_simple, uint64_t tag) -+ : type_(Type::SIMPLE_VALUE), simple_value_(in_simple), tag_(tag) { - CHECK(static_cast(in_simple) >= 20 && static_cast(in_simple) <= 23); - } - --Value::Value(bool boolean_value) : type_(Type::SIMPLE_VALUE) { -+Value::Value(bool boolean_value, uint64_t tag) : type_(Type::SIMPLE_VALUE), tag_(tag) { - simple_value_ = boolean_value ? Value::SimpleValue::TRUE_VALUE - : Value::SimpleValue::FALSE_VALUE; - } - --Value::Value(double float_value) -- : type_(Type::FLOAT_VALUE), float_value_(float_value) {} -+Value::Value(double float_value, uint64_t tag) -+ : type_(Type::FLOAT_VALUE), float_value_(float_value), tag_(tag) {} - --Value::Value(int integer_value) -- : Value(base::checked_cast(integer_value)) {} -+Value::Value(int integer_value, uint64_t tag) -+ : Value(base::checked_cast(integer_value), tag) {} - --Value::Value(int64_t integer_value) : integer_value_(integer_value) { -+Value::Value(int64_t integer_value, uint64_t tag) : integer_value_(integer_value), tag_(tag) { - type_ = integer_value >= 0 ? Type::UNSIGNED : Type::NEGATIVE; - } - --Value::Value(base::span in_bytes) -+Value::Value(base::span in_bytes, uint64_t tag) - : type_(Type::BYTE_STRING), -- bytestring_value_(in_bytes.begin(), in_bytes.end()) {} -+ bytestring_value_(in_bytes.begin(), in_bytes.end()), -+ tag_(tag) -+ {} - --Value::Value(base::span in_bytes, Type type) -- : type_(type), bytestring_value_(in_bytes.begin(), in_bytes.end()) { -+Value::Value(base::span in_bytes, Type type, uint64_t tag) -+ : type_(type), bytestring_value_(in_bytes.begin(), in_bytes.end()), tag_(tag) { - DCHECK(type_ == Type::BYTE_STRING || type_ == Type::INVALID_UTF8); - } - -@@ -117,7 +119,8 @@ Value::Value(std::string&& in_string, Type type) noexcept : type_(type) { - } - } - --Value::Value(base::StringPiece in_string, Type type) : type_(type) { -+Value::Value(base::StringPiece in_string, Type type, uint64_t tag) -+: type_(type), tag_(tag) { - switch (type_) { - case Type::STRING: - new (&string_value_) std::string(); -@@ -133,16 +136,18 @@ Value::Value(base::StringPiece in_string, Type type) : type_(type) { - } - } - --Value::Value(const ArrayValue& in_array) : type_(Type::ARRAY), array_value_() { -+Value::Value(const ArrayValue& in_array, uint64_t tag) -+: type_(Type::ARRAY), array_value_(), tag_(tag) { - array_value_.reserve(in_array.size()); - for (const auto& val : in_array) - array_value_.emplace_back(val.Clone()); - } - --Value::Value(ArrayValue&& in_array) noexcept -- : type_(Type::ARRAY), array_value_(std::move(in_array)) {} -+Value::Value(ArrayValue&& in_array, uint64_t tag) noexcept -+ : type_(Type::ARRAY), array_value_(std::move(in_array)), tag_(tag) {} - --Value::Value(const MapValue& in_map) : type_(Type::MAP), map_value_() { -+Value::Value(const MapValue& in_map, uint64_t tag) -+: type_(Type::MAP), map_value_(), tag_(tag) { - map_value_.reserve(in_map.size()); - for (const auto& it : in_map) - map_value_.emplace_hint(map_value_.end(), it.first.Clone(), -@@ -168,31 +173,36 @@ Value Value::Clone() const { - case Type::NONE: - return Value(); - case Type::INVALID_UTF8: -- return Value(bytestring_value_, Type::INVALID_UTF8); -+ return Value(bytestring_value_, Type::INVALID_UTF8, tag_); - case Type::UNSIGNED: - case Type::NEGATIVE: -- return Value(integer_value_); -+ return Value(integer_value_, tag_); - case Type::BYTE_STRING: -- return Value(bytestring_value_); -+ return Value(bytestring_value_, tag_); - case Type::STRING: -- return Value(string_value_); -+ return Value(string_value_, Type::STRING, tag_); - case Type::ARRAY: -- return Value(array_value_); -+ return Value(array_value_, tag_); - case Type::MAP: -- return Value(map_value_); -+ return Value(map_value_, tag_); - case Type::TAG: - NOTREACHED() << constants::kUnsupportedMajorType; - return Value(); - case Type::SIMPLE_VALUE: -- return Value(simple_value_); -+ return Value(simple_value_, tag_); - case Type::FLOAT_VALUE: -- return Value(float_value_); -+ return Value(float_value_, tag_); - } - - NOTREACHED(); - return Value(); - } - -+Value& Value::SetTag(uint64_t tag) noexcept { -+ tag_ = tag; -+ return *this; -+} -+ - Value::SimpleValue Value::GetSimpleValue() const { - CHECK(is_simple()); - return simple_value_; -@@ -258,9 +268,14 @@ const Value::BinaryValue& Value::GetInvalidUTF8() const { - return bytestring_value_; - } - -+uint64_t Value::GetTag() const { -+ CHECK(has_tag()); -+ return tag_; -+} -+ - void Value::InternalMoveConstructFrom(Value&& that) { - type_ = that.type_; -- -+ tag_ = that.tag_; - switch (type_) { - case Type::UNSIGNED: - case Type::NEGATIVE: -diff --git a/components/cbor/values.h b/components/cbor/values.h -index d81ef5607c55a..10216a8dcdc57 100644 ---- a/components/cbor/values.h -+++ b/components/cbor/values.h -@@ -127,28 +127,29 @@ class CBOR_EXPORT Value { - - explicit Value(Type type); - -- explicit Value(SimpleValue in_simple); -- explicit Value(bool boolean_value); -- explicit Value(double in_float); -+ explicit Value(SimpleValue in_simple, uint64_t tag = NO_TAG); -+ explicit Value(bool boolean_value, uint64_t tag = NO_TAG); -+ explicit Value(double in_float, uint64_t tag = NO_TAG); - -- explicit Value(int integer_value); -- explicit Value(int64_t integer_value); -+ explicit Value(int integer_value, uint64_t tag = NO_TAG); -+ explicit Value(int64_t integer_value, uint64_t tag = NO_TAG); - explicit Value(uint64_t integer_value) = delete; - -- explicit Value(base::span in_bytes); -+ explicit Value(base::span in_bytes, uint64_t tag = NO_TAG); - explicit Value(BinaryValue&& in_bytes) noexcept; - - explicit Value(const char* in_string, Type type = Type::STRING); - explicit Value(std::string&& in_string, Type type = Type::STRING) noexcept; -- explicit Value(base::StringPiece in_string, Type type = Type::STRING); -+ explicit Value(base::StringPiece in_string, Type type = Type::STRING, uint64_t tag = NO_TAG); - -- explicit Value(const ArrayValue& in_array); -- explicit Value(ArrayValue&& in_array) noexcept; -+ explicit Value(const ArrayValue& in_array, uint64_t tag = NO_TAG); -+ explicit Value(ArrayValue&& in_array, uint64_t tag = NO_TAG) noexcept; - -- explicit Value(const MapValue& in_map); -+ explicit Value(const MapValue& in_map, uint64_t tag = NO_TAG); - explicit Value(MapValue&& in_map) noexcept; - - Value& operator=(Value&& that) noexcept; -+ Value& SetTag(uint64_t) noexcept; - - Value(const Value&) = delete; - Value& operator=(const Value&) = delete; -@@ -179,6 +180,7 @@ class CBOR_EXPORT Value { - bool is_string() const { return type() == Type::STRING; } - bool is_array() const { return type() == Type::ARRAY; } - bool is_map() const { return type() == Type::MAP; } -+ bool has_tag() const { return tag_ != NO_TAG; } - - // These will all fatally assert if the type doesn't match. - SimpleValue GetSimpleValue() const; -@@ -194,12 +196,13 @@ class CBOR_EXPORT Value { - const ArrayValue& GetArray() const; - const MapValue& GetMap() const; - const BinaryValue& GetInvalidUTF8() const; -+ uint64_t GetTag() const; - - private: - friend class Reader; - // This constructor allows INVALID_UTF8 values to be created, which only - // |Reader| and InvalidUTF8StringValueForTesting() may do. -- Value(base::span in_bytes, Type type); -+ Value(base::span in_bytes, Type type, uint64_t tag = NO_TAG); - - Type type_; - -@@ -213,6 +216,11 @@ class CBOR_EXPORT Value { - MapValue map_value_; - }; - -+ //This value specified as Invalid, -+ // used here to represent absence of TAG -+ constexpr static uint64_t NO_TAG = 0xFFFF; -+ uint64_t tag_ = NO_TAG; -+ - void InternalMoveConstructFrom(Value&& that); - void InternalCleanup(); - }; -diff --git a/components/cbor/writer.cc b/components/cbor/writer.cc -index bb22754d36a07..aae4027836377 100644 ---- a/components/cbor/writer.cc -+++ b/components/cbor/writer.cc -@@ -47,6 +47,9 @@ bool Writer::EncodeCBOR(const Value& node, - if (max_nesting_level < 0) - return false; - -+ if (node.has_tag()) { -+ StartItem(Value::Type::TAG, node.GetTag()); -+ } - switch (node.type()) { - case Value::Type::NONE: { - StartItem(Value::Type::BYTE_STRING, 0); -diff --git a/components/cbor/writer_unittest.cc b/components/cbor/writer_unittest.cc -index e3bffe20734bc..0ed569ae164a0 100644 ---- a/components/cbor/writer_unittest.cc -+++ b/components/cbor/writer_unittest.cc -@@ -522,4 +522,31 @@ TEST(CBORWriterTest, OverlyNestedCBOR) { - EXPECT_FALSE(Writer::Write(Value(map), 4).has_value()); - } - -+TEST(CBORWriterTest, CanWriteTag) { -+ std::array content{ -+ 0x00, 0x01, 0x71, 0x12, 0x20, -+ 0x69, 0xea, 0x07, 0x40, 0xf9, -+ 0x80, 0x7a, 0x28, 0xf4, 0xd9, -+ 0x32, 0xc6, 0x2e, 0x7c, 0x1c, -+ 0x83, 0xbe, 0x05, 0x5e, 0x55, -+ 0x07, 0x2c, 0x90, 0x26, 0x6a, -+ 0xb3, 0xe7, 0x9d, 0xf6, 0x3a, -+ 0x36, 0x5b -+ }; -+ Value to_write(content); -+ to_write.SetTag(42); -+ auto result = Writer::Write(to_write); -+ EXPECT_TRUE(result.has_value()); -+ auto& bytes = result.value(); -+ EXPECT_EQ(bytes.size(), 41UL); -+ EXPECT_EQ(bytes.at(0), 0xd8); -+ EXPECT_EQ(bytes.at(1), 0x2a); -+ EXPECT_EQ(bytes.at(2), 0x58); -+ EXPECT_EQ(bytes.at(3), 0x25); -+ for (auto i = 0UL; i < content.size(); ++i) { -+ ASSERT_LT(i + 4UL, bytes.size()); -+ ASSERT_EQ(content.at(i), bytes.at(i+4UL)); -+ } -+} -+ - } // namespace cbor -diff --git a/components/open_from_clipboard/clipboard_recent_content_generic.cc b/components/open_from_clipboard/clipboard_recent_content_generic.cc -index 4dcafecbc66c6..d205209c08162 100644 ---- a/components/open_from_clipboard/clipboard_recent_content_generic.cc -+++ b/components/open_from_clipboard/clipboard_recent_content_generic.cc -@@ -20,7 +20,7 @@ - namespace { - // Schemes appropriate for suggestion by ClipboardRecentContent. - const char* kAuthorizedSchemes[] = { -- url::kAboutScheme, url::kDataScheme, url::kHttpScheme, url::kHttpsScheme, -+ url::kAboutScheme, url::kDataScheme, url::kHttpScheme, url::kHttpsScheme, "ipfs", "ipns" - // TODO(mpearson): add support for chrome:// URLs. Right now the scheme - // for that lives in content and is accessible via - // GetEmbedderRepresentationOfAboutScheme() or content::kChromeUIScheme -diff --git a/net/dns/dns_config_service_linux.cc b/net/dns/dns_config_service_linux.cc -index 5273da5190277..12b28b86a4c00 100644 ---- a/net/dns/dns_config_service_linux.cc -+++ b/net/dns/dns_config_service_linux.cc -@@ -272,11 +272,11 @@ bool IsNsswitchConfigCompatible( - // Ignore any entries after `kDns` because Chrome will fallback to the - // system resolver if a result was not found in DNS. - return true; -- -+ case NsswitchReader::Service::kResolve: -+ break; - case NsswitchReader::Service::kMdns: - case NsswitchReader::Service::kMdns4: - case NsswitchReader::Service::kMdns6: -- case NsswitchReader::Service::kResolve: - case NsswitchReader::Service::kNis: - RecordIncompatibleNsswitchReason( - IncompatibleNsswitchReason::kIncompatibleService, -diff --git a/third_party/blink/renderer/platform/weborigin/scheme_registry.cc b/third_party/blink/renderer/platform/weborigin/scheme_registry.cc -index 4eadf46ea0c24..d62fc7fb14e01 100644 ---- a/third_party/blink/renderer/platform/weborigin/scheme_registry.cc -+++ b/third_party/blink/renderer/platform/weborigin/scheme_registry.cc -@@ -67,7 +67,7 @@ class URLSchemesRegistry final { - // is considered secure. Additional checks are performed to ensure that - // other http pages are filtered out. - service_worker_schemes({"http", "https"}), -- fetch_api_schemes({"http", "https"}), -+ fetch_api_schemes({"http", "https", "ipfs", "ipns"}), - allowed_in_referrer_schemes({"http", "https"}) { - for (auto& scheme : url::GetCorsEnabledSchemes()) - cors_enabled_schemes.insert(scheme.c_str()); -diff --git a/url/BUILD.gn b/url/BUILD.gn -index c525c166979d6..ce2b1ae43c0a7 100644 ---- a/url/BUILD.gn -+++ b/url/BUILD.gn -@@ -5,6 +5,7 @@ - import("//build/buildflag_header.gni") - import("//testing/libfuzzer/fuzzer_test.gni") - import("//testing/test.gni") -+import("//third_party/ipfs_client/args.gni") - import("features.gni") - - import("//build/config/cronet/config.gni") -@@ -67,6 +68,7 @@ component("url") { - public_deps = [ - "//base", - "//build:robolectric_buildflags", -+ "//third_party/ipfs_client:ipfs_buildflags", - ] - - configs += [ "//build/config/compiler:wexit_time_destructors" ] -@@ -89,6 +91,11 @@ component("url") { - public_configs = [ "//third_party/jdk" ] - } - -+ if (enable_ipfs) { -+ sources += [ "url_canon_ipfs.cc" ] -+ deps += [ "//third_party/ipfs_client:ipfs_client" ] -+ } -+ - if (is_win) { - # Don't conflict with Windows' "url.dll". - output_name = "url_lib" -diff --git a/url/url_canon.h b/url/url_canon.h -index d3a7fabf09fa8..06db17242248f 100644 ---- a/url/url_canon.h -+++ b/url/url_canon.h -@@ -697,6 +697,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, - CanonOutput* output, - Parsed* new_parsed); - -+COMPONENT_EXPORT(URL) -+bool CanonicalizeIpfsURL(const char* spec, -+ int spec_len, -+ const Parsed& parsed, -+ SchemeType scheme_type, -+ CharsetConverter* query_converter, -+ CanonOutput* output, -+ Parsed* new_parsed); -+COMPONENT_EXPORT(URL) -+bool CanonicalizeIpfsURL(const char16_t* spec, -+ int spec_len, -+ const Parsed& parsed, -+ SchemeType scheme_type, -+ CharsetConverter* query_converter, -+ CanonOutput* output, -+ Parsed* new_parsed); -+ - // Part replacer -------------------------------------------------------------- - - // Internal structure used for storing separate strings for each component. -diff --git a/url/url_canon_ipfs.cc b/url/url_canon_ipfs.cc -new file mode 100644 -index 0000000000000..da3a5f032b5e8 ---- /dev/null -+++ b/url/url_canon_ipfs.cc -@@ -0,0 +1,72 @@ -+#include "url_canon_internal.h" -+ -+#include -+#include -+ -+#include -+ -+namespace m = libp2p::multi; -+using Cid = m::ContentIdentifier; -+using CidCodec = m::ContentIdentifierCodec; -+ -+bool url::CanonicalizeIpfsURL(const char* spec, -+ int spec_len, -+ const Parsed& parsed, -+ SchemeType scheme_type, -+ CharsetConverter* charset_converter, -+ CanonOutput* output, -+ Parsed* output_parsed) { -+ if ( spec_len < 1 || !spec ) { -+ return false; -+ } -+ if ( parsed.host.len < 1 ) { -+ return false; -+ } -+ std::string cid_str{ spec + parsed.host.begin, static_cast(parsed.host.len) }; -+ auto maybe_cid = CidCodec::fromString(cid_str); -+ if ( !maybe_cid.has_value() ) { -+ auto e = libp2p::multi::Stringify(maybe_cid.error()); -+ std::ostringstream err; -+ err << e << ' ' -+ << std::string_view{spec,static_cast(spec_len)}; -+ maybe_cid = ipfs::id_cid::forText( err.str() ); -+ } -+ auto cid = maybe_cid.value(); -+ if ( cid.version == Cid::Version::V0 ) { -+ //TODO dcheck content_type == DAG_PB && content_address.getType() == sha256 -+ cid = Cid{ -+ Cid::Version::V1, -+ cid.content_type, -+ cid.content_address -+ }; -+ } -+ auto as_str = CidCodec::toString(cid); -+ if ( !as_str.has_value() ) { -+ return false; -+ } -+ std::string stdurl{ spec, static_cast(parsed.host.begin) }; -+ stdurl.append( as_str.value() ); -+ stdurl.append( spec + parsed.host.end(), spec_len - parsed.host.end() ); -+ spec = stdurl.data(); -+ spec_len = static_cast(stdurl.size()); -+ Parsed parsed_input; -+ ParseStandardURL(spec, spec_len, &parsed_input); -+ return CanonicalizeStandardURL( -+ spec, spec_len, -+ parsed_input, -+ scheme_type, -+ charset_converter, -+ output, output_parsed -+ ); -+} -+bool url::CanonicalizeIpfsURL(const char16_t* spec, -+ int spec_len, -+ const Parsed& parsed, -+ SchemeType scheme_type, -+ CharsetConverter* query_converter, -+ CanonOutput* output, -+ Parsed* new_parsed) { -+ RawCanonOutput<2048> as8; -+ ConvertUTF16ToUTF8(spec, spec_len, &as8); -+ return CanonicalizeIpfsURL(as8.data(), as8.length(), parsed, scheme_type, query_converter, output, new_parsed); -+} -diff --git a/url/url_util.cc b/url/url_util.cc -index 9258cfcfada47..daf10e4c3b741 100644 ---- a/url/url_util.cc -+++ b/url/url_util.cc -@@ -277,6 +277,12 @@ bool DoCanonicalize(const CHAR* spec, - charset_converter, output, - output_parsed); - -+ } else if (DoCompareSchemeComponent(spec, scheme, "ipfs")) { -+ // Switch multibase away from case-sensitive ones before continuing canonicalization. -+ ParseStandardURL(spec, spec_len, &parsed_input); -+ success = CanonicalizeIpfsURL(spec, spec_len, parsed_input, scheme_type, -+ charset_converter, output, output_parsed); -+ - } else if (DoIsStandard(spec, scheme, &scheme_type)) { - // All "normal" URLs. - ParseStandardURL(spec, spec_len, &parsed_input); diff --git a/component/patches/121.0.6167.8.patch b/component/patches/122.0.6226.2.patch similarity index 87% rename from component/patches/121.0.6167.8.patch rename to component/patches/122.0.6226.2.patch index 5c183d79..d09aad3b 100644 --- a/component/patches/121.0.6167.8.patch +++ b/component/patches/122.0.6226.2.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index 6572022524828..d5956c31511df 100644 +index 516f8d3bc275f..3188eaaf003a1 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -40,6 +40,7 @@ import("//rlz/buildflags/buildflags.gni") +@@ -39,6 +39,7 @@ import("//rlz/buildflags/buildflags.gni") import("//sandbox/features.gni") import("//testing/libfuzzer/fuzzer_test.gni") import("//third_party/blink/public/public_features.gni") @@ -10,11 +10,15 @@ index 6572022524828..d5956c31511df 100644 import("//third_party/protobuf/proto_library.gni") import("//third_party/webrtc/webrtc.gni") import("//third_party/widevine/cdm/widevine.gni") -@@ -2632,6 +2633,10 @@ static_library("browser") { +@@ -2618,6 +2619,14 @@ static_library("browser") { ] } + if (enable_ipfs) { ++ sources += [ ++ "ipfs_extra_parts.cc", ++ "ipfs_extra_parts.h", ++ ] + deps += [ "//components/ipfs" ] + } + @@ -22,18 +26,18 @@ index 6572022524828..d5956c31511df 100644 deps += [ "//chrome/browser/screen_ai:screen_ai_dlc_installer" ] } diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index b3954a5fec88e..162b64711b3ca 100644 +index cba0c0e2bc1c2..91e14f34800de 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -212,6 +212,7 @@ +@@ -214,6 +214,7 @@ #include "third_party/blink/public/common/features_generated.h" #include "third_party/blink/public/common/forcedark/forcedark_switches.h" #include "third_party/blink/public/common/switches.h" +#include "third_party/ipfs_client/ipfs_buildflags.h" #include "ui/accessibility/accessibility_features.h" #include "ui/accessibility/accessibility_switches.h" - #include "ui/base/ui_base_features.h" -@@ -312,6 +313,10 @@ + #include "ui/base/ozone_buildflags.h" +@@ -310,6 +311,10 @@ #include "extensions/common/switches.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) @@ -44,7 +48,7 @@ index b3954a5fec88e..162b64711b3ca 100644 #if BUILDFLAG(ENABLE_PDF) #include "pdf/pdf_features.h" #endif -@@ -9846,6 +9851,14 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9379,6 +9384,14 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOmitCorsClientCertDescription, kOsAll, FEATURE_VALUE_TYPE(network::features::kOmitCorsClientCert)}, @@ -110,10 +114,10 @@ index 4c88614c68c25..f8bb12a3b0c2e 100644 // Also check for schemes registered via registerProtocolHandler(), which diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index a9b87ac2fcd74..987686c621664 100644 +index 23ee785c34a30..8550b43c61f2f 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc -@@ -377,6 +377,7 @@ +@@ -376,6 +376,7 @@ #include "third_party/blink/public/common/switches.h" #include "third_party/blink/public/mojom/browsing_topics/browsing_topics.mojom.h" #include "third_party/blink/public/public_buildflags.h" @@ -121,11 +125,12 @@ index a9b87ac2fcd74..987686c621664 100644 #include "third_party/widevine/cdm/buildflags.h" #include "ui/base/clipboard/clipboard_format_type.h" #include "ui/base/l10n/l10n_util.h" -@@ -499,6 +500,12 @@ +@@ -499,6 +500,13 @@ #include "chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h" #endif +#if BUILDFLAG(ENABLE_IPFS) ++#include "chrome/browser/ipfs_extra_parts.h" +#include "components/ipfs/interceptor.h" +#include "components/ipfs/ipfs_features.h" +#include "components/ipfs/url_loader_factory.h" @@ -134,7 +139,19 @@ index a9b87ac2fcd74..987686c621664 100644 #if BUILDFLAG(IS_CHROMEOS) #include "base/debug/leak_annotations.h" #include "chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.h" -@@ -6157,12 +6164,23 @@ void ChromeContentBrowserClient:: +@@ -1711,6 +1719,11 @@ ChromeContentBrowserClient::CreateBrowserMainParts(bool is_integration_test) { + main_parts->AddParts( + std::make_unique()); + ++#if BUILDFLAG(ENABLE_IPFS) ++ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { ++ main_parts->AddParts(std::make_unique()); ++ } ++#endif + return main_parts; + } + +@@ -6057,12 +6070,25 @@ void ChromeContentBrowserClient:: const absl::optional& request_initiator_origin, NonNetworkURLLoaderFactoryMap* factories) { #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ @@ -144,23 +161,24 @@ index a9b87ac2fcd74..987686c621664 100644 RenderFrameHost::FromID(render_process_id, render_frame_id); WebContents* web_contents = WebContents::FromRenderFrameHost(frame_host); #endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ -- // !BUILDFLAG(IS_ANDROID) -+ // !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_IPFS) + // !BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(ENABLE_IPFS) + if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { + network::mojom::URLLoaderFactory* default_factory = g_browser_process->system_network_context_manager()->GetURLLoaderFactory(); ++ auto* context = web_contents->GetBrowserContext(); + ipfs::IpfsURLLoaderFactory::Create( + factories, -+ web_contents->GetBrowserContext(), ++ context, + default_factory, -+ GetSystemNetworkContext() ++ GetSystemNetworkContext(), ++ Profile::FromBrowserContext(context)->GetPrefs() + ); + } +#endif // BUILDFLAG(ENABLE_IPFS) #if BUILDFLAG(IS_CHROMEOS_ASH) if (web_contents) { -@@ -6304,6 +6322,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( +@@ -6204,6 +6230,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( scoped_refptr navigation_response_task_runner) { std::vector> interceptors; @@ -173,10 +191,10 @@ index a9b87ac2fcd74..987686c621664 100644 interceptors.push_back( std::make_unique( diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 0cdc387bf20b7..10e6b164bfdbf 100644 +index ae98bbb22d81a..c85d48a4a77c1 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -2944,6 +2944,11 @@ +@@ -2946,6 +2946,11 @@ "owners": [ "hanxi@chromium.org", "wychen@chromium.org" ], "expiry_milestone": 130 }, @@ -189,10 +207,10 @@ index 0cdc387bf20b7..10e6b164bfdbf 100644 "name": "enable-isolated-sandboxed-iframes", "owners": [ "wjmaclean@chromium.org", "alexmos@chromium.org", "creis@chromium.org" ], diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 879831885f22f..03877bb2c3254 100644 +index ec5799f66a720..7be72282040c1 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc -@@ -288,6 +288,11 @@ const char kEnableBenchmarkingDescription[] = +@@ -284,6 +284,11 @@ const char kEnableBenchmarkingDescription[] = "after 3 restarts. On the third restart, the flag will appear to be off " "but the effect is still active."; @@ -205,7 +223,7 @@ index 879831885f22f..03877bb2c3254 100644 "Preloading Settings on Performance Page"; const char kPreloadingOnPerformancePageDescription[] = diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index 067e8d3c0b793..95ceadb06622a 100644 +index 3224ecf17e6c8..14976704c1345 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h @@ -23,6 +23,7 @@ @@ -216,7 +234,7 @@ index 067e8d3c0b793..95ceadb06622a 100644 // This file declares strings used in chrome://flags. These messages are not // translated, because instead of end-users they target Chromium developers and -@@ -179,6 +180,11 @@ extern const char kDownloadWarningImprovementsDescription[]; +@@ -176,6 +177,11 @@ extern const char kDownloadWarningImprovementsDescription[]; extern const char kEnableBenchmarkingName[]; extern const char kEnableBenchmarkingDescription[]; @@ -228,6 +246,42 @@ index 067e8d3c0b793..95ceadb06622a 100644 #if BUILDFLAG(USE_FONTATIONS_BACKEND) extern const char kFontationsFontBackendName[]; extern const char kFontationsFontBackendDescription[]; +diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc +index e4e82350ade4a..7023d6c5e07c3 100644 +--- a/chrome/browser/prefs/browser_prefs.cc ++++ b/chrome/browser/prefs/browser_prefs.cc +@@ -189,6 +189,7 @@ + #include "printing/buildflags/buildflags.h" + #include "rlz/buildflags/buildflags.h" + #include "third_party/abseil-cpp/absl/types/optional.h" ++#include "third_party/ipfs_client/ipfs_buildflags.h" + + #if BUILDFLAG(ENABLE_BACKGROUND_MODE) + #include "chrome/browser/background/background_mode_manager.h" +@@ -233,6 +234,11 @@ + #include "chrome/browser/pdf/pdf_pref_names.h" + #endif // BUILDFLAG(ENABLE_PDF) + ++#if BUILDFLAG(ENABLE_IPFS) ++#include "components/ipfs/ipfs_features.h" ++#include "components/ipfs/preferences.h" ++#endif ++ + #if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) + #include "chrome/browser/screen_ai/pref_names.h" + #endif +@@ -1685,6 +1691,11 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, + IncognitoModePrefs::RegisterProfilePrefs(registry); + invalidation::PerUserTopicSubscriptionManager::RegisterProfilePrefs(registry); + invalidation::InvalidatorRegistrarWithMemory::RegisterProfilePrefs(registry); ++#if BUILDFLAG(ENABLE_IPFS) ++ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { ++ ipfs::RegisterPreferences(registry); ++ } ++#endif + language::LanguagePrefs::RegisterProfilePrefs(registry); + login_detection::prefs::RegisterProfilePrefs(registry); + lookalikes::RegisterProfilePrefs(registry); diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc index 246ec9c5c911f..5d66d133a7907 100644 --- a/chrome/common/chrome_content_client.cc @@ -681,7 +735,7 @@ index 4eadf46ea0c24..d62fc7fb14e01 100644 for (auto& scheme : url::GetCorsEnabledSchemes()) cors_enabled_schemes.insert(scheme.c_str()); diff --git a/url/BUILD.gn b/url/BUILD.gn -index c525c166979d6..ce2b1ae43c0a7 100644 +index b5edb89f7698f..d299856674d7d 100644 --- a/url/BUILD.gn +++ b/url/BUILD.gn @@ -5,6 +5,7 @@ @@ -692,7 +746,7 @@ index c525c166979d6..ce2b1ae43c0a7 100644 import("features.gni") import("//build/config/cronet/config.gni") -@@ -67,6 +68,7 @@ component("url") { +@@ -68,6 +69,7 @@ component("url") { public_deps = [ "//base", "//build:robolectric_buildflags", @@ -700,7 +754,7 @@ index c525c166979d6..ce2b1ae43c0a7 100644 ] configs += [ "//build/config/compiler:wexit_time_destructors" ] -@@ -89,6 +91,11 @@ component("url") { +@@ -90,6 +92,11 @@ component("url") { public_configs = [ "//third_party/jdk" ] } @@ -713,10 +767,10 @@ index c525c166979d6..ce2b1ae43c0a7 100644 # Don't conflict with Windows' "url.dll". output_name = "url_lib" diff --git a/url/url_canon.h b/url/url_canon.h -index d3a7fabf09fa8..06db17242248f 100644 +index 8c48f9825d8cf..b9ad961e1b123 100644 --- a/url/url_canon.h +++ b/url/url_canon.h -@@ -697,6 +697,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, +@@ -804,6 +804,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, CanonOutput* output, Parsed* new_parsed); @@ -742,21 +796,17 @@ index d3a7fabf09fa8..06db17242248f 100644 // Internal structure used for storing separate strings for each component. diff --git a/url/url_canon_ipfs.cc b/url/url_canon_ipfs.cc new file mode 100644 -index 0000000000000..da3a5f032b5e8 +index 0000000000000..d7c9fdc78eb91 --- /dev/null +++ b/url/url_canon_ipfs.cc -@@ -0,0 +1,72 @@ +@@ -0,0 +1,55 @@ +#include "url_canon_internal.h" + -+#include ++#include +#include + +#include + -+namespace m = libp2p::multi; -+using Cid = m::ContentIdentifier; -+using CidCodec = m::ContentIdentifierCodec; -+ +bool url::CanonicalizeIpfsURL(const char* spec, + int spec_len, + const Parsed& parsed, @@ -770,37 +820,24 @@ index 0000000000000..da3a5f032b5e8 + if ( parsed.host.len < 1 ) { + return false; + } -+ std::string cid_str{ spec + parsed.host.begin, static_cast(parsed.host.len) }; -+ auto maybe_cid = CidCodec::fromString(cid_str); -+ if ( !maybe_cid.has_value() ) { -+ auto e = libp2p::multi::Stringify(maybe_cid.error()); -+ std::ostringstream err; -+ err << e << ' ' -+ << std::string_view{spec,static_cast(spec_len)}; -+ maybe_cid = ipfs::id_cid::forText( err.str() ); -+ } -+ auto cid = maybe_cid.value(); -+ if ( cid.version == Cid::Version::V0 ) { -+ //TODO dcheck content_type == DAG_PB && content_address.getType() == sha256 -+ cid = Cid{ -+ Cid::Version::V1, -+ cid.content_type, -+ cid.content_address -+ }; ++ std::string_view cid_str{ spec + parsed.host.begin, static_cast(parsed.host.len) }; ++ auto cid = ipfs::Cid(cid_str); ++ if ( !cid.valid() ) { ++ cid = ipfs::id_cid::forText( std::string{cid_str} + " is not a valid CID." ); + } -+ auto as_str = CidCodec::toString(cid); -+ if ( !as_str.has_value() ) { ++ auto as_str = cid.to_string(); ++ if ( as_str.empty() ) { + return false; + } + std::string stdurl{ spec, static_cast(parsed.host.begin) }; -+ stdurl.append( as_str.value() ); ++ stdurl.append( as_str ); + stdurl.append( spec + parsed.host.end(), spec_len - parsed.host.end() ); + spec = stdurl.data(); + spec_len = static_cast(stdurl.size()); + Parsed parsed_input; + ParseStandardURL(spec, spec_len, &parsed_input); + return CanonicalizeStandardURL( -+ spec, spec_len, ++ spec, + parsed_input, + scheme_type, + charset_converter, @@ -819,19 +856,25 @@ index 0000000000000..da3a5f032b5e8 + return CanonicalizeIpfsURL(as8.data(), as8.length(), parsed, scheme_type, query_converter, output, new_parsed); +} diff --git a/url/url_util.cc b/url/url_util.cc -index 9258cfcfada47..daf10e4c3b741 100644 +index 6f83f33c01c6b..a248e11c49445 100644 --- a/url/url_util.cc +++ b/url/url_util.cc -@@ -277,6 +277,12 @@ bool DoCanonicalize(const CHAR* spec, - charset_converter, output, - output_parsed); - +@@ -273,8 +273,15 @@ bool DoCanonicalize(const CHAR* spec, + } else if (DoCompareSchemeComponent(spec, scheme, url::kFileSystemScheme)) { + // Filesystem URLs are special. + ParseFileSystemURL(spec, spec_len, &parsed_input); +- success = CanonicalizeFileSystemURL(spec, parsed_input, charset_converter, +- output, output_parsed); ++ success = CanonicalizeFileSystemURL(spec, parsed_input, ++ charset_converter, output, ++ output_parsed); ++ + } else if (DoCompareSchemeComponent(spec, scheme, "ipfs")) { + // Switch multibase away from case-sensitive ones before continuing canonicalization. + ParseStandardURL(spec, spec_len, &parsed_input); + success = CanonicalizeIpfsURL(spec, spec_len, parsed_input, scheme_type, + charset_converter, output, output_parsed); -+ + } else if (DoIsStandard(spec, scheme, &scheme_type)) { // All "normal" URLs. - ParseStandardURL(spec, spec_len, &parsed_input); + diff --git a/component/patches/121.0.6156.3.patch b/component/patches/122.0.6236.2.patch similarity index 88% rename from component/patches/121.0.6156.3.patch rename to component/patches/122.0.6236.2.patch index eacc5115..d16ef2fc 100644 --- a/component/patches/121.0.6156.3.patch +++ b/component/patches/122.0.6236.2.patch @@ -1,8 +1,8 @@ diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index 4ec6cf79062ea..dc9d3637464bb 100644 +index 9e7f057a1c35d..846fe6d119c66 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn -@@ -40,6 +40,7 @@ import("//rlz/buildflags/buildflags.gni") +@@ -39,6 +39,7 @@ import("//rlz/buildflags/buildflags.gni") import("//sandbox/features.gni") import("//testing/libfuzzer/fuzzer_test.gni") import("//third_party/blink/public/public_features.gni") @@ -10,11 +10,15 @@ index 4ec6cf79062ea..dc9d3637464bb 100644 import("//third_party/protobuf/proto_library.gni") import("//third_party/webrtc/webrtc.gni") import("//third_party/widevine/cdm/widevine.gni") -@@ -2630,6 +2631,10 @@ static_library("browser") { +@@ -2619,6 +2620,14 @@ static_library("browser") { ] } + if (enable_ipfs) { ++ sources += [ ++ "ipfs_extra_parts.cc", ++ "ipfs_extra_parts.h", ++ ] + deps += [ "//components/ipfs" ] + } + @@ -22,18 +26,18 @@ index 4ec6cf79062ea..dc9d3637464bb 100644 deps += [ "//chrome/browser/screen_ai:screen_ai_dlc_installer" ] } diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index af66a784e629e..36d2a2de39e38 100644 +index 61699cdf19305..5b99fd9811eb0 100644 --- a/chrome/browser/about_flags.cc +++ b/chrome/browser/about_flags.cc -@@ -209,6 +209,7 @@ +@@ -214,6 +214,7 @@ #include "third_party/blink/public/common/features_generated.h" #include "third_party/blink/public/common/forcedark/forcedark_switches.h" #include "third_party/blink/public/common/switches.h" +#include "third_party/ipfs_client/ipfs_buildflags.h" #include "ui/accessibility/accessibility_features.h" #include "ui/accessibility/accessibility_switches.h" - #include "ui/base/ui_base_features.h" -@@ -309,6 +310,10 @@ + #include "ui/base/ozone_buildflags.h" +@@ -310,6 +311,10 @@ #include "extensions/common/switches.h" #endif // BUILDFLAG(ENABLE_EXTENSIONS) @@ -44,7 +48,7 @@ index af66a784e629e..36d2a2de39e38 100644 #if BUILDFLAG(ENABLE_PDF) #include "pdf/pdf_features.h" #endif -@@ -9855,6 +9860,14 @@ const FeatureEntry kFeatureEntries[] = { +@@ -9413,6 +9418,14 @@ const FeatureEntry kFeatureEntries[] = { flag_descriptions::kOmitCorsClientCertDescription, kOsAll, FEATURE_VALUE_TYPE(network::features::kOmitCorsClientCert)}, @@ -110,7 +114,7 @@ index 4c88614c68c25..f8bb12a3b0c2e 100644 // Also check for schemes registered via registerProtocolHandler(), which diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index 5746f7c712514..2c56ac60c0e74 100644 +index a9f0eb5ab9151..8956d3ca5519e 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc @@ -374,6 +374,7 @@ @@ -121,11 +125,12 @@ index 5746f7c712514..2c56ac60c0e74 100644 #include "third_party/widevine/cdm/buildflags.h" #include "ui/base/clipboard/clipboard_format_type.h" #include "ui/base/l10n/l10n_util.h" -@@ -496,6 +497,12 @@ +@@ -497,6 +498,13 @@ #include "chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h" #endif +#if BUILDFLAG(ENABLE_IPFS) ++#include "chrome/browser/ipfs_extra_parts.h" +#include "components/ipfs/interceptor.h" +#include "components/ipfs/ipfs_features.h" +#include "components/ipfs/url_loader_factory.h" @@ -134,7 +139,19 @@ index 5746f7c712514..2c56ac60c0e74 100644 #if BUILDFLAG(IS_CHROMEOS) #include "base/debug/leak_annotations.h" #include "chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.h" -@@ -6130,12 +6137,23 @@ void ChromeContentBrowserClient:: +@@ -1709,6 +1717,11 @@ ChromeContentBrowserClient::CreateBrowserMainParts(bool is_integration_test) { + main_parts->AddParts( + std::make_unique()); + ++#if BUILDFLAG(ENABLE_IPFS) ++ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { ++ main_parts->AddParts(std::make_unique()); ++ } ++#endif + return main_parts; + } + +@@ -6049,12 +6062,25 @@ void ChromeContentBrowserClient:: const absl::optional& request_initiator_origin, NonNetworkURLLoaderFactoryMap* factories) { #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ @@ -144,23 +161,24 @@ index 5746f7c712514..2c56ac60c0e74 100644 RenderFrameHost::FromID(render_process_id, render_frame_id); WebContents* web_contents = WebContents::FromRenderFrameHost(frame_host); #endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ -- // !BUILDFLAG(IS_ANDROID) -+ // !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_IPFS) + // !BUILDFLAG(IS_ANDROID) +#if BUILDFLAG(ENABLE_IPFS) + if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { + network::mojom::URLLoaderFactory* default_factory = g_browser_process->system_network_context_manager()->GetURLLoaderFactory(); ++ auto* context = web_contents->GetBrowserContext(); + ipfs::IpfsURLLoaderFactory::Create( + factories, -+ web_contents->GetBrowserContext(), ++ context, + default_factory, -+ GetSystemNetworkContext() ++ GetSystemNetworkContext(), ++ Profile::FromBrowserContext(context)->GetPrefs() + ); + } +#endif // BUILDFLAG(ENABLE_IPFS) #if BUILDFLAG(IS_CHROMEOS_ASH) if (web_contents) { -@@ -6277,6 +6295,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( +@@ -6196,6 +6222,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( scoped_refptr navigation_response_task_runner) { std::vector> interceptors; @@ -173,10 +191,10 @@ index 5746f7c712514..2c56ac60c0e74 100644 interceptors.push_back( std::make_unique( diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 4c152d2b20941..d348a33e0c1b5 100644 +index 91740e0cc9e2b..916f584f37a54 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json -@@ -2922,6 +2922,11 @@ +@@ -2943,6 +2943,11 @@ "owners": [ "hanxi@chromium.org", "wychen@chromium.org" ], "expiry_milestone": 130 }, @@ -189,7 +207,7 @@ index 4c152d2b20941..d348a33e0c1b5 100644 "name": "enable-isolated-sandboxed-iframes", "owners": [ "wjmaclean@chromium.org", "alexmos@chromium.org", "creis@chromium.org" ], diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index 9f35b91158262..0dc974246fe82 100644 +index bddee4563e255..9e84641ac307f 100644 --- a/chrome/browser/flag_descriptions.cc +++ b/chrome/browser/flag_descriptions.cc @@ -284,6 +284,11 @@ const char kEnableBenchmarkingDescription[] = @@ -205,10 +223,10 @@ index 9f35b91158262..0dc974246fe82 100644 "Preloading Settings on Performance Page"; const char kPreloadingOnPerformancePageDescription[] = diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index afe0f24f278d3..3e0fe1ba84040 100644 +index dc09da6e1897a..f139e88d67ae1 100644 --- a/chrome/browser/flag_descriptions.h +++ b/chrome/browser/flag_descriptions.h -@@ -22,6 +22,7 @@ +@@ -23,6 +23,7 @@ #include "pdf/buildflags.h" #include "printing/buildflags/buildflags.h" #include "third_party/blink/public/common/buildflags.h" @@ -216,7 +234,7 @@ index afe0f24f278d3..3e0fe1ba84040 100644 // This file declares strings used in chrome://flags. These messages are not // translated, because instead of end-users they target Chromium developers and -@@ -175,6 +176,11 @@ extern const char kDownloadWarningImprovementsDescription[]; +@@ -176,6 +177,11 @@ extern const char kDownloadWarningImprovementsDescription[]; extern const char kEnableBenchmarkingName[]; extern const char kEnableBenchmarkingDescription[]; @@ -228,6 +246,42 @@ index afe0f24f278d3..3e0fe1ba84040 100644 #if BUILDFLAG(USE_FONTATIONS_BACKEND) extern const char kFontationsFontBackendName[]; extern const char kFontationsFontBackendDescription[]; +diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc +index e406d936c277c..0aff4e87587ae 100644 +--- a/chrome/browser/prefs/browser_prefs.cc ++++ b/chrome/browser/prefs/browser_prefs.cc +@@ -189,6 +189,7 @@ + #include "printing/buildflags/buildflags.h" + #include "rlz/buildflags/buildflags.h" + #include "third_party/abseil-cpp/absl/types/optional.h" ++#include "third_party/ipfs_client/ipfs_buildflags.h" + + #if BUILDFLAG(ENABLE_BACKGROUND_MODE) + #include "chrome/browser/background/background_mode_manager.h" +@@ -233,6 +234,11 @@ + #include "chrome/browser/pdf/pdf_pref_names.h" + #endif // BUILDFLAG(ENABLE_PDF) + ++#if BUILDFLAG(ENABLE_IPFS) ++#include "components/ipfs/ipfs_features.h" ++#include "components/ipfs/preferences.h" ++#endif ++ + #if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) + #include "chrome/browser/screen_ai/pref_names.h" + #endif +@@ -1658,6 +1664,11 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, + IncognitoModePrefs::RegisterProfilePrefs(registry); + invalidation::PerUserTopicSubscriptionManager::RegisterProfilePrefs(registry); + invalidation::InvalidatorRegistrarWithMemory::RegisterProfilePrefs(registry); ++#if BUILDFLAG(ENABLE_IPFS) ++ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { ++ ipfs::RegisterPreferences(registry); ++ } ++#endif + language::LanguagePrefs::RegisterProfilePrefs(registry); + login_detection::prefs::RegisterProfilePrefs(registry); + lookalikes::RegisterProfilePrefs(registry); diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc index 246ec9c5c911f..5d66d133a7907 100644 --- a/chrome/common/chrome_content_client.cc @@ -681,7 +735,7 @@ index 4eadf46ea0c24..d62fc7fb14e01 100644 for (auto& scheme : url::GetCorsEnabledSchemes()) cors_enabled_schemes.insert(scheme.c_str()); diff --git a/url/BUILD.gn b/url/BUILD.gn -index c525c166979d6..ce2b1ae43c0a7 100644 +index b5edb89f7698f..d299856674d7d 100644 --- a/url/BUILD.gn +++ b/url/BUILD.gn @@ -5,6 +5,7 @@ @@ -692,7 +746,7 @@ index c525c166979d6..ce2b1ae43c0a7 100644 import("features.gni") import("//build/config/cronet/config.gni") -@@ -67,6 +68,7 @@ component("url") { +@@ -68,6 +69,7 @@ component("url") { public_deps = [ "//base", "//build:robolectric_buildflags", @@ -700,7 +754,7 @@ index c525c166979d6..ce2b1ae43c0a7 100644 ] configs += [ "//build/config/compiler:wexit_time_destructors" ] -@@ -89,6 +91,11 @@ component("url") { +@@ -90,6 +92,11 @@ component("url") { public_configs = [ "//third_party/jdk" ] } @@ -713,10 +767,10 @@ index c525c166979d6..ce2b1ae43c0a7 100644 # Don't conflict with Windows' "url.dll". output_name = "url_lib" diff --git a/url/url_canon.h b/url/url_canon.h -index d3a7fabf09fa8..06db17242248f 100644 +index 8c48f9825d8cf..b9ad961e1b123 100644 --- a/url/url_canon.h +++ b/url/url_canon.h -@@ -697,6 +697,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, +@@ -804,6 +804,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, CanonOutput* output, Parsed* new_parsed); @@ -742,21 +796,17 @@ index d3a7fabf09fa8..06db17242248f 100644 // Internal structure used for storing separate strings for each component. diff --git a/url/url_canon_ipfs.cc b/url/url_canon_ipfs.cc new file mode 100644 -index 0000000000000..da3a5f032b5e8 +index 0000000000000..d7c9fdc78eb91 --- /dev/null +++ b/url/url_canon_ipfs.cc -@@ -0,0 +1,72 @@ +@@ -0,0 +1,55 @@ +#include "url_canon_internal.h" + -+#include ++#include +#include + +#include + -+namespace m = libp2p::multi; -+using Cid = m::ContentIdentifier; -+using CidCodec = m::ContentIdentifierCodec; -+ +bool url::CanonicalizeIpfsURL(const char* spec, + int spec_len, + const Parsed& parsed, @@ -770,37 +820,24 @@ index 0000000000000..da3a5f032b5e8 + if ( parsed.host.len < 1 ) { + return false; + } -+ std::string cid_str{ spec + parsed.host.begin, static_cast(parsed.host.len) }; -+ auto maybe_cid = CidCodec::fromString(cid_str); -+ if ( !maybe_cid.has_value() ) { -+ auto e = libp2p::multi::Stringify(maybe_cid.error()); -+ std::ostringstream err; -+ err << e << ' ' -+ << std::string_view{spec,static_cast(spec_len)}; -+ maybe_cid = ipfs::id_cid::forText( err.str() ); -+ } -+ auto cid = maybe_cid.value(); -+ if ( cid.version == Cid::Version::V0 ) { -+ //TODO dcheck content_type == DAG_PB && content_address.getType() == sha256 -+ cid = Cid{ -+ Cid::Version::V1, -+ cid.content_type, -+ cid.content_address -+ }; ++ std::string_view cid_str{ spec + parsed.host.begin, static_cast(parsed.host.len) }; ++ auto cid = ipfs::Cid(cid_str); ++ if ( !cid.valid() ) { ++ cid = ipfs::id_cid::forText( std::string{cid_str} + " is not a valid CID." ); + } -+ auto as_str = CidCodec::toString(cid); -+ if ( !as_str.has_value() ) { ++ auto as_str = cid.to_string(); ++ if ( as_str.empty() ) { + return false; + } + std::string stdurl{ spec, static_cast(parsed.host.begin) }; -+ stdurl.append( as_str.value() ); ++ stdurl.append( as_str ); + stdurl.append( spec + parsed.host.end(), spec_len - parsed.host.end() ); + spec = stdurl.data(); + spec_len = static_cast(stdurl.size()); + Parsed parsed_input; + ParseStandardURL(spec, spec_len, &parsed_input); + return CanonicalizeStandardURL( -+ spec, spec_len, ++ spec, + parsed_input, + scheme_type, + charset_converter, @@ -819,19 +856,25 @@ index 0000000000000..da3a5f032b5e8 + return CanonicalizeIpfsURL(as8.data(), as8.length(), parsed, scheme_type, query_converter, output, new_parsed); +} diff --git a/url/url_util.cc b/url/url_util.cc -index 9258cfcfada47..daf10e4c3b741 100644 +index 6f83f33c01c6b..a248e11c49445 100644 --- a/url/url_util.cc +++ b/url/url_util.cc -@@ -277,6 +277,12 @@ bool DoCanonicalize(const CHAR* spec, - charset_converter, output, - output_parsed); - +@@ -273,8 +273,15 @@ bool DoCanonicalize(const CHAR* spec, + } else if (DoCompareSchemeComponent(spec, scheme, url::kFileSystemScheme)) { + // Filesystem URLs are special. + ParseFileSystemURL(spec, spec_len, &parsed_input); +- success = CanonicalizeFileSystemURL(spec, parsed_input, charset_converter, +- output, output_parsed); ++ success = CanonicalizeFileSystemURL(spec, parsed_input, ++ charset_converter, output, ++ output_parsed); ++ + } else if (DoCompareSchemeComponent(spec, scheme, "ipfs")) { + // Switch multibase away from case-sensitive ones before continuing canonicalization. + ParseStandardURL(spec, spec_len, &parsed_input); + success = CanonicalizeIpfsURL(spec, spec_len, parsed_input, scheme_type, + charset_converter, output, output_parsed); -+ + } else if (DoIsStandard(spec, scheme, &scheme_type)) { // All "normal" URLs. - ParseStandardURL(spec, spec_len, &parsed_input); + diff --git a/component/patches/2f84c59146681c9207a4610d12669dd4a0603af2.patch b/component/patches/2f84c59146681c9207a4610d12669dd4a0603af2.patch deleted file mode 100644 index 68d44d66..00000000 --- a/component/patches/2f84c59146681c9207a4610d12669dd4a0603af2.patch +++ /dev/null @@ -1,11532 +0,0 @@ -diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn -index a188528a9e262..88df13b162858 100644 ---- a/chrome/browser/BUILD.gn -+++ b/chrome/browser/BUILD.gn -@@ -40,6 +40,7 @@ import("//rlz/buildflags/buildflags.gni") - import("//sandbox/features.gni") - import("//testing/libfuzzer/fuzzer_test.gni") - import("//third_party/blink/public/public_features.gni") -+import("//third_party/ipfs_client/args.gni") - import("//third_party/protobuf/proto_library.gni") - import("//third_party/webrtc/webrtc.gni") - import("//third_party/widevine/cdm/widevine.gni") -@@ -1912,7 +1913,6 @@ static_library("browser") { - "user_education/user_education_service_factory.h", - ] - } -- - configs += [ - "//build/config/compiler:wexit_time_destructors", - "//build/config:precompiled_headers", -@@ -2604,6 +2604,14 @@ static_library("browser") { - ] - } - -+ if (enable_ipfs) { -+ sources += [ -+ "ipfs_extra_parts.cc", -+ "ipfs_extra_parts.h", -+ ] -+ deps += [ "//components/ipfs" ] -+ } -+ - if (is_chromeos_ash) { - deps += [ "//chrome/browser/screen_ai:screen_ai_dlc_installer" ] - } -diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc -index a7907d8b188d8..68a96934ccf48 100644 ---- a/chrome/browser/about_flags.cc -+++ b/chrome/browser/about_flags.cc -@@ -213,6 +213,7 @@ - #include "third_party/blink/public/common/features_generated.h" - #include "third_party/blink/public/common/forcedark/forcedark_switches.h" - #include "third_party/blink/public/common/switches.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" - #include "ui/accessibility/accessibility_features.h" - #include "ui/accessibility/accessibility_switches.h" - #include "ui/base/ui_base_features.h" -@@ -308,6 +309,10 @@ - #include "extensions/common/switches.h" - #endif // BUILDFLAG(ENABLE_EXTENSIONS) - -+#if BUILDFLAG(ENABLE_IPFS) -+#include "components/ipfs/ipfs_features.h" -+#endif -+ - #if BUILDFLAG(ENABLE_PDF) - #include "pdf/pdf_features.h" - #endif -@@ -9731,6 +9736,14 @@ const FeatureEntry kFeatureEntries[] = { - flag_descriptions::kOmitCorsClientCertDescription, kOsAll, - FEATURE_VALUE_TYPE(network::features::kOmitCorsClientCert)}, - -+#if BUILDFLAG(ENABLE_IPFS) -+ {"enable-ipfs", -+ flag_descriptions::kEnableIpfsName, -+ flag_descriptions::kEnableIpfsDescription, -+ kOsMac | kOsWin | kOsLinux,//TODO: These are the only variants currently getting built, but that is not likely to remain the case -+ FEATURE_VALUE_TYPE(ipfs::kEnableIpfs)}, -+#endif -+ - {"use-idna2008-non-transitional", - flag_descriptions::kUseIDNA2008NonTransitionalName, - flag_descriptions::kUseIDNA2008NonTransitionalDescription, kOsAll, -diff --git a/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc b/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc -index 4c88614c68c25..f8bb12a3b0c2e 100644 ---- a/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc -+++ b/chrome/browser/autocomplete/chrome_autocomplete_scheme_classifier.cc -@@ -10,6 +10,8 @@ - #include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" - #include "chrome/browser/external_protocol/external_protocol_handler.h" - #include "chrome/browser/profiles/profile.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" -+ - #if BUILDFLAG(IS_ANDROID) - #include "chrome/browser/profiles/profile_android.h" - #endif -@@ -18,6 +20,9 @@ - #include "chrome/browser/ui/android/omnibox/jni_headers/ChromeAutocompleteSchemeClassifier_jni.h" - #endif - #include "components/custom_handlers/protocol_handler_registry.h" -+#if BUILDFLAG(ENABLE_IPFS) -+#include "components/ipfs/ipfs_features.h" -+#endif - #include "content/public/common/url_constants.h" - #include "url/url_util.h" - -@@ -55,12 +60,20 @@ ChromeAutocompleteSchemeClassifier::GetInputTypeForScheme( - if (scheme.empty()) { - return metrics::OmniboxInputType::EMPTY; - } -- if (base::IsStringASCII(scheme) && -- (ProfileIOData::IsHandledProtocol(scheme) || -- base::EqualsCaseInsensitiveASCII(scheme, content::kViewSourceScheme) || -- base::EqualsCaseInsensitiveASCII(scheme, url::kJavaScriptScheme) || -- base::EqualsCaseInsensitiveASCII(scheme, url::kDataScheme))) { -- return metrics::OmniboxInputType::URL; -+ if (base::IsStringASCII(scheme)) { -+ if (ProfileIOData::IsHandledProtocol(scheme) || -+ base::EqualsCaseInsensitiveASCII(scheme, content::kViewSourceScheme) || -+ base::EqualsCaseInsensitiveASCII(scheme, url::kJavaScriptScheme) || -+ base::EqualsCaseInsensitiveASCII(scheme, url::kDataScheme)) { -+ return metrics::OmniboxInputType::URL; -+ } -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs) && -+ (base::EqualsCaseInsensitiveASCII(scheme, "ipfs") || base::EqualsCaseInsensitiveASCII(scheme, "ipns")) -+ ) { -+ return metrics::OmniboxInputType::URL; -+ } -+#endif - } - - // Also check for schemes registered via registerProtocolHandler(), which -diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc -index d3d67d83a514e..a5b1ef6339211 100644 ---- a/chrome/browser/chrome_content_browser_client.cc -+++ b/chrome/browser/chrome_content_browser_client.cc -@@ -378,6 +378,7 @@ - #include "third_party/blink/public/common/switches.h" - #include "third_party/blink/public/mojom/browsing_topics/browsing_topics.mojom.h" - #include "third_party/blink/public/public_buildflags.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" - #include "third_party/widevine/cdm/buildflags.h" - #include "ui/base/clipboard/clipboard_format_type.h" - #include "ui/base/l10n/l10n_util.h" -@@ -500,6 +501,13 @@ - #include "chrome/browser/fuchsia/chrome_browser_main_parts_fuchsia.h" - #endif - -+#if BUILDFLAG(ENABLE_IPFS) -+#include "chrome/browser/ipfs_extra_parts.h" -+#include "components/ipfs/interceptor.h" -+#include "components/ipfs/ipfs_features.h" -+#include "components/ipfs/url_loader_factory.h" -+#endif -+ - #if BUILDFLAG(IS_CHROMEOS) - #include "base/debug/leak_annotations.h" - #include "chrome/browser/apps/app_service/app_install/app_install_navigation_throttle.h" -@@ -1712,6 +1720,11 @@ ChromeContentBrowserClient::CreateBrowserMainParts(bool is_integration_test) { - main_parts->AddParts( - std::make_unique()); - -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { -+ main_parts->AddParts(std::make_unique()); -+ } -+#endif - return main_parts; - } - -@@ -6084,12 +6097,25 @@ void ChromeContentBrowserClient:: - const absl::optional& request_initiator_origin, - NonNetworkURLLoaderFactoryMap* factories) { - #if BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ -- !BUILDFLAG(IS_ANDROID) -+ !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_IPFS) - content::RenderFrameHost* frame_host = - RenderFrameHost::FromID(render_process_id, render_frame_id); - WebContents* web_contents = WebContents::FromRenderFrameHost(frame_host); - #endif // BUILDFLAG(IS_CHROMEOS_ASH) || BUILDFLAG(ENABLE_EXTENSIONS) || \ -- // !BUILDFLAG(IS_ANDROID) -+ // !BUILDFLAG(IS_ANDROID) || BUILDFLAG(ENABLE_IPFS) -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { -+ network::mojom::URLLoaderFactory* default_factory = g_browser_process->system_network_context_manager()->GetURLLoaderFactory(); -+ auto* context = web_contents->GetBrowserContext(); -+ ipfs::IpfsURLLoaderFactory::Create( -+ factories, -+ context, -+ default_factory, -+ GetSystemNetworkContext(), -+ Profile::FromBrowserContext(context)->GetPrefs() -+ ); -+ } -+#endif // BUILDFLAG(ENABLE_IPFS) - - #if BUILDFLAG(IS_CHROMEOS_ASH) - if (web_contents) { -@@ -6231,6 +6257,11 @@ ChromeContentBrowserClient::WillCreateURLLoaderRequestInterceptors( - scoped_refptr navigation_response_task_runner) { - std::vector> - interceptors; -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { -+ interceptors.push_back(std::make_unique(g_browser_process->system_network_context_manager()->GetURLLoaderFactory(), GetSystemNetworkContext())); -+ } -+#endif - #if BUILDFLAG(ENABLE_OFFLINE_PAGES) - interceptors.push_back( - std::make_unique( -diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json -index 0b51e78fcb8b9..9571b2c92c57f 100644 ---- a/chrome/browser/flag-metadata.json -+++ b/chrome/browser/flag-metadata.json -@@ -2948,6 +2948,11 @@ - "owners": [ "hanxi@chromium.org", "wychen@chromium.org" ], - "expiry_milestone": 130 - }, -+ { -+ "name": "enable-ipfs", -+ "owners": [ "//components/ipfs/OWNERS" ], -+ "expiry_milestone": 150 -+ }, - { - "name": "enable-isolated-sandboxed-iframes", - "owners": [ "wjmaclean@chromium.org", "alexmos@chromium.org", "creis@chromium.org" ], -diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc -index b2992e30f9811..f92d8a322b634 100644 ---- a/chrome/browser/flag_descriptions.cc -+++ b/chrome/browser/flag_descriptions.cc -@@ -288,6 +288,11 @@ const char kEnableBenchmarkingDescription[] = - "after 3 restarts. On the third restart, the flag will appear to be off " - "but the effect is still active."; - -+#if BUILDFLAG(ENABLE_IPFS) -+extern const char kEnableIpfsName[] = "Enable IPFS"; -+extern const char kEnableIpfsDescription[] = "Enable ipfs:// and ipns:// URLs"; -+#endif -+ - const char kPreloadingOnPerformancePageName[] = - "Preloading Settings on Performance Page"; - const char kPreloadingOnPerformancePageDescription[] = -diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h -index ad76d832395a1..438facecff519 100644 ---- a/chrome/browser/flag_descriptions.h -+++ b/chrome/browser/flag_descriptions.h -@@ -23,6 +23,7 @@ - #include "pdf/buildflags.h" - #include "printing/buildflags/buildflags.h" - #include "third_party/blink/public/common/buildflags.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" - - // This file declares strings used in chrome://flags. These messages are not - // translated, because instead of end-users they target Chromium developers and -@@ -179,6 +180,11 @@ extern const char kDownloadWarningImprovementsDescription[]; - extern const char kEnableBenchmarkingName[]; - extern const char kEnableBenchmarkingDescription[]; - -+#if BUILDFLAG(ENABLE_IPFS) -+extern const char kEnableIpfsName[]; -+extern const char kEnableIpfsDescription[]; -+#endif -+ - #if BUILDFLAG(USE_FONTATIONS_BACKEND) - extern const char kFontationsFontBackendName[]; - extern const char kFontationsFontBackendDescription[]; -diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc -index fc9fcf1ff478a..800961b3c8767 100644 ---- a/chrome/browser/prefs/browser_prefs.cc -+++ b/chrome/browser/prefs/browser_prefs.cc -@@ -190,6 +190,7 @@ - #include "printing/buildflags/buildflags.h" - #include "rlz/buildflags/buildflags.h" - #include "third_party/abseil-cpp/absl/types/optional.h" -+#include "third_party/ipfs_client/ipfs_buildflags.h" - - #if BUILDFLAG(ENABLE_BACKGROUND_MODE) - #include "chrome/browser/background/background_mode_manager.h" -@@ -241,6 +242,11 @@ - #include "chrome/browser/pdf/pdf_pref_names.h" - #endif // BUILDFLAG(ENABLE_PDF) - -+#if BUILDFLAG(ENABLE_IPFS) -+#include "components/ipfs/ipfs_features.h" -+#include "components/ipfs/preferences.h" -+#endif -+ - #if BUILDFLAG(ENABLE_SCREEN_AI_SERVICE) - #include "chrome/browser/screen_ai/pref_names.h" - #endif -@@ -1658,6 +1664,11 @@ void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry, - IncognitoModePrefs::RegisterProfilePrefs(registry); - invalidation::PerUserTopicSubscriptionManager::RegisterProfilePrefs(registry); - invalidation::InvalidatorRegistrarWithMemory::RegisterProfilePrefs(registry); -+#if BUILDFLAG(ENABLE_IPFS) -+ if (base::FeatureList::IsEnabled(ipfs::kEnableIpfs)) { -+ ipfs::RegisterPreferences(registry); -+ } -+#endif - language::LanguagePrefs::RegisterProfilePrefs(registry); - login_detection::prefs::RegisterProfilePrefs(registry); - lookalikes::RegisterProfilePrefs(registry); -diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc -index 246ec9c5c911f..5d66d133a7907 100644 ---- a/chrome/common/chrome_content_client.cc -+++ b/chrome/common/chrome_content_client.cc -@@ -296,6 +296,12 @@ void ChromeContentClient::AddAdditionalSchemes(Schemes* schemes) { - #if BUILDFLAG(IS_ANDROID) - schemes->local_schemes.push_back(url::kContentScheme); - #endif -+ for ( const char* ip_s : {"ipfs", "ipns"} ) { -+ schemes->standard_schemes.push_back(ip_s); -+ schemes->cors_enabled_schemes.push_back(ip_s); -+ schemes->secure_schemes.push_back(ip_s); -+ schemes->csp_bypassing_schemes.push_back(ip_s); -+ } - } - - std::u16string ChromeContentClient::GetLocalizedString(int message_id) { -diff --git a/components/cbor/reader.cc b/components/cbor/reader.cc -index 306ba52fa4944..6b13b3a679a65 100644 ---- a/components/cbor/reader.cc -+++ b/components/cbor/reader.cc -@@ -22,7 +22,7 @@ - namespace cbor { - - namespace constants { --const char kUnsupportedMajorType[] = "Unsupported major type."; -+const char kUnsupportedMajorType[] = "Unsupported major type operation."; - } - - namespace { -@@ -156,7 +156,11 @@ absl::optional Reader::DecodeCompleteDataItem(const Config& config, - case Value::Type::FLOAT_VALUE: - // Floating point values also go here since they are also type 7. - return DecodeToSimpleValueOrFloat(*header, config); -- case Value::Type::TAG: // We explicitly don't support TAG. -+ case Value::Type::TAG: -+ if (config.parse_tags) { -+ return ReadTagContent(*header, config, max_nesting_level); -+ } -+ break; - case Value::Type::NONE: - case Value::Type::INVALID_UTF8: - break; -@@ -347,6 +351,17 @@ absl::optional Reader::ReadByteStringContent( - return Value(std::move(cbor_byte_string)); - } - -+absl::optional Reader::ReadTagContent( -+ const Reader::DataItemHeader& header, -+ const Config& config, -+ int max_nesting_level) { -+ auto tagged_content = DecodeCompleteDataItem(config, max_nesting_level); -+ if (tagged_content.has_value()) { -+ tagged_content.value().SetTag(header.value); -+ } -+ return tagged_content; -+} -+ - absl::optional Reader::ReadArrayContent( - const Reader::DataItemHeader& header, - const Config& config, -diff --git a/components/cbor/reader.h b/components/cbor/reader.h -index f0b43a5517528..a57e277a1bc66 100644 ---- a/components/cbor/reader.h -+++ b/components/cbor/reader.h -@@ -130,6 +130,11 @@ class CBOR_EXPORT Reader { - // during decoding will set raise the `UNSUPPORTED_FLOATING_POINT_VALUE` - // error. - bool allow_floating_point = false; -+ -+ // If the parser encounters a TAG element, should it be parsed out and -+ // the tag value saved (true), or should the entire node and its content -+ // be discarded (false) -+ bool parse_tags = false; - }; - - Reader(const Reader&) = delete; -@@ -204,6 +209,9 @@ class CBOR_EXPORT Reader { - absl::optional ReadMapContent(const DataItemHeader& header, - const Config& config, - int max_nesting_level); -+ absl::optional ReadTagContent(const DataItemHeader& header, -+ const Config& config, -+ int max_nesting_level); - absl::optional ReadByte(); - absl::optional> ReadBytes(uint64_t num_bytes); - bool IsKeyInOrder(const Value& new_key, -diff --git a/components/cbor/reader_unittest.cc b/components/cbor/reader_unittest.cc -index 83d44a48d6dfa..a6ec5299b3241 100644 ---- a/components/cbor/reader_unittest.cc -+++ b/components/cbor/reader_unittest.cc -@@ -1451,5 +1451,42 @@ TEST(CBORReaderTest, AllowInvalidUTF8) { - EXPECT_FALSE(cbor); - EXPECT_EQ(Reader::DecoderError::INVALID_UTF8, error); - } -+TEST(CBORReaderTest, RejectsTagUnderDefaultConfig) { -+ static const uint8_t kTaggedCbor[] = { -+ 0xd8, 0x2a, 0x58, 0x25, 0x00, 0x01, 0x71, 0x12, 0x20, 0x69, 0xea, 0x07, -+ 0x40, 0xf9, 0x80, 0x7a, 0x28, 0xf4, 0xd9, 0x32, 0xc6, 0x2e, 0x7c, 0x1c, -+ 0x83, 0xbe, 0x05, 0x5e, 0x55, 0x07, 0x2c, 0x90, 0x26, 0x6a, 0xb3, 0xe7, -+ 0x9d, 0xf6, 0x3a, 0x36, 0x5b -+ }; -+ Reader::Config config; -+ absl::optional cbor = Reader::Read(kTaggedCbor, config); -+ EXPECT_FALSE(cbor.has_value()); -+} -+TEST(CBORReaderTest, ReadsTagWhenConfiguredToDoSo) { -+ static const uint8_t kTaggedCbor[] = { -+ 0xd8, 0x2a, 0x58, 0x25, 0x00, 0x01, 0x71, 0x12, 0x20, 0x69, 0xea, 0x07, -+ 0x40, 0xf9, 0x80, 0x7a, 0x28, 0xf4, 0xd9, 0x32, 0xc6, 0x2e, 0x7c, 0x1c, -+ 0x83, 0xbe, 0x05, 0x5e, 0x55, 0x07, 0x2c, 0x90, 0x26, 0x6a, 0xb3, 0xe7, -+ 0x9d, 0xf6, 0x3a, 0x36, 0x5b -+ }; -+ Reader::Config config; -+ config.parse_tags = true; -+ absl::optional cbor = Reader::Read(kTaggedCbor, config); -+ EXPECT_TRUE(cbor.has_value()); -+ auto& v = cbor.value(); -+ EXPECT_TRUE(v.has_tag()); -+ EXPECT_EQ(v.GetTag(),42UL); -+ EXPECT_TRUE(v.is_bytestring()); -+ EXPECT_EQ(v.type(), Value::Type::BYTE_STRING); -+ auto& bytes = v.GetBytestring(); -+ EXPECT_EQ(bytes.size(), 37UL); -+ EXPECT_EQ(bytes.at(0), 0x00);//identity multibase (e.g. not base-encoded, bytes are themselves) -+ EXPECT_EQ(bytes.at(1), 0x01);//CID version 1 -+ EXPECT_EQ(bytes.at(2), 0x71);//codec = dag-cbor -+ EXPECT_EQ(bytes.at(3), 0x12);//multihash = 18 = sha2-256 -+ EXPECT_EQ(bytes.at(4), 0x20);//hash length = 32 bytes -+ EXPECT_EQ(bytes.at(5), 0x69);//first byte of hash digest -+ EXPECT_EQ(bytes.at(36),0x5b);//last byte of hash digest -+} - - } // namespace cbor -diff --git a/components/cbor/values.cc b/components/cbor/values.cc -index 02498209c820e..34055aef24cfe 100644 ---- a/components/cbor/values.cc -+++ b/components/cbor/values.cc -@@ -66,32 +66,34 @@ Value::Value(Type type) : type_(type) { - NOTREACHED(); - } - --Value::Value(SimpleValue in_simple) -- : type_(Type::SIMPLE_VALUE), simple_value_(in_simple) { -+Value::Value(SimpleValue in_simple, uint64_t tag) -+ : type_(Type::SIMPLE_VALUE), simple_value_(in_simple), tag_(tag) { - CHECK(static_cast(in_simple) >= 20 && static_cast(in_simple) <= 23); - } - --Value::Value(bool boolean_value) : type_(Type::SIMPLE_VALUE) { -+Value::Value(bool boolean_value, uint64_t tag) : type_(Type::SIMPLE_VALUE), tag_(tag) { - simple_value_ = boolean_value ? Value::SimpleValue::TRUE_VALUE - : Value::SimpleValue::FALSE_VALUE; - } - --Value::Value(double float_value) -- : type_(Type::FLOAT_VALUE), float_value_(float_value) {} -+Value::Value(double float_value, uint64_t tag) -+ : type_(Type::FLOAT_VALUE), float_value_(float_value), tag_(tag) {} - --Value::Value(int integer_value) -- : Value(base::checked_cast(integer_value)) {} -+Value::Value(int integer_value, uint64_t tag) -+ : Value(base::checked_cast(integer_value), tag) {} - --Value::Value(int64_t integer_value) : integer_value_(integer_value) { -+Value::Value(int64_t integer_value, uint64_t tag) : integer_value_(integer_value), tag_(tag) { - type_ = integer_value >= 0 ? Type::UNSIGNED : Type::NEGATIVE; - } - --Value::Value(base::span in_bytes) -+Value::Value(base::span in_bytes, uint64_t tag) - : type_(Type::BYTE_STRING), -- bytestring_value_(in_bytes.begin(), in_bytes.end()) {} -+ bytestring_value_(in_bytes.begin(), in_bytes.end()), -+ tag_(tag) -+ {} - --Value::Value(base::span in_bytes, Type type) -- : type_(type), bytestring_value_(in_bytes.begin(), in_bytes.end()) { -+Value::Value(base::span in_bytes, Type type, uint64_t tag) -+ : type_(type), bytestring_value_(in_bytes.begin(), in_bytes.end()), tag_(tag) { - DCHECK(type_ == Type::BYTE_STRING || type_ == Type::INVALID_UTF8); - } - -@@ -117,7 +119,8 @@ Value::Value(std::string&& in_string, Type type) noexcept : type_(type) { - } - } - --Value::Value(base::StringPiece in_string, Type type) : type_(type) { -+Value::Value(base::StringPiece in_string, Type type, uint64_t tag) -+: type_(type), tag_(tag) { - switch (type_) { - case Type::STRING: - new (&string_value_) std::string(); -@@ -133,16 +136,18 @@ Value::Value(base::StringPiece in_string, Type type) : type_(type) { - } - } - --Value::Value(const ArrayValue& in_array) : type_(Type::ARRAY), array_value_() { -+Value::Value(const ArrayValue& in_array, uint64_t tag) -+: type_(Type::ARRAY), array_value_(), tag_(tag) { - array_value_.reserve(in_array.size()); - for (const auto& val : in_array) - array_value_.emplace_back(val.Clone()); - } - --Value::Value(ArrayValue&& in_array) noexcept -- : type_(Type::ARRAY), array_value_(std::move(in_array)) {} -+Value::Value(ArrayValue&& in_array, uint64_t tag) noexcept -+ : type_(Type::ARRAY), array_value_(std::move(in_array)), tag_(tag) {} - --Value::Value(const MapValue& in_map) : type_(Type::MAP), map_value_() { -+Value::Value(const MapValue& in_map, uint64_t tag) -+: type_(Type::MAP), map_value_(), tag_(tag) { - map_value_.reserve(in_map.size()); - for (const auto& it : in_map) - map_value_.emplace_hint(map_value_.end(), it.first.Clone(), -@@ -168,31 +173,36 @@ Value Value::Clone() const { - case Type::NONE: - return Value(); - case Type::INVALID_UTF8: -- return Value(bytestring_value_, Type::INVALID_UTF8); -+ return Value(bytestring_value_, Type::INVALID_UTF8, tag_); - case Type::UNSIGNED: - case Type::NEGATIVE: -- return Value(integer_value_); -+ return Value(integer_value_, tag_); - case Type::BYTE_STRING: -- return Value(bytestring_value_); -+ return Value(bytestring_value_, tag_); - case Type::STRING: -- return Value(string_value_); -+ return Value(string_value_, Type::STRING, tag_); - case Type::ARRAY: -- return Value(array_value_); -+ return Value(array_value_, tag_); - case Type::MAP: -- return Value(map_value_); -+ return Value(map_value_, tag_); - case Type::TAG: - NOTREACHED() << constants::kUnsupportedMajorType; - return Value(); - case Type::SIMPLE_VALUE: -- return Value(simple_value_); -+ return Value(simple_value_, tag_); - case Type::FLOAT_VALUE: -- return Value(float_value_); -+ return Value(float_value_, tag_); - } - - NOTREACHED(); - return Value(); - } - -+Value& Value::SetTag(uint64_t tag) noexcept { -+ tag_ = tag; -+ return *this; -+} -+ - Value::SimpleValue Value::GetSimpleValue() const { - CHECK(is_simple()); - return simple_value_; -@@ -258,9 +268,14 @@ const Value::BinaryValue& Value::GetInvalidUTF8() const { - return bytestring_value_; - } - -+uint64_t Value::GetTag() const { -+ CHECK(has_tag()); -+ return tag_; -+} -+ - void Value::InternalMoveConstructFrom(Value&& that) { - type_ = that.type_; -- -+ tag_ = that.tag_; - switch (type_) { - case Type::UNSIGNED: - case Type::NEGATIVE: -diff --git a/components/cbor/values.h b/components/cbor/values.h -index d81ef5607c55a..10216a8dcdc57 100644 ---- a/components/cbor/values.h -+++ b/components/cbor/values.h -@@ -127,28 +127,29 @@ class CBOR_EXPORT Value { - - explicit Value(Type type); - -- explicit Value(SimpleValue in_simple); -- explicit Value(bool boolean_value); -- explicit Value(double in_float); -+ explicit Value(SimpleValue in_simple, uint64_t tag = NO_TAG); -+ explicit Value(bool boolean_value, uint64_t tag = NO_TAG); -+ explicit Value(double in_float, uint64_t tag = NO_TAG); - -- explicit Value(int integer_value); -- explicit Value(int64_t integer_value); -+ explicit Value(int integer_value, uint64_t tag = NO_TAG); -+ explicit Value(int64_t integer_value, uint64_t tag = NO_TAG); - explicit Value(uint64_t integer_value) = delete; - -- explicit Value(base::span in_bytes); -+ explicit Value(base::span in_bytes, uint64_t tag = NO_TAG); - explicit Value(BinaryValue&& in_bytes) noexcept; - - explicit Value(const char* in_string, Type type = Type::STRING); - explicit Value(std::string&& in_string, Type type = Type::STRING) noexcept; -- explicit Value(base::StringPiece in_string, Type type = Type::STRING); -+ explicit Value(base::StringPiece in_string, Type type = Type::STRING, uint64_t tag = NO_TAG); - -- explicit Value(const ArrayValue& in_array); -- explicit Value(ArrayValue&& in_array) noexcept; -+ explicit Value(const ArrayValue& in_array, uint64_t tag = NO_TAG); -+ explicit Value(ArrayValue&& in_array, uint64_t tag = NO_TAG) noexcept; - -- explicit Value(const MapValue& in_map); -+ explicit Value(const MapValue& in_map, uint64_t tag = NO_TAG); - explicit Value(MapValue&& in_map) noexcept; - - Value& operator=(Value&& that) noexcept; -+ Value& SetTag(uint64_t) noexcept; - - Value(const Value&) = delete; - Value& operator=(const Value&) = delete; -@@ -179,6 +180,7 @@ class CBOR_EXPORT Value { - bool is_string() const { return type() == Type::STRING; } - bool is_array() const { return type() == Type::ARRAY; } - bool is_map() const { return type() == Type::MAP; } -+ bool has_tag() const { return tag_ != NO_TAG; } - - // These will all fatally assert if the type doesn't match. - SimpleValue GetSimpleValue() const; -@@ -194,12 +196,13 @@ class CBOR_EXPORT Value { - const ArrayValue& GetArray() const; - const MapValue& GetMap() const; - const BinaryValue& GetInvalidUTF8() const; -+ uint64_t GetTag() const; - - private: - friend class Reader; - // This constructor allows INVALID_UTF8 values to be created, which only - // |Reader| and InvalidUTF8StringValueForTesting() may do. -- Value(base::span in_bytes, Type type); -+ Value(base::span in_bytes, Type type, uint64_t tag = NO_TAG); - - Type type_; - -@@ -213,6 +216,11 @@ class CBOR_EXPORT Value { - MapValue map_value_; - }; - -+ //This value specified as Invalid, -+ // used here to represent absence of TAG -+ constexpr static uint64_t NO_TAG = 0xFFFF; -+ uint64_t tag_ = NO_TAG; -+ - void InternalMoveConstructFrom(Value&& that); - void InternalCleanup(); - }; -diff --git a/components/cbor/writer.cc b/components/cbor/writer.cc -index bb22754d36a07..aae4027836377 100644 ---- a/components/cbor/writer.cc -+++ b/components/cbor/writer.cc -@@ -47,6 +47,9 @@ bool Writer::EncodeCBOR(const Value& node, - if (max_nesting_level < 0) - return false; - -+ if (node.has_tag()) { -+ StartItem(Value::Type::TAG, node.GetTag()); -+ } - switch (node.type()) { - case Value::Type::NONE: { - StartItem(Value::Type::BYTE_STRING, 0); -diff --git a/components/cbor/writer_unittest.cc b/components/cbor/writer_unittest.cc -index e3bffe20734bc..0ed569ae164a0 100644 ---- a/components/cbor/writer_unittest.cc -+++ b/components/cbor/writer_unittest.cc -@@ -522,4 +522,31 @@ TEST(CBORWriterTest, OverlyNestedCBOR) { - EXPECT_FALSE(Writer::Write(Value(map), 4).has_value()); - } - -+TEST(CBORWriterTest, CanWriteTag) { -+ std::array content{ -+ 0x00, 0x01, 0x71, 0x12, 0x20, -+ 0x69, 0xea, 0x07, 0x40, 0xf9, -+ 0x80, 0x7a, 0x28, 0xf4, 0xd9, -+ 0x32, 0xc6, 0x2e, 0x7c, 0x1c, -+ 0x83, 0xbe, 0x05, 0x5e, 0x55, -+ 0x07, 0x2c, 0x90, 0x26, 0x6a, -+ 0xb3, 0xe7, 0x9d, 0xf6, 0x3a, -+ 0x36, 0x5b -+ }; -+ Value to_write(content); -+ to_write.SetTag(42); -+ auto result = Writer::Write(to_write); -+ EXPECT_TRUE(result.has_value()); -+ auto& bytes = result.value(); -+ EXPECT_EQ(bytes.size(), 41UL); -+ EXPECT_EQ(bytes.at(0), 0xd8); -+ EXPECT_EQ(bytes.at(1), 0x2a); -+ EXPECT_EQ(bytes.at(2), 0x58); -+ EXPECT_EQ(bytes.at(3), 0x25); -+ for (auto i = 0UL; i < content.size(); ++i) { -+ ASSERT_LT(i + 4UL, bytes.size()); -+ ASSERT_EQ(content.at(i), bytes.at(i+4UL)); -+ } -+} -+ - } // namespace cbor -diff --git a/components/ipfs/BUILD.gn b/components/ipfs/BUILD.gn -new file mode 100644 -index 0000000000000..572e93e493e7a ---- /dev/null -+++ b/components/ipfs/BUILD.gn -@@ -0,0 +1,62 @@ -+import("//testing/test.gni") -+import("//third_party/ipfs_client/args.gni") -+ -+if (enable_ipfs) { -+ -+ component("ipfs") { -+ sources = [ -+ "block_http_request.cc", -+ "block_http_request.h", -+ "cache_requestor.cc", -+ "cache_requestor.h", -+ "chromium_cbor_adapter.cc", -+ "chromium_cbor_adapter.h", -+ "chromium_ipfs_context.cc", -+ "chromium_ipfs_context.h", -+ "chromium_json_adapter.cc", -+ "chromium_json_adapter.h", -+ "crypto_api.cc", -+ "crypto_api.h", -+ "dns_txt_request.cc", -+ "dns_txt_request.h", -+ "export.h", -+ "inter_request_state.cc", -+ "inter_request_state.h", -+ "interceptor.cc", -+ "interceptor.h", -+ "ipfs_features.cc", -+ "ipfs_features.h", -+ "ipfs_url_loader.cc", -+ "ipfs_url_loader.h", -+ "preferences.cc", -+ "preferences.h", -+ "url_loader_factory.cc", -+ "url_loader_factory.h", -+ ] -+ defines = [ ] -+ include_dirs = [ -+ ".", -+ "ipfs_client", -+ "ipfs_client/unix_fs", -+ ] -+ deps = [ -+ "//content", -+ "//crypto", -+ "//base", -+ "//components/cbor", -+ "//components/prefs", -+ "//components/webcrypto:webcrypto", -+ "//mojo/public/cpp/bindings", -+ "//services/network:network_service", -+ "//services/network/public/cpp:cpp", -+ "//services/network/public/mojom:url_loader_base", -+ "//url", -+ "//third_party/blink/public:blink", -+ ] -+ public_deps = [ -+ "//third_party/ipfs_client", -+ ] -+ defines = [ "IS_IPFS_IMPL" ] -+ } -+ -+} -diff --git a/components/ipfs/README.md b/components/ipfs/README.md -new file mode 100644 -index 0000000000000..1333ed77b7e1e ---- /dev/null -+++ b/components/ipfs/README.md -@@ -0,0 +1 @@ -+TODO -diff --git a/components/ipfs/block_http_request.cc b/components/ipfs/block_http_request.cc -new file mode 100644 -index 0000000000000..c48ddd8f77c8d ---- /dev/null -+++ b/components/ipfs/block_http_request.cc -@@ -0,0 +1,102 @@ -+#include "block_http_request.h" -+ -+#include -+#include -+#include -+ -+using Self = ipfs::BlockHttpRequest; -+ -+namespace { -+constexpr net::NetworkTrafficAnnotationTag kTrafficAnnotation = -+ net::DefineNetworkTrafficAnnotation("ipfs_gateway_request", R"( -+ semantics { -+ sender: "IPFS component" -+ description: -+ "Sends a request to an IPFS gateway." -+ trigger: -+ "Processing of an ipfs:// or ipns:// URL." -+ data: "None" -+ destination: WEBSITE -+ } -+ policy { -+ cookies_allowed: NO -+ setting: "EnableIpfs" -+ } -+ )"); -+} -+ -+Self::BlockHttpRequest(ipfs::HttpRequestDescription req_inf, -+ HttpCompleteCallback cb) -+ : inf_{req_inf}, callback_{cb} {} -+Self::~BlockHttpRequest() noexcept {} -+ -+void Self::send(raw_ptr loader_factory) { -+ auto req = std::make_unique(); -+ req->url = GURL{inf_.url}; -+ req->priority = net::HIGHEST; // TODO -+ if (!inf_.accept.empty()) { -+ req->headers.SetHeader("Accept", inf_.accept); -+ } -+ using L = network::SimpleURLLoader; -+ loader_ = L::Create(std::move(req), kTrafficAnnotation, FROM_HERE); -+ loader_->SetTimeoutDuration(base::Seconds(inf_.timeout_seconds)); -+ loader_->SetAllowHttpErrorResults(true); -+ loader_->SetOnResponseStartedCallback( -+ base::BindOnce(&Self::OnResponseHead, base::Unretained(this))); -+ auto bound = base::BindOnce(&Self::OnResponse, base::Unretained(this), -+ shared_from_this()); -+ DCHECK(loader_factory); -+ if (auto sz = inf_.max_response_size) { -+ loader_->DownloadToString(loader_factory, std::move(bound), sz.value()); -+ } else { -+ loader_->DownloadToStringOfUnboundedSizeUntilCrashAndDie(loader_factory, -+ std::move(bound)); -+ } -+} -+void Self::OnResponse(std::shared_ptr, -+ std::unique_ptr body) { -+ DCHECK(loader_); -+ int status; -+ switch (loader_->NetError()) { -+ case net::Error::OK: -+ status = 200; -+ break; -+ case net::Error::ERR_TIMED_OUT: -+ VLOG(2) << "HTTP request timed out: " << inf_.url << " after " -+ << inf_.timeout_seconds << "s."; -+ status = 408; -+ break; -+ default: -+ VLOG(2) << "NetErr " << loader_->NetError() << " for " << inf_.url; -+ status = 500; -+ } -+ // auto sz = body ? body->size() : 0UL; -+ auto const* head = loader_->ResponseInfo(); -+ if (head) { -+ OnResponseHead({}, *head); -+ } -+ auto sp = status_line_.find(' '); -+ if (sp < status_line_.size()) { -+ VLOG(2) << "HTTP response status='" << status_line_ << "'."; -+ status = std::atoi(status_line_.c_str() + sp + 1); -+ } -+ if (body) { -+ callback_(status, *body, header_accessor_); -+ } else { -+ callback_(status, "", header_accessor_); -+ } -+} -+void Self::OnResponseHead( -+ GURL const&, -+ network::mojom::URLResponseHead const& response_head) { -+ if (!response_head.headers) { -+ return; -+ } -+ auto head = response_head.headers; -+ status_line_ = head->GetStatusLine(); -+ header_accessor_ = [head](std::string_view k) { -+ std::string val; -+ head->EnumerateHeader(nullptr, k, &val); -+ return val; -+ }; -+} -diff --git a/components/ipfs/block_http_request.h b/components/ipfs/block_http_request.h -new file mode 100644 -index 0000000000000..a34d88b7a54cf ---- /dev/null -+++ b/components/ipfs/block_http_request.h -@@ -0,0 +1,46 @@ -+#ifndef IPFS_BLOCK_HTTP_REQUEST_H_ -+#define IPFS_BLOCK_HTTP_REQUEST_H_ -+ -+#include -+ -+#include -+#include -+ -+namespace network { -+struct ResourceRequest; -+class SimpleURLLoader; -+} // namespace network -+namespace network::mojom { -+class URLLoaderFactory; -+class URLResponseHead; -+} // namespace network::mojom -+class GURL; -+ -+namespace ipfs { -+class BlockHttpRequest : public std::enable_shared_from_this { -+ // TODO ween oneself off of SimpleURLLoader -+ // std::array buffer_; -+ std::unique_ptr loader_; -+ -+ public: -+ using HttpCompleteCallback = ipfs::ContextApi::HttpCompleteCallback; -+ BlockHttpRequest(ipfs::HttpRequestDescription, HttpCompleteCallback); -+ ~BlockHttpRequest() noexcept; -+ -+ void send(raw_ptr); -+ -+ private: -+ ipfs::HttpRequestDescription const inf_; -+ HttpCompleteCallback callback_; -+ std::string status_line_; -+ ContextApi::HeaderAccess header_accessor_ = [](auto) { -+ return std::string{}; -+ }; -+ -+ void OnResponseHead(GURL const&, network::mojom::URLResponseHead const&); -+ void OnResponse(std::shared_ptr, -+ std::unique_ptr body); -+}; -+} // namespace ipfs -+ -+#endif // IPFS_BLOCK_HTTP_REQUEST_H_ -diff --git a/components/ipfs/cache_requestor.cc b/components/ipfs/cache_requestor.cc -new file mode 100644 -index 0000000000000..ce446b608080a ---- /dev/null -+++ b/components/ipfs/cache_requestor.cc -@@ -0,0 +1,219 @@ -+#include "cache_requestor.h" -+ -+#include "chromium_ipfs_context.h" -+#include "inter_request_state.h" -+ -+#include -+#include -+ -+using Self = ipfs::CacheRequestor; -+namespace dc = disk_cache; -+ -+std::string_view Self::name() const { -+ return "Disk Cache"; -+} -+Self::CacheRequestor(InterRequestState& state, base::FilePath base) -+ : state_{state} { -+ if (!base.empty()) { -+ path_ = base.AppendASCII("IpfsBlockCache"); -+ } -+ Start(); -+} -+void Self::Start() { -+ if (pending_) { -+ return; -+ } -+ auto result = dc::CreateCacheBackend( -+ net::CacheType::DISK_CACHE, net::CACHE_BACKEND_DEFAULT, {}, path_, 0, -+ dc::ResetHandling::kNeverReset, -+ // dc::ResetHandling::kResetOnError, -+ nullptr, base::BindOnce(&Self::Assign, base::Unretained(this))); -+ LOG(INFO) << "Start(" << result.net_error << ')' << result.net_error; -+ pending_ = result.net_error == net::ERR_IO_PENDING; -+ if (!pending_) { -+ Assign(std::move(result)); -+ } -+} -+Self::~CacheRequestor() noexcept = default; -+ -+void Self::Assign(dc::BackendResult res) { -+ pending_ = false; -+ if (res.net_error == net::OK) { -+ LOG(INFO) << "Initialized disk cache"; -+ cache_.swap(res.backend); -+ } else { -+ LOG(ERROR) << "Trouble opening " << name() << ": " << res.net_error; -+ Start(); -+ } -+} -+auto Self::handle(RequestPtr req) -> HandleOutcome { -+ if (pending_) { -+ return HandleOutcome::NOT_HANDLED; -+ } -+ Task task; -+ task.key = req->main_param; -+ task.request = req; -+ StartFetch(task, net::MAXIMUM_PRIORITY); -+ return HandleOutcome::PENDING; -+} -+void Self::StartFetch(Task& task, net::RequestPriority priority) { -+ if (pending_) { -+ Start(); -+ Miss(task); -+ return; -+ } -+ auto bound = base::BindOnce(&Self::OnOpen, base::Unretained(this), task); -+ auto res = cache_->OpenEntry(task.key, priority, std::move(bound)); -+ if (res.net_error() != net::ERR_IO_PENDING) { -+ OnOpen(task, std::move(res)); -+ } -+} -+void Self::Miss(Task& task) { -+ if (task.request) { -+ VLOG(2) << "Cache miss on " << task.request->debug_string(); -+ auto req = task.request; -+ task.request->Hook([this, req](std::string_view bytes) { -+ Store(req->main_param, "TODO", std::string{bytes}); -+ }); -+ forward(req); -+ } -+} -+namespace { -+std::shared_ptr GetEntry(dc::EntryResult& result) { -+ auto* e = result.ReleaseEntry(); -+ auto deleter = [](auto e) { -+ if (e) { -+ e->Close(); -+ } -+ }; -+ return {e, deleter}; -+} -+} // namespace -+ -+void Self::OnOpen(Task task, dc::EntryResult res) { -+ VLOG(2) << "OnOpen(" << res.net_error() << ")"; -+ if (res.net_error() != net::OK) { -+ VLOG(2) << "Failed to find " << task.key << " in " << name(); -+ Miss(task); -+ return; -+ } -+ task.entry = GetEntry(res); -+ DCHECK(task.entry); -+ task.buf = base::MakeRefCounted(2 * 1024 * 1024); -+ DCHECK(task.buf); -+ auto bound = -+ base::BindOnce(&Self::OnHeaderRead, base::Unretained(this), task); -+ auto code = task.entry->ReadData(0, 0, task.buf.get(), task.buf->size(), -+ std::move(bound)); -+ if (code != net::ERR_IO_PENDING) { -+ OnHeaderRead(task, code); -+ } -+} -+void Self::OnHeaderRead(Task task, int code) { -+ if (code <= 0) { -+ LOG(ERROR) << "Failed to read headers for entry " << task.key << " in " -+ << name() << " " << code; -+ // Miss(task); -+ // return; -+ } -+ task.header.assign(task.buf->data(), static_cast(code)); -+ auto bound = base::BindOnce(&Self::OnBodyRead, base::Unretained(this), task); -+ code = task.entry->ReadData(1, 0, task.buf.get(), task.buf->size(), -+ std::move(bound)); -+ if (code != net::ERR_IO_PENDING) { -+ OnBodyRead(task, code); -+ } -+} -+void Self::OnBodyRead(Task task, int code) { -+ if (code <= 0) { -+ LOG(INFO) << "Failed to read body for entry " << task.key << " in " -+ << name(); -+ Miss(task); -+ return; -+ } -+ task.body.assign(task.buf->data(), static_cast(code)); -+ if (task.request) { -+ task.SetHeaders(name()); -+ if (task.request->RespondSuccessfully(task.body, api_)) { -+ VLOG(2) << "Cache hit on " << task.key << " for " -+ << task.request->debug_string(); -+ } else { -+ LOG(ERROR) << "Had a BAD cached response for " << task.key; -+ Expire(task.key); -+ Miss(task); -+ } -+ } -+} -+void Self::Store(std::string cid, std::string headers, std::string body) { -+ VLOG(1) << "Store(" << name() << ',' << cid << ',' << headers.size() << ',' -+ << body.size() << ')'; -+ auto bound = base::BindOnce(&Self::OnEntryCreated, base::Unretained(this), -+ cid, headers, body); -+ auto res = cache_->OpenOrCreateEntry(cid, net::LOW, std::move(bound)); -+ if (res.net_error() != net::ERR_IO_PENDING) { -+ OnEntryCreated(cid, headers, body, std::move(res)); -+ } -+} -+void Self::OnEntryCreated(std::string cid, -+ std::string headers, -+ std::string body, -+ disk_cache::EntryResult result) { -+ if (result.opened()) { -+ VLOG(1) << "No need to write an entry for " << cid << " in " << name() -+ << " as it is already there and immutable."; -+ } else if (result.net_error() == net::OK) { -+ auto entry = GetEntry(result); -+ auto buf = base::MakeRefCounted(headers); -+ DCHECK(buf); -+ auto bound = base::BindOnce(&Self::OnHeaderWritten, base::Unretained(this), -+ buf, body, entry); -+ auto code = -+ entry->WriteData(0, 0, buf.get(), buf->size(), std::move(bound), true); -+ if (code != net::ERR_IO_PENDING) { -+ OnHeaderWritten(buf, body, entry, code); -+ } -+ } else { -+ LOG(ERROR) << "Failed to create an entry for " << cid << " in " << name(); -+ } -+} -+void Self::OnHeaderWritten(scoped_refptr buf, -+ std::string body, -+ std::shared_ptr entry, -+ int code) { -+ if (code < 0) { -+ LOG(ERROR) << "Failed to write header info for " << entry->GetKey() -+ << " in " << name(); -+ return; -+ } -+ buf = base::MakeRefCounted(body); -+ DCHECK(buf); -+ auto f = [](scoped_refptr, int c) { -+ VLOG(1) << "body write " << c; -+ }; -+ auto bound = base::BindOnce(f, buf); -+ entry->WriteData(1, 0, buf.get(), buf->size(), std::move(bound), true); -+} -+ -+void Self::Task::SetHeaders(std::string_view source) { -+ auto heads = base::MakeRefCounted(header); -+ DCHECK(heads); -+ std::string value{"blockcache-"}; -+ value.append(key); -+ value.append(";desc=\"Load from local browser block cache\";dur="); -+ auto dur = base::TimeTicks::Now() - start; -+ value.append(std::to_string(dur.InMillisecondsRoundedUp())); -+ heads->SetHeader("Server-Timing", value); -+ VLOG(2) << "From cache: Server-Timing: " << value << "; Block-Cache-" << key -+ << ": " << source; -+ heads->SetHeader("Block-Cache-" + key, {source.data(), source.size()}); -+ header = heads->raw_headers(); -+} -+void Self::Expire(std::string const& key) { -+ if (cache_ && !pending_) { -+ cache_->DoomEntry(key, net::RequestPriority::LOWEST, base::DoNothing()); -+ } -+} -+ -+Self::Task::Task() = default; -+Self::Task::Task(Task const&) = default; -+Self::Task::~Task() noexcept = default; -diff --git a/components/ipfs/cache_requestor.h b/components/ipfs/cache_requestor.h -new file mode 100644 -index 0000000000000..b8c31d371ecb4 ---- /dev/null -+++ b/components/ipfs/cache_requestor.h -@@ -0,0 +1,71 @@ -+#ifndef CACHE_REQUESTOR_H_ -+#define CACHE_REQUESTOR_H_ -+ -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+#include -+ -+#include -+ -+namespace ipfs { -+ -+class BlockStorage; -+class InterRequestState; -+ -+class CacheRequestor : public gw::Requestor { -+ public: -+ CacheRequestor(InterRequestState&, base::FilePath); -+ ~CacheRequestor() noexcept override; -+ void Store(std::string cid, std::string headers, std::string body); -+ void Expire(std::string const& key); -+ -+ std::string_view name() const override; -+ -+ private: -+ struct Task { -+ Task(); -+ Task(Task const&); -+ ~Task() noexcept; -+ std::string key; -+ base::TimeTicks start = base::TimeTicks::Now(); -+ std::string header; -+ std::string body; -+ scoped_refptr buf; -+ std::shared_ptr entry; -+ gw::RequestPtr request; -+ -+ void SetHeaders(std::string_view); -+ }; -+ raw_ref state_; -+ std::unique_ptr cache_; -+ bool pending_ = false; -+ base::FilePath path_; -+ -+ void Start(); -+ -+ void StartFetch(Task& t, net::RequestPriority priority); -+ void Assign(disk_cache::BackendResult); -+ void OnOpen(Task, disk_cache::EntryResult); -+ void OnHeaderRead(Task, int); -+ void OnBodyRead(Task, int); -+ -+ void OnEntryCreated(std::string c, -+ std::string h, -+ std::string b, -+ disk_cache::EntryResult); -+ void OnHeaderWritten(scoped_refptr buf, -+ std::string body, -+ std::shared_ptr entry, -+ int); -+ void Miss(Task&); -+ HandleOutcome handle(RequestPtr) override; -+}; -+} // namespace ipfs -+ -+#endif // CACHE_REQUESTOR_H_ -diff --git a/components/ipfs/chromium_cbor_adapter.cc b/components/ipfs/chromium_cbor_adapter.cc -new file mode 100644 -index 0000000000000..d7d43b81be96b ---- /dev/null -+++ b/components/ipfs/chromium_cbor_adapter.cc -@@ -0,0 +1,91 @@ -+#include "chromium_cbor_adapter.h" -+ -+#include -+ -+using Self = ipfs::ChromiumCborAdapter; -+ -+bool Self::is_map() const { -+ return cbor_.is_map(); -+} -+bool Self::is_array() const { -+ return cbor_.is_array(); -+} -+auto Self::at(std::string_view key) const -> std::unique_ptr { -+ if (is_map()) { -+ auto& m = cbor_.GetMap(); -+ auto it = m.find(cbor::Value{base::StringPiece{key}}); -+ if (m.end() != it) { -+ return std::make_unique(it->second.Clone()); -+ } -+ } -+ return {}; -+} -+std::optional Self::as_unsigned() const { -+ if (cbor_.is_unsigned()) { -+ return cbor_.GetUnsigned(); -+ } -+ return std::nullopt; -+} -+std::optional Self::as_signed() const { -+ if (cbor_.is_integer()) { -+ return cbor_.GetInteger(); -+ } -+ return {}; -+} -+std::optional Self::as_float() const { -+ return {}; -+} -+ -+std::optional Self::as_string() const { -+ if (cbor_.is_string()) { -+ return cbor_.GetString(); -+ } -+ return std::nullopt; -+} -+auto Self::as_bytes() const -> std::optional> { -+ if (cbor_.is_bytestring()) { -+ return cbor_.GetBytestring(); -+ } -+ return std::nullopt; -+} -+auto Self::as_link() const -> std::optional { -+ VLOG(1) << "Trying to do an as_link(" << static_cast(cbor_.type()) << ',' << std::boolalpha << cbor_.has_tag() << ")"; -+ if (!cbor_.has_tag() || cbor_.GetTag() != 42UL || !cbor_.is_bytestring()) { -+ VLOG(1) << "This is not a link."; -+ return std::nullopt; -+ } -+ auto& bytes = cbor_.GetBytestring(); -+ auto* byte_ptr = reinterpret_cast(bytes.data()) + 1; -+ auto result = Cid(ByteView{byte_ptr, bytes.size() - 1UL}); -+ if (result.valid()) { -+ return result; -+ } else { -+ LOG(ERROR) << "Unable to decode bytes from DAG-CBOR Link as CID."; -+ return std::nullopt; -+ } -+} -+std::optional Self::as_bool() const { -+ if (cbor_.is_bool()) { -+ return cbor_.GetBool(); -+ } -+ return std::nullopt; -+} -+void Self::iterate_map(MapElementCallback cb) const { -+ auto& m = cbor_.GetMap(); -+ for (auto& [k,v] : m) { -+ cb(k.GetString(), Self{v}); -+ } -+} -+void Self::iterate_array(ArrayElementCallback cb) const { -+ auto& a = cbor_.GetArray(); -+ for (auto& e : a) { -+ cb(Self{e}); -+ } -+} -+ -+Self::ChromiumCborAdapter(cbor::Value const& v) : cbor_{v.Clone()} {} -+Self::ChromiumCborAdapter(cbor::Value&& v) : cbor_{std::move(v)} {} -+Self::ChromiumCborAdapter(ChromiumCborAdapter const& rhs) -+ : cbor_{rhs.cbor_.Clone()} {} -+ -+Self::~ChromiumCborAdapter() noexcept {} -diff --git a/components/ipfs/chromium_cbor_adapter.h b/components/ipfs/chromium_cbor_adapter.h -new file mode 100644 -index 0000000000000..65c2d746e6630 ---- /dev/null -+++ b/components/ipfs/chromium_cbor_adapter.h -@@ -0,0 +1,33 @@ -+#ifndef IPFS_CHROMIUM_CBOR_ADAPTER_H_ -+#define IPFS_CHROMIUM_CBOR_ADAPTER_H_ -+ -+#include -+ -+#include -+ -+namespace ipfs { -+class ChromiumCborAdapter final : public DagCborValue { -+ cbor::Value cbor_; -+ -+ std::unique_ptr at(std::string_view) const override; -+ std::optional as_unsigned() const override; -+ std::optional as_signed() const override; -+ std::optional as_float() const override; -+ std::optional as_string() const override; -+ std::optional> as_bytes() const override; -+ std::optional as_link() const override; -+ std::optional as_bool() const override; -+ bool is_map() const override; -+ bool is_array() const override; -+ void iterate_map(MapElementCallback) const override; -+ void iterate_array(ArrayElementCallback) const override; -+ -+ public: -+ ChromiumCborAdapter(cbor::Value&&); -+ ChromiumCborAdapter(cbor::Value const&); -+ ChromiumCborAdapter(ChromiumCborAdapter const& rhs); -+ ~ChromiumCborAdapter() noexcept override; -+}; -+} // namespace ipfs -+ -+#endif // IPFS_CHROMIUM_CBOR_ADAPTER_H_ -diff --git a/components/ipfs/chromium_ipfs_context.cc b/components/ipfs/chromium_ipfs_context.cc -new file mode 100644 -index 0000000000000..9346fc1ec3bf9 ---- /dev/null -+++ b/components/ipfs/chromium_ipfs_context.cc -@@ -0,0 +1,125 @@ -+#include "chromium_ipfs_context.h" -+ -+#include "block_http_request.h" -+#include "chromium_cbor_adapter.h" -+#include "chromium_json_adapter.h" -+#include "crypto_api.h" -+#include "inter_request_state.h" -+#include "preferences.h" -+ -+#include -+#include -+#include -+ -+#include -+#include -+ -+#include -+ -+#include -+#include -+ -+#include -+ -+#include -+#include -+ -+ -+using Self = ipfs::ChromiumIpfsContext; -+ -+void Self::SetLoaderFactory(network::mojom::URLLoaderFactory& lf) { -+ loader_factory_ = &lf; -+} -+ -+std::string Self::MimeType(std::string extension, -+ std::string_view content, -+ std::string const& url) const { -+ std::string result; -+ auto fp_ext = base::FilePath::FromUTF8Unsafe(extension).value(); -+ VLOG(2) << "extension=" << extension << "content.size()=" << content.size() -+ << "(as-if) url for mime type:" << url; -+ if (extension.empty()) { -+ result.clear(); -+ } else if (net::GetWellKnownMimeTypeFromExtension(fp_ext, &result)) { -+ VLOG(2) << "Got " << result << " from extension " << extension << " for " -+ << url; -+ } else { -+ result.clear(); -+ } -+ auto head_size = std::min(content.size(), 999'999UL); -+ if (net::SniffMimeType({content.data(), head_size}, GURL{url}, result, -+ net::ForceSniffFileUrlsForHtml::kDisabled, &result)) { -+ VLOG(2) << "Got " << result << " from content of " << url; -+ } -+ if (result.empty() || result == "application/octet-stream") { -+ net::SniffMimeTypeFromLocalData({content.data(), head_size}, &result); -+ VLOG(2) << "Falling all the way back to content type " << result; -+ } -+ return result; -+} -+std::string Self::UnescapeUrlComponent(std::string_view comp) const { -+ using Rule = base::UnescapeRule; -+ auto rules = Rule::PATH_SEPARATORS | -+ Rule::URL_SPECIAL_CHARS_EXCEPT_PATH_SEPARATORS | Rule::SPACES; -+ auto result = base::UnescapeURLComponent({comp.data(), comp.size()}, rules); -+ return result; -+} -+void Self::SendDnsTextRequest(std::string host, -+ DnsTextResultsCallback res, -+ DnsTextCompleteCallback don) { -+ if (dns_reqs_.find(host) != dns_reqs_.end()) { -+ LOG(ERROR) << "Requested resolution of DNSLink host " << host -+ << " multiple times."; -+ } -+ auto don_wrap = [don, this, host]() { -+ don(); -+ LOG(INFO) << "Finished resolving " << host << " via DNSLink"; -+ dns_reqs_.erase(host); -+ }; -+ auto* nc = state_->network_context(); -+ dns_reqs_[host] = std::make_unique(host, res, don_wrap, nc); -+} -+void Self::SendHttpRequest(HttpRequestDescription req_inf, -+ HttpCompleteCallback cb) const { -+ DCHECK(loader_factory_); -+ auto ptr = std::make_shared(req_inf, cb); -+ ptr->send(loader_factory_); -+} -+bool Self::VerifyKeySignature(SigningKeyType t, -+ ByteView signature, -+ ByteView data, -+ ByteView key_bytes) const { -+ return crypto_api::VerifySignature(static_cast(t), signature, -+ data, key_bytes); -+} -+auto Self::ParseCbor(ipfs::ContextApi::ByteView bytes) const -+ -> std::unique_ptr { -+ cbor::Reader::Config cfg; -+ cfg.parse_tags = true; -+ auto parsed = cbor::Reader::Read(as_octets(bytes), cfg); -+ if (parsed.has_value()) { -+ return std::make_unique(std::move(parsed.value())); -+ } -+ LOG(ERROR) << "Failed to parse CBOR."; -+ return {}; -+} -+auto Self::ParseJson(std::string_view j_str) const -+ -> std::unique_ptr { -+ auto d = base::JSONReader::Read(j_str, base::JSON_ALLOW_TRAILING_COMMAS); -+ if (d) { -+ return std::make_unique(std::move(d.value())); -+ } -+ return {}; -+} -+ -+Self::ChromiumIpfsContext(InterRequestState& state, PrefService* prefs) -+ : state_{state} { -+ auto l = GetGatewayList(prefs); -+ for (auto gs : l) { -+ LOG(INFO) << "From pref: " << gs.prefix << '=' << gs.strength; -+ } -+} -+Self::~ChromiumIpfsContext() noexcept { -+ LOG(WARNING) << "API dtor - are all URIs loaded?"; -+} -+ -diff --git a/components/ipfs/chromium_ipfs_context.h b/components/ipfs/chromium_ipfs_context.h -new file mode 100644 -index 0000000000000..80f914a5394d8 ---- /dev/null -+++ b/components/ipfs/chromium_ipfs_context.h -@@ -0,0 +1,60 @@ -+#ifndef IPFS_CHROMIUM_IPFS_CONTEXT_H_ -+#define IPFS_CHROMIUM_IPFS_CONTEXT_H_ -+ -+#include "dns_txt_request.h" -+ -+#include -+#include -+ -+#include -+#include -+ -+#include -+ -+#include -+ -+class PrefService; -+ -+namespace network { -+class SimpleURLLoader; -+namespace mojom { -+class URLLoaderFactory; -+} -+} // namespace network -+ -+namespace ipfs { -+class InterRequestState; -+class IpfsRequest; -+class NetworkRequestor; -+ -+class ChromiumIpfsContext final : public ContextApi { -+ raw_ptr loader_factory_ = nullptr; -+ raw_ref state_; -+ std::map> dns_reqs_; -+ -+ std::string MimeType(std::string extension, -+ std::string_view content, -+ std::string const& url) const override; -+ std::string UnescapeUrlComponent(std::string_view) const override; -+ void SendDnsTextRequest(std::string, -+ DnsTextResultsCallback, -+ DnsTextCompleteCallback) override; -+ void SendHttpRequest(HttpRequestDescription req_inf, -+ HttpCompleteCallback cb) const override; -+ bool VerifyKeySignature(SigningKeyType, -+ ByteView signature, -+ ByteView data, -+ ByteView key_bytes) const override; -+ -+ std::unique_ptr ParseCbor(ByteView) const override; -+ std::unique_ptr ParseJson(std::string_view) const override; -+ -+ public: -+ ChromiumIpfsContext(InterRequestState&, PrefService* prefs); -+ ~ChromiumIpfsContext() noexcept override; -+ void SetLoaderFactory(network::mojom::URLLoaderFactory&); -+}; -+ -+} // namespace ipfs -+ -+#endif // IPFS_CHROMIUM_IPFS_CONTEXT_H_ -diff --git a/components/ipfs/chromium_json_adapter.cc b/components/ipfs/chromium_json_adapter.cc -new file mode 100644 -index 0000000000000..92c1c19aa35ce ---- /dev/null -+++ b/components/ipfs/chromium_json_adapter.cc -@@ -0,0 +1,48 @@ -+#include "chromium_json_adapter.h" -+ -+using Self = ipfs::ChromiumJsonAdapter; -+ -+Self::ChromiumJsonAdapter(base::Value d) : data_(std::move(d)) {} -+Self::~ChromiumJsonAdapter() noexcept {} -+std::string Self::pretty_print() const { -+ return data_.DebugString(); -+} -+std::optional Self::get_if_string() const { -+ auto* s = data_.GetIfString(); -+ if (s) { -+ return *s; -+ } else { -+ return std::nullopt; -+ } -+} -+auto Self::operator[](std::string_view k) const -+ -> std::unique_ptr { -+ if (auto* m = data_.GetIfDict()) { -+ if (auto* v = m->Find(k)) { -+ return std::make_unique(v->Clone()); -+ } -+ } -+ return {}; -+} -+bool Self::iterate_list(std::function cb) const { -+ auto* l = data_.GetIfList(); -+ if (!l) { -+ return false; -+ } -+ for (auto& v : *l) { -+ Self wrap(v.Clone()); -+ cb(wrap); -+ } -+ return true; -+} -+std::optional> Self::object_keys() const { -+ auto* m = data_.GetIfDict(); -+ if (!m) { -+ return std::nullopt; -+ } -+ std::vector rv; -+ for (auto [k, v] : *m) { -+ rv.push_back(k); -+ } -+ return rv; -+} -\ No newline at end of file -diff --git a/components/ipfs/chromium_json_adapter.h b/components/ipfs/chromium_json_adapter.h -new file mode 100644 -index 0000000000000..8e5e26aa3150e ---- /dev/null -+++ b/components/ipfs/chromium_json_adapter.h -@@ -0,0 +1,22 @@ -+#ifndef IPFS_CHROMIUM_JSON_ADAPTER_H_ -+#define IPFS_CHROMIUM_JSON_ADAPTER_H_ -+ -+#include -+#include -+ -+namespace ipfs { -+class ChromiumJsonAdapter final : public ipfs::DagJsonValue { -+ base::Value data_; -+ std::string pretty_print() const override; -+ std::unique_ptr operator[](std::string_view) const override; -+ std::optional get_if_string() const override; -+ std::optional> object_keys() const override; -+ bool iterate_list(std::function) const override; -+ -+ public: -+ ChromiumJsonAdapter(base::Value); -+ ~ChromiumJsonAdapter() noexcept override; -+}; -+} // namespace ipfs -+ -+#endif // IPFS_CHROMIUM_JSON_ADAPTER_H_ -diff --git a/components/ipfs/crypto_api.cc b/components/ipfs/crypto_api.cc -new file mode 100644 -index 0000000000000..d15a63f1f577c ---- /dev/null -+++ b/components/ipfs/crypto_api.cc -@@ -0,0 +1,62 @@ -+#include "crypto_api.h" -+ -+#include "base/logging.h" -+#include "components/webcrypto/algorithm_implementations.h" -+#include "components/webcrypto/status.h" -+#include "third_party/blink/public/platform/web_crypto_key.h" -+#include "third_party/boringssl/src/include/openssl/evp.h" -+ -+namespace { -+int ToEvpKeyType(ipfs::ipns::KeyType t) { -+ using ipfs::ipns::KeyType; -+ switch (t) { -+ case KeyType::ECDSA: -+ LOG(ERROR) << "TODO Check on ECDSA key type translation."; -+ return EVP_PKEY_EC; -+ case KeyType::Ed25519: -+ return EVP_PKEY_ED25519; -+ case KeyType::RSA: -+ return EVP_PKEY_RSA; -+ case KeyType::Secp256k1: -+ LOG(ERROR) << "TODO Check on Secp256k1 key type translation."; -+ return EVP_PKEY_DSA; -+ default: -+ LOG(ERROR) << "Invalid key type: " << static_cast(t); -+ return EVP_PKEY_NONE; -+ } -+} -+} // namespace -+ -+namespace cpto = ipfs::crypto_api; -+ -+bool cpto::VerifySignature(ipfs::ipns::KeyType key_type, -+ ipfs::ByteView signature, -+ ipfs::ByteView data, -+ ipfs::ByteView key_bytes) { -+ auto* key_p = reinterpret_cast(key_bytes.data()); -+ auto* data_p = reinterpret_cast(data.data()); -+ auto* sig_p = reinterpret_cast(signature.data()); -+ auto kt = ToEvpKeyType(key_type); -+ std::clog << "data:"; -+ for (auto b : data) { -+ std::clog << ' ' << std::hex << static_cast(b); -+ } -+ std::clog << ' ' << data.size() << " bytes.\n"; -+ bssl::UniquePtr pkey(EVP_PKEY_new_raw_public_key( -+ kt, /*engine*/ nullptr, key_p, key_bytes.size())); -+ bssl::ScopedEVP_MD_CTX ctx; -+ if (!EVP_DigestVerifyInit(ctx.get(), /*pctx=*/nullptr, /*type=*/nullptr, -+ /*e=*/nullptr, pkey.get())) { -+ LOG(ERROR) << "EVP_DigestVerifyInit failed"; -+ return false; -+ } -+ // auto* prefix = reinterpret_cast( -+ // "\x69\x70\x6e\x73\x2d\x73\x69\x67\x6e\x61\x74\x75\x72\x65\x3a"); -+ // std::basic_string to_verify = prefix; -+ // to_verify.append(data_p, data.size()); -+ auto result = -+ EVP_DigestVerify(ctx.get(), sig_p, signature.size(), data_p, data.size()); -+ // to_verify.data(), to_verify.size()); -+ LOG(INFO) << "EVP_DigestVerify returned " << result; -+ return result == 1; -+} -diff --git a/components/ipfs/crypto_api.h b/components/ipfs/crypto_api.h -new file mode 100644 -index 0000000000000..1363bb1fec6df ---- /dev/null -+++ b/components/ipfs/crypto_api.h -@@ -0,0 +1,22 @@ -+#ifndef IPFS_VALIDATE_SIGNATURE_H_ -+#define IPFS_VALIDATE_SIGNATURE_H_ -+ -+#include "components/webcrypto/algorithm_implementation.h" -+ -+#include "third_party/ipfs_client/keys.pb.h" -+ -+#include -+ -+namespace ipfs::crypto_api { -+/* -+using Algo = std::pair>; -+Algo GetAlgo(ipfs::ipns::KeyType); -+*/ -+bool VerifySignature(ipfs::ipns::KeyType, -+ ByteView signature, -+ ByteView data, -+ ByteView key); -+} // namespace ipfs::crypto_api -+ -+#endif // IPFS_VALIDATE_SIGNATURE_H_ -diff --git a/components/ipfs/dns_txt_request.cc b/components/ipfs/dns_txt_request.cc -new file mode 100644 -index 0000000000000..c7e8e667d5f05 ---- /dev/null -+++ b/components/ipfs/dns_txt_request.cc -@@ -0,0 +1,39 @@ -+#include "dns_txt_request.h" -+ -+#include -+#include -+ -+namespace moj = network::mojom; -+using Self = ipfs::DnsTxtRequest; -+ -+Self::DnsTxtRequest(std::string host, -+ ipfs::ContextApi::DnsTextResultsCallback res, -+ ipfs::ContextApi::DnsTextCompleteCallback don, -+ moj::NetworkContext* network_context) -+ : results_callback_{res}, completion_callback_{don} { -+ auto params = moj::ResolveHostParameters::New(); -+ params->dns_query_type = net::DnsQueryType::TXT; -+ params->initial_priority = net::RequestPriority::HIGHEST; -+ params->source = net::HostResolverSource::ANY; -+ params->cache_usage = moj::ResolveHostParameters_CacheUsage::STALE_ALLOWED; -+ params->secure_dns_policy = moj::SecureDnsPolicy::ALLOW; -+ params->purpose = moj::ResolveHostParameters::Purpose::kUnspecified; -+ LOG(INFO) << "Querying DNS for TXT records on " << host; -+ auto hrh = moj::HostResolverHost::NewHostPortPair({host, 0}); -+ auto nak = net::NetworkAnonymizationKey::CreateTransient(); -+ network_context->ResolveHost(std::move(hrh), nak, std::move(params), -+ recv_.BindNewPipeAndPassRemote()); -+} -+Self::~DnsTxtRequest() {} -+ -+void Self::OnTextResults(std::vector const& results) { -+ LOG(INFO) << "Hit " << results.size() << " DNS TXT results."; -+ results_callback_(results); -+} -+void Self::OnComplete(int32_t result, -+ const ::net::ResolveErrorInfo&, -+ const absl::optional<::net::AddressList>&, -+ const absl::optional&) { -+ LOG(INFO) << "DNS Results done with code: " << result; -+ completion_callback_(); -+} -diff --git a/components/ipfs/dns_txt_request.h b/components/ipfs/dns_txt_request.h -new file mode 100644 -index 0000000000000..a6c72e467d11f ---- /dev/null -+++ b/components/ipfs/dns_txt_request.h -@@ -0,0 +1,36 @@ -+#ifndef IPFS_DNS_TXT_REQUEST_H_ -+#define IPFS_DNS_TXT_REQUEST_H_ -+ -+#include -+ -+#include -+#include -+ -+namespace network::mojom { -+class NetworkContext; -+} -+ -+namespace ipfs { -+class DnsTxtRequest final : public network::ResolveHostClientBase { -+ ipfs::ContextApi::DnsTextResultsCallback results_callback_; -+ ipfs::ContextApi::DnsTextCompleteCallback completion_callback_; -+ mojo::Receiver recv_{this}; -+ -+ using Endpoints = std::vector<::net::HostResolverEndpointResult>; -+ void OnTextResults(std::vector const&) override; -+ void OnComplete(int32_t result, -+ ::net::ResolveErrorInfo const&, -+ absl::optional<::net::AddressList> const&, -+ absl::optional const&) override; -+ -+ public: -+ DnsTxtRequest(std::string, -+ ipfs::ContextApi::DnsTextResultsCallback, -+ ipfs::ContextApi::DnsTextCompleteCallback, -+ network::mojom::NetworkContext*); -+ DnsTxtRequest(DnsTxtRequest&&) = delete; -+ ~DnsTxtRequest() noexcept override; -+}; -+} // namespace ipfs -+ -+#endif // IPFS_DNS_TXT_REQUEST_H_ -diff --git a/components/ipfs/export.h b/components/ipfs/export.h -new file mode 100644 -index 0000000000000..8161da33aca16 ---- /dev/null -+++ b/components/ipfs/export.h -@@ -0,0 +1,16 @@ -+#ifndef IPFS_EXPORT_H_ -+#define IPFS_EXPORT_H_ -+ -+#if __has_include() -+#include -+#else -+ -+#ifndef IS_IPFS_IMPL -+#if !defined(COMPONENT_EXPORT) -+#define COMPONENT_EXPORT(IPFS) -+#endif -+#endif -+ -+#endif -+ -+#endif // IPFS_EXPORT_H_ -diff --git a/components/ipfs/inter_request_state.cc b/components/ipfs/inter_request_state.cc -new file mode 100644 -index 0000000000000..b20a013a9d646 ---- /dev/null -+++ b/components/ipfs/inter_request_state.cc -@@ -0,0 +1,72 @@ -+#include "inter_request_state.h" -+ -+#include "chromium_ipfs_context.h" -+#include "preferences.h" -+ -+#include -+#include "content/public/browser/browser_context.h" -+ -+#include -+#include -+#include -+#include -+ -+using Self = ipfs::InterRequestState; -+ -+namespace { -+constexpr char user_data_key[] = "ipfs_request_userdata"; -+} -+ -+void Self::CreateForBrowserContext(content::BrowserContext* c, PrefService* p) { -+ DCHECK(c); -+ DCHECK(p); -+ LOG(INFO) << "Creating new IPFS state for this browser context."; -+ auto owned = std::make_unique(c->GetPath(), p); -+ c->SetUserData(user_data_key, std::move(owned)); -+} -+auto Self::FromBrowserContext(content::BrowserContext* context) -+ -> InterRequestState& { -+ static ipfs::InterRequestState static_state({}, {}); -+ if (!context) { -+ LOG(WARNING) << "No browser context! Using a default IPFS state."; -+ return static_state; -+ } -+ base::SupportsUserData::Data* existing = context->GetUserData(user_data_key); -+ if (existing) { -+ VLOG(2) << "Re-using existing IPFS state."; -+ return *static_cast(existing); -+ } else { -+ LOG(ERROR) << "Browser context has no IPFS state! It must be set earlier!"; -+ return static_state; -+ } -+} -+std::shared_ptr Self::api() { -+ return api_; -+} -+auto Self::cache() -> std::shared_ptr& { -+ if (!cache_) { -+ cache_ = std::make_shared(*this, disk_path_); -+ } -+ return cache_; -+} -+auto Self::orchestrator() -> Orchestrator& { -+ if (!orc_) { -+ auto rtor = -+ gw::default_requestor(Gateways::DefaultGateways(), cache(), api()); -+ orc_ = std::make_shared(rtor, api()); -+ } -+ return *orc_; -+} -+void Self::network_context(network::mojom::NetworkContext* val) { -+ network_context_ = val; -+} -+network::mojom::NetworkContext* Self::network_context() const { -+ return network_context_; -+} -+Self::InterRequestState(base::FilePath p, PrefService* prefs) -+ : api_{std::make_shared(*this, prefs)}, -+ disk_path_{p} {} -+Self::~InterRequestState() noexcept { -+ network_context_ = nullptr; -+ cache_.reset(); -+} -diff --git a/components/ipfs/inter_request_state.h b/components/ipfs/inter_request_state.h -new file mode 100644 -index 0000000000000..3471cfe5d15c9 ---- /dev/null -+++ b/components/ipfs/inter_request_state.h -@@ -0,0 +1,51 @@ -+#ifndef IPFS_INTER_REQUEST_STATE_H_ -+#define IPFS_INTER_REQUEST_STATE_H_ -+ -+#include "cache_requestor.h" -+ -+#include "ipfs_client/gateways.h" -+#include "ipfs_client/ipns_names.h" -+#include "ipfs_client/orchestrator.h" -+ -+#include "base/supports_user_data.h" -+#include "services/network/network_context.h" -+ -+class PrefService; -+ -+namespace content { -+class BrowserContext; -+} -+ -+namespace ipfs { -+class Scheduler; -+class ChromiumIpfsContext; -+class COMPONENT_EXPORT(IPFS) InterRequestState -+ : public base::SupportsUserData::Data { -+ IpnsNames names_; -+ std::shared_ptr api_; -+ std::time_t last_discovery_ = 0; -+ std::shared_ptr cache_; -+ base::FilePath const disk_path_; -+ std::shared_ptr orc_; // TODO - map of origin to Orchestrator -+ raw_ptr network_context_; -+ -+ std::shared_ptr& cache(); -+ -+ public: -+ InterRequestState(base::FilePath, PrefService*); -+ ~InterRequestState() noexcept override; -+ -+ IpnsNames& names() { return names_; } -+ Scheduler& scheduler(); -+ std::shared_ptr api(); -+ std::array,2> serialized_caches(); -+ Orchestrator& orchestrator(); -+ void network_context(network::mojom::NetworkContext*); -+ network::mojom::NetworkContext* network_context() const; -+ -+ static void CreateForBrowserContext(content::BrowserContext*, PrefService*); -+ static InterRequestState& FromBrowserContext(content::BrowserContext*); -+}; -+} // namespace ipfs -+ -+#endif // IPFS_INTER_REQUEST_STATE_H_ -diff --git a/components/ipfs/interceptor.cc b/components/ipfs/interceptor.cc -new file mode 100644 -index 0000000000000..39b5de32b87ef ---- /dev/null -+++ b/components/ipfs/interceptor.cc -@@ -0,0 +1,36 @@ -+#include "interceptor.h" -+ -+#include "inter_request_state.h" -+#include "ipfs_url_loader.h" -+ -+#include "base/logging.h" -+#include "services/network/public/cpp/resource_request.h" -+#include "services/network/public/mojom/url_response_head.mojom.h" -+#include "services/network/url_loader_factory.h" -+#include "url/url_util.h" -+ -+using Interceptor = ipfs::Interceptor; -+ -+Interceptor::Interceptor(network::mojom::URLLoaderFactory* handles_http, -+ network::mojom::NetworkContext* network_context) -+ : loader_factory_{handles_http}, network_context_{network_context} {} -+ -+void Interceptor::MaybeCreateLoader(network::ResourceRequest const& req, -+ content::BrowserContext* context, -+ LoaderCallback loader_callback) { -+ auto& state = InterRequestState::FromBrowserContext(context); -+ state.network_context(network_context_); -+ if (req.url.SchemeIs("ipfs") || req.url.SchemeIs("ipns")) { -+ auto hdr_str = req.headers.ToString(); -+ std::replace(hdr_str.begin(), hdr_str.end(), '\r', ' '); -+ VLOG(1) << req.url.spec() << " getting intercepted! Headers: \n" << hdr_str; -+ DCHECK(context); -+ auto loader = -+ std::make_shared(*loader_factory_, state); -+ std::move(loader_callback) -+ .Run(base::BindOnce(&ipfs::IpfsUrlLoader::StartRequest, loader)); -+ -+ } else { -+ std::move(loader_callback).Run({}); // SEP -+ } -+} -diff --git a/components/ipfs/interceptor.h b/components/ipfs/interceptor.h -new file mode 100644 -index 0000000000000..0321ea5481864 ---- /dev/null -+++ b/components/ipfs/interceptor.h -@@ -0,0 +1,30 @@ -+#ifndef IPFS_INTERCEPTOR_H_ -+#define IPFS_INTERCEPTOR_H_ -+ -+#include "content/public/browser/url_loader_request_interceptor.h" -+ -+class PrefService; -+namespace network::mojom { -+class URLLoaderFactory; -+class NetworkContext; -+} // namespace network::mojom -+ -+namespace ipfs { -+ -+class COMPONENT_EXPORT(IPFS) Interceptor final -+ : public content::URLLoaderRequestInterceptor { -+ raw_ptr loader_factory_; -+ raw_ptr network_context_; -+ raw_ptr pref_svc_; -+ -+ void MaybeCreateLoader(network::ResourceRequest const&, -+ content::BrowserContext*, -+ LoaderCallback) override; -+ -+ public: -+ Interceptor(network::mojom::URLLoaderFactory* handles_http, -+ network::mojom::NetworkContext*); -+}; -+} // namespace ipfs -+ -+#endif // IPFS_INTERCEPTOR_H_ -diff --git a/components/ipfs/ipfs_features.cc b/components/ipfs/ipfs_features.cc -new file mode 100644 -index 0000000000000..a0a729d5aa8e6 ---- /dev/null -+++ b/components/ipfs/ipfs_features.cc -@@ -0,0 +1,7 @@ -+#include "ipfs_features.h" -+ -+namespace ipfs { -+ -+BASE_FEATURE(kEnableIpfs, "EnableIpfs", base::FEATURE_DISABLED_BY_DEFAULT); -+ -+} -diff --git a/components/ipfs/ipfs_features.h b/components/ipfs/ipfs_features.h -new file mode 100644 -index 0000000000000..2e54462b135a9 ---- /dev/null -+++ b/components/ipfs/ipfs_features.h -@@ -0,0 +1,13 @@ -+#ifndef IPFS_IPFS_FEATURES_H_ -+#define IPFS_IPFS_FEATURES_H_ -+ -+#include "base/component_export.h" -+#include "base/feature_list.h" -+ -+namespace ipfs { -+ -+COMPONENT_EXPORT(IPFS) BASE_DECLARE_FEATURE(kEnableIpfs); -+ -+} // namespace ipfs -+ -+#endif // IPFS_IPFS_FEATURES_H_ -diff --git a/components/ipfs/ipfs_url_loader.cc b/components/ipfs/ipfs_url_loader.cc -new file mode 100644 -index 0000000000000..afc97dc425b4f ---- /dev/null -+++ b/components/ipfs/ipfs_url_loader.cc -@@ -0,0 +1,194 @@ -+#include "ipfs_url_loader.h" -+ -+#include "chromium_ipfs_context.h" -+#include "inter_request_state.h" -+ -+#include "ipfs_client/gateways.h" -+#include "ipfs_client/ipfs_request.h" -+ -+#include "base/debug/stack_trace.h" -+#include "base/notreached.h" -+#include "base/strings/stringprintf.h" -+#include "base/threading/platform_thread.h" -+#include "net/http/http_status_code.h" -+#include "services/network/public/cpp/parsed_headers.h" -+#include "services/network/public/cpp/simple_url_loader.h" -+#include "services/network/public/mojom/url_loader_factory.mojom.h" -+#include "services/network/public/mojom/url_response_head.mojom.h" -+#include "services/network/url_loader_factory.h" -+ -+#include -+ -+ipfs::IpfsUrlLoader::IpfsUrlLoader( -+ network::mojom::URLLoaderFactory& handles_http, -+ InterRequestState& state) -+ : state_{state}, lower_loader_factory_{handles_http}, api_{state_->api()} {} -+ipfs::IpfsUrlLoader::~IpfsUrlLoader() noexcept { -+ if (!complete_) { -+ LOG(ERROR) << "Premature IPFS URLLoader dtor, uri was '" << original_url_ -+ << "' " << base::debug::StackTrace(); -+ } -+} -+ -+void ipfs::IpfsUrlLoader::FollowRedirect( -+ std::vector const& // removed_headers -+ , -+ net::HttpRequestHeaders const& // modified_headers -+ , -+ net::HttpRequestHeaders const& // modified_cors_exempt_headers -+ , -+ absl::optional<::GURL> const& // new_url -+) { -+ NOTIMPLEMENTED(); -+} -+ -+void ipfs::IpfsUrlLoader::SetPriority(net::RequestPriority priority, -+ int32_t intra_prio_val) { -+ VLOG(1) << "TODO SetPriority(" << priority << ',' << intra_prio_val << ')'; -+} -+ -+void ipfs::IpfsUrlLoader::PauseReadingBodyFromNet() { -+ NOTIMPLEMENTED(); -+} -+ -+void ipfs::IpfsUrlLoader::ResumeReadingBodyFromNet() { -+ NOTIMPLEMENTED(); -+} -+ -+void ipfs::IpfsUrlLoader::StartRequest( -+ std::shared_ptr me, -+ network::ResourceRequest const& resource_request, -+ mojo::PendingReceiver receiver, -+ mojo::PendingRemote client) { -+ DCHECK(!me->receiver_.is_bound()); -+ DCHECK(!me->client_.is_bound()); -+ me->receiver_.Bind(std::move(receiver)); -+ me->client_.Bind(std::move(client)); -+ if (me->original_url_.empty()) { -+ me->original_url_ = resource_request.url.spec(); -+ } -+ if (resource_request.url.SchemeIs("ipfs") || -+ resource_request.url.SchemeIs("ipns")) { -+ auto ns = resource_request.url.scheme(); -+ auto cid_str = resource_request.url.host(); -+ auto path = resource_request.url.path(); -+ auto abs_path = "/" + ns + "/" + cid_str + path; -+ VLOG(1) << resource_request.url.spec() << " -> " << abs_path; -+ me->root_ = cid_str; -+ me->api_->SetLoaderFactory(*(me->lower_loader_factory_)); -+ auto whendone = [me](IpfsRequest const& req, ipfs::Response const& res) { -+ VLOG(1) << "whendone(" << req.path().to_string() << ',' << res.status_ -+ << ',' << res.body_.size() << "B mime=" << res.mime_ << ')'; -+ if (!res.body_.empty()) { -+ me->ReceiveBlockBytes(res.body_); -+ } -+ me->status_ = res.status_; -+ me->resp_loc_ = res.location_; -+ if (res.status_ == Response::IMMUTABLY_GONE.status_) { -+ auto p = req.path(); -+ p.pop(); -+ std::string cid{p.pop()}; -+ me->DoesNotExist(cid, p.to_string()); -+ } else { -+ me->BlocksComplete(res.mime_); -+ } -+ DCHECK(me->complete_); -+ }; -+ auto req = std::make_shared(abs_path, whendone); -+ me->state_->orchestrator().build_response(req); -+ } else { -+ LOG(ERROR) << "Wrong scheme: " << resource_request.url.scheme(); -+ } -+} -+ -+void ipfs::IpfsUrlLoader::OverrideUrl(GURL u) { -+ original_url_ = u.spec(); -+} -+void ipfs::IpfsUrlLoader::AddHeader(std::string_view a, std::string_view b) { -+ VLOG(1) << "AddHeader(" << a << ',' << b << ')'; -+ additional_outgoing_headers_.emplace_back(a, b); -+} -+ -+void ipfs::IpfsUrlLoader::BlocksComplete(std::string mime_type) { -+ VLOG(1) << "Resolved from unix-fs dag a file of type: " << mime_type -+ << " will report it as " << original_url_; -+ if (complete_) { -+ return; -+ } -+ auto result = -+ mojo::CreateDataPipe(partial_block_.size(), pipe_prod_, pipe_cons_); -+ if (result) { -+ LOG(ERROR) << " ERROR: TaskFailed to create data pipe: " << result; -+ return; -+ } -+ complete_ = true; -+ auto head = network::mojom::URLResponseHead::New(); -+ if (mime_type.size()) { -+ head->mime_type = mime_type; -+ } -+ std::uint32_t byte_count = partial_block_.size(); -+ VLOG(1) << "Calling WriteData(" << byte_count << ")"; -+ pipe_prod_->WriteData(partial_block_.data(), &byte_count, -+ MOJO_BEGIN_WRITE_DATA_FLAG_ALL_OR_NONE); -+ VLOG(1) << "Called WriteData(" << byte_count << ")"; -+ head->content_length = byte_count; -+ head->headers = -+ net::HttpResponseHeaders::TryToCreate("access-control-allow-origin: *"); -+ if (resp_loc_.size()) { -+ head->headers->AddHeader("Location", resp_loc_); -+ } -+ if (!head->headers) { -+ LOG(ERROR) << "\n\tFailed to create headers!\n"; -+ return; -+ } -+ auto* reason = -+ net::GetHttpReasonPhrase(static_cast(status_)); -+ auto status_line = base::StringPrintf("HTTP/1.1 %d %s", status_, reason); -+ VLOG(1) << "Returning with status line '" << status_line << "'.\n"; -+ head->headers->ReplaceStatusLine(status_line); -+ if (mime_type.size()) { -+ head->headers->SetHeader("Content-Type", mime_type); -+ } -+ head->headers->SetHeader("Access-Control-Allow-Origin", "*"); -+ head->was_fetched_via_spdy = false; -+ for (auto& [n, v] : additional_outgoing_headers_) { -+ VLOG(1) << "Appending 'additional' header:" << n << '=' << v << '.'; -+ head->headers->AddHeader(n, v); -+ } -+ VLOG(1) << "Calling PopulateParsedHeaders"; -+ head->parsed_headers = -+ network::PopulateParsedHeaders(head->headers.get(), GURL{original_url_}); -+ VLOG(1) << "Sending response for " << original_url_ << " with mime type " -+ << head->mime_type << " and status line " << status_line; -+ if (status_ / 100 == 3 && resp_loc_.size()) { -+ auto ri = net::RedirectInfo::ComputeRedirectInfo( -+ "GET", GURL{original_url_}, net::SiteForCookies{}, -+ net::RedirectInfo::FirstPartyURLPolicy::UPDATE_URL_ON_REDIRECT, -+ net::ReferrerPolicy::NO_REFERRER, "", status_, GURL{resp_loc_}, -+ std::nullopt, false); -+ client_->OnReceiveRedirect(ri, std::move(head)); -+ } else { -+ client_->OnReceiveResponse(std::move(head), std::move(pipe_cons_), -+ absl::nullopt); -+ } -+ client_->OnComplete(network::URLLoaderCompletionStatus{}); -+ stepper_.reset(); -+} -+ -+void ipfs::IpfsUrlLoader::DoesNotExist(std::string_view cid, -+ std::string_view path) { -+ LOG(ERROR) << "Immutable data 404 for " << cid << '/' << path; -+ complete_ = true; -+ client_->OnComplete( -+ network::URLLoaderCompletionStatus{net::ERR_FILE_NOT_FOUND}); -+ stepper_.reset(); -+} -+void ipfs::IpfsUrlLoader::NotHere(std::string_view cid, std::string_view path) { -+ LOG(INFO) << "TODO " << __func__ << '(' << cid << ',' << path << ')'; -+} -+ -+void ipfs::IpfsUrlLoader::ReceiveBlockBytes(std::string_view content) { -+ partial_block_.append(content); -+ VLOG(2) << "Recived a block of size " << content.size() << " now have " -+ << partial_block_.size() << " bytes."; -+} -diff --git a/components/ipfs/ipfs_url_loader.h b/components/ipfs/ipfs_url_loader.h -new file mode 100644 -index 0000000000000..dc324f7b11f2d ---- /dev/null -+++ b/components/ipfs/ipfs_url_loader.h -@@ -0,0 +1,96 @@ -+#ifndef COMPONENTS_IPFS_URL_LOADER_H_ -+#define COMPONENTS_IPFS_URL_LOADER_H_ 1 -+ -+#include "base/debug/debugging_buildflags.h" -+#include "base/timer/timer.h" -+#include "mojo/public/cpp/bindings/receiver_set.h" -+#include "mojo/public/cpp/system/data_pipe.h" -+#include "net/http/http_request_headers.h" -+#include "services/network/public/cpp/resolve_host_client_base.h" -+#include "services/network/public/cpp/resource_request.h" -+#include "services/network/public/mojom/url_loader.mojom.h" -+ -+#include -+ -+namespace ipfs { -+class ChromiumIpfsContext; -+} // namespace ipfs -+ -+namespace network::mojom { -+class URLLoaderFactory; -+class HostResolver; -+class NetworkContext; -+} // namespace network::mojom -+namespace network { -+class SimpleURLLoader; -+} -+ -+namespace ipfs { -+class InterRequestState; -+ -+class IpfsUrlLoader final : public network::mojom::URLLoader { -+ void FollowRedirect( -+ std::vector const& removed_headers, -+ net::HttpRequestHeaders const& modified_headers, -+ net::HttpRequestHeaders const& modified_cors_exempt_headers, -+ absl::optional<::GURL> const& new_url) override; -+ void SetPriority(net::RequestPriority priority, -+ int32_t intra_priority_value) override; -+ void PauseReadingBodyFromNet() override; -+ void ResumeReadingBodyFromNet() override; -+ -+ public: -+ explicit IpfsUrlLoader(network::mojom::URLLoaderFactory& handles_http, -+ InterRequestState& state); -+ ~IpfsUrlLoader() noexcept override; -+ -+ using ptr = std::shared_ptr; -+ -+ // Passed as the RequestHandler for -+ // Interceptor::MaybeCreateLoader. -+ static void StartRequest( -+ ptr, -+ network::ResourceRequest const& resource_request, -+ mojo::PendingReceiver receiver, -+ mojo::PendingRemote client); -+ -+ void OverrideUrl(GURL); -+ void AddHeader(std::string_view,std::string_view); -+ void extra(std::shared_ptr xtra) { extra_ = xtra; } -+ -+ private: -+ using RequestHandle = std::unique_ptr; -+ -+ raw_ref state_; -+ mojo::Receiver receiver_{this}; -+ mojo::Remote client_; -+ raw_ref lower_loader_factory_; -+ mojo::ScopedDataPipeProducerHandle pipe_prod_ = {}; -+ mojo::ScopedDataPipeConsumerHandle pipe_cons_ = {}; -+ bool complete_ = false; -+ std::shared_ptr api_; -+ std::string original_url_; -+ std::string partial_block_; -+ std::vector> additional_outgoing_headers_; -+ std::shared_ptr extra_; -+ std::unique_ptr stepper_; -+ std::string root_; -+ int status_ = 200; -+ std::string resp_loc_; -+ -+ void CreateBlockRequest(std::string cid); -+ -+ void ReceiveBlockBytes(std::string_view); -+ void BlocksComplete(std::string mime_type); -+ void DoesNotExist(std::string_view cid, std::string_view path); -+ void NotHere(std::string_view cid, std::string_view path); -+ -+ void StartUnixFsProc(ptr, std::string_view); -+ void AppendGatewayHeaders(std::vector const& cids, net::HttpResponseHeaders&); -+ void AppendGatewayInfoHeader(std::string const&, net::HttpResponseHeaders&); -+ void TakeStep(); -+}; -+ -+} // namespace ipfs -+ -+#endif -diff --git a/components/ipfs/url_loader_factory.cc b/components/ipfs/url_loader_factory.cc -new file mode 100644 -index 0000000000000..9a80284098748 ---- /dev/null -+++ b/components/ipfs/url_loader_factory.cc -@@ -0,0 +1,56 @@ -+#include "url_loader_factory.h" -+ -+#include "inter_request_state.h" -+#include "ipfs_url_loader.h" -+ -+void ipfs::IpfsURLLoaderFactory::Create( -+ NonNetworkURLLoaderFactoryMap* in_out, -+ content::BrowserContext* context, -+ URLLoaderFactory* default_factory, -+ network::mojom::NetworkContext* net_ctxt, -+ PrefService* pref_svc) { -+ for (char const* scheme : {"ipfs", "ipns"}) { -+ mojo::PendingRemote pending; -+ new IpfsURLLoaderFactory(scheme, pending.InitWithNewPipeAndPassReceiver(), -+ context, default_factory, net_ctxt, pref_svc); -+ in_out->emplace(scheme, std::move(pending)); -+ } -+} -+ -+ipfs::IpfsURLLoaderFactory::IpfsURLLoaderFactory( -+ std::string scheme, -+ mojo::PendingReceiver factory_receiver, -+ content::BrowserContext* context, -+ URLLoaderFactory* default_factory, -+ network::mojom::NetworkContext* net_ctxt, -+ PrefService* pref_svc) -+ : network::SelfDeletingURLLoaderFactory(std::move(factory_receiver)), -+ scheme_{scheme}, -+ context_{context}, -+ default_factory_{default_factory}, -+ network_context_{net_ctxt}, -+ pref_svc_{pref_svc} {} -+ -+ipfs::IpfsURLLoaderFactory::~IpfsURLLoaderFactory() noexcept { -+ context_ = nullptr; -+ default_factory_ = nullptr; -+ network_context_ = nullptr; -+} -+ -+void ipfs::IpfsURLLoaderFactory::CreateLoaderAndStart( -+ mojo::PendingReceiver loader, -+ int32_t /*request_id*/, -+ uint32_t /*options*/, -+ network::ResourceRequest const& request, -+ mojo::PendingRemote client, -+ net::MutableNetworkTrafficAnnotationTag const& // traffic_annotation -+) { -+ VLOG(2) << "IPFS subresource: case=" << scheme_ -+ << " url=" << request.url.spec(); -+ DCHECK(default_factory_); -+ if (scheme_ == "ipfs" || scheme_ == "ipns") { -+ auto ptr = std::make_shared( -+ *default_factory_, InterRequestState::FromBrowserContext(context_)); -+ ptr->StartRequest(ptr, request, std::move(loader), std::move(client)); -+ } -+} -diff --git a/components/ipfs/url_loader_factory.h b/components/ipfs/url_loader_factory.h -new file mode 100644 -index 0000000000000..01cd66ea6ed8f ---- /dev/null -+++ b/components/ipfs/url_loader_factory.h -@@ -0,0 +1,58 @@ -+#ifndef IPFS_URL_LOADER_FACTORY_H_ -+#define IPFS_URL_LOADER_FACTORY_H_ -+ -+#include "services/network/public/cpp/self_deleting_url_loader_factory.h" -+#include "services/network/public/mojom/url_loader_factory.mojom.h" -+ -+#include -+ -+class PrefService; -+namespace content { -+class BrowserContext; -+} -+namespace network { -+namespace mojom { -+class NetworkContext; -+} -+} // namespace network -+ -+namespace ipfs { -+using NonNetworkURLLoaderFactoryMap = -+ std::map>; -+ -+class COMPONENT_EXPORT(IPFS) IpfsURLLoaderFactory -+ : public network::SelfDeletingURLLoaderFactory { -+ public: -+ static void Create(NonNetworkURLLoaderFactoryMap* in_out, -+ content::BrowserContext*, -+ URLLoaderFactory*, -+ network::mojom::NetworkContext*, -+ PrefService*); -+ -+ private: -+ IpfsURLLoaderFactory(std::string, -+ mojo::PendingReceiver, -+ content::BrowserContext*, -+ network::mojom::URLLoaderFactory*, -+ network::mojom::NetworkContext*, -+ PrefService*); -+ ~IpfsURLLoaderFactory() noexcept override; -+ void CreateLoaderAndStart( -+ mojo::PendingReceiver loader, -+ int32_t request_id, -+ uint32_t options, -+ network::ResourceRequest const& request, -+ mojo::PendingRemote client, -+ net::MutableNetworkTrafficAnnotationTag const& traffic_annotation) -+ override; -+ -+ std::string scheme_; -+ raw_ptr context_; -+ raw_ptr default_factory_; -+ raw_ptr network_context_; -+ raw_ptr pref_svc_; -+}; -+} // namespace ipfs -+ -+#endif // IPFS_URL_LOADER_FACTORY_H_ -diff --git a/components/open_from_clipboard/clipboard_recent_content_generic.cc b/components/open_from_clipboard/clipboard_recent_content_generic.cc -index 4dcafecbc66c6..d205209c08162 100644 ---- a/components/open_from_clipboard/clipboard_recent_content_generic.cc -+++ b/components/open_from_clipboard/clipboard_recent_content_generic.cc -@@ -20,7 +20,7 @@ - namespace { - // Schemes appropriate for suggestion by ClipboardRecentContent. - const char* kAuthorizedSchemes[] = { -- url::kAboutScheme, url::kDataScheme, url::kHttpScheme, url::kHttpsScheme, -+ url::kAboutScheme, url::kDataScheme, url::kHttpScheme, url::kHttpsScheme, "ipfs", "ipns" - // TODO(mpearson): add support for chrome:// URLs. Right now the scheme - // for that lives in content and is accessible via - // GetEmbedderRepresentationOfAboutScheme() or content::kChromeUIScheme -diff --git a/net/dns/dns_config_service_linux.cc b/net/dns/dns_config_service_linux.cc -index 5273da5190277..12b28b86a4c00 100644 ---- a/net/dns/dns_config_service_linux.cc -+++ b/net/dns/dns_config_service_linux.cc -@@ -272,11 +272,11 @@ bool IsNsswitchConfigCompatible( - // Ignore any entries after `kDns` because Chrome will fallback to the - // system resolver if a result was not found in DNS. - return true; -- -+ case NsswitchReader::Service::kResolve: -+ break; - case NsswitchReader::Service::kMdns: - case NsswitchReader::Service::kMdns4: - case NsswitchReader::Service::kMdns6: -- case NsswitchReader::Service::kResolve: - case NsswitchReader::Service::kNis: - RecordIncompatibleNsswitchReason( - IncompatibleNsswitchReason::kIncompatibleService, -diff --git a/third_party/blink/renderer/platform/weborigin/scheme_registry.cc b/third_party/blink/renderer/platform/weborigin/scheme_registry.cc -index 4eadf46ea0c24..d62fc7fb14e01 100644 ---- a/third_party/blink/renderer/platform/weborigin/scheme_registry.cc -+++ b/third_party/blink/renderer/platform/weborigin/scheme_registry.cc -@@ -67,7 +67,7 @@ class URLSchemesRegistry final { - // is considered secure. Additional checks are performed to ensure that - // other http pages are filtered out. - service_worker_schemes({"http", "https"}), -- fetch_api_schemes({"http", "https"}), -+ fetch_api_schemes({"http", "https", "ipfs", "ipns"}), - allowed_in_referrer_schemes({"http", "https"}) { - for (auto& scheme : url::GetCorsEnabledSchemes()) - cors_enabled_schemes.insert(scheme.c_str()); -diff --git a/third_party/ipfs_client/BUILD.gn b/third_party/ipfs_client/BUILD.gn -new file mode 100644 -index 0000000000000..9eb6d56505851 ---- /dev/null -+++ b/third_party/ipfs_client/BUILD.gn -@@ -0,0 +1,200 @@ -+import("args.gni") -+import("//build/buildflag_header.gni") -+ -+buildflag_header("ipfs_buildflags") { -+ header = "ipfs_buildflags.h" -+ flags = [ "ENABLE_IPFS=$enable_ipfs" ] -+} -+ -+config("external_config") { -+ include_dirs = [ -+ "include", -+ ] -+} -+ -+if (enable_ipfs) { -+ cxx_sources = [ -+ "include/ipfs_client/block_requestor.h", -+ "include/ipfs_client/block_storage.h", -+ "include/ipfs_client/cid.h", -+ "include/ipfs_client/context_api.h", -+ "include/ipfs_client/crypto/hasher.h", -+ "include/ipfs_client/dag_cbor_value.h", -+ "include/ipfs_client/dag_json_value.h", -+ "include/ipfs_client/gateways.h", -+ "include/ipfs_client/gw/block_request_splitter.h", -+ "include/ipfs_client/gw/default_requestor.h", -+ "include/ipfs_client/gw/dnslink_requestor.h", -+ "include/ipfs_client/gw/gateway_request.h", -+ "include/ipfs_client/gw/inline_request_handler.h", -+ "include/ipfs_client/gw/requestor.h", -+ "include/ipfs_client/gw/terminating_requestor.h", -+ "include/ipfs_client/http_request_description.h", -+ "include/ipfs_client/identity_cid.h", -+ "include/ipfs_client/ipfs_request.h", -+ "include/ipfs_client/ipld/dag_node.h", -+ "include/ipfs_client/ipld/link.h", -+ "include/ipfs_client/ipld/resolution_state.h", -+ "include/ipfs_client/ipns_cbor_entry.h", -+ "include/ipfs_client/ipns_names.h", -+ "include/ipfs_client/ipns_record.h", -+ "include/ipfs_client/json_cbor_adapter.h", -+ "include/ipfs_client/logger.h", -+ "include/ipfs_client/multi_base.h", -+ "include/ipfs_client/multi_hash.h", -+ "include/ipfs_client/multicodec.h", -+ "include/ipfs_client/orchestrator.h", -+ "include/ipfs_client/pb_dag.h", -+ "include/ipfs_client/response.h", -+ "include/ipfs_client/signing_key_type.h", -+ "include/ipfs_client/url_spec.h", -+ "include/libp2p/common/types.hpp", -+ "include/libp2p/crypto/key.h", -+ "include/libp2p/crypto/protobuf/protobuf_key.hpp", -+ "include/libp2p/multi/multibase_codec.hpp", -+ "include/libp2p/multi/multibase_codec/codecs/base16.h", -+ "include/libp2p/multi/multibase_codec/codecs/base32.hpp", -+ "include/libp2p/multi/multibase_codec/codecs/base36.hpp", -+ "include/libp2p/multi/multibase_codec/codecs/base_error.hpp", -+ "include/libp2p/multi/multicodec_type.hpp", -+ "include/libp2p/multi/uvarint.hpp", -+ "include/multibase/algorithm.h", -+ "include/multibase/basic_algorithm.h", -+ "include/multibase/encoding.h", -+ "include/smhasher/MurmurHash3.h", -+ "include/vocab/byte.h", -+ "include/vocab/byte_view.h", -+ "include/vocab/endian.h", -+ "include/vocab/expected.h", -+ "include/vocab/flat_mapset.h", -+ "include/vocab/html_escape.h", -+ "include/vocab/i128.h", -+ "include/vocab/raw_ptr.h", -+ "include/vocab/slash_delimited.h", -+ "include/vocab/span.h", -+ "include/vocab/stringify.h", -+ "src/ipfs_client/bases/b16_upper.h", -+ "src/ipfs_client/bases/b32.h", -+ "src/ipfs_client/block_requestor.cc", -+ "src/ipfs_client/car.cc", -+ "src/ipfs_client/car.h", -+ "src/ipfs_client/cid.cc", -+ "src/ipfs_client/context_api.cc", -+ "src/ipfs_client/crypto/openssl_sha2_256.cc", -+ "src/ipfs_client/crypto/openssl_sha2_256.h", -+ "src/ipfs_client/dag_cbor_value.cc", -+ "src/ipfs_client/dag_json_value.cc", -+ "src/ipfs_client/gateways.cc", -+ "src/ipfs_client/generated_directory_listing.cc", -+ "src/ipfs_client/generated_directory_listing.h", -+ "src/ipfs_client/gw/block_request_splitter.cc", -+ "src/ipfs_client/gw/default_requestor.cc", -+ "src/ipfs_client/gw/dnslink_requestor.cc", -+ "src/ipfs_client/gw/gateway_http_requestor.cc", -+ "src/ipfs_client/gw/gateway_http_requestor.h", -+ "src/ipfs_client/gw/gateway_request.cc", -+ "src/ipfs_client/gw/inline_request_handler.cc", -+ "src/ipfs_client/gw/requestor.cc", -+ "src/ipfs_client/gw/requestor_pool.cc", -+ "src/ipfs_client/gw/requestor_pool.h", -+ "src/ipfs_client/gw/terminating_requestor.cc", -+ "src/ipfs_client/http_request_description.cc", -+ "src/ipfs_client/identity_cid.cc", -+ "src/ipfs_client/ipfs_request.cc", -+ "src/ipfs_client/ipld/chunk.cc", -+ "src/ipfs_client/ipld/chunk.h", -+ "src/ipfs_client/ipld/dag_cbor_node.cc", -+ "src/ipfs_client/ipld/dag_cbor_node.h", -+ "src/ipfs_client/ipld/dag_json_node.cc", -+ "src/ipfs_client/ipld/dag_json_node.h", -+ "src/ipfs_client/ipld/dag_node.cc", -+ "src/ipfs_client/ipld/directory_shard.cc", -+ "src/ipfs_client/ipld/directory_shard.h", -+ "src/ipfs_client/ipld/ipns_name.cc", -+ "src/ipfs_client/ipld/ipns_name.h", -+ "src/ipfs_client/ipld/link.cc", -+ "src/ipfs_client/ipld/resolution_state.cc", -+ "src/ipfs_client/ipld/root.cc", -+ "src/ipfs_client/ipld/root.h", -+ "src/ipfs_client/ipld/small_directory.cc", -+ "src/ipfs_client/ipld/small_directory.h", -+ "src/ipfs_client/ipld/symlink.cc", -+ "src/ipfs_client/ipld/symlink.h", -+ "src/ipfs_client/ipld/unixfs_file.cc", -+ "src/ipfs_client/ipld/unixfs_file.h", -+ "src/ipfs_client/ipns_names.cc", -+ "src/ipfs_client/ipns_record.cc", -+ "src/ipfs_client/logger.cc", -+ "src/ipfs_client/multi_base.cc", -+ "src/ipfs_client/multi_hash.cc", -+ "src/ipfs_client/multicodec.cc", -+ "src/ipfs_client/orchestrator.cc", -+ "src/ipfs_client/path2url.cc", -+ "src/ipfs_client/path2url.h", -+ "src/ipfs_client/pb_dag.cc", -+ "src/ipfs_client/redirects.cc", -+ "src/ipfs_client/redirects.h", -+ "src/ipfs_client/response.cc", -+ "src/ipfs_client/signing_key_type.cc", -+ "src/libp2p/crypto/protobuf_key.hpp", -+ "src/libp2p/multi/multibase_codec/codecs/base16.cc", -+ "src/libp2p/multi/multibase_codec/codecs/base32.cc", -+ "src/libp2p/multi/multibase_codec/codecs/base36.cc", -+ "src/libp2p/multi/uvarint.cc", -+ "src/log_macros.h", -+ "src/smhasher/MurmurHash3.cc", -+ "src/vocab/byte_view.cc", -+ "src/vocab/slash_delimited.cc", -+ ] -+ static_library("ipfs_client") { -+ if (is_nacl) { -+ sources = cxx_sources - [ -+ "src/ipfs_client/dag_block.cc", -+ "src/ipfs_client/gw/gateway_request.cc", -+ "src/ipfs_client/gw/gateway_http_requestor.cc", -+ "src/ipfs_client/gw/requestor.cc", -+ "src/ipfs_client/ipld/dag_node.cc", -+ "src/ipfs_client/ipns_names.cc", -+ "src/ipfs_client/ipns_record.cc", -+ "src/ipfs_client/logger.cc", -+ "src/ipfs_client/signing_key_type.cc", -+ ] -+ } else { -+ sources = cxx_sources -+ } -+ include_dirs = [ -+ "include", -+ "src", -+ "..", -+ "../boringssl/src/include" -+ ] -+ public_configs = [ -+ ":external_config" -+ ] -+ public_deps = [ -+ "//third_party/abseil-cpp:absl", -+ "//base", -+ ] -+ deps = [ -+ "//third_party/abseil-cpp:absl", -+ "//base", -+ ] -+ if (!is_nacl) { -+ public_deps += [ -+ ":protos", -+ "//third_party/protobuf:protobuf_lite", -+ ] -+ } -+ } -+} -+ -+import("//third_party/protobuf/proto_library.gni") -+ -+proto_library("protos") { -+ sources = [ -+ "ipns_record.proto", -+ "keys.proto", -+ "pb_dag.proto", -+ "unix_fs.proto", -+ ] -+} -diff --git a/third_party/ipfs_client/README.chromium b/third_party/ipfs_client/README.chromium -new file mode 100644 -index 0000000000000..e69de29bb2d1d -diff --git a/third_party/ipfs_client/README.md b/third_party/ipfs_client/README.md -new file mode 100644 -index 0000000000000..0e6ffadd2ebbc ---- /dev/null -+++ b/third_party/ipfs_client/README.md -@@ -0,0 +1,6 @@ -+# ipfs-client -+ -+## TODO -+ -+Need to fill out this README to explain how to use ipfs-client in other contexts. -+ -diff --git a/third_party/ipfs_client/args.gni b/third_party/ipfs_client/args.gni -new file mode 100644 -index 0000000000000..bb13519b23e89 ---- /dev/null -+++ b/third_party/ipfs_client/args.gni -@@ -0,0 +1,3 @@ -+declare_args() { -+ enable_ipfs = false -+} -diff --git a/third_party/ipfs_client/conanfile.py b/third_party/ipfs_client/conanfile.py -new file mode 100644 -index 0000000000000..289e3b48f8ad1 ---- /dev/null -+++ b/third_party/ipfs_client/conanfile.py -@@ -0,0 +1,79 @@ -+from conan import ConanFile -+from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout -+from shutil import copyfile, which -+import sys -+from os.path import dirname, isfile, join, realpath -+ -+here = realpath(dirname(__file__)) -+sys.path.append(realpath(join(here, '..', 'cmake'))) -+sys.path.append(here) -+ -+try: -+ import version -+ VERSION = version.deduce() -+except ImportError: -+ VERSION = open(join(here,'version.txt'), 'r').read().strip() -+ -+ -+class IpfsChromium(ConanFile): -+ name = "ipfs_client" -+ version = VERSION -+ settings = "os", "compiler", "build_type", "arch" -+ # generators = "CMakeDeps", 'CMakeToolchain' -+ _PB = 'protobuf/3.20.0' -+ require_transitively = [ -+ 'abseil/20230125.3', -+ 'boost/1.81.0', -+ 'bzip2/1.0.8', -+ 'c-ares/1.22.1', -+ 'nlohmann_json/3.11.2', -+ 'openssl/1.1.1t', -+ _PB, -+ ] -+ # default_options = {"boost/*:header_only": True} -+ default_options = { -+ "boost/*:bzip2": True, -+ "boost/*:with_stacktrace_backtrace": True -+ } -+ tool_requires = [ -+ 'cmake/3.22.6', -+ 'ninja/1.11.1', -+ _PB, -+ ] -+ extensions = ['h', 'cc', 'hpp', 'proto'] -+ exports_sources = [ '*.txt' ] + [f'**/*.{e}' for e in extensions] -+ exports = 'version.txt' -+ package_type = 'static-library' -+ -+ -+ def generate(self): -+ tc = CMakeToolchain(self, 'Ninja') -+ tc.generate() -+ d = CMakeDeps(self) -+ d.generate() -+ -+ def build(self): -+ cmake = CMake(self) -+ cmake.configure(variables={ -+ "CXX_VERSION": 20, -+ "INSIDE_CONAN": True -+ }) -+ cmake.build(build_tool_args=['--verbose']) -+ -+ def package(self): -+ cmake = CMake(self) -+ cmake.install() -+ print(self.cpp_info.objects) -+ -+ def package_info(self): -+ self.cpp_info.libs = ["ipfs_client"] -+ -+ def build_requirements(self): -+ if not which("doxygen"): -+ self.tool_requires("doxygen/1.9.4") -+ def layout(self): -+ cmake_layout(self) -+ -+ def requirements(self): -+ for l in self.require_transitively: -+ self.requires(l, transitive_headers=True) -diff --git a/third_party/ipfs_client/include/ipfs_client/block_requestor.h b/third_party/ipfs_client/include/ipfs_client/block_requestor.h -new file mode 100644 -index 0000000000000..42ae26e519760 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/block_requestor.h -@@ -0,0 +1,48 @@ -+#ifndef BLOCK_REQUESTOR_H_ -+#define BLOCK_REQUESTOR_H_ -+ -+#include -+ -+#include -+#include -+#include -+ -+namespace ipfs { -+ -+/*! -+ * \brief The urgency of a gateway request -+ * \details Determines how many gateways should be involved, and how burdened a -+ * gateway should be before not also taking this one on concurrently. Zero is -+ * a special value that indicates the block isn't actually required now, but -+ * rather might be required soonish (prefetch). There are some cases of -+ * special handling for that. -+ */ -+using Priority = std::uint_least16_t; -+ -+class DagListener; -+ -+/*! -+ * \brief Interface for classes that can asynchronously fetch a block for a CID -+ * \details This is one of the interfaces using code is meant to implement. -+ * Common usages: -+ * * A class that requests blocks from gateways -+ * * A cache that must act asynchronously (perhaps on-disk) -+ * * ChainedRequestors : a chain-of-responsibility combining multiple -+ */ -+class BlockRequestor { -+ public: -+ /** -+ * \brief Request a single block from gateway(s). -+ * \param cid - MB-MH string representation of the Content IDentifier -+ * \param dl - Someone who may be interested -+ * \param priority - Urgency of the request -+ * \note The DagListener is mostly about lifetime extension, since it's -+ * waiting on something which is waiting on this -+ */ -+ virtual void RequestByCid(std::string cid, -+ std::shared_ptr dl, -+ Priority priority) = 0; -+}; -+} // namespace ipfs -+ -+#endif // BLOCK_REQUESTOR_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/block_storage.h b/third_party/ipfs_client/include/ipfs_client/block_storage.h -new file mode 100644 -index 0000000000000..525bae463f50d ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/block_storage.h -@@ -0,0 +1,144 @@ -+#ifndef IPFS_BLOCKS_H_ -+#define IPFS_BLOCKS_H_ -+ -+#include "pb_dag.h" -+#include "vocab/flat_mapset.h" -+ -+#include -+#include -+#include -+ -+namespace libp2p::multi { -+struct ContentIdentifier; -+} -+ -+namespace ipfs { -+class DagListener; -+class ContextApi; -+ -+class UnixFsPathResolver; -+ -+/*! -+ * \brief Immediate access to recently-accessed blocks -+ * \details Blocks are held in-memory, using pretty standard containers, as -+ * already-parsed ipfs::Block objects. -+ */ -+class BlockStorage { -+ public: -+ BlockStorage(); -+ -+ BlockStorage(BlockStorage const&) = delete; -+ -+ ~BlockStorage() noexcept; -+ -+ /*! -+ * \brief Store a Block for later access. -+ * \param cid_str - The string representation of cid -+ * \param cid - The Content IDentifier -+ * \param headers - Associated HTTP headers -+ * \param body - The raw bytes of the block -+ * \param block - The block being stored -+ * \return Whether this block is now stored in *this -+ */ -+ bool Store(std::string cid_str, -+ Cid const& cid, -+ std::string headers, -+ std::string const& body, -+ PbDag&& block); -+ -+ /*! -+ * \name Store (Convenience) -+ * Convenience functions for -+ * ipfs::BlockStorage::Store(std::string,Cid const&,std::string,std::string -+ * const&,Block&&) -+ */ -+ ///@{ -+ bool Store(std::string headers, std::string const& body, PbDag&& block); -+ bool Store(std::string const& cid, std::string headers, std::string body); -+ bool Store(std::string cid_str, -+ Cid const& cid, -+ std::string headers, -+ std::string body); -+ bool Store(Cid const& cid, -+ std::string headers, -+ std::string const& body, -+ PbDag&&); -+ ///@} -+ -+ /*! -+ * \brief Get a block! -+ * \details cid must match string-wise exactly: same multibase & all. -+ * For identity codecs, returns the data even if not stored. -+ * \param cid - String representation of the CID for the block. -+ * \return Non-owning pointer if found, nullptr -+ * otherwise -+ */ -+ PbDag const* Get(std::string const& cid); -+ -+ /*! -+ * \brief Get HTTP headers associated with the block -+ * \param cid - String representation of the CID for the block. -+ * \return nullptr iff ! Get(cid) ; -+ * Empty string if the headers have never been set ; -+ * Otherwise, application-specific std::string (as-stored) -+ */ -+ std::string const* GetHeaders(std::string const& cid); -+ -+ /*! -+ * \brief Indicate that a particular path resolver is waiting on a CID to -+ * become available -+ */ -+ void AddListening(UnixFsPathResolver*); -+ -+ /*! -+ * \brief Indicate that a particular path resolver is no longer waiting -+ */ -+ void StopListening(UnixFsPathResolver*); -+ -+ /*! -+ * \brief Normally called internally -+ * \details Checks to see if any listening path resolver appears to be waiting -+ * on a CID which is now available. -+ */ -+ void CheckListening(); -+ -+ /*! -+ * \brief Type for callbacks about new blocks -+ * \details The parameters to the hook are -+ * * CID string -+ * * HTTP headers -+ * * raw bytes of the block -+ */ -+ using SerializedStorageHook = -+ std::function; -+ -+ /*! -+ * \brief Register a callback that will be called when any new block goes into -+ * storage -+ */ -+ void AddStorageHook(SerializedStorageHook); -+ -+ private: -+ struct Record { -+ Record(); -+ ~Record() noexcept; -+ std::time_t last_access = 0L; -+ std::string cid_str = {}; -+ PbDag block = {}; -+ std::string headers = {}; -+ }; -+ std::list records_ = std::list(0xFFUL); -+ using Iter = decltype(records_)::iterator; -+ flat_map cid2record_; -+ flat_set listening_; -+ bool checking_ = false; -+ std::vector hooks_; -+ -+ Record const* GetInternal(std::string const&); -+ Record* FindFree(std::time_t); -+ Record* Allocate(); -+ Record* StoreIdentity(std::string const&, Cid const&); -+}; -+} // namespace ipfs -+ -+#endif // IPFS_BLOCKS_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/cid.h b/third_party/ipfs_client/include/ipfs_client/cid.h -new file mode 100644 -index 0000000000000..d957d23e5e7e4 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/cid.h -@@ -0,0 +1,38 @@ -+#ifndef IPFS_CID_H_ -+#define IPFS_CID_H_ -+ -+#include "multi_hash.h" -+#include "multicodec.h" -+ -+#include -+ -+#include -+#include -+ -+namespace ipfs { -+class Cid { -+ MultiCodec codec_ = MultiCodec::INVALID; -+ MultiHash hash_; -+ -+ public: -+ Cid() = default; -+ Cid(MultiCodec, MultiHash); -+ explicit Cid(std::string_view); -+ explicit Cid(ByteView); -+ bool ReadStart(ByteView&); -+ -+ bool valid() const; -+ MultiCodec codec() const { return codec_; } -+ MultiHash const& multi_hash() const { return hash_; } -+ ByteView hash() const; -+ HashType hash_type() const; -+ -+ std::string to_string() const; -+ -+ constexpr static std::size_t MinSerializedLength = -+ 1 /*cid version*/ + 1 /*codec*/ + 1 /*hash type*/ + -+ 1 /*hash len, could be zero*/; -+}; -+} // namespace ipfs -+ -+#endif // IPFS_CID_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/context_api.h b/third_party/ipfs_client/include/ipfs_client/context_api.h -new file mode 100644 -index 0000000000000..da524bb9a86a5 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/context_api.h -@@ -0,0 +1,86 @@ -+#ifndef IPFS_CONTEXT_API_H_ -+#define IPFS_CONTEXT_API_H_ -+ -+#include "crypto/hasher.h" -+#include "dag_cbor_value.h" -+#include "http_request_description.h" -+#include "ipns_cbor_entry.h" -+#include "multi_hash.h" -+#include "signing_key_type.h" -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+namespace ipfs { -+class IpfsRequest; -+class DagJsonValue; -+ -+/** -+ * \brief Interface that provides functionality from whatever -+ * environment you're using this library in. -+ * \note A user of this library must implement this, but will probably do so -+ * only once. -+ */ -+class ContextApi : public std::enable_shared_from_this { -+ public: -+ ContextApi(); -+ virtual ~ContextApi() noexcept {} -+ -+ using HttpRequestDescription = ::ipfs::HttpRequestDescription; -+ using HeaderAccess = std::function; -+ using HttpCompleteCallback = -+ std::function; -+ virtual void SendHttpRequest(HttpRequestDescription, -+ HttpCompleteCallback cb) const = 0; -+ -+ using DnsTextResultsCallback = -+ std::function const&)>; -+ using DnsTextCompleteCallback = std::function; -+ virtual void SendDnsTextRequest(std::string hostname, -+ DnsTextResultsCallback, -+ DnsTextCompleteCallback) = 0; -+ -+ /*! -+ * \brief Determine a mime type for a given file. -+ * \param extension - "File extension" not including ., e.g. "html" -+ * \param content - The content of the resource or a large prefix thereof -+ * \param url - A URL it was fetched from (of any sort, ipfs:// is fine) -+ */ -+ virtual std::string MimeType(std::string extension, -+ std::string_view content, -+ std::string const& url) const = 0; -+ -+ /*! -+ * \brief Remove URL escaping, e.g. %20 -+ * \param url_comp - a single component of the URL, e.g. a element of the path -+ * not including / -+ * \return The unescaped string -+ */ -+ virtual std::string UnescapeUrlComponent(std::string_view url_comp) const = 0; -+ -+ virtual std::unique_ptr ParseCbor(ByteView) const = 0; -+ virtual std::unique_ptr ParseJson(std::string_view) const = 0; -+ -+ using IpnsCborEntry = ::ipfs::IpnsCborEntry; -+ -+ using SigningKeyType = ::ipfs::SigningKeyType; -+ using ByteView = ::ipfs::ByteView; -+ virtual bool VerifyKeySignature(SigningKeyType, -+ ByteView signature, -+ ByteView data, -+ ByteView key_bytes) const = 0; -+ -+ std::optional> Hash(HashType, ByteView data); -+ -+ protected: -+ std::unordered_map> hashers_; -+}; -+ -+} // namespace ipfs -+ -+#endif -diff --git a/third_party/ipfs_client/include/ipfs_client/crypto/hasher.h b/third_party/ipfs_client/include/ipfs_client/crypto/hasher.h -new file mode 100644 -index 0000000000000..5222d622ce998 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/crypto/hasher.h -@@ -0,0 +1,18 @@ -+#ifndef IPFS_HASHER_H_ -+#define IPFS_HASHER_H_ -+ -+#include -+ -+#include -+#include -+ -+namespace ipfs::crypto { -+class Hasher { -+ public: -+ virtual ~Hasher() noexcept {} -+ -+ virtual std::optional> hash(ByteView) = 0; -+}; -+} // namespace ipfs::crypto -+ -+#endif // IPFS_HASHER_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/dag_cbor_value.h b/third_party/ipfs_client/include/ipfs_client/dag_cbor_value.h -new file mode 100644 -index 0000000000000..71cb538776361 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/dag_cbor_value.h -@@ -0,0 +1,35 @@ -+#ifndef IPFS_DAG_CBOR_VALUE_H_ -+#define IPFS_DAG_CBOR_VALUE_H_ -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+namespace ipfs { -+class DagCborValue { -+ public: -+ virtual std::unique_ptr at(std::string_view) const = 0; -+ virtual std::optional as_unsigned() const = 0; -+ virtual std::optional as_signed() const = 0; -+ virtual std::optional as_float() const = 0; -+ virtual std::optional as_string() const = 0; -+ virtual std::optional> as_bytes() const = 0; -+ virtual std::optional as_bool() const = 0; -+ virtual std::optional as_link() const = 0; -+ virtual bool is_map() const = 0; -+ virtual bool is_array() const = 0; -+ using MapElementCallback = std::function; -+ using ArrayElementCallback = std::function; -+ virtual void iterate_map(MapElementCallback) const = 0; -+ virtual void iterate_array(ArrayElementCallback) const = 0; -+ std::string html() const; -+ void html(std::ostream&) const; -+ virtual ~DagCborValue() noexcept {} -+}; -+} -+ -+#endif // IPFS_DAG_CBOR_VALUE_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/dag_json_value.h b/third_party/ipfs_client/include/ipfs_client/dag_json_value.h -new file mode 100644 -index 0000000000000..32e170c439438 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/dag_json_value.h -@@ -0,0 +1,26 @@ -+#ifndef IPFS_DAG_JSON_VALUE_H_ -+#define IPFS_DAG_JSON_VALUE_H_ -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+namespace ipfs { -+class DagJsonValue { -+ public: -+ virtual std::string pretty_print() const = 0; -+ virtual std::unique_ptr operator[](std::string_view) const = 0; -+ virtual std::optional get_if_string() const = 0; -+ virtual std::optional> object_keys() const = 0; -+ virtual bool iterate_list(std::function) const = 0; -+ virtual ~DagJsonValue() noexcept; -+ -+ std::optional get_if_link() const; -+}; -+} // namespace ipfs -+ -+#endif // IPFS_DAG_JSON_VALUE_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/gateways.h b/third_party/ipfs_client/include/ipfs_client/gateways.h -new file mode 100644 -index 0000000000000..0063b52525df6 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/gateways.h -@@ -0,0 +1,66 @@ -+#ifndef CHROMIUM_IPFS_GATEWAYS_H_ -+#define CHROMIUM_IPFS_GATEWAYS_H_ -+ -+#include "vocab/flat_mapset.h" -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+namespace ipfs { -+struct GatewaySpec { -+ std::string prefix; -+ unsigned strength; -+ bool operator<(GatewaySpec const& r) const { -+ if (strength == r.strength) { -+ return prefix < r.prefix; -+ } -+ return strength > r.strength; -+ } -+}; -+using GatewayList = std::vector; -+class ContextApi; -+ -+/*! -+ * \brief All known IPFS gateways -+ */ -+class Gateways { -+ flat_map known_gateways_; -+ std::default_random_engine random_engine_; -+ std::geometric_distribution dist_; -+ int up_log_ = 1; -+ -+ public: -+ /*! -+ * \brief The hard-coded list of gateways at startup -+ */ -+ static GatewayList DefaultGateways(); -+ -+ Gateways(); -+ ~Gateways(); -+ GatewayList GenerateList(); ///< Get a sorted list of gateways for requesting -+ -+ /*! -+ * \brief Good gateway, handle more! -+ * \param prefix - identify the gateway by its URL prefix -+ */ -+ void promote(std::string const& prefix); -+ -+ /*! -+ * \brief Bad gateway, move toward the back of the line. -+ * \param prefix - identify the gateway by its URL prefix -+ */ -+ void demote(std::string const& prefix); -+ -+ /*! -+ * \brief Bulk load a bunch of new gateways -+ * \param prefices - list of URL gateways by prefix -+ */ -+ void AddGateways(std::vector prefices); -+}; -+} // namespace ipfs -+ -+#endif // CHROMIUM_IPFS_GATEWAYS_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/gw/block_request_splitter.h b/third_party/ipfs_client/include/ipfs_client/gw/block_request_splitter.h -new file mode 100644 -index 0000000000000..0f308a996d360 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/gw/block_request_splitter.h -@@ -0,0 +1,17 @@ -+#ifndef IPFS_BLOCK_REQUEST_SPLITTER_H_ -+#define IPFS_BLOCK_REQUEST_SPLITTER_H_ -+ -+#include "requestor.h" -+ -+namespace ipfs { -+class ContextApi; -+} -+ -+namespace ipfs::gw { -+class BlockRequestSplitter final : public Requestor { -+ HandleOutcome handle(RequestPtr) override; -+ std::string_view name() const override; -+}; -+} // namespace ipfs::gw -+ -+#endif // IPFS_BLOCK_REQUEST_SPLITTER_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/gw/default_requestor.h b/third_party/ipfs_client/include/ipfs_client/gw/default_requestor.h -new file mode 100644 -index 0000000000000..06b5970e1d103 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/gw/default_requestor.h -@@ -0,0 +1,14 @@ -+#ifndef IPFS_DEFAULT_REQUESTOR_LIST_H_ -+#define IPFS_DEFAULT_REQUESTOR_LIST_H_ -+ -+#include "requestor.h" -+ -+#include -+ -+namespace ipfs::gw { -+std::shared_ptr default_requestor(GatewayList, -+ std::shared_ptr early, -+ std::shared_ptr); -+} -+ -+#endif // IPFS_DEFAULT_REQUESTOR_LIST_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/gw/dnslink_requestor.h b/third_party/ipfs_client/include/ipfs_client/gw/dnslink_requestor.h -new file mode 100644 -index 0000000000000..4910fe61976c8 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/gw/dnslink_requestor.h -@@ -0,0 +1,20 @@ -+#ifndef IPFS_DNSLINK_REQUESTOR_H_ -+#define IPFS_DNSLINK_REQUESTOR_H_ -+ -+#include "requestor.h" -+ -+namespace ipfs { -+class ContextApi; -+} -+ -+namespace ipfs::gw { -+class DnsLinkRequestor final : public Requestor { -+ public: -+ explicit DnsLinkRequestor(std::shared_ptr); -+ -+ HandleOutcome handle(RequestPtr) override; -+ std::string_view name() const override; -+}; -+} // namespace ipfs::gw -+ -+#endif // IPFS_DNSLINK_REQUESTOR_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/gw/gateway_request.h b/third_party/ipfs_client/include/ipfs_client/gw/gateway_request.h -new file mode 100644 -index 0000000000000..efded265680b8 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/gw/gateway_request.h -@@ -0,0 +1,77 @@ -+#ifndef IPFS_TRUSTLESS_REQUEST_H_ -+#define IPFS_TRUSTLESS_REQUEST_H_ -+ -+#include -+#include -+ -+#include -+ -+#include -+#include -+#include -+#include -+ -+namespace ipfs { -+class IpfsRequest; -+class Orchestrator; -+namespace ipld { -+class DagNode; -+} -+} // namespace ipfs -+ -+namespace ipfs::gw { -+class Requestor; -+ -+enum class Type : char { -+ Block, -+ Car, -+ Ipns, -+ DnsLink, -+ Providers, -+ Identity, -+ Zombie -+}; -+std::string_view name(Type); -+ -+constexpr std::size_t BLOCK_RESPONSE_BUFFER_SIZE = 2 * 1024 * 1024; -+ -+class GatewayRequest { -+ std::shared_ptr orchestrator_; -+ std::vector> bytes_received_hooks; -+ -+ void ParseNodes(std::string_view, ContextApi* api); -+ -+ public: -+ Type type; -+ std::string main_param; ///< CID, IPNS name, hostname -+ std::string path; ///< For CAR requests -+ std::shared_ptr dependent; -+ std::optional cid; -+ short parallel = 0; -+ std::string affinity; -+ -+ std::string url_suffix() const; -+ std::string_view accept() const; -+ std::string_view identity_data() const; -+ short timeout_seconds() const; -+ bool is_http() const; -+ std::optional max_response_size() const; -+ std::optional describe_http() const; -+ std::string debug_string() const; -+ void orchestrator(std::shared_ptr const&); -+ -+ bool RespondSuccessfully(std::string_view, -+ std::shared_ptr const& api); -+ void Hook(std::function); -+ bool PartiallyRedundant() const; -+ -+ static std::shared_ptr fromIpfsPath(SlashDelimited); -+}; -+ -+} // namespace ipfs::gw -+ -+inline std::ostream& operator<<(std::ostream& s, ipfs::gw::Type t) { -+ return s << name(t); -+} -+ -+#endif // IPFS_TRUSTLESS_REQUEST_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/gw/inline_request_handler.h b/third_party/ipfs_client/include/ipfs_client/gw/inline_request_handler.h -new file mode 100644 -index 0000000000000..0301c561c5735 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/gw/inline_request_handler.h -@@ -0,0 +1,14 @@ -+#ifndef IPFS_INLINE_REQUEST_HANDLER_H_ -+#define IPFS_INLINE_REQUEST_HANDLER_H_ -+ -+#include "requestor.h" -+ -+namespace ipfs::gw { -+class InlineRequestHandler final : public Requestor { -+ public: -+ HandleOutcome handle(RequestPtr) override; -+ std::string_view name() const override; -+}; -+} // namespace ipfs::gw -+ -+#endif // IPFS_INLINE_REQUEST_HANDLER_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/gw/requestor.h b/third_party/ipfs_client/include/ipfs_client/gw/requestor.h -new file mode 100644 -index 0000000000000..634c36730b1ea ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/gw/requestor.h -@@ -0,0 +1,55 @@ -+#ifndef IPFS_REQUESTOR_H_ -+#define IPFS_REQUESTOR_H_ -+ -+#include -+#include -+#include -+ -+namespace ipfs::ipld { -+class DagNode; -+} -+namespace ipfs { -+class ContextApi; -+struct Response; -+} // namespace ipfs -+ -+namespace ipfs::gw { -+class GatewayRequest; -+using RequestPtr = std::shared_ptr; -+ -+class Requestor : public std::enable_shared_from_this { -+ protected: -+ Requestor() {} -+ -+ friend class RequestorPool; -+ enum class HandleOutcome : char { -+ NOT_HANDLED = 'N', -+ PENDING = 'P', -+ DONE = 'D', -+ PARALLEL = 'L', -+ MAYBE_LATER = 'M' -+ }; -+ virtual HandleOutcome handle(RequestPtr) = 0; -+ -+ void definitive_failure(RequestPtr) const; -+ void forward(RequestPtr) const; -+ -+ std::shared_ptr api_; -+ -+ public: -+ using RequestPtr = ::ipfs::gw::RequestPtr; -+ virtual std::string_view name() const = 0; -+ -+ virtual ~Requestor() noexcept {} -+ void request(std::shared_ptr); -+ Requestor& or_else(std::shared_ptr p); -+ void api(std::shared_ptr); -+ -+ void TestAccess(void*); -+ -+ private: -+ std::shared_ptr next_; -+}; -+} // namespace ipfs::gw -+ -+#endif // IPFS_REQUESTOR_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/gw/terminating_requestor.h b/third_party/ipfs_client/include/ipfs_client/gw/terminating_requestor.h -new file mode 100644 -index 0000000000000..3fe7a01e752f5 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/gw/terminating_requestor.h -@@ -0,0 +1,15 @@ -+#ifndef IPFS_TERMINATING_REQUESTOR_H_ -+#define IPFS_TERMINATING_REQUESTOR_H_ -+ -+#include "requestor.h" -+ -+namespace ipfs::gw { -+class TerminatingRequestor : public Requestor { -+ public: -+ using HandleOutcome = Requestor::HandleOutcome; -+ std::string_view name() const override; -+ HandleOutcome handle(RequestPtr) override; -+}; -+} // namespace ipfs::gw -+ -+#endif // IPFS_TERMINATING_REQUESTOR_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/http_request_description.h b/third_party/ipfs_client/include/ipfs_client/http_request_description.h -new file mode 100644 -index 0000000000000..f3f07d58ea199 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/http_request_description.h -@@ -0,0 +1,20 @@ -+#ifndef IPFS_HTTP_REQUEST_DESCRIPTION_H_ -+#define IPFS_HTTP_REQUEST_DESCRIPTION_H_ -+ -+#include -+#include -+ -+#include -+ -+namespace ipfs { -+struct HttpRequestDescription { -+ std::string url; -+ int timeout_seconds; -+ std::string accept; -+ std::optional max_response_size; -+ bool operator==(HttpRequestDescription const&) const; -+ bool operator<(HttpRequestDescription const&) const; -+}; -+} // namespace ipfs -+ -+#endif // IPFS_HTTP_REQUEST_DESCRIPTION_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/identity_cid.h b/third_party/ipfs_client/include/ipfs_client/identity_cid.h -new file mode 100644 -index 0000000000000..29efd30d1c6b2 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/identity_cid.h -@@ -0,0 +1,14 @@ -+#ifndef IPFS_IDENTITY_CID_H_ -+#define IPFS_IDENTITY_CID_H_ 1 -+ -+#include -+ -+#include -+ -+namespace ipfs { -+namespace id_cid { -+ipfs::Cid forText(std::string_view); -+} // namespace id_cid -+} // namespace ipfs -+ -+#endif -diff --git a/third_party/ipfs_client/include/ipfs_client/ipfs_request.h b/third_party/ipfs_client/include/ipfs_client/ipfs_request.h -new file mode 100644 -index 0000000000000..eda8bdfa7010b ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/ipfs_request.h -@@ -0,0 +1,33 @@ -+#ifndef IPFS_IPFS_REQUEST_H_ -+#define IPFS_IPFS_REQUEST_H_ -+ -+#include -+ -+#include -+#include -+#include -+ -+namespace ipfs { -+struct Response; -+class IpfsRequest { -+ public: -+ using Finisher = std::function; -+ -+ private: -+ std::string path_; -+ Finisher callback_; -+ std::size_t waiting_ = 0UL; -+ -+ public: -+ IpfsRequest(std::string path, Finisher); -+ SlashDelimited path() const { return SlashDelimited{path_}; } -+ void finish(Response& r); -+ void till_next(std::size_t); -+ bool ready_after(); -+ void new_path(std::string_view); -+ -+ static std::shared_ptr fromUrl(std::string url, Finisher); -+}; -+} // namespace ipfs -+ -+#endif // IPFS_IPFS_REQUEST_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/ipld/dag_node.h b/third_party/ipfs_client/include/ipfs_client/ipld/dag_node.h -new file mode 100644 -index 0000000000000..1c66f4fd1c755 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/ipld/dag_node.h -@@ -0,0 +1,102 @@ -+#ifndef IPFS_DAG_NODE_H_ -+#define IPFS_DAG_NODE_H_ -+ -+#include "link.h" -+#include "resolution_state.h" -+ -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+namespace ipfs { -+class PbDag; -+class ContextApi; -+struct ValidatedIpns; -+} // namespace ipfs -+namespace libp2p::multi { -+struct ContentIdentifier; -+} -+namespace ipfs::ipld { -+ -+using NodePtr = std::shared_ptr; -+class DirShard; -+ -+struct MoreDataNeeded { -+ MoreDataNeeded(std::string one) : ipfs_abs_paths_{{one}} {} -+ template -+ MoreDataNeeded(Range const& many) -+ : ipfs_abs_paths_(many.begin(), many.end()) {} -+ std::vector ipfs_abs_paths_; -+ bool insist_on_car = false; -+}; -+enum class ProvenAbsent {}; -+struct PathChange { -+ std::string new_path; -+}; -+ -+using ResolveResult = -+ std::variant; -+/** -+ * @brief A block, an IPNS record, etc. -+ */ -+class DagNode : public std::enable_shared_from_this { -+ Link* FindChild(std::string_view); -+ static void Descend(ResolutionState&); -+ -+ protected: -+ std::vector> links_; -+ std::shared_ptr api_; -+ -+ ///< When the next path element is what's needed, and it should already be a -+ ///< link known about... -+ ResolveResult CallChild(ResolutionState&); -+ -+ ///< As before, but it might be possible to create on the fly if not known -+ ResolveResult CallChild(ResolutionState&, -+ std::function gen_child); -+ -+ ///< When the child's name is not the next element in the path, but it must be -+ ///< known about. e.g. index.html for a path ending in a directory -+ ResolveResult CallChild(ResolutionState&, std::string_view link_key); -+ -+ ///< Add the link if not present, then CallChild(ResolutionState) -+ ResolveResult CallChild(ResolutionState&, -+ std::string_view link_key, -+ std::string_view block_key); -+ -+ public: -+ virtual ResolveResult resolve(ResolutionState& params) = 0; -+ ResolveResult resolve(SlashDelimited initial_path, BlockLookup); -+ -+ static NodePtr fromBytes(std::shared_ptr const& api, -+ Cid const&, -+ ByteView bytes); -+ static NodePtr fromBytes(std::shared_ptr const& api, -+ Cid const&, -+ std::string_view bytes); -+ static NodePtr fromBlock(PbDag const&); -+ static NodePtr fromIpnsRecord(ValidatedIpns const&); -+ -+ virtual ~DagNode() noexcept {} -+ -+ virtual NodePtr rooted(); -+ virtual NodePtr deroot(); -+ virtual DirShard* as_hamt(); // Wish I had access to dynamic_cast -+ -+ void set_api(std::shared_ptr); -+}; -+} // namespace ipfs::ipld -+ -+std::ostream& operator<<(std::ostream&, ipfs::ipld::PathChange const&); -+ -+#endif // IPFS_DAG_NODE_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/ipld/link.h b/third_party/ipfs_client/include/ipfs_client/ipld/link.h -new file mode 100644 -index 0000000000000..a0d290b25dd3d ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/ipld/link.h -@@ -0,0 +1,22 @@ -+#ifndef IPFS_LINK_H_ -+#define IPFS_LINK_H_ -+ -+#include -+#include -+ -+namespace ipfs::ipld { -+ -+class DagNode; -+using Ptr = std::shared_ptr; -+ -+class Link { -+ public: -+ std::string cid; -+ Ptr node; -+ -+ Link(std::string); -+ explicit Link(std::string, std::shared_ptr); -+}; -+} // namespace ipfs::ipld -+ -+#endif // IPFS_LINK_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/ipld/resolution_state.h b/third_party/ipfs_client/include/ipfs_client/ipld/resolution_state.h -new file mode 100644 -index 0000000000000..82e330cea4355 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/ipld/resolution_state.h -@@ -0,0 +1,36 @@ -+#ifndef IPFS_RESOLUTION_STATE_H_ -+#define IPFS_RESOLUTION_STATE_H_ -+ -+#include -+ -+#include -+#include -+ -+namespace ipfs { -+class ContextApi; -+} -+ -+namespace ipfs::ipld { -+class DagNode; -+using NodePtr = std::shared_ptr; -+using BlockLookup = std::function; -+ -+class ResolutionState { -+ friend class DagNode; -+ std::string resolved_path_components; -+ SlashDelimited unresolved_path; -+ BlockLookup get_available_block; -+ -+ public: -+ SlashDelimited MyPath() const; -+ SlashDelimited PathToResolve() const; -+ bool IsFinalComponent() const; -+ std::string NextComponent(ContextApi const*) const; -+ NodePtr GetBlock(std::string const& block_key) const; -+ -+ ResolutionState WithPath(std::string_view) const; -+ ResolutionState RestartResolvedPath() const; -+}; -+} // namespace ipfs::ipld -+ -+#endif // IPFS_RESOLUTION_STATE_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/ipns_cbor_entry.h b/third_party/ipfs_client/include/ipfs_client/ipns_cbor_entry.h -new file mode 100644 -index 0000000000000..230339793543c ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/ipns_cbor_entry.h -@@ -0,0 +1,21 @@ -+#ifndef IPFS_IPNS_CBOR_ENTRY_H_ -+#define IPFS_IPNS_CBOR_ENTRY_H_ -+ -+#include -+#include -+ -+namespace ipfs { -+/*! -+ * \brief Parsed out data contained in the CBOR data of an IPNS record. -+ */ -+struct IpnsCborEntry { -+ std::string value; ///< The "value" (target) the name points at -+ std::string validity; ///< Value to compare for validity (i.e. expiration) -+ std::uint64_t validityType; ///< Way to deterimine current validity -+ std::uint64_t sequence; ///< Distinguish other IPNS records for the same name -+ std::uint64_t ttl; ///< Recommended caching time -+}; -+ -+} // namespace ipfs -+ -+#endif // IPFS_IPNS_CBOR_ENTRY_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/ipns_names.h b/third_party/ipfs_client/include/ipfs_client/ipns_names.h -new file mode 100644 -index 0000000000000..b611365b87874 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/ipns_names.h -@@ -0,0 +1,69 @@ -+#ifndef IPNS_NAME_RESOLVER_H_ -+#define IPNS_NAME_RESOLVER_H_ -+ -+#include -+#include -+ -+#include -+ -+namespace ipfs { -+ -+/*! -+ * \brief Fast synchronous access to IPNS & DNSLink name resolution -+ */ -+class IpnsNames { -+ flat_map names_; -+ -+ public: -+ IpnsNames(); -+ ~IpnsNames(); -+ -+ /*! -+ * \brief Get the already-known "value"/target of a given name -+ * \param name - either a mb-mf IPNS (key) name, or a host with DNSLink -+ * \return -+ * * if resolution is incomplete: "" -+ * * if it is known not to resolve: kNoSuchName -+ * * otherwise an IPFS path witout leading /, e.g.: -+ * - ipfs/bafybeicfqz46dj67nkhxaylqd5sknnidsr4oaw4hhsjrgdmcwt73sow2d4/ -+ * - ipns/k51qzi5uqu5dlvj2baxnqndepeb86cbk3ng7n3i46uzyxzyqj2xjonzllnv0v8 -+ */ -+ std::string_view NameResolvedTo(std::string_view name) const; -+ -+ /*! -+ * \brief Store an IPNS record that already validated for this name -+ * \param name - The name that resolves with this -+ * \param rec - The record modulo validation bits -+ */ -+ void AssignName(std::string const& name, ValidatedIpns rec); -+ -+ /*! -+ * \brief Assign a target path to a DNSLink host -+ * \param host - The original host NOT including a "_dnslink." prefix -+ * \param target - an IPFS path witout leading / -+ */ -+ void AssignDnsLink(std::string const& host, std::string_view target); -+ -+ /*! -+ * \brief Store the definitive absence of a resolution -+ * \details This is useful because code will check resolution here before -+ * trying to resolve it fresh again, and you can stop that if you know -+ * it will never work. -+ */ -+ void NoSuchName(std::string const& name); -+ -+ /*! -+ * \brief Fetch the all the stored IPNS record data -+ * \param name - the IPNS name it was stored with -+ * \return nullptr if missing, otherwise non-owning pointer to record -+ */ -+ ValidatedIpns const* Entry(std::string const& name); -+ -+ /*! -+ * \brief A special value constant -+ */ -+ static constexpr std::string_view kNoSuchName{"NO_SUCH_NAME"}; -+}; -+} // namespace ipfs -+ -+#endif // IPNS_NAME_RESOLVER_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/ipns_record.h b/third_party/ipfs_client/include/ipfs_client/ipns_record.h -new file mode 100644 -index 0000000000000..a6bd168a4af60 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/ipns_record.h -@@ -0,0 +1,75 @@ -+#ifndef IPFS_IPNS_RECORD_H_ -+#define IPFS_IPNS_RECORD_H_ -+ -+#include -+ -+#include -+ -+#if __has_include() -+#include -+#else -+#include "ipfs_client/keys.pb.h" -+#endif -+ -+#include -+#include -+ -+namespace libp2p::peer { -+class PeerId; -+} -+namespace libp2p::multi { -+struct ContentIdentifier; -+} -+ -+namespace ipfs { -+ -+class Cid; -+class ContextApi; -+ -+constexpr static std::size_t MAX_IPNS_PB_SERIALIZED_SIZE = 10 * 1024; -+ -+std::optional ValidateIpnsRecord(ByteView top_level_bytes, -+ Cid const& name, -+ ContextApi&); -+ -+/*! -+ * \brief Data from IPNS record modulo the verification parts -+ */ -+struct ValidatedIpns { -+ std::string value; ///< The path the record claims the IPNS name points to -+ std::time_t use_until; ///< An expiration timestamp -+ std::time_t cache_until; ///< Inspired by TTL -+ -+ /*! -+ * \brief The version of the record -+ * \details Higher sequence numbers obsolete lower ones -+ */ -+ std::uint64_t sequence; -+ std::int64_t resolution_ms; ///< How long it took to fetch the record -+ -+ /*! -+ * \brief When the record was fetched -+ */ -+ std::time_t fetch_time = std::time(nullptr); -+ std::string gateway_source; ///< Who gave us this record? -+ -+ ValidatedIpns(); ///< Create an invalid default object -+ ValidatedIpns(IpnsCborEntry const&); -+ ValidatedIpns(ValidatedIpns&&); -+ ValidatedIpns(ValidatedIpns const&); -+ ValidatedIpns& operator=(ValidatedIpns const&); -+ -+ std::string Serialize() const; ///< Turn into a well-defined list of bytes -+ -+ /*! -+ * \brief Create a ValidatedIpns from untyped bytes -+ * \param bytes - Output from a former call to Serialize() -+ * \note Is used by disk cache -+ * \return Recreation of the old object -+ */ -+ static ValidatedIpns Deserialize(std::string bytes); -+}; -+ -+} // namespace ipfs -+ -+#endif // IPFS_IPNS_RECORD_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/json_cbor_adapter.h b/third_party/ipfs_client/include/ipfs_client/json_cbor_adapter.h -new file mode 100644 -index 0000000000000..5ed52ad465b0c ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/json_cbor_adapter.h -@@ -0,0 +1,155 @@ -+#ifndef IPFS_JSON_CBOR_ADAPTER_H_ -+#define IPFS_JSON_CBOR_ADAPTER_H_ -+ -+#include -+#include -+ -+#include -+#include -+ -+#if __has_include() -+ -+#include -+#define HAS_JSON_CBOR_ADAPTER 1 -+ -+namespace ipfs { -+// LCOV_EXCL_START -+class JsonCborAdapter final : public DagCborValue, public DagJsonValue { -+ nlohmann::json data_; -+ -+ public: -+ using Cid = ipfs::Cid; -+ JsonCborAdapter(nlohmann::json data) : data_{data} { -+ if (data_.is_array() && data_.size() == 1UL) { -+ data_ = data_[0]; -+ } -+ } -+ std::unique_ptr at(std::string_view k) const override { -+ if (data_.is_object() && data_.contains(k)) { -+ return std::make_unique(data_.at(k)); -+ } -+ return {}; -+ } -+ std::unique_ptr operator[](std::string_view k) const override { -+ if (data_.is_object() && data_.contains(k)) { -+ return std::make_unique(data_[k]); -+ } -+ return {}; -+ } -+ std::optional as_unsigned() const override { -+ if (data_.is_number_unsigned()) { -+ return data_.get(); -+ } -+ return std::nullopt; -+ } -+ std::optional as_signed() const { -+ if (data_.is_number_integer()) { -+ return data_.get(); -+ } else if (auto ui = as_unsigned()) { -+ if (*ui <= std::numeric_limits::max()) { -+ return static_cast(*ui); -+ } -+ } -+ return std::nullopt; -+ } -+ std::optional as_float() const override { -+ if (data_.is_number_float()) { -+ return data_.get(); -+ } -+ return std::nullopt; -+ } -+ std::optional as_string() const override { -+ if (data_.is_string()) { -+ return data_.get(); -+ } -+ return std::nullopt; -+ } -+ std::optional get_if_string() const override { -+ return as_string(); -+ } -+ std::optional as_bool() const override { -+ if (data_.is_boolean()) { -+ return data_.get(); -+ } -+ return std::nullopt; -+ } -+ std::optional> as_bytes() const override { -+ if (data_.is_binary()) { -+ return data_.get_binary(); -+ } -+ return std::nullopt; -+ } -+ std::optional as_link() const override { -+ if (!data_.is_binary()) { -+ return std::nullopt; -+ } -+ auto& bin = data_.get_binary(); -+ if (!bin.has_subtype() || bin.subtype() != 42) { -+ return std::nullopt; -+ } -+ if (bin.size() < 6) { -+ return std::nullopt; -+ } -+ if (bin[0]) { -+ return std::nullopt; -+ } -+ auto p = reinterpret_cast(bin.data()) + 1UL; -+ Cid from_binary(ByteView{p, bin.size() - 1UL}); -+ if (from_binary.valid()) { -+ return from_binary; -+ } else { -+ return std::nullopt; -+ } -+ } -+ bool is_map() const override {return data_.is_object();} -+ bool is_array() const override {return data_.is_array();} -+ void iterate_map(MapElementCallback cb) const override { -+ if (!is_map()) { -+ return; -+ } -+ for (auto& [k,v] : data_.items()) { -+ JsonCborAdapter el(v); -+ cb(k, el); -+ } -+ } -+ void iterate_array(ArrayElementCallback cb) const override { -+ if (!is_array()) { -+ return; -+ } -+ for (auto& v : data_) { -+ JsonCborAdapter el(v); -+ cb(el); -+ } -+ } -+ std::string pretty_print() const override { -+ std::ostringstream result; -+ result << std::setw(2) << data_; -+ return result.str(); -+ } -+ std::optional> object_keys() const override { -+ if (!data_.is_object()) { -+ return std::nullopt; -+ } -+ std::vector rv; -+ for (auto& [k, v] : data_.items()) { -+ rv.push_back(k); -+ } -+ return rv; -+ } -+ bool iterate_list( -+ std::function cb) const override { -+ if (!data_.is_array()) { -+ return false; -+ } -+ for (auto& v : data_) { -+ JsonCborAdapter wrap(v); -+ cb(wrap); -+ } -+ return true; -+ } -+}; -+} // namespace ipfs -+ -+#endif -+ -+#endif // IPFS_JSON_CBOR_ADAPTER_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/logger.h b/third_party/ipfs_client/include/ipfs_client/logger.h -new file mode 100644 -index 0000000000000..35191ac5f832c ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/logger.h -@@ -0,0 +1,34 @@ -+#ifndef IPFS_LOGGER_H_ -+#define IPFS_LOGGER_H_ -+ -+#include -+ -+namespace ipfs::log { -+ -+enum class Level { -+ TRACE = -2, -+ DEBUG = -1, -+ INFO = 0, -+ WARN = 1, -+ ERROR = 2, -+ FATAL = 3, -+ OFF -+}; -+ -+void SetLevel(Level); -+ -+using Handler = void (*)(std::string const&, char const*, int, Level); -+void SetHandler(Handler); -+ -+void DefaultHandler(std::string const& message, -+ char const* source_file, -+ int source_line, -+ Level for_prefix); -+ -+std::string_view LevelDescriptor(Level); -+ -+bool IsInitialized(); -+ -+} // namespace ipfs::log -+ -+#endif // LOGGER_H -diff --git a/third_party/ipfs_client/include/ipfs_client/multi_base.h b/third_party/ipfs_client/include/ipfs_client/multi_base.h -new file mode 100644 -index 0000000000000..8c09b97345635 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/multi_base.h -@@ -0,0 +1,42 @@ -+#ifndef IPFS_MB_PREFIXES_H_ -+#define IPFS_MB_PREFIXES_H_ -+ -+#include -+ -+#include -+#include -+#include -+#include -+ -+namespace ipfs::mb { -+ -+// https://github.com/multiformats/multibase/blob/master/multibase.csv -+enum class Code : char { -+ IDENTITY = '\0', -+ UNSUPPORTED = '1', -+ BASE16_LOWER = 'f', -+ BASE16_UPPER = 'F', -+ BASE32_LOWER = 'b', -+ BASE32_UPPER = 'B', -+ BASE36_LOWER = 'k', -+ BASE36_UPPER = 'K', -+ BASE58_BTC = 'z', -+ BASE64 = 'm' -+}; -+Code CodeFromPrefix(char c); -+std::string_view GetName(Code); -+ -+using Decoder = std::vector (*)(std::string_view); -+using Encoder = std::string (*)(ByteView); -+struct Codec { -+ Decoder const decode; -+ Encoder const encode; -+ std::string_view const name; -+ static Codec const* Get(Code); -+}; -+ -+std::string encode(Code, ByteView); -+std::optional> decode(std::string_view mb_str); -+} // namespace ipfs::mb -+ -+#endif // IPFS_MB_PREFIXES_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/multi_hash.h b/third_party/ipfs_client/include/ipfs_client/multi_hash.h -new file mode 100644 -index 0000000000000..6ed78f5e674dc ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/multi_hash.h -@@ -0,0 +1,32 @@ -+#ifndef IPFS_MULTI_HASH_H_ -+#define IPFS_MULTI_HASH_H_ -+ -+#include -+ -+#include -+ -+namespace ipfs { -+enum class HashType { INVALID = -1, IDENTITY = 0, SHA2_256 = 0X12 }; -+constexpr std::uint16_t MaximumHashLength = 127; -+ -+HashType Validate(HashType); -+std::string_view GetName(HashType); -+class MultiHash { -+ public: -+ MultiHash() = default; -+ explicit MultiHash(ByteView); -+ explicit MultiHash(HashType, ByteView digest); -+ -+ bool ReadPrefix(ByteView&); -+ -+ bool valid() const; -+ HashType type() const { return type_; } -+ ByteView digest() const { return hash_; } -+ -+ private: -+ HashType type_ = HashType::INVALID; -+ std::vector hash_; -+}; -+} // namespace ipfs -+ -+#endif // IPFS_MULTI_HASH_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/multicodec.h b/third_party/ipfs_client/include/ipfs_client/multicodec.h -new file mode 100644 -index 0000000000000..bf8d89b6c27e2 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/multicodec.h -@@ -0,0 +1,23 @@ -+#ifndef IPFS_MUTLICODEC_H_ -+#define IPFS_MUTLICODEC_H_ -+ -+#include -+#include -+ -+#include -+ -+namespace ipfs { -+enum class MultiCodec : std::uint32_t { -+ INVALID = std::numeric_limits::max(), -+ IDENTITY = 0x00, -+ RAW = 0x55, -+ DAG_PB = 0x70, -+ DAG_CBOR = 0x71, -+ LIBP2P_KEY = 0x72, -+ DAG_JSON = 0x0129, -+}; -+MultiCodec Validate(MultiCodec); -+std::string_view GetName(MultiCodec); -+} // namespace ipfs -+ -+#endif // IPFS_MUTLICODEC_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/orchestrator.h b/third_party/ipfs_client/include/ipfs_client/orchestrator.h -new file mode 100644 -index 0000000000000..f204dde799b3e ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/orchestrator.h -@@ -0,0 +1,45 @@ -+#ifndef IPFS_ORCHESTRATOR_H_ -+#define IPFS_ORCHESTRATOR_H_ -+ -+#include "ipfs_client/ipld/dag_node.h" -+ -+#include -+#include -+ -+#include -+#include -+ -+namespace ipfs { -+ -+class ContextApi; -+ -+class Orchestrator : public std::enable_shared_from_this { -+ public: -+ using GatewayAccess = -+ std::function)>; -+ using MimeDetection = std::function< -+ std::string(std::string, std::string_view, std::string const&)>; -+ explicit Orchestrator(std::shared_ptr requestor, -+ std::shared_ptr = {}); -+ void build_response(std::shared_ptr); -+ bool add_node(std::string key, ipld::NodePtr); -+ bool has_key(std::string const& k) const; -+ -+ private: -+ flat_map dags_; -+ // GatewayAccess gw_requestor_; -+ std::shared_ptr api_; -+ std::shared_ptr requestor_; -+ -+ void from_tree(std::shared_ptr, -+ ipld::NodePtr&, -+ SlashDelimited, -+ std::string const&); -+ bool gw_request(std::shared_ptr, -+ SlashDelimited path, -+ std::string const& aff); -+ std::string sniff(SlashDelimited, std::string const&) const; -+}; -+} // namespace ipfs::ipld -+ -+#endif // IPFS_ORCHESTRATOR_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/response.h b/third_party/ipfs_client/include/ipfs_client/response.h -new file mode 100644 -index 0000000000000..3c277994d8b9c ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/response.h -@@ -0,0 +1,27 @@ -+#ifndef IPFS_RESPONSE_H_ -+#define IPFS_RESPONSE_H_ -+ -+#include -+ -+#include -+#include -+#include -+ -+namespace ipfs { -+ -+struct Response { -+ std::string mime_; -+ std::uint16_t status_; -+ std::string body_; -+ std::string location_; -+ -+ static Response PLAIN_NOT_FOUND; -+ static Response IMMUTABLY_GONE; -+ static Response HOST_NOT_FOUND; -+ -+ constexpr static std::uint16_t HOST_NOT_FOUND_STATUS = 503; -+}; -+ -+} // namespace ipfs -+ -+#endif // IPFS_RESPONSE_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/signing_key_type.h b/third_party/ipfs_client/include/ipfs_client/signing_key_type.h -new file mode 100644 -index 0000000000000..4a74ad0f6967b ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/signing_key_type.h -@@ -0,0 +1,14 @@ -+#ifndef IPFS_SIGNING_KEY_TYPE_H_ -+#define IPFS_SIGNING_KEY_TYPE_H_ -+ -+namespace ipfs { -+enum class SigningKeyType : int { -+ RSA, -+ Ed25519, -+ Secp256k1, -+ ECDSA, -+ KeyTypeCount -+}; -+} -+ -+#endif // IPFS_SIGNING_KEY_TYPE_H_ -diff --git a/third_party/ipfs_client/include/ipfs_client/url_spec.h b/third_party/ipfs_client/include/ipfs_client/url_spec.h -new file mode 100644 -index 0000000000000..a61aec25d5968 ---- /dev/null -+++ b/third_party/ipfs_client/include/ipfs_client/url_spec.h -@@ -0,0 +1,24 @@ -+#ifndef IPFS_URL_SPEC_H_ -+#define IPFS_URL_SPEC_H_ -+ -+// TODO - Give more thought to how this interplays with gw::Request -+ -+#include -+#include -+ -+namespace ipfs { -+struct UrlSpec { -+ std::string suffix; -+ std::string_view accept; -+ -+ bool operator<(UrlSpec const& rhs) const { -+ if (suffix != rhs.suffix) { -+ return suffix < rhs.suffix; -+ } -+ return accept < rhs.accept; -+ } -+ bool none() const { return suffix.empty(); } -+}; -+} // namespace ipfs -+ -+#endif // IPFS_URL_SPEC_H_ -diff --git a/third_party/ipfs_client/include/libp2p/common/types.hpp b/third_party/ipfs_client/include/libp2p/common/types.hpp -new file mode 100644 -index 0000000000000..a112d1bf5d3db ---- /dev/null -+++ b/third_party/ipfs_client/include/libp2p/common/types.hpp -@@ -0,0 +1,39 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#ifndef LIBP2P_P2P_COMMON_TYPES_HPP -+#define LIBP2P_P2P_COMMON_TYPES_HPP -+ -+#include "vocab/byte_view.h" -+ -+#include -+#include -+#include -+#include -+ -+namespace libp2p::common { -+/** -+ * Sequence of bytes -+ */ -+using ByteArray = std::vector; -+// using ByteArray = std::string; -+ -+template -+void append(Collection& c, Item&& g) { -+ c.insert(c.end(), g.begin(), g.end()); -+} -+ -+template -+void append(Collection& c, char g) { -+ c.push_back(g); -+} -+ -+/// Hash256 as a sequence of 32 bytes -+using Hash256 = std::array; -+/// Hash512 as a sequence of 64 bytes -+using Hash512 = std::array; -+} // namespace libp2p::common -+ -+#endif // LIBP2P_P2P_COMMON_TYPES_HPP -diff --git a/third_party/ipfs_client/include/libp2p/crypto/key.h b/third_party/ipfs_client/include/libp2p/crypto/key.h -new file mode 100644 -index 0000000000000..8198e41122fdd ---- /dev/null -+++ b/third_party/ipfs_client/include/libp2p/crypto/key.h -@@ -0,0 +1,100 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#ifndef LIBP2P_LIBP2P_CRYPTO_KEY_HPP -+#define LIBP2P_LIBP2P_CRYPTO_KEY_HPP -+ -+#include -+ -+#include "libp2p/common/types.hpp" -+ -+namespace libp2p::crypto { -+ -+using Buffer = libp2p::common::ByteArray; -+ -+struct Key { -+ /** -+ * Supported types of all keys -+ */ -+ enum class Type { -+ UNSPECIFIED = 100, -+ RSA = 0, -+ Ed25519 = 1, -+ Secp256k1 = 2, -+ ECDSA = 3 -+ }; -+ -+ Key(Type, std::vector); -+ ~Key() noexcept; -+ Type type = Type::UNSPECIFIED; ///< key type -+ std::vector data{}; ///< key content -+}; -+ -+inline bool operator==(const Key& lhs, const Key& rhs) { -+ return lhs.type == rhs.type && lhs.data == rhs.data; -+} -+ -+inline bool operator!=(const Key& lhs, const Key& rhs) { -+ return !(lhs == rhs); -+} -+ -+struct PublicKey : public Key {}; -+ -+struct PrivateKey : public Key {}; -+ -+struct KeyPair { -+ PublicKey publicKey; -+ PrivateKey privateKey; -+}; -+ -+using Signature = std::vector; -+ -+inline bool operator==(const KeyPair& a, const KeyPair& b) { -+ return a.publicKey == b.publicKey && a.privateKey == b.privateKey; -+} -+ -+/** -+ * Result of ephemeral key generation -+ * -+struct EphemeralKeyPair { -+ Buffer ephemeral_public_key; -+ std::function(Buffer)> shared_secret_generator; -+}; -+*/ -+ -+/** -+ * Type of the stretched key -+ * -+struct StretchedKey { -+ Buffer iv; -+ Buffer cipher_key; -+ Buffer mac_key; -+}; -+*/ -+} // namespace libp2p::crypto -+ -+namespace std { -+template <> -+struct hash { -+ size_t operator()(const libp2p::crypto::Key& x) const; -+}; -+ -+template <> -+struct hash { -+ size_t operator()(const libp2p::crypto::PrivateKey& x) const; -+}; -+ -+template <> -+struct hash { -+ size_t operator()(const libp2p::crypto::PublicKey& x) const; -+}; -+ -+template <> -+struct hash { -+ size_t operator()(const libp2p::crypto::KeyPair& x) const; -+}; -+} // namespace std -+ -+#endif // LIBP2P_LIBP2P_CRYPTO_KEY_HPP -diff --git a/third_party/ipfs_client/include/libp2p/crypto/protobuf/protobuf_key.hpp b/third_party/ipfs_client/include/libp2p/crypto/protobuf/protobuf_key.hpp -new file mode 100644 -index 0000000000000..1a0d7ae7a2d4e ---- /dev/null -+++ b/third_party/ipfs_client/include/libp2p/crypto/protobuf/protobuf_key.hpp -@@ -0,0 +1,29 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#ifndef KAGOME_PROTOBUF_KEY_HPP -+#define KAGOME_PROTOBUF_KEY_HPP -+ -+// #include -+ -+#include -+ -+#include -+ -+namespace libp2p::crypto { -+/** -+ * Strict type for key, which is encoded into Protobuf format -+ */ -+struct ProtobufKey { //: public boost::equality_comparable { -+ explicit ProtobufKey(std::vector key); -+ ~ProtobufKey() noexcept; -+ -+ std::vector key; -+ -+ bool operator==(const ProtobufKey& other) const { return key == other.key; } -+}; -+} // namespace libp2p::crypto -+ -+#endif // KAGOME_PROTOBUF_KEY_HPP -diff --git a/third_party/ipfs_client/include/libp2p/multi/multibase_codec.hpp b/third_party/ipfs_client/include/libp2p/multi/multibase_codec.hpp -new file mode 100644 -index 0000000000000..c7b9cbd1f7d40 ---- /dev/null -+++ b/third_party/ipfs_client/include/libp2p/multi/multibase_codec.hpp -@@ -0,0 +1,65 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#ifndef LIBP2P_MULTIBASE_HPP -+#define LIBP2P_MULTIBASE_HPP -+ -+#include "vocab/expected.h" -+ -+#include -+#include -+#include -+ -+#include -+ -+namespace libp2p::multi { -+/** -+ * Allows to distinguish between different base-encoded binaries -+ * See more: https://github.com/multiformats/multibase -+ */ -+class MultibaseCodec { -+ public: -+ enum class Error { UNSUPPORTED_BASE = 1, INPUT_TOO_SHORT, BASE_CODEC_ERROR }; -+ -+ using ByteBuffer = common::ByteArray; -+ using FactoryResult = ipfs::expected; -+ -+ virtual ~MultibaseCodec() = default; -+ /** -+ * Encodings, supported by this Multibase -+ * @sa https://github.com/multiformats/multibase#multibase-table -+ */ -+ enum class Encoding : char { -+ BASE16_LOWER = 'f', -+ BASE16_UPPER = 'F', -+ BASE32_LOWER = 'b', -+ BASE32_UPPER = 'B', -+ BASE36 = 'k', -+ BASE58 = 'z', -+ BASE64 = 'm' -+ }; -+ -+ /** -+ * Encode the incoming bytes -+ * @param bytes to be encoded -+ * @param encoding - base of the desired encoding -+ * @return encoded string WITH an encoding prefix -+ */ -+ virtual std::string encode(const ByteBuffer& bytes, -+ Encoding encoding) const = 0; -+ -+ /** -+ * Decode the incoming string -+ * @param string to be decoded -+ * @return bytes, if decoding was successful, error otherwise -+ */ -+ virtual FactoryResult decode(std::string_view string) const = 0; -+}; -+ -+bool case_critical(MultibaseCodec::Encoding); -+ -+} // namespace libp2p::multi -+ -+#endif // LIBP2P_MULTIBASE_HPP -diff --git a/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base16.h b/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base16.h -new file mode 100644 -index 0000000000000..72a74237eb2ee ---- /dev/null -+++ b/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base16.h -@@ -0,0 +1,24 @@ -+#ifndef IPFS_BASE32_H_ -+#define IPFS_BASE32_H_ -+ -+#include "base_error.hpp" -+ -+#include -+#include -+ -+#include -+ -+#include -+ -+namespace ipfs::base16 { -+std::string encodeLower(ByteView bytes); -+std::string encodeUpper(ByteView bytes); -+ -+using libp2p::common::ByteArray; -+using libp2p::multi::detail::BaseError; -+using Decoded = ipfs::expected; -+Decoded decode(std::string_view string); -+ -+} // namespace ipfs::base16 -+ -+#endif // IPFS_BASE32_H_ -diff --git a/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base32.hpp b/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base32.hpp -new file mode 100644 -index 0000000000000..c24dc59d54121 ---- /dev/null -+++ b/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base32.hpp -@@ -0,0 +1,52 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#ifndef LIBP2P_BASE32_HPP -+#define LIBP2P_BASE32_HPP -+ -+#include "base_error.hpp" -+ -+#include -+#include -+ -+/** -+ * Encode/decode to/from base32 format -+ * Implementation is taken from -+ * https://github.com/mjg59/tpmtotp/blob/master/base32.c -+ */ -+namespace libp2p::multi::detail { -+ -+/** -+ * Encode bytes to base32 uppercase string -+ * @param bytes to be encoded -+ * @return encoded string -+ */ -+std::string encodeBase32Upper(ipfs::ByteView bytes); -+/** -+ * Encode bytes to base32 lowercase string -+ * @param bytes to be encoded -+ * @return encoded string -+ */ -+std::string encodeBase32Lower(ipfs::ByteView bytes); -+ -+/** -+ * Decode base32 uppercase to bytes -+ * @param string to be decoded -+ * @return decoded bytes in case of success -+ */ -+ipfs::expected decodeBase32Upper( -+ std::string_view string); -+ -+/** -+ * Decode base32 lowercase string to bytes -+ * @param string to be decoded -+ * @return decoded bytes in case of success -+ */ -+ipfs::expected decodeBase32Lower( -+ std::string_view string); -+ -+} // namespace libp2p::multi::detail -+ -+#endif // LIBP2P_BASE32_HPP -diff --git a/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base36.hpp b/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base36.hpp -new file mode 100644 -index 0000000000000..20006df216d51 ---- /dev/null -+++ b/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base36.hpp -@@ -0,0 +1,42 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#ifndef LIBP2P_BASE36_HPP -+#define LIBP2P_BASE36_HPP -+ -+#include "base_error.hpp" -+ -+#include -+#include -+ -+/** -+ * Encode/decode to/from base36 format -+ */ -+namespace libp2p::multi::detail { -+ -+/** -+ * Encode bytes to base36 uppercase string -+ * @param bytes to be encoded -+ * @return encoded string -+ */ -+std::string encodeBase36Upper(ipfs::ByteView bytes); -+/** -+ * Encode bytes to base36 lowercase string -+ * @param bytes to be encoded -+ * @return encoded string -+ */ -+std::string encodeBase36Lower(ipfs::ByteView bytes); -+ -+/** -+ * Decode base36 (case-insensitively) to bytes -+ * @param string to be decoded -+ * @return decoded bytes in case of success -+ */ -+ipfs::expected decodeBase36( -+ std::string_view string); -+ -+} // namespace libp2p::multi::detail -+ -+#endif // LIBP2P_BASE36_HPP -diff --git a/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base_error.hpp b/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base_error.hpp -new file mode 100644 -index 0000000000000..a0ab1b6c54be5 ---- /dev/null -+++ b/third_party/ipfs_client/include/libp2p/multi/multibase_codec/codecs/base_error.hpp -@@ -0,0 +1,24 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#ifndef LIBP2P_BASE_ERROR_HPP -+#define LIBP2P_BASE_ERROR_HPP -+ -+namespace libp2p::multi::detail { -+ -+enum class BaseError { -+ INVALID_BASE58_INPUT = 1, -+ INVALID_BASE64_INPUT, -+ INVALID_BASE32_INPUT, -+ INVALID_BASE36_INPUT, -+ NON_UPPERCASE_INPUT, -+ NON_LOWERCASE_INPUT, -+ UNIMPLEMENTED_MULTIBASE, -+ INVALID_BASE16_INPUT -+}; -+ -+} -+ -+#endif // LIBP2P_BASE_ERROR_HPP -diff --git a/third_party/ipfs_client/include/libp2p/multi/multicodec_type.hpp b/third_party/ipfs_client/include/libp2p/multi/multicodec_type.hpp -new file mode 100644 -index 0000000000000..bda027bb29567 ---- /dev/null -+++ b/third_party/ipfs_client/include/libp2p/multi/multicodec_type.hpp -@@ -0,0 +1,78 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#ifndef LIBP2P_MULTICODECTYPE_HPP -+#define LIBP2P_MULTICODECTYPE_HPP -+ -+#include -+ -+namespace libp2p::multi { -+ -+/** -+ * LibP2P uses "protocol tables" to agree upon the mapping from one multicodec -+ * code. These tables can be application specific, though, like with other -+ * multiformats, there is a globally agreed upon table with common protocols -+ * and formats. -+ */ -+class MulticodecType { -+ public: -+ enum class Code { -+ IDENTITY = 0x00, -+ SHA1 = 0x11, -+ SHA2_256 = 0x12, -+ SHA2_512 = 0x13, -+ SHA3_512 = 0x14, -+ SHA3_384 = 0x15, -+ SHA3_256 = 0x16, -+ SHA3_224 = 0x17, -+ RAW = 0x55, -+ DAG_PB = 0x70, -+ DAG_CBOR = 0x71, -+ LIBP2P_KEY = 0x72, -+ DAG_JSON = 0x0129, -+ FILECOIN_COMMITMENT_UNSEALED = 0xf101, -+ FILECOIN_COMMITMENT_SEALED = 0xf102, -+ }; -+ -+ constexpr static std::string_view getName(Code code) { -+ switch (code) { -+ case Code::IDENTITY: -+ return "identity"; -+ case Code::SHA1: -+ return "sha1"; -+ case Code::SHA2_256: -+ return "sha2-256"; -+ case Code::SHA2_512: -+ return "sha2-512"; -+ case Code::SHA3_224: -+ return "sha3-224"; -+ case Code::SHA3_256: -+ return "sha3-256"; -+ case Code::SHA3_384: -+ return "sha3-384"; -+ case Code::SHA3_512: -+ return "sha3-512"; -+ case Code::RAW: -+ return "raw"; -+ case Code::DAG_PB: -+ return "dag-pb"; -+ case Code::DAG_CBOR: -+ return "dag-cbor"; -+ case Code::DAG_JSON: -+ return "dag-json"; -+ case Code::LIBP2P_KEY: -+ return "libp2p-key"; -+ case Code::FILECOIN_COMMITMENT_UNSEALED: -+ return "fil-commitment-unsealed"; -+ case Code::FILECOIN_COMMITMENT_SEALED: -+ return "fil-commitment-sealed"; -+ } -+ return "unknown"; -+ } -+}; -+ -+} // namespace libp2p::multi -+ -+#endif // LIBP2P_MULTICODECTYPE_HPP -diff --git a/third_party/ipfs_client/include/libp2p/multi/uvarint.hpp b/third_party/ipfs_client/include/libp2p/multi/uvarint.hpp -new file mode 100644 -index 0000000000000..4dd452abffba4 ---- /dev/null -+++ b/third_party/ipfs_client/include/libp2p/multi/uvarint.hpp -@@ -0,0 +1,98 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#ifndef LIBP2P_VARINT_HPP -+#define LIBP2P_VARINT_HPP -+ -+#include "vocab/byte_view.h" -+ -+#include -+ -+#include -+#include -+#include -+ -+namespace libp2p::multi { -+ -+/** -+ * @class Encodes and decodes unsigned integers into and from -+ * variable-length byte arrays using LEB128 algorithm. -+ */ -+class UVarint { -+ public: -+ /** -+ * Constructs a varint from an unsigned integer 'number' -+ * @param number -+ */ -+ explicit UVarint(uint64_t number); -+ -+ /** -+ * Constructs a varint from an array of raw bytes, which are -+ * meant to be an already encoded unsigned varint -+ * @param varint_bytes an array of bytes representing an unsigned varint -+ */ -+ explicit UVarint(ipfs::ByteView varint_bytes); -+ -+ /** -+ * Constructs a varint from an array of raw bytes, which beginning may or -+ * may not be an encoded varint -+ * @param varint_bytes an array of bytes, possibly representing an unsigned -+ * varint -+ */ -+ static std::optional create(ipfs::ByteView varint_bytes); -+ -+ /** -+ * Converts a varint back to a usual unsigned integer. -+ * @return an integer previously encoded to the varint -+ */ -+ uint64_t toUInt64() const; -+ -+ /** -+ * @return an array view to raw bytes of the stored varint -+ */ -+ ipfs::ByteView toBytes() const; -+ -+ std::vector const& toVector() const; -+ -+ std::string toHex() const; -+ -+ /** -+ * Assigns the varint to an unsigned integer, encoding the latter -+ * @param n the integer to encode and store -+ * @return this varint -+ */ -+ UVarint& operator=(uint64_t n); -+ -+ bool operator==(const UVarint& r) const; -+ bool operator!=(const UVarint& r) const; -+ bool operator<(const UVarint& r) const; -+ -+ /** -+ * @return the number of bytes currently stored in a varint -+ */ -+ size_t size() const; -+ -+ /** -+ * @param varint_bytes an array with a raw byte representation of a varint -+ * @return the size of the varint stored in the array, if its content is a -+ * valid varint. Otherwise, the result is undefined -+ */ -+ static size_t calculateSize(ipfs::ByteView varint_bytes); -+ -+ UVarint() = delete; -+ UVarint(UVarint const&); -+ UVarint& operator=(UVarint const&); -+ ~UVarint() noexcept; -+ -+ private: -+ /// private ctor for unsafe creation -+ UVarint(ipfs::ByteView varint_bytes, size_t varint_size); -+ -+ std::vector bytes_{}; -+}; -+ -+} // namespace libp2p::multi -+ -+#endif // LIBP2P_VARINT_HPP -diff --git a/third_party/ipfs_client/include/multibase/algorithm.h b/third_party/ipfs_client/include/multibase/algorithm.h -new file mode 100644 -index 0000000000000..2cea1cabd296e ---- /dev/null -+++ b/third_party/ipfs_client/include/multibase/algorithm.h -@@ -0,0 +1,27 @@ -+#pragma once -+ -+#include -+ -+namespace multibase { -+ -+class algorithm { -+ public: -+ /** Tag identifying algorithms which operate on blocks */ -+ class block_tag {}; -+ -+ /** Tag identifying algorithms which operate on continuous data */ -+ class stream_tag {}; -+ -+ virtual ~algorithm() = default; -+ -+ /** Returns the input size required to decode a single block */ -+ virtual std::size_t block_size() { return 0; } -+ -+ /** Returns the size of a processed block */ -+ virtual std::size_t output_size() { return 0; } -+ -+ /** Processes an input block returning any intermediate result */ -+ virtual std::string process(std::string_view input) = 0; -+}; -+ -+} // namespace multibase -diff --git a/third_party/ipfs_client/include/multibase/basic_algorithm.h b/third_party/ipfs_client/include/multibase/basic_algorithm.h -new file mode 100644 -index 0000000000000..5da225c885fd4 ---- /dev/null -+++ b/third_party/ipfs_client/include/multibase/basic_algorithm.h -@@ -0,0 +1,322 @@ -+/* From: https://github.com/lockblox/multibase -+ * Copyright (c) 2018 markovchainy -+ * MIT License -+ */ -+#pragma once -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+namespace multibase { -+ -+template -+struct traits { -+ static const std::array charset; -+ static const char name[]; -+ static const char padding = 0; -+ using execution_style = algorithm::block_tag; -+}; -+ -+/** Template implementation of base encoding which computes a lookup table at -+ * compile time and avoids the virtual algorithm lookup penalty */ -+template > -+class basic_algorithm { -+ public: -+ class encoder : public algorithm { -+ public: -+ size_t output_size() override; -+ size_t block_size() override; -+ std::string process(std::string_view input) override; -+ -+ private: -+ constexpr size_t input_size() { return ratio.den; } -+ }; -+ -+ class decoder : public algorithm { -+ public: -+ size_t output_size() override; -+ size_t block_size() override; -+ std::string process(std::string_view input) override; -+ -+ private: -+ constexpr size_t input_size() { return ratio.num; } -+ }; -+ -+ private: -+ constexpr static auto first = Traits::charset.cbegin(); -+ constexpr static auto last = Traits::charset.cend(); -+ using CharsetT = decltype(Traits::charset); -+ using value_type = typename CharsetT::value_type; -+ using iterator = typename CharsetT::const_iterator; -+ -+ /** Find a value at compile time */ -+ constexpr static iterator find(iterator b, iterator e, -+ value_type const& v) noexcept { -+ return (b != e && *b != v) ? find(++b, e, v) : b; -+ } -+ -+ /** Determine the character encoding for a given value -+ @return character encoding, or xFF if none such encoding exists */ -+ constexpr static unsigned char getval(unsigned char p) noexcept { -+ return find(first, last, p) == last -+ ? static_cast(255) -+ : static_cast( -+ std::distance(first, find(first, last, p))); -+ } -+ -+ /** Compute base-2 logarithm */ -+ constexpr static std::intmax_t log2(std::intmax_t n) noexcept { -+ return (n == 1) ? 0 : ((n < 2) ? 1 : 1 + log2(n / 2)); -+ } -+ -+ /** encoding as determined by size of character set */ -+ constexpr static auto radix = sizeof(Traits::charset) / sizeof(value_type); -+ /** Ratio of encoded characters per byte */ -+ constexpr static auto ratio = std::ratio{}; -+ /** Map from value to corresponding character in base encoding */ -+ static const std::array valset; -+ -+ constexpr static auto base = T; -+}; -+ -+template -+const std::array basic_algorithm::valset = { -+ getval(0), getval(1), getval(2), getval(3), getval(4), -+ getval(5), getval(6), getval(7), getval(8), getval(9), -+ getval(10), getval(11), getval(12), getval(13), getval(14), -+ getval(15), getval(16), getval(17), getval(18), getval(19), -+ getval(20), getval(21), getval(22), getval(23), getval(24), -+ getval(25), getval(26), getval(27), getval(28), getval(29), -+ getval(30), getval(31), getval(32), getval(33), getval(34), -+ getval(35), getval(36), getval(37), getval(38), getval(39), -+ getval(40), getval(41), getval(42), getval(43), getval(44), -+ getval(45), getval(46), getval(47), getval(48), getval(49), -+ getval(50), getval(51), getval(52), getval(53), getval(54), -+ getval(55), getval(56), getval(57), getval(58), getval(59), -+ getval(60), getval(61), getval(62), getval(63), getval(64), -+ getval(65), getval(66), getval(67), getval(68), getval(69), -+ getval(70), getval(71), getval(72), getval(73), getval(74), -+ getval(75), getval(76), getval(77), getval(78), getval(79), -+ getval(80), getval(81), getval(82), getval(83), getval(84), -+ getval(85), getval(86), getval(87), getval(88), getval(89), -+ getval(90), getval(91), getval(92), getval(93), getval(94), -+ getval(95), getval(96), getval(97), getval(98), getval(99), -+ getval(100), getval(101), getval(102), getval(103), getval(104), -+ getval(105), getval(106), getval(107), getval(108), getval(109), -+ getval(110), getval(111), getval(112), getval(113), getval(114), -+ getval(115), getval(116), getval(117), getval(118), getval(119), -+ getval(120), getval(121), getval(122), getval(123), getval(124), -+ getval(125), getval(126), getval(127), getval(128), getval(129), -+ getval(130), getval(131), getval(132), getval(133), getval(134), -+ getval(135), getval(136), getval(137), getval(138), getval(139), -+ getval(140), getval(141), getval(142), getval(143), getval(144), -+ getval(145), getval(146), getval(147), getval(148), getval(149), -+ getval(150), getval(151), getval(152), getval(153), getval(154), -+ getval(155), getval(156), getval(157), getval(158), getval(159), -+ getval(160), getval(161), getval(162), getval(163), getval(164), -+ getval(165), getval(166), getval(167), getval(168), getval(169), -+ getval(170), getval(171), getval(172), getval(173), getval(174), -+ getval(175), getval(176), getval(177), getval(178), getval(179), -+ getval(180), getval(181), getval(182), getval(183), getval(184), -+ getval(185), getval(186), getval(187), getval(188), getval(189), -+ getval(190), getval(191), getval(192), getval(193), getval(194), -+ getval(195), getval(196), getval(197), getval(198), getval(199), -+ getval(200), getval(201), getval(202), getval(203), getval(204), -+ getval(205), getval(206), getval(207), getval(208), getval(209), -+ getval(210), getval(211), getval(212), getval(213), getval(214), -+ getval(215), getval(216), getval(217), getval(218), getval(219), -+ getval(220), getval(221), getval(222), getval(223), getval(224), -+ getval(225), getval(226), getval(227), getval(228), getval(229), -+ getval(230), getval(231), getval(232), getval(233), getval(234), -+ getval(235), getval(236), getval(237), getval(238), getval(239), -+ getval(240), getval(241), getval(242), getval(243), getval(244), -+ getval(245), getval(246), getval(247), getval(248), getval(249), -+ getval(250), getval(251), getval(252), getval(253), getval(254), -+ getval(255)}; -+ -+template -+std::string basic_algorithm::encoder::process( -+ std::string_view input) { -+ std::string output; -+ std::size_t isize = input.size(); -+ auto partial_blocks = static_cast(input.size()) / input_size(); -+ auto num_blocks = static_cast(partial_blocks); -+ auto osize = static_cast(std::ceil(partial_blocks * output_size())); -+ if constexpr (std::is_same_v) { -+ num_blocks = static_cast(std::ceil(partial_blocks)); -+ isize = input_size() * num_blocks; -+ } -+ output.resize(std::max(osize, (output_size() * num_blocks))); -+ auto input_it = std::begin(input); -+ int length = 0; -+ for (std::size_t i = 0; i < isize; ++i, ++input_it) { -+ int carry = i >= input.size() ? 0 : static_cast(*input_it); -+ int j = 0; -+ for (auto oi = output.rbegin(); -+ (oi != output.rend()) && (carry != 0 || j < length); ++oi, ++j) { -+ carry += 256 * (*oi); -+ auto byte = (unsigned char*)(&(*oi)); -+ *byte = carry % radix; -+ carry /= radix; -+ } -+ length = j; -+ } -+ std::transform(output.rbegin(), output.rend(), output.rbegin(), -+ [](auto c) { return Traits::charset[c]; }); -+ if constexpr (Traits::padding == 0) { -+ output.resize(osize); -+ } else { -+ auto pad_size = output.size() - osize; -+ output.replace(osize, pad_size, pad_size, Traits::padding); -+ } -+ if constexpr (std::is_same_v) { -+ output.erase(0, output.size() % output_size() ? output.size() - length : 0); -+ } -+ return output; -+} -+ -+template -+std::size_t basic_algorithm::encoder::block_size() { -+ return std::is_same_v -+ ? input_size() -+ : 0; -+} -+ -+template -+std::size_t basic_algorithm::encoder::output_size() { -+ return ratio.num; -+} -+ -+template -+std::size_t basic_algorithm::decoder::block_size() { -+ return std::is_same_v -+ ? input_size() -+ : 0; -+} -+ -+template -+std::size_t basic_algorithm::decoder::output_size() { -+ return ratio.den; -+} -+ -+template -+std::string basic_algorithm::decoder::process( -+ std::string_view input) { -+ std::string output; -+ auto end = std::find(input.begin(), input.end(), Traits::padding); -+ size_t input_size = std::distance(input.begin(), end); -+ auto partial_blocks = static_cast(input_size) / this->input_size(); -+ auto output_size = static_cast(this->output_size() * partial_blocks); -+ if constexpr (std::is_same_v) { -+ std::size_t num_blocks = 0; -+ auto input_size_float = static_cast(input.size()); -+ num_blocks = -+ static_cast(std::ceil(input_size_float / this->input_size())); -+ output.resize(this->output_size() * num_blocks); -+ input_size = this->input_size() * num_blocks; -+ } else { -+ output.resize(output_size); -+ } -+ auto input_it = input.begin(); -+ for (size_t i = 0; i < input_size; ++i, ++input_it) { -+ int carry = i > input.size() || *input_it == Traits::padding -+ ? 0 -+ : valset[(unsigned char)(*input_it)]; -+ if (carry == 255) { -+ // throw std::invalid_argument(std::string{"Invalid input character -+ // "} + *input_it); -+ return {}; -+ } -+ auto j = output.size(); -+ while (carry != 0 || j > 0) { -+ auto index = j - 1; -+ carry += radix * static_cast(output[index]); -+ output[index] = static_cast(carry % 256); -+ carry /= 256; -+ if (carry > 0 && index == 0) { -+ output.insert(0, 1, 0); -+ } else { -+ j = index; -+ } -+ } -+ } -+ if constexpr (std::is_same_v) { -+ output.erase(output_size, output.size()); -+ } -+ return output; -+} -+ -+template <> -+struct traits { -+ constexpr static const std::array charset = { -+ '0', '1', '2', '3', '4', '5', '6', '7', -+ '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; -+ constexpr static const char name[] = "base_16"; -+ using execution_style = algorithm::block_tag; -+ constexpr static const char padding = 0; -+}; -+using base_16 = basic_algorithm; -+ -+template <> -+struct traits { -+ constexpr static const std::array charset = { -+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', -+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', -+ 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', -+ 'u', 'v', 'w', 'x', 'y', 'z'}; -+ constexpr static const char name[] = "base_36"; -+ using execution_style = algorithm::stream_tag; -+ constexpr static const char padding = 0; -+}; -+using base_36_btc = basic_algorithm; -+ -+ -+template <> -+struct traits { -+ constexpr static const std::array charset = { -+ '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', -+ 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', -+ 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', -+ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; -+ constexpr static const char name[] = "base_58_btc"; -+ using execution_style = algorithm::stream_tag; -+ constexpr static const char padding = 0; -+}; -+using base_58_btc = basic_algorithm; -+ -+template <> -+struct traits { -+ constexpr static const std::array charset = { -+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', -+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', -+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', -+ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', -+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}; -+ constexpr static const char name[] = "base_64_pad"; -+ using execution_style = algorithm::block_tag; -+ constexpr static const char padding = '='; -+}; -+using base_64_pad = basic_algorithm; -+ -+template <> -+struct traits { -+ constexpr static const std::array charset = { -+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', -+ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', -+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', -+ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', -+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}; -+ constexpr static const char name[] = "base_64"; -+ using base_64 = basic_algorithm; -+ using execution_style = algorithm::block_tag; -+ constexpr static const char padding = 0; -+}; -+using base_64 = basic_algorithm; -+ -+} // namespace multibase -diff --git a/third_party/ipfs_client/include/multibase/encoding.h b/third_party/ipfs_client/include/multibase/encoding.h -new file mode 100644 -index 0000000000000..7675ca6e8445a ---- /dev/null -+++ b/third_party/ipfs_client/include/multibase/encoding.h -@@ -0,0 +1,21 @@ -+#pragma once -+#include -+#include -+ -+namespace multibase { -+ -+enum class encoding : unsigned char { -+ base_unknown = '?', -+ base_256 = 0, -+ base_16 = 'f', -+ base_16_upper = 'F', -+ base_32 = 'b', -+ base_32_upper = 'B', -+ base_36 = 'k', -+ base_58_btc = 'Z', -+ base_64 = 'm', -+ base_64_pad = 'M' -+ -+}; -+ -+} // namespace multibase -diff --git a/third_party/ipfs_client/include/smhasher/MurmurHash3.h b/third_party/ipfs_client/include/smhasher/MurmurHash3.h -new file mode 100644 -index 0000000000000..e1c6d34976c6a ---- /dev/null -+++ b/third_party/ipfs_client/include/smhasher/MurmurHash3.h -@@ -0,0 +1,37 @@ -+//----------------------------------------------------------------------------- -+// MurmurHash3 was written by Austin Appleby, and is placed in the public -+// domain. The author hereby disclaims copyright to this source code. -+ -+#ifndef _MURMURHASH3_H_ -+#define _MURMURHASH3_H_ -+ -+//----------------------------------------------------------------------------- -+// Platform-specific functions and macros -+ -+// Microsoft Visual Studio -+ -+#if defined(_MSC_VER) && (_MSC_VER < 1600) -+ -+typedef unsigned char uint8_t; -+typedef unsigned int uint32_t; -+typedef unsigned __int64 uint64_t; -+ -+// Other compilers -+ -+#else // defined(_MSC_VER) -+ -+#include -+ -+#endif // !defined(_MSC_VER) -+ -+//----------------------------------------------------------------------------- -+ -+void MurmurHash3_x86_32 ( const void * key, int len, uint32_t seed, void * out ); -+ -+void MurmurHash3_x86_128 ( const void * key, int len, uint32_t seed, void * out ); -+ -+void MurmurHash3_x64_128 ( const void * key, int len, uint32_t seed, void * out ); -+ -+//----------------------------------------------------------------------------- -+ -+#endif // _MURMURHASH3_H_ -diff --git a/third_party/ipfs_client/include/vocab/byte.h b/third_party/ipfs_client/include/vocab/byte.h -new file mode 100644 -index 0000000000000..17477c11c2a6f ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/byte.h -@@ -0,0 +1,43 @@ -+#ifndef IPFS_BYTE_H_ -+#define IPFS_BYTE_H_ -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+#ifdef __cpp_lib_byte -+ -+namespace ipfs { -+using Byte = std::byte; -+} // namespace ipfs -+ -+#else -+namespace ipfs { -+enum class Byte : std::uint_least8_t {}; -+} // namespace ipfs -+#endif -+ -+namespace { -+[[maybe_unused]] std::ostream& operator<<(std::ostream& str, ipfs::Byte b) { -+ return str << std::hex << std::setw(2) << std::setfill('0') -+ << static_cast(b); -+} -+} // namespace -+ -+namespace { -+// libc++ provides this, but for some reason libstdc++ does not -+[[maybe_unused]] std::uint8_t to_integer(ipfs::Byte b) { -+ return static_cast(b); -+} -+} // namespace -+ -+namespace ipfs { -+inline bool operator==(Byte a, Byte b) { -+ return to_integer(a) == to_integer(b); -+} -+} // namespace ipfs -+ -+#endif // IPFS_BYTE_H_ -diff --git a/third_party/ipfs_client/include/vocab/byte_view.h b/third_party/ipfs_client/include/vocab/byte_view.h -new file mode 100644 -index 0000000000000..69858d1972a30 ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/byte_view.h -@@ -0,0 +1,24 @@ -+#ifndef CHROMIUM_IPFS_BYTE_VIEW_H -+#define CHROMIUM_IPFS_BYTE_VIEW_H -+ -+#include "byte.h" -+#include "span.h" -+ -+#include -+ -+namespace ipfs { -+using ByteView = span; -+ -+// ByteView is a view over arbitrary opaque byte -+// Cast it to a view over 8-bit unsigned integers for inspection -+inline span as_octets(ByteView bytes) { -+ return {reinterpret_cast(bytes.data()), bytes.size()}; -+} -+template -+inline ByteView as_bytes(ContiguousBytes const& b) { -+ auto p = reinterpret_cast(b.data()); -+ return ByteView{p, b.size()}; -+} -+} // namespace ipfs -+ -+#endif // CHROMIUM_IPFS_BYTE_VIEW_H -diff --git a/third_party/ipfs_client/include/vocab/endian.h b/third_party/ipfs_client/include/vocab/endian.h -new file mode 100644 -index 0000000000000..2423006c7c02b ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/endian.h -@@ -0,0 +1,21 @@ -+#ifndef IPFS_ENDIAN_H_ -+#define IPFS_ENDIAN_H_ -+ -+#if __has_include() -+#include -+#endif -+#if __has_include() -+#include -+#endif -+ -+#ifdef htobe64 -+// Good -+#elif __has_include() -+#include -+#define htobe64 absl::ghtonll -+#elif __has_include() -+#include -+#define htobe64 native_to_big -+#endif -+ -+#endif // IPFS_ENDIAN_H_ -diff --git a/third_party/ipfs_client/include/vocab/expected.h b/third_party/ipfs_client/include/vocab/expected.h -new file mode 100644 -index 0000000000000..2006f2bf01397 ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/expected.h -@@ -0,0 +1,44 @@ -+#ifndef IPFS_EXPECTED_H_ -+#define IPFS_EXPECTED_H_ -+ -+// std::expected isn't available until C++23 and we need to support C++17 -+// boost::outcome isn't available inside the Chromium tree -+// absl::StatusOr doesn't allow templating or extending the error type, and -+// translating the specific error codes into generic ones isn't great. -+ -+#if __has_include("base/types/expected.h") -+#include "base/types/expected.h" -+namespace ipfs { -+template -+using expected = base::expected; -+template -+using unexpected = base::unexpected; -+} // namespace ipfs -+#elif __has_cpp_attribute(__cpp_lib_expected) -+ -+#include -+namespace ipfs { -+template -+using expected = std::expected; -+template -+using unexpected = std::unexpected; -+} // namespace ipfs -+ -+#elif __has_include() -+ -+// If the API differences between std::expected and boost::outcome::checked -+// become a problem, consider wrapping as proposed in the FAQ: -+// https://www.boost.org/doc/libs/master/libs/outcome/doc/html/faq.html#how-far-away-from-the-proposed-std-expected-t-e-is-outcome-s-checked-t-e -+#include -+namespace ipfs { -+template -+using expected = boost::outcome_v2::checked; -+template -+using unexpected = Error; -+} // namespace ipfs -+ -+#else -+#error Get an expected implementation -+#endif -+ -+#endif // IPFS_EXPECTED_H_ -diff --git a/third_party/ipfs_client/include/vocab/flat_mapset.h b/third_party/ipfs_client/include/vocab/flat_mapset.h -new file mode 100644 -index 0000000000000..1630e3f9ca358 ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/flat_mapset.h -@@ -0,0 +1,39 @@ -+#ifndef CHROMIUM_IPFS_VOCAB_MAP_SET_H_ -+#define CHROMIUM_IPFS_VOCAB_MAP_SET_H_ -+ -+#if __has_include("base/containers/flat_map.h") // Chromium -+ -+#include "base/containers/flat_map.h" -+#include "base/containers/flat_set.h" -+#include "base/debug/debugging_buildflags.h" -+namespace ipfs { -+using base::flat_map; -+using base::flat_set; -+} // namespace ipfs -+ -+#elif __has_cpp_attribute(__cpp_lib_flat_map) && \ -+ __has_cpp_attribute(__cpp_lib_flat_set) -+ -+#include -+#include -+namespace ipfs { -+using std::flat_map; -+using std::flat_set; -+} // namespace ipfs -+ -+#elif __has_include() //Boost -+#include -+#include -+namespace ipfs { -+using boost::container::flat_map; -+using boost::container::flat_set; -+} // namespace ipfs -+ -+#else -+ -+#error \ -+ "Provide an implementation for flat_map and flat_set, or install boost or have a Chromium tree or use a newer C++ version." -+ -+#endif -+ -+#endif // CHROMIUM_IPFS_VOCAB_MAP_SET_H_ -diff --git a/third_party/ipfs_client/include/vocab/html_escape.h b/third_party/ipfs_client/include/vocab/html_escape.h -new file mode 100644 -index 0000000000000..60339ad7d45bd ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/html_escape.h -@@ -0,0 +1,23 @@ -+#ifndef IPFS_HTML_ESCAPE_H_ -+#define IPFS_HTML_ESCAPE_H_ -+ -+#include -+ -+constexpr inline std::string_view html_escape(char& c) { -+ switch (c) { -+ case '"': -+ return """; -+ case '\'': -+ return "'"; -+ case '<': -+ return "<"; -+ case '>': -+ return ">"; -+ case '&': -+ return "&"; -+ default: -+ return {&c, 1UL}; -+ } -+} -+ -+#endif // IPFS_HTML_ESCAPE_H_ -diff --git a/third_party/ipfs_client/include/vocab/i128.h b/third_party/ipfs_client/include/vocab/i128.h -new file mode 100644 -index 0000000000000..4aa36cc09877f ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/i128.h -@@ -0,0 +1,16 @@ -+#ifndef IPFS_I128_H_ -+#define IPFS_I128_H_ -+ -+#if __has_include() -+#include -+namespace ipfs { -+using Int_128 = absl::int128; -+} -+#else -+namespace ipfs { -+// TODO Check if available, if not use boost multiprecision -+using Int_128 = __int128; -+} // namespace ipfs -+#endif -+ -+#endif // IPFS_I128_H_ -diff --git a/third_party/ipfs_client/include/vocab/raw_ptr.h b/third_party/ipfs_client/include/vocab/raw_ptr.h -new file mode 100644 -index 0000000000000..25405d3ea30ba ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/raw_ptr.h -@@ -0,0 +1,64 @@ -+#ifndef IPFS_OBSERVER_PTR_H_ -+#define IPFS_OBSERVER_PTR_H_ -+ -+#if __has_include("base/memory/raw_ptr.h") -+#include "base/memory/raw_ptr.h" -+ -+namespace ipfs { -+template -+using raw_ptr = base::raw_ptr; -+} -+ -+#elif defined(__has_cpp_attribute) && \ -+ __has_cpp_attribute(__cpp_lib_experimental_observer_ptr) -+#include -+ -+namespace ipfs { -+template -+using raw_ptr = std::experimental::observer_ptr; -+} -+ -+#else -+ -+#include -+ -+namespace ipfs { -+ -+/*! -+ * \brief Just an observing (non-owning) pointer. -+ */ -+template -+class raw_ptr { -+ T* ptr_; -+ -+ public: -+ // Chromium's raw_ptr has a default ctor whose semantics depend on build -+ // config. For components/ipfs purposes, there is no reason to ever default -+ // construct. Set it to nullptr. We have time needed to read_start a word. -+ raw_ptr() = delete; -+ -+ raw_ptr(T* p) : ptr_{p} {} -+ raw_ptr(raw_ptr&&) = default; -+ raw_ptr(raw_ptr const&) = default; -+ -+ raw_ptr& operator=(raw_ptr const&) = default; -+ -+ T* get() { return ptr_; } -+ T const* get() const { return ptr_; } -+ explicit operator bool() const { return !!ptr_; } -+ T* operator->() { return ptr_; } -+ T const* operator->() const { return ptr_; } -+ raw_ptr& operator=(T* p) { -+ ptr_ = p; -+ return *this; -+ } -+ T& operator*() { -+ assert(ptr_); -+ return *ptr_; -+ } -+}; -+} // namespace ipfs -+ -+#endif -+ -+#endif // IPFS_OBSERVER_PTR_H_ -diff --git a/third_party/ipfs_client/include/vocab/slash_delimited.h b/third_party/ipfs_client/include/vocab/slash_delimited.h -new file mode 100644 -index 0000000000000..53fd142465028 ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/slash_delimited.h -@@ -0,0 +1,35 @@ -+#ifndef IPFS_SLASH_DELIMITED_H_ -+#define IPFS_SLASH_DELIMITED_H_ -+ -+#include -+#include -+#include -+ -+namespace google::protobuf::internal { -+class LogMessage; -+} -+ -+namespace ipfs { -+struct SlashDelimited { -+ std::string_view remainder_; -+ -+ public: -+ SlashDelimited() : remainder_{""} {} -+ explicit SlashDelimited(std::string_view unowned); -+ explicit operator bool() const; -+ std::string_view pop(); -+ std::string_view pop_all(); -+ std::string_view pop_n(std::size_t); -+ std::string_view peek_back() const; -+ std::string pop_back(); -+ std::string to_string() const { return std::string{remainder_}; } -+ std::string_view to_view() const { return remainder_; } -+}; -+} // namespace ipfs -+ -+std::ostream& operator<<(std::ostream&, ipfs::SlashDelimited const&); -+google::protobuf::internal::LogMessage& operator<<( -+ google::protobuf::internal::LogMessage&, -+ ipfs::SlashDelimited const&); -+ -+#endif // IPFS_SLASH_DELIMITED_H_ -diff --git a/third_party/ipfs_client/include/vocab/span.h b/third_party/ipfs_client/include/vocab/span.h -new file mode 100644 -index 0000000000000..f9c05d2a7dd61 ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/span.h -@@ -0,0 +1,65 @@ -+#ifndef IPFS_SPAN_H_ -+#define IPFS_SPAN_H_ -+ -+#if __cpp_lib_span -+#include -+ -+namespace ipfs { -+template -+using span = std::span; -+} // namespace ipfs -+ -+#elif __has_include("base/containers/span.h") -+ -+#include "base/containers/span.h" -+namespace ipfs { -+template -+using span = base::span; -+} // namespace ipfs -+ -+#elif __has_include() -+ -+#include -+namespace ipfs { -+template -+using span = absl::Span; -+} // namespace ipfs -+ -+#elif __has_include() -+ -+#include -+namespace ipfs { -+template -+using span = boost::span; -+} // namespace ipfs -+ -+#elif __has_include() -+ -+// Prior to Boost 1.78, span did not exist in core yet -+#include -+#include -+namespace ipfs { -+template -+class span : public boost::beast::span { -+ public: -+ span(Value* d, std::size_t n) : boost::beast::span{d, n} {} -+ -+ template -+ span(std::vector const& v) -+ : boost::beast::span{v.data(), v.size()} {} -+ -+ span subspan(std::size_t off) const { -+ return span{this->data() + off, this->size() - off}; -+ } -+ Value& operator[](std::size_t i) { return this->data()[i]; } -+}; -+} // namespace ipfs -+ -+#else -+ -+#error \ -+ "No good implementation of span available. Implement one, move to a newer C++, or provide Boost or Abseil." -+ -+#endif -+ -+#endif // IPFS_SPAN_H_ -diff --git a/third_party/ipfs_client/include/vocab/stringify.h b/third_party/ipfs_client/include/vocab/stringify.h -new file mode 100644 -index 0000000000000..8572ebfef7165 ---- /dev/null -+++ b/third_party/ipfs_client/include/vocab/stringify.h -@@ -0,0 +1,17 @@ -+#ifndef IPFS_STRINGIFY_H_ -+#define IPFS_STRINGIFY_H_ -+ -+#include -+ -+namespace ipfs { -+namespace { -+template -+std::string Stringify(T const& t) { -+ std::ostringstream oss; -+ oss << t; -+ return oss.str(); -+} -+} // namespace -+} // namespace ipfs -+ -+#endif // IPFS_STRINGIFY_H_ -diff --git a/third_party/ipfs_client/ipns_record.proto b/third_party/ipfs_client/ipns_record.proto -new file mode 100644 -index 0000000000000..6018931b7466f ---- /dev/null -+++ b/third_party/ipfs_client/ipns_record.proto -@@ -0,0 +1,38 @@ -+syntax = "proto2"; -+option optimize_for = LITE_RUNTIME; -+package ipfs.ipns; -+ -+message IpnsEntry { -+ enum ValidityType { -+ // setting an EOL says "this record is valid until..." -+ EOL = 0; -+ } -+ -+ // deserialized copy of data[value] -+ optional bytes value = 1; -+ -+ // legacy field, verify 'signatureV2' instead -+ optional bytes signatureV1 = 2; -+ -+ // deserialized copies of data[validityType] and data[validity] -+ optional ValidityType validityType = 3; -+ optional bytes validity = 4; -+ -+ // deserialized copy of data[sequence] -+ optional uint64 sequence = 5; -+ -+ // record TTL in nanoseconds, a deserialized copy of data[ttl] -+ optional uint64 ttl = 6; -+ -+ // in order for nodes to properly validate a record upon receipt, they need the public -+ // key associated with it. For old RSA keys, its easiest if we just send this as part of -+ // the record itself. For newer Ed25519 keys, the public key can be embedded in the -+ // IPNS Name itself, making this field unnecessary. -+ optional bytes pubKey = 7; -+ -+ // the signature of the IPNS record -+ optional bytes signatureV2 = 8; -+ -+ // extensible record data in DAG-CBOR format -+ optional bytes data = 9; -+} -diff --git a/third_party/ipfs_client/keys.proto b/third_party/ipfs_client/keys.proto -new file mode 100644 -index 0000000000000..a6f4f75ddba93 ---- /dev/null -+++ b/third_party/ipfs_client/keys.proto -@@ -0,0 +1,22 @@ -+syntax = "proto2"; -+option optimize_for = LITE_RUNTIME; -+package ipfs.ipns; -+ -+enum KeyType { -+ RSA = 0; -+ Ed25519 = 1; -+ Secp256k1 = 2; -+ ECDSA = 3; -+} -+ -+// PublicKey -+message PublicKey { -+ required KeyType Type = 1; -+ required bytes Data = 2; -+} -+ -+// PrivateKey -+message PrivateKey { -+ required KeyType Type = 1; -+ required bytes Data = 2; -+} -diff --git a/third_party/ipfs_client/pb_dag.proto b/third_party/ipfs_client/pb_dag.proto -new file mode 100644 -index 0000000000000..5cd027631c6de ---- /dev/null -+++ b/third_party/ipfs_client/pb_dag.proto -@@ -0,0 +1,23 @@ -+syntax = "proto2"; -+option optimize_for = LITE_RUNTIME; -+package ipfs.pb_dag; -+ -+message PBLink { -+ // binary CID (with no multibase prefix) of the target object -+ optional bytes Hash = 1; -+ -+ // UTF-8 string name -+ optional string Name = 2; -+ -+ // cumulative size of target object -+ optional uint64 Tsize = 3; -+} -+ -+message PBNode { -+ // refs to other objects -+ repeated PBLink Links = 2; -+ -+ // opaque user data -+ optional bytes Data = 1; -+} -+ -diff --git a/third_party/ipfs_client/src/ipfs_client/bases/b16_upper.h b/third_party/ipfs_client/src/ipfs_client/bases/b16_upper.h -new file mode 100644 -index 0000000000000..9d0056ecb98b9 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/bases/b16_upper.h -@@ -0,0 +1,23 @@ -+#ifndef IPFS_B16_UPPER_H_ -+#define IPFS_B16_UPPER_H_ -+ -+#include -+ -+namespace multibase { -+template <> -+struct traits<::multibase::encoding::base_16_upper> { -+ constexpr static const std::array charset = { -+ '0', '1', '2', '3', '4', '5', '6', '7', -+ '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; -+ constexpr static const char name[] = "BASE_16"; -+ using execution_style = multibase::algorithm::block_tag; -+ constexpr static const char padding = 0; -+}; -+} // namespace multibase -+ -+namespace ipfs::mb { -+using base_16_upper = -+ multibase::basic_algorithm; -+} // namespace ipfs::mb -+ -+#endif // IPFS_B16_UPPER_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/bases/b32.h b/third_party/ipfs_client/src/ipfs_client/bases/b32.h -new file mode 100644 -index 0000000000000..9dac14db53ac3 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/bases/b32.h -@@ -0,0 +1,35 @@ -+#ifndef IPFS_B32_UPPER_H_ -+#define IPFS_B32_UPPER_H_ -+ -+#include -+ -+namespace multibase { -+template <> -+struct traits<::multibase::encoding::base_32> { -+ constexpr static const std::array charset = { -+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', -+ 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', -+ 'w', 'x', 'y', 'z', '2', '3', '4', '5', '6', '7'}; -+ constexpr static const char name[] = "base_32"; -+ using execution_style = multibase::algorithm::block_tag; -+ constexpr static const char padding = 0; -+}; -+template <> -+struct traits<::multibase::encoding::base_32_upper> { -+ constexpr static const std::array charset = { -+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', -+ 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', -+ 'W', 'X', 'Y', 'Z', '2', '3', '4', '5', '6', '7'}; -+ constexpr static const char name[] = "base_32_upper"; -+ using execution_style = multibase::algorithm::block_tag; -+ constexpr static const char padding = 0; -+}; -+} // namespace multibase -+ -+namespace ipfs::mb { -+using base_32 = multibase::basic_algorithm; -+using base_32_upper = -+ multibase::basic_algorithm; -+} // namespace ipfs::mb -+ -+#endif // IPFS_B32_UPPER_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/block_requestor.cc b/third_party/ipfs_client/src/ipfs_client/block_requestor.cc -new file mode 100644 -index 0000000000000..8a63e6f7ae0cc ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/block_requestor.cc -@@ -0,0 +1 @@ -+#include -diff --git a/third_party/ipfs_client/src/ipfs_client/car.cc b/third_party/ipfs_client/src/ipfs_client/car.cc -new file mode 100644 -index 0000000000000..e36442347415f ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/car.cc -@@ -0,0 +1,132 @@ -+#include "car.h" -+ -+#include -+ -+#include -+ -+#include "log_macros.h" -+ -+#include -+ -+using Self = ipfs::Car; -+using Byte = ipfs::Byte; -+using ByteView = ipfs::ByteView; -+using VarInt = libp2p::multi::UVarint; -+ -+namespace { -+short ReadHeader(ByteView&, ipfs::ContextApi const&); -+std::pair GetV1PayloadPos(ByteView); -+} // namespace -+ -+Self::Car(ByteView bytes, ContextApi const& api) { -+ auto after_header = bytes; -+ auto version = ReadHeader(after_header, api); -+ switch (version) { -+ case 0: -+ LOG(ERROR) << "Problem parsing CAR header."; -+ break; -+ case 1: -+ LOG(INFO) << "Reading CARv1"; -+ data_ = after_header; -+ break; -+ case 2: { -+ auto [off, siz] = GetV1PayloadPos(after_header); -+ LOG(INFO) << "CARv2 carries a payload of " << siz << "B @ " << off; -+ // TODO validate off and siz are sane, e.g. not pointing back into pragma -+ // or whatever -+ data_ = bytes.subspan(off, siz); -+ ReadHeader(data_, api); -+ break; -+ } -+ default: -+ LOG(ERROR) << "Unsupported CAR format version " << version; -+ } -+} -+auto Self::NextBlock() -> std::optional { -+ auto len = VarInt::create(data_); -+ if (!len) { -+ return std::nullopt; -+ } -+ data_ = data_.subspan(len->size()); -+ if (len->toUInt64() > data_.size()) { -+ LOG(ERROR) << "Length prefix claims cid+block is " << len->toUInt64() -+ << " bytes, but I only have " << data_.size() -+ << " bytes left in the CAR payload."; -+ data_ = {}; -+ return std::nullopt; -+ } -+ Block rv; -+ rv.bytes = data_.subspan(0U, len->toUInt64()); -+ data_ = data_.subspan(len->toUInt64()); -+ if (rv.cid.ReadStart(rv.bytes)) { -+ // TODO : check hash -+ return rv; -+ } -+ return std::nullopt; -+} -+ -+namespace { -+// https://ipld.io/specs/transport/car/carv2/ -+short ReadHeader(ByteView& bytes, ipfs::ContextApi const& api) { -+ auto header_len = VarInt::create(bytes); -+ if (!header_len || -+ header_len->toUInt64() + header_len->size() > bytes.size()) { -+ return 0; -+ } -+ bytes = bytes.subspan(header_len->size()); -+ auto header_bytes = bytes.subspan(0UL, header_len->toUInt64()); -+ auto header = api.ParseCbor(header_bytes); -+ if (!header) { -+ return 0; -+ } -+ auto version_node = header->at("version"); -+ if (!version_node) { -+ return 0; -+ } -+ auto version = version_node->as_unsigned(); -+ if (version) { -+ bytes = bytes.subspan(header_len->toUInt64()); -+ return version.value(); -+ } -+ return 0; -+} -+std::uint64_t read_le_u64(ByteView bytes, unsigned& off) { -+ auto b = bytes.subspan(off, off + 8); -+ off += 8U; -+ auto shift_in = [](std::uint64_t i, Byte y) { -+ return (i << 8) | static_cast(y); -+ }; -+ return std::accumulate(b.rbegin(), b.rend(), 0UL, shift_in); -+} -+std::pair GetV1PayloadPos(ByteView bytes) { -+ // Following the 11 byte pragma, the CARv2 [header] is a fixed-length sequence -+ // of 40 bytes, broken into the following sections: -+ if (bytes.size() < 40) { -+ return {}; -+ } -+ -+ // Characteristics: A 128-bit (16-byte) bitfield used to describe certain -+ // features of the enclosed data. -+ auto reading_off = 16U; -+ -+ // Data offset: A 64-bit (8-byte) unsigned -+ // little-endian integer indicating the byte-offset from the beginning of the -+ // CARv2 [pragma] to the first byte of the CARv1 data payload. -+ auto data_offset = read_le_u64(bytes, reading_off); -+ -+ // Data size: A 64-bit -+ // (8-byte) unsigned little-endian integer indicating the byte-length of the -+ // CARv1 data payload. -+ auto data_size = read_le_u64(bytes, reading_off); -+ -+ // Index offset: A 64-bit (8-byte) unsigned little-endian -+ // integer indicating the byte-offset from the beginning of the CARv2 to the -+ // first byte of the index payload. This value may be 0 to indicate the -+ // absence of index data. -+ reading_off += 8; // Ignoring index and therefore index offset -+ -+ assert(reading_off == 40UL); -+ -+ return {data_offset, data_size}; -+} -+} // namespace -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/car.h b/third_party/ipfs_client/src/ipfs_client/car.h -new file mode 100644 -index 0000000000000..619ac48ed8cd3 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/car.h -@@ -0,0 +1,26 @@ -+#ifndef IPFS_CAR_H_ -+#define IPFS_CAR_H_ -+ -+#include -+#include -+ -+#include -+#include -+ -+namespace ipfs { -+class ContextApi; -+class Car { -+ public: -+ Car(ByteView, ContextApi const&); -+ struct Block { -+ Cid cid; -+ ByteView bytes; -+ }; -+ std::optional NextBlock(); -+ -+ private: -+ ByteView data_; -+}; -+} // namespace ipfs -+ -+#endif // IPFS_CAR_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/cid.cc b/third_party/ipfs_client/src/ipfs_client/cid.cc -new file mode 100644 -index 0000000000000..b20686086bca6 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/cid.cc -@@ -0,0 +1,86 @@ -+#include -+ -+#include -+#include -+ -+#include "log_macros.h" -+ -+using Self = ipfs::Cid; -+using VarInt = libp2p::multi::UVarint; -+ -+Self::Cid(ipfs::MultiCodec cdc, ipfs::MultiHash hsh) -+ : codec_{cdc}, hash_{hsh} {} -+ -+Self::Cid(ipfs::ByteView bytes) { -+ ReadStart(bytes); -+} -+ -+Self::Cid(std::string_view s) { -+ if (s.size() == 46 && s[0] == 'Q' && s[1] == 'm') { -+ auto bytes = mb::Codec::Get(mb::Code::BASE58_BTC)->decode(s); -+ auto view = ByteView{bytes}; -+ ReadStart(view); -+ } else if (auto bytes = mb::decode(s)) { -+ if (bytes->size() > 4) { -+ auto view = ByteView{bytes.value()}; -+ ReadStart(view); -+ } -+ } else { -+ LOG(WARNING) << "Failed to decode the multibase for a CID: " << s; -+ } -+} -+ -+bool Self::ReadStart(ByteView& bytes) { -+ if (bytes.size() >= 34 && bytes[0] == ipfs::Byte{0x12} && -+ bytes[1] == ipfs::Byte{0x20}) { -+ hash_ = MultiHash{bytes}; -+ codec_ = hash_.valid() ? MultiCodec::DAG_PB : MultiCodec::INVALID; -+ bytes = bytes.subspan(34); -+ return true; -+ } -+ auto version = VarInt::create(bytes); -+ if (!version) { -+ return false; -+ } -+ if (version->toUInt64() != 1U) { -+ LOG(ERROR) << "CID version " << version->toUInt64() << " not supported."; -+ return false; -+ } -+ bytes = bytes.subspan(version->size()); -+ auto codec = VarInt::create(bytes); -+ if (!codec) { -+ return false; -+ } -+ auto cdc = static_cast(codec->toUInt64()); -+ codec_ = Validate(cdc); -+ bytes = bytes.subspan(codec->size()); -+ return hash_.ReadPrefix(bytes); -+} -+ -+bool Self::valid() const { -+ return codec_ != MultiCodec::INVALID && hash_.valid(); -+} -+ -+auto Self::hash() const -> ByteView { -+ return hash_.digest(); -+} -+auto Self::hash_type() const -> HashType { -+ return multi_hash().type(); -+} -+ -+std::string Self::to_string() const { -+ std::vector binary; -+ auto append_varint = [&binary](auto x) { -+ auto i = static_cast(x); -+ VarInt v{i}; -+ auto b = v.toBytes(); -+ binary.insert(binary.end(), b.begin(), b.end()); -+ }; -+ append_varint(1); // CID version 1 -+ append_varint(codec()); -+ append_varint(hash_type()); -+ append_varint(hash().size()); -+ auto h = hash(); -+ binary.insert(binary.end(), h.begin(), h.end()); -+ return mb::encode(mb::Code::BASE32_LOWER, binary); -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/context_api.cc b/third_party/ipfs_client/src/ipfs_client/context_api.cc -new file mode 100644 -index 0000000000000..972e3df2fa320 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/context_api.cc -@@ -0,0 +1,21 @@ -+#include -+ -+#include "crypto/openssl_sha2_256.h" -+ -+using Self = ipfs::ContextApi; -+ -+Self::ContextApi() { -+#if HAS_OPENSSL_SHA -+ hashers_.emplace(HashType::SHA2_256, -+ std::make_unique()); -+#endif -+} -+ -+auto Self::Hash(HashType ht, ByteView data) -+ -> std::optional> { -+ auto it = hashers_.find(ht); -+ if (hashers_.end() == it || !(it->second)) { -+ return std::nullopt; -+ } -+ return it->second->hash(data); -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/crypto/openssl_sha2_256.cc b/third_party/ipfs_client/src/ipfs_client/crypto/openssl_sha2_256.cc -new file mode 100644 -index 0000000000000..ff5c7a24d23bb ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/crypto/openssl_sha2_256.cc -@@ -0,0 +1,32 @@ -+#include "openssl_sha2_256.h" -+ -+using Self = ipfs::crypto::OpensslSha2_256; -+ -+#include "log_macros.h" -+ -+#if HAS_OPENSSL_SHA -+ -+#include -+ -+Self::~OpensslSha2_256() {} -+auto Self::hash(ipfs::ByteView data) -> std::optional> { -+ SHA256_CTX ctx; -+ if (1 != SHA256_Init(&ctx)) { -+ LOG(ERROR) << "Failed to initialize SHA256"; -+ return std::nullopt; -+ } -+ if (1 != SHA256_Update(&ctx, data.data(), data.size())) { -+ LOG(ERROR) << "Failure injesting data into SHA256."; -+ return {}; -+ } -+ std::vector rv(SHA256_DIGEST_LENGTH, Byte{}); -+ auto p = reinterpret_cast(rv.data()); -+ if (1 == SHA256_Final(p, &ctx)) { -+ return rv; -+ } else { -+ LOG(ERROR) << "Error calculating sha2-256 hash."; -+ return std::nullopt; -+ } -+} -+ -+#endif -diff --git a/third_party/ipfs_client/src/ipfs_client/crypto/openssl_sha2_256.h b/third_party/ipfs_client/src/ipfs_client/crypto/openssl_sha2_256.h -new file mode 100644 -index 0000000000000..c4e7bb975d366 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/crypto/openssl_sha2_256.h -@@ -0,0 +1,18 @@ -+#ifndef IPFS_OPENSSL_SHA2_256_H_ -+#define IPFS_OPENSSL_SHA2_256_H_ -+ -+#if __has_include() -+#define HAS_OPENSSL_SHA 1 -+#endif -+ -+#include -+ -+namespace ipfs::crypto { -+class OpensslSha2_256 final : public Hasher { -+ public: -+ ~OpensslSha2_256() noexcept override; -+ std::optional> hash(ByteView) override; -+}; -+} // namespace ipfs::crypto -+ -+#endif // IPFS_OPENSSL_SHA2_256_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/dag_cbor_value.cc b/third_party/ipfs_client/src/ipfs_client/dag_cbor_value.cc -new file mode 100644 -index 0000000000000..20a6fc713ad4e ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/dag_cbor_value.cc -@@ -0,0 +1,69 @@ -+#include -+ -+#include -+ -+#include "log_macros.h" -+ -+#include -+ -+using Self = ipfs::DagCborValue; -+ -+void Self::html(std::ostream& str) const { -+ if (auto u = as_unsigned()) { -+ str << "" << *u << "\n"; -+ } else if (auto si = as_signed()) { -+ str << "" << *si << "\n"; -+ } else if (auto fl = as_float()) { -+ str << "" << *si << "\n"; -+ } else if (auto s = as_string()) { -+ str << "

""; -+ for (auto c : *s) { -+ str << html_escape(c); -+ } -+ str << ""

\n"; -+ } else if (auto cid = as_link()) { -+ auto cs = cid.value().to_string(); -+ if (cs.size()) { -+ str << "" << cs -+ << "\n"; -+ } else { -+ str << "\n"; -+ } -+ } else if (auto bin = as_bytes()) { -+ str << "

0x"; -+ for (auto b : *bin) { -+ str << ' ' << std::hex << std::setw(2) << std::setfill('0') -+ << static_cast(b); -+ } -+ str << "

\n"; -+ } else if (is_array()) { -+ str << "
    \n"; -+ iterate_array([&str](auto& v) { -+ str << "
  1. \n"; -+ v.html(str); -+ str << "
  2. \n"; -+ }); -+ str << "
\n"; -+ } else if (is_map()) { -+ str << "\n"; -+ iterate_map([&str](auto k, auto& v) { -+ str << " \n"; -+ }); -+ str << "
" << k << "\n"; -+ v.html(str); -+ str << "
\n"; -+ } else if (auto bul = as_bool()) { -+ auto val = (bul.value() ? "True" : "False"); -+ str << " " << val << "\n"; -+ } else { -+ str << "\n"; -+ } -+} -+ -+std::string Self::html() const { -+ std::ostringstream oss; -+ oss << "DAG-CBOR Preview\n"; -+ html(oss); -+ oss << ""; -+ return oss.str(); -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/dag_json_value.cc b/third_party/ipfs_client/src/ipfs_client/dag_json_value.cc -new file mode 100644 -index 0000000000000..12a493cbd92cb ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/dag_json_value.cc -@@ -0,0 +1,22 @@ -+#include -+ -+#include -+ -+using Self = ipfs::DagJsonValue; -+ -+Self::~DagJsonValue() noexcept {} -+auto Self::get_if_link() const -> std::optional { -+ auto slash = (*this)["/"]; -+ if (!slash) { -+ return std::nullopt; -+ } -+ auto str = slash->get_if_string(); -+ if (!str) { -+ return std::nullopt; -+ } -+ auto cid = Cid(*str); -+ if (cid.valid()) { -+ return cid; -+ } -+ return std::nullopt; -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/gateways.cc b/third_party/ipfs_client/src/ipfs_client/gateways.cc -new file mode 100644 -index 0000000000000..fe49949b10537 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gateways.cc -@@ -0,0 +1,121 @@ -+#include -+ -+#include -+ -+#include "log_macros.h" -+ -+#include -+#include -+#include -+ -+using namespace std::string_literals; -+ -+ipfs::Gateways::Gateways() -+ : random_engine_{std::random_device{}()}, dist_{0.01} { -+ auto gws = DefaultGateways(); -+ for (auto [k, v] : gws) { -+ known_gateways_[k] = v; -+ } -+} -+ipfs::Gateways::~Gateways() {} -+ -+auto ipfs::Gateways::GenerateList() -> GatewayList { -+ GatewayList result; -+ for (auto [k, v] : known_gateways_) { -+ result.push_back({k, v + dist_(random_engine_)}); -+ } -+ std::sort(result.begin(), result.end()); -+ return result; -+} -+ -+void ipfs::Gateways::promote(std::string const& key) { -+ auto it = known_gateways_.find(key); -+ if (known_gateways_.end() == it) { -+ LOG(ERROR) << "Can't promote (" << key -+ << ") because I don't know that one."; -+ } else { -+ auto l = known_gateways_.at(key)++; -+ if (l % (++up_log_ / 2) <= 9) { -+ LOG(INFO) << "Promote(" << key << ")"; -+ } -+ } -+} -+void ipfs::Gateways::demote(std::string const& key) { -+ auto it = known_gateways_.find(key); -+ if (known_gateways_.end() == it) { -+ VLOG(2) << "Can't demote " << key << " as I don't have that gateway."; -+ } else if (it->second) { -+ if (it->second-- % 3 == 0) { -+ LOG(INFO) << "Demote(" << key << ") to " << it->second; -+ } -+ } else { -+ LOG(INFO) << "Demoted(" << key << ") for the last time - dropping."; -+ known_gateways_.erase(it); -+ } -+} -+ -+void ipfs::Gateways::AddGateways(std::vector v) { -+ LOG(INFO) << "AddGateways(" << v.size() << ')'; -+ for (auto& ip : v) { -+ if (ip.empty()) { -+ LOG(ERROR) << "ERROR: Attempted to add empty string as gateway!"; -+ continue; -+ } -+ std::string prefix; -+ if (ip.find("://") == std::string::npos) { -+ prefix = "http://"; -+ prefix.append(ip); -+ } else { -+ prefix = ip; -+ } -+ if (prefix.back() != '/') { -+ prefix.push_back('/'); -+ } -+ if (known_gateways_.insert({prefix, 99}).second) { -+ VLOG(1) << "Adding discovered gateway " << prefix; -+ } -+ } -+} -+ -+auto ipfs::Gateways::DefaultGateways() -> GatewayList { -+ auto* ovr = std::getenv("IPFS_GATEWAY"); -+ if (ovr && *ovr) { -+ std::istringstream user_override{ovr}; -+ GatewayList result; -+ std::string gw; -+ while (user_override >> gw) { -+ if ( gw.empty() ) { -+ continue; -+ } -+ if ( gw.back() != '/' ) { -+ gw.push_back('/'); -+ } -+ result.push_back( {gw, 0} ); -+ } -+ auto N = static_cast(result.size()); -+ for (auto i = 0; i < N; ++i) { -+ auto& r = result[i]; -+ r.strength = N - i; -+ LOG(INFO) << "User-specified gateway: " << r.prefix << '=' << r.strength; -+ } -+ return result; -+ } -+ return {{"http://localhost:8080/"s, 929}, -+ {"https://jcsl.hopto.org/"s, 863}, -+ {"https://human.mypinata.cloud/"s, 798}, -+ {"https://ipfs.io/"s, 753}, -+ {"https://gateway.ipfs.io/"s, 678}, -+ {"https://dweb.link/"s, 598}, -+ {"https://gateway.pinata.cloud/"s, 519}, -+ {"https://ipfs.joaoleitao.org/"s, 434}, -+ {"https://ipfs.runfission.com/"s, 371}, -+ {"https://nftstorage.link/"s, 307}, -+ {"https://w3s.link/"s, 243}, -+ {"https://ipfs.fleek.co/"s, 203}, -+ {"https://ipfs.jpu.jp/"s, 162}, -+ {"https://permaweb.eu.org/"s, 121}, -+ {"https://jorropo.net/"s, 76}, -+ {"https://hardbin.com/"s, 39}, -+ {"https://ipfs.soul-network.com/"s, 1}, -+ {"https://storry.tv/"s, 0}}; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/generated_directory_listing.cc b/third_party/ipfs_client/src/ipfs_client/generated_directory_listing.cc -new file mode 100644 -index 0000000000000..5a7c4fce733d6 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/generated_directory_listing.cc -@@ -0,0 +1,45 @@ -+#include "generated_directory_listing.h" -+ -+#include "log_macros.h" -+ -+ipfs::GeneratedDirectoryListing::GeneratedDirectoryListing( -+ std::string_view base_path) -+ : html_("\n "), base_path_(base_path) { -+ if (base_path.empty() || base_path[0] != '/') { -+ base_path_.insert(0UL, 1UL, '/'); -+ } -+ if (base_path_.back() != '/') { -+ base_path_.push_back('/'); -+ } -+ html_.append(base_path_) -+ .append(" (directory listing)\n") -+ .append(" \n") -+ .append("
    \n"); -+ if (base_path.find_first_not_of("/") < base_path.size()) { -+ std::string_view dotdotpath{base_path_}; -+ dotdotpath.remove_suffix(1); // Remove that trailing / -+ auto last_slash = dotdotpath.find_last_of("/"); -+ dotdotpath = dotdotpath.substr(0, last_slash + 1UL); -+ AddLink("..", dotdotpath); -+ } -+} -+ -+void ipfs::GeneratedDirectoryListing::AddEntry(std::string_view name) { -+ auto path = base_path_; -+ path.append(name); -+ AddLink(name, path); -+} -+void ipfs::GeneratedDirectoryListing::AddLink(std::string_view name, -+ std::string_view path) { -+ html_.append("
  • \n") -+ .append(" ") -+ .append(name) -+ .append("\n") -+ .append("
  • \n"); -+} -+ -+std::string const& ipfs::GeneratedDirectoryListing::Finish() { -+ return html_.append("
\n").append(" \n").append("\n"); -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/generated_directory_listing.h b/third_party/ipfs_client/src/ipfs_client/generated_directory_listing.h -new file mode 100644 -index 0000000000000..8daa0ec01cb9e ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/generated_directory_listing.h -@@ -0,0 +1,41 @@ -+#ifndef IPFS_GENERATED_DIRECTORY_LISTING_H_ -+#define IPFS_GENERATED_DIRECTORY_LISTING_H_ -+ -+#include -+#include -+ -+namespace ipfs { -+ -+/*! -+ * \brief An index.html listing out a directory node's content -+ */ -+class GeneratedDirectoryListing { -+ public: -+ -+ /*! -+ * \brief Get the HTML preamble going -+ * \param base_path - The path _to_ this directory -+ */ -+ GeneratedDirectoryListing(std::string_view base_path); -+ -+ /*! -+ * \brief Add an entry to the list -+ * \param name - The directory's way of referring to that CID -+ */ -+ void AddEntry(std::string_view name); -+ -+ /*! -+ * \brief Finish up all the HTML stuff at the end. -+ * \return The generated HTML -+ */ -+ std::string const& Finish(); -+ -+ private: -+ std::string html_; -+ std::string base_path_; -+ -+ void AddLink(std::string_view name, std::string_view path); -+}; -+} // namespace ipfs -+ -+#endif // IPFS_GENERATED_DIRECTORY_LISTING_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/block_request_splitter.cc b/third_party/ipfs_client/src/ipfs_client/gw/block_request_splitter.cc -new file mode 100644 -index 0000000000000..3ded788f6bdf1 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/block_request_splitter.cc -@@ -0,0 +1,30 @@ -+#include -+ -+#include -+ -+using Self = ipfs::gw::BlockRequestSplitter; -+ -+std::string_view Self::name() const { -+ return "BlockRequestSplitter"; -+} -+auto Self::handle(ipfs::gw::RequestPtr r) -> HandleOutcome { -+ if (r->type != Type::Car) { -+ return HandleOutcome::NOT_HANDLED; -+ } -+ { -+ auto br = std::make_shared(*r); -+ br->type = Type::Block; -+ br->path.clear(); -+ forward(br); -+ } -+ /* -+ { -+ auto pr = std::make_shared(*r); -+ pr->type = Type::Providers; -+ pr->path.clear(); -+ pr->affinity.clear(); -+ forward(pr); -+ } -+ */ -+ return HandleOutcome::NOT_HANDLED; -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/default_requestor.cc b/third_party/ipfs_client/src/ipfs_client/gw/default_requestor.cc -new file mode 100644 -index 0000000000000..46dbf88033b7c ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/default_requestor.cc -@@ -0,0 +1,30 @@ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+auto ipfs::gw::default_requestor(ipfs::GatewayList gws, -+ std::shared_ptr early, -+ std::shared_ptr api) -+ -> std::shared_ptr { -+ auto result = std::make_shared(); -+ result->or_else(std::make_shared()); -+ if (early) { -+ result->or_else(early); -+ early->api(api); -+ } -+ auto pool = std::make_shared(); -+ result->or_else(std::make_shared(api)) -+ .or_else(pool) -+ .or_else(std::make_shared()); -+ for (auto& gw : gws) { -+ auto gwr = -+ std::make_shared(gw.prefix, gw.strength, api); -+ pool->add(gwr); -+ } -+ return result; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/dnslink_requestor.cc b/third_party/ipfs_client/src/ipfs_client/gw/dnslink_requestor.cc -new file mode 100644 -index 0000000000000..731b750ffd43a ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/dnslink_requestor.cc -@@ -0,0 +1,69 @@ -+#include -+ -+#include "ipfs_client/ipld/ipns_name.h" -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+#include "log_macros.h" -+ -+#include -+ -+using Self = ipfs::gw::DnsLinkRequestor; -+using namespace std::literals; -+ -+Self::DnsLinkRequestor(std::shared_ptr api) { -+ api_ = api; -+} -+std::string_view Self::name() const { -+ return "DNSLink requestor"; -+} -+namespace { -+bool parse_results(ipfs::gw::RequestPtr req, -+ std::vector const& results, -+ std::shared_ptr const&); -+} -+auto Self::handle(ipfs::gw::RequestPtr req) -> HandleOutcome { -+ if (req->type != Type::DnsLink) { -+ return HandleOutcome::NOT_HANDLED; -+ } -+ // std::function requires target be copy-constructible -+ auto success = std::make_shared(); -+ *success = false; -+ auto a = api_; -+ auto res = [req, success, a](std::vector const& results) { -+ *success = *success || parse_results(req, results, a); -+ }; -+ auto don = [success, req]() { -+ LOG(INFO) << "DNSLink request completed for " << req->main_param -+ << " success=" << *success; -+ if (!*success) { -+ req->dependent->finish(ipfs::Response::HOST_NOT_FOUND); -+ } -+ }; -+ api_->SendDnsTextRequest("_dnslink." + req->main_param, res, std::move(don)); -+ return HandleOutcome::PENDING; -+} -+namespace { -+bool parse_results(ipfs::gw::RequestPtr req, -+ std::vector const& results, -+ std::shared_ptr const& api) { -+ constexpr auto prefix = "dnslink="sv; -+ LOG(INFO) << "Scanning " << results.size() << " DNS TXT records for " -+ << req->main_param << " looking for dnslink..."; -+ for (auto& result : results) { -+ if (starts_with(result, prefix)) { -+ LOG(INFO) << "DNSLink result=" << result; -+ req->RespondSuccessfully(result.substr(prefix.size()), api); -+ return true; -+ } else { -+ LOG(INFO) << "Irrelevant TXT result, ignored: " << result; -+ } -+ } -+ return false; -+} -+} // namespace -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/gateway_http_requestor.cc b/third_party/ipfs_client/src/ipfs_client/gw/gateway_http_requestor.cc -new file mode 100644 -index 0000000000000..94ab27fc14228 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/gateway_http_requestor.cc -@@ -0,0 +1,141 @@ -+#include "gateway_http_requestor.h" -+ -+#include -+#include -+ -+#include -+#include -+#include -+ -+#include "log_macros.h" -+ -+using Self = ipfs::gw::GatewayHttpRequestor; -+using ReqTyp = ipfs::gw::Type; -+ -+std::string_view Self::name() const { -+ return "simplistic HTTP requestor"; -+} -+auto Self::handle(ipfs::gw::RequestPtr r) -> HandleOutcome { -+ DCHECK(r); -+ DCHECK(r->dependent); -+ DCHECK_GT(prefix_.size(), 0UL); -+ if (!r->is_http()) { -+ LOG(ERROR) << name() << " only handles HTTP requests"; -+ return HandleOutcome::NOT_HANDLED; -+ } -+ auto req_key = r->url_suffix().append(r->accept()); -+ if (seen_[req_key] > 0xFD) { -+ return HandleOutcome::NOT_HANDLED; -+ } -+ if (target(*r) <= r->parallel + pending_ + seen_[req_key]) { -+ return HandleOutcome::MAYBE_LATER; -+ } -+ auto desc = r->describe_http(); -+ if (!desc.has_value() || desc.value().url.empty()) { -+ LOG(ERROR) -+ << r->debug_string() -+ << " is HTTP but can't describe the HTTP request that would happen?"; -+ return HandleOutcome::NOT_HANDLED; -+ } -+ if (prefix_.back() == '/' && desc.value().url[0] == '/') { -+ desc.value().url.insert(0, prefix_, 0UL, prefix_.size() - 1UL); -+ } else { -+ desc.value().url.insert(0, prefix_); -+ } -+ desc.value().timeout_seconds += extra_seconds_; -+ auto cb = [this, r, desc, req_key](std::int16_t status, std::string_view body, -+ ContextApi::HeaderAccess ha) { -+ if (r->parallel) { -+ r->parallel--; -+ } -+ if (pending_) { -+ pending_--; -+ } -+ if (r->type == Type::Zombie) { -+ return; -+ } else if (status == 408 || status == 504) { -+ // Timeouts -+ extra_seconds_++; -+ forward(r); -+ return; -+ } else if (status / 100 == 2) { -+ auto ct = ha("content-type"); -+ std::transform(ct.begin(), ct.end(), ct.begin(), ::tolower); -+ if (ct.empty()) { -+ LOG(ERROR) << "No content-type header?"; -+ } -+ if (ct.size() && desc->accept.size() && -+ ct.find(desc->accept) == std::string::npos) { -+ LOG(WARNING) << "Requested with Accept: " << desc->accept -+ << " but received response with content-type: " << ct; -+ LOG(INFO) << "Demote(" << prefix_ << ')'; -+ } else if (!r->RespondSuccessfully(body, api_)) { -+ LOG(ERROR) << "Got an unuseful response from " << prefix_ -+ << " forwarding request " << r->debug_string() -+ << " to next requestor."; -+ } else { -+ // Good cases -+ if (typ_good_.insert(r->type).second) { -+ VLOG(1) << prefix_ << " OK with requests of type " -+ << static_cast(r->type); -+ } else if (typ_bad_.erase(r->type)) { -+ VLOG(1) << prefix_ << " truly OK with requests of type " -+ << static_cast(r->type); -+ } -+ if (aff_good_.insert(r->affinity).second) { -+ VLOG(1) << prefix_ << " likes requests in the neighborhood of " -+ << r->affinity; -+ } else if (aff_bad_.erase(r->affinity)) { -+ VLOG(1) << prefix_ << " truly OK with affinity " << r->affinity; -+ } -+ VLOG(2) << prefix_ << " had a success on " << r->debug_string(); -+ LOG(INFO) << "Promote(" << prefix_ << ')'; -+ ++strength_; -+ return; -+ } -+ } else if (status / 100 == 4) { -+ seen_[req_key] += 9; -+ } -+ seen_[req_key] += 9; -+ LOG(INFO) << "Demote(" << prefix_ << ')'; -+ if (strength_ > 0) { -+ --strength_; -+ } -+ aff_bad_.insert(r->affinity); -+ typ_bad_.insert(r->type); -+ forward(r); -+ }; -+ DCHECK(api_); -+ api_->SendHttpRequest(desc.value(), cb); -+ seen_[req_key]++; -+ pending_++; -+ return HandleOutcome::PENDING; -+} -+ -+Self::GatewayHttpRequestor(std::string gateway_prefix, -+ int strength, -+ std::shared_ptr api) -+ : prefix_{gateway_prefix}, strength_{strength} { -+ api_ = api; -+} -+Self::~GatewayHttpRequestor() {} -+ -+int Self::target(GatewayRequest const& r) const { -+ int result = (strength_ - pending_) / 2; -+ if (!pending_) { -+ ++result; -+ } -+ if (typ_good_.count(r.type)) { -+ result += 3; -+ } -+ if (!typ_bad_.count(r.type)) { -+ result += 2; -+ } -+ if (aff_good_.count(r.affinity)) { -+ result += 5; -+ } -+ if (aff_bad_.count(r.affinity) == 0UL) { -+ result += 4; -+ } -+ return result; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/gateway_http_requestor.h b/third_party/ipfs_client/src/ipfs_client/gw/gateway_http_requestor.h -new file mode 100644 -index 0000000000000..8c61bef879db8 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/gateway_http_requestor.h -@@ -0,0 +1,34 @@ -+#ifndef IPFS_GATEWAY_HTTP_REQUESTOR_H_ -+#define IPFS_GATEWAY_HTTP_REQUESTOR_H_ -+ -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+namespace ipfs::gw { -+class GatewayHttpRequestor final : public Requestor { -+ std::string prefix_; -+ int strength_; -+ std::unordered_map seen_; -+ std::set aff_good_, aff_bad_; -+ std::set typ_good_, typ_bad_; -+ int pending_ = 0; -+ int extra_seconds_ = 0; -+ -+ HandleOutcome handle(RequestPtr) override; -+ std::string_view name() const override; -+ int target(GatewayRequest const&) const; -+ -+ public: -+ GatewayHttpRequestor(std::string gateway_prefix, -+ int strength, -+ std::shared_ptr); -+ ~GatewayHttpRequestor() noexcept override; -+}; -+} // namespace ipfs::gw -+ -+#endif // IPFS_GATEWAY_HTTP_REQUESTOR_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/gateway_request.cc b/third_party/ipfs_client/src/ipfs_client/gw/gateway_request.cc -new file mode 100644 -index 0000000000000..1b251b1fc57a8 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/gateway_request.cc -@@ -0,0 +1,305 @@ -+#include -+ -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "log_macros.h" -+ -+#include -+#include -+ -+using namespace std::literals; -+ -+using Self = ipfs::gw::GatewayRequest; -+ -+std::shared_ptr Self::fromIpfsPath(ipfs::SlashDelimited p) { -+ auto name_space = p.pop(); -+ auto r = std::make_shared(); -+ r->main_param = p.pop(); -+ Cid cid(r->main_param); -+ if (cid.valid()) { -+ r->cid = std::move(cid); -+ } else { -+ r->cid = std::nullopt; -+ } -+ if (name_space == "ipfs") { -+ if (!r->cid.has_value()) { -+ LOG(ERROR) << "IPFS request with invalid/unsupported CID " -+ << r->main_param; -+ return {}; -+ } -+ if (r->cid.value().hash_type() == HashType::IDENTITY) { -+ r->type = Type::Identity; -+ } else { -+ r->path = p.pop_all(); -+ r->type = r->path.empty() ? Type::Block : Type::Car; -+ } -+ } else if (name_space == "ipns") { -+ r->path = p.pop_all(); -+ if (Cid(r->main_param).valid()) { -+ r->type = Type::Ipns; -+ } else { -+ r->type = Type::DnsLink; -+ } -+ } else { -+ LOG(FATAL) << "Unsupported namespace in ipfs path: /" << name_space << '/' -+ << p.pop_all(); -+ } -+ return r; -+} -+ -+std::string Self::url_suffix() const { -+ switch (type) { -+ case Type::Block: -+ return "/ipfs/" + main_param; -+ case Type::Car: -+ return "/ipfs/" + main_param + "/" + path + "?dag-scope=entity"; -+ case Type::Ipns: -+ return "/ipns/" + main_param; -+ case Type::Providers: -+ return "/routing/v1/providers/" + main_param; -+ case Type::DnsLink: -+ LOG(FATAL) << "Don't try to use HTTP(s) for DNS TXT records."; -+ return {}; -+ case Type::Identity: -+ case Type::Zombie: -+ return {}; -+ } -+ LOG(FATAL) << "Unhandled gateway request type: " << static_cast(type); -+ return {}; -+} -+std::string_view Self::accept() const { -+ switch (type) { -+ case Type::Block: -+ return "application/vnd.ipld.raw"sv; -+ case Type::Ipns: -+ return "application/vnd.ipfs.ipns-record"sv; -+ case Type::Car: -+ return "application/vnd.ipld.car"sv; -+ case Type::Providers: -+ return "application/json"sv; -+ case Type::DnsLink: -+ // TODO : not sure this advice is 100% good, actually. -+ // If the user's system setup allows for text records to actually work, -+ // it would be good to respect their autonomy and try to follow the -+ // system's DNS setup. However, it's extremely easy to get yourself in a -+ // situation where Chromium _cannot_ access text records. If you're in -+ // that scenario, it might be better to try to use an IPFS gateway with -+ // DNSLink capability. -+ LOG(FATAL) << "Don't try to use HTTP(s) for DNS TXT records."; -+ return {}; -+ case Type::Identity: -+ case Type::Zombie: -+ return {}; -+ } -+ LOG(FATAL) << "Invalid gateway request type: " << static_cast(type); -+ return {}; -+} -+short Self::timeout_seconds() const { -+ switch (type) { -+ case Type::DnsLink: -+ return 16; -+ case Type::Block: -+ return 39; -+ case Type::Providers: -+ return 64; -+ case Type::Car: -+ return 128; -+ case Type::Ipns: -+ return 256; -+ case Type::Identity: -+ case Type::Zombie: -+ return 0; -+ } -+ LOG(FATAL) << "timeout_seconds() called for unsupported gateway request type " -+ << static_cast(type); -+ return 0; -+} -+ -+auto Self::identity_data() const -> std::string_view { -+ if (type != Type::Identity) { -+ return ""; -+ } -+ auto hash = cid.value().hash(); -+ auto d = reinterpret_cast(hash.data()); -+ return std::string_view{d, hash.size()}; -+} -+ -+bool Self::is_http() const { -+ return type != Type::DnsLink && type != Type::Identity; -+} -+auto Self::describe_http() const -> std::optional { -+ if (!is_http()) { -+ return {}; -+ } -+ return HttpRequestDescription{url_suffix(), timeout_seconds(), -+ std::string{accept()}, max_response_size()}; -+} -+std::optional Self::max_response_size() const { -+ switch (type) { -+ case Type::Identity: -+ return 0; -+ case Type::DnsLink: -+ return std::nullopt; -+ case Type::Ipns: -+ return MAX_IPNS_PB_SERIALIZED_SIZE; -+ case Type::Block: -+ return BLOCK_RESPONSE_BUFFER_SIZE; -+ case Type::Car: { -+ // There could be an unlimited number of blocks in the CAR -+ // The _floor_ is the number of path components. -+ // But one path component could be a HAMT sharded directory that we may -+ // need to pass through several layers on. -+ // And the final path component could be a UnixFS file with an unlimited -+ // number of blocks in it. -+ return std::nullopt; -+ } -+ case Type::Zombie: -+ return 0; -+ case Type::Providers: -+ // This one's tricky. -+ // One could easily guess a pracitical limit to the size of a Peer, -+ // and the spec says it SHOULD be limited to 100 peers. -+ // But there's no guaranteed limits. A peer could have an unlimited -+ // number of multiaddrs. And they're allowed to throw in arbitrary -+ // fields I'm supposed to ignore. So in theory it could be infinitely -+ // large. -+ return std::nullopt; -+ } -+ LOG(ERROR) << "Invalid gateway request type " << static_cast(type); -+ return std::nullopt; -+} -+std::string_view ipfs::gw::name(ipfs::gw::Type t) { -+ using ipfs::gw::Type; -+ switch (t) { -+ case Type::Block: -+ return "Block"; -+ case Type::Car: -+ return "Car"; -+ case Type::Ipns: -+ return "Ipns"; -+ case Type::DnsLink: -+ return "DnsLink"; -+ case Type::Providers: -+ return "Providers"; -+ case Type::Identity: -+ return "Identity"; -+ case Type::Zombie: -+ return "CompletedRequest"; -+ } -+ static std::array buf; -+ std::sprintf(buf.data(), "InvalidType %d", static_cast(t)); -+ return buf.data(); -+} -+std::string Self::debug_string() const { -+ std::ostringstream oss; -+ oss << "Request{Type=" << type << ' ' << main_param; -+ if (!path.empty()) { -+ oss << ' ' << path; -+ } -+ if (dependent) { -+ oss << " for=" << dependent->path().to_string(); -+ } -+ oss << " plel=" << parallel << '}'; -+ return oss.str(); -+} -+bool Self::RespondSuccessfully(std::string_view bytes, -+ std::shared_ptr const& api) { -+ using namespace ipfs::ipld; -+ bool success = false; -+ switch (type) { -+ case Type::Block: { -+ DCHECK(cid.has_value()); -+ if (!cid.has_value()) { -+ LOG(ERROR) << "Your CID doesn't even have a value!"; -+ return false; -+ } -+ DCHECK(api); -+ auto node = DagNode::fromBytes(api, cid.value(), bytes); -+ success = orchestrator_->add_node(main_param, node); -+ } break; -+ case Type::Identity: -+ success = orchestrator_->add_node( -+ main_param, std::make_shared(std::string{bytes})); -+ break; -+ case Type::Ipns: -+ if (cid.has_value()) { -+ DCHECK(api); -+ auto byte_ptr = reinterpret_cast(bytes.data()); -+ auto rec = ipfs::ValidateIpnsRecord({byte_ptr, bytes.size()}, -+ cid.value(), *api); -+ if (rec.has_value()) { -+ auto node = DagNode::fromIpnsRecord(rec.value()); -+ success = orchestrator_->add_node(main_param, node); -+ } else { -+ LOG(ERROR) << "IPNS record failed to validate!"; -+ return false; -+ } -+ } -+ break; -+ case Type::DnsLink: -+ LOG(INFO) << "Resolved " << debug_string() << " to " << bytes; -+ if (orchestrator_) { -+ success = orchestrator_->add_node( -+ main_param, std::make_shared(bytes)); -+ } else { -+ LOG(FATAL) << "I have no orchestrator!!"; -+ } -+ break; -+ case Type::Car: { -+ DCHECK(api); -+ Car car(as_bytes(bytes), *api); -+ auto added = 0; -+ while (auto block = car.NextBlock()) { -+ auto cid_s = block->cid.to_string(); -+ auto n = DagNode::fromBytes(api, block->cid, block->bytes); -+ if (!n) { -+ LOG(ERROR) << "Unable to handle block from CAR: " << cid_s; -+ } else if (orchestrator_->add_node(cid_s, n)) { -+ ++added; -+ } else { -+ LOG(INFO) << "Did not add node from CAR: " << cid_s; -+ } -+ } -+ LOG(INFO) << "Added " << added << " nodes from a CAR."; -+ success = added > 0; -+ break; -+ } -+ case Type::Providers: -+ LOG(WARNING) << "TODO - handle responses to providers requests."; -+ break; -+ case Type::Zombie: -+ LOG(WARNING) << "Responding to a zombie is ill-advised."; -+ break; -+ default: -+ LOG(ERROR) << "TODO " << static_cast(type); -+ } -+ if (success) { -+ for (auto& hook : bytes_received_hooks) { -+ hook(bytes); -+ } -+ bytes_received_hooks.clear(); -+ orchestrator_->build_response(dependent); -+ } -+ return success; -+} -+void Self::Hook(std::function f) { -+ bytes_received_hooks.push_back(f); -+} -+void Self::orchestrator(std::shared_ptr const& orc) { -+ orchestrator_ = orc; -+} -+bool Self::PartiallyRedundant() const { -+ if (!orchestrator_) { -+ return false; -+ } -+ return orchestrator_->has_key(main_param); -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/inline_request_handler.cc b/third_party/ipfs_client/src/ipfs_client/gw/inline_request_handler.cc -new file mode 100644 -index 0000000000000..435142a1a74ee ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/inline_request_handler.cc -@@ -0,0 +1,23 @@ -+#include -+ -+#include -+#include -+#include -+ -+#include "log_macros.h" -+ -+using Self = ipfs::gw::InlineRequestHandler; -+ -+std::string_view Self::name() const { -+ return "InlineRequestHandler"; -+} -+auto Self::handle(ipfs::gw::RequestPtr req) -> HandleOutcome { -+ if (req->type != gw::Type::Identity) { -+ VLOG(2) << ipfs::gw::name(req->type); -+ return HandleOutcome::NOT_HANDLED; -+ } -+ std::string data{req->identity_data()}; -+ LOG(INFO) << "Responding to inline CID without using network."; -+ req->RespondSuccessfully(data, api_); -+ return HandleOutcome::DONE; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/requestor.cc b/third_party/ipfs_client/src/ipfs_client/gw/requestor.cc -new file mode 100644 -index 0000000000000..72e6746c7a807 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/requestor.cc -@@ -0,0 +1,70 @@ -+#include -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include "log_macros.h" -+ -+using Self = ipfs::gw::Requestor; -+using ReqPtr = std::shared_ptr; -+ -+Self& Self::or_else(std::shared_ptr p) { -+ if (next_) { -+ next_->or_else(p); -+ } else { -+ VLOG(2) << name() << " is followed by " << p->name(); -+ next_ = p; -+ } -+ if (api_ && !p->api_) { -+ VLOG(1) << name() << " granting context to " << p->name(); -+ p->api_ = api_; -+ } -+ return *this; -+} -+ -+void Self::request(ReqPtr req) { -+ if (!req || req->type == Type::Zombie) { -+ return; -+ } -+ switch (handle(req)) { -+ case HandleOutcome::MAYBE_LATER: -+ // TODO -+ forward(req); -+ break; -+ case HandleOutcome::PARALLEL: -+ case HandleOutcome::NOT_HANDLED: -+ if (next_) { -+ next_->request(req); -+ } else { -+ LOG(ERROR) << "Ran out of Requestors in the chain while looking for " -+ "one that can handle " -+ << req->debug_string(); -+ definitive_failure(req); -+ } -+ break; -+ case HandleOutcome::PENDING: -+ break; -+ case HandleOutcome::DONE: -+ VLOG(2) << req->debug_string() << " finished synchronously: " << name(); -+ break; -+ } -+} -+void Self::definitive_failure(ipfs::gw::RequestPtr r) const { -+ DCHECK(r); -+ DCHECK(r->dependent); -+ r->dependent->finish(Response::PLAIN_NOT_FOUND); -+} -+ -+void Self::forward(ipfs::gw::RequestPtr req) const { -+ if (next_) { -+ next_->request(req); -+ } -+} -+void Self::api(std::shared_ptr a) { -+ api_ = a; -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/requestor_pool.cc b/third_party/ipfs_client/src/ipfs_client/gw/requestor_pool.cc -new file mode 100644 -index 0000000000000..b337dda1b1529 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/requestor_pool.cc -@@ -0,0 +1,73 @@ -+#include "requestor_pool.h" -+ -+#include -+ -+#include "log_macros.h" -+ -+using Self = ipfs::gw::RequestorPool; -+ -+std::string_view Self::name() const { -+ return "requestor pool"; -+} -+Self& Self::add(std::shared_ptr r) { -+ if (api_ && !(r->api_)) { -+ r->api_ = api_; -+ } -+ pool_.push_back(r); -+ r->or_else(shared_from_this()); -+ return *this; -+} -+auto Self::handle(ipfs::gw::RequestPtr req) -> HandleOutcome { -+ auto now = std::time(nullptr); -+ for (auto i = 0UL; i * 2 < waiting_.size(); ++i) { -+ auto& t = waiting_.front().when; -+ if (t != now) { -+ auto to_pop = waiting_.front(); -+ waiting_.pop(); -+ check(to_pop); -+ } -+ } -+ return check({req, 0UL, 0L}); -+} -+auto Self::check(Waiting w) -> HandleOutcome { -+ using O = HandleOutcome; -+ auto next_retry = pool_.size(); -+ auto req = w.req; -+ if (req->PartiallyRedundant()) { -+ return O::DONE; -+ } -+ for (auto i = w.at_idx; i < pool_.size(); ++i) { -+ if (req->type == Type::Zombie) { -+ return O::DONE; -+ } -+ auto& tor = pool_[i]; -+ switch (tor->handle(req)) { -+ case O::DONE: -+ LOG(INFO) << "RequestorPool::handle returning DONE because a member of " -+ "the pool's handle returned DONE."; -+ return O::DONE; -+ case O::PENDING: -+ case O::PARALLEL: -+ req->parallel++; -+ break; -+ case O::MAYBE_LATER: -+ if (next_retry == pool_.size()) { -+ next_retry = i; -+ } -+ break; -+ case O::NOT_HANDLED: -+ break; -+ } -+ } -+ if (req->parallel > 0) { -+ return O::PENDING; -+ } -+ if (next_retry < pool_.size()) { -+ w.when = std::time(nullptr); -+ waiting_.emplace(w); -+ return O::PENDING; -+ } -+ VLOG(1) << "Have exhausted all requestors in pool looking for " -+ << req->debug_string(); -+ return O::NOT_HANDLED; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/requestor_pool.h b/third_party/ipfs_client/src/ipfs_client/gw/requestor_pool.h -new file mode 100644 -index 0000000000000..86104319a32eb ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/requestor_pool.h -@@ -0,0 +1,32 @@ -+#ifndef IPFS_REQUESTOR_POOL_H_ -+#define IPFS_REQUESTOR_POOL_H_ -+ -+#include -+ -+#include -+ -+#include -+#include -+#include -+ -+namespace ipfs::gw { -+class RequestorPool : public Requestor { -+ std::string_view name() const override; -+ HandleOutcome handle(RequestPtr) override; -+ -+ std::vector> pool_; -+ struct Waiting { -+ RequestPtr req; -+ std::size_t at_idx; -+ std::time_t when; -+ }; -+ std::queue waiting_; -+ -+ HandleOutcome check(Waiting); -+ -+ public: -+ RequestorPool& add(std::shared_ptr); -+}; -+} // namespace ipfs::gw -+ -+#endif // IPFS_REQUESTOR_POOL_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/gw/terminating_requestor.cc b/third_party/ipfs_client/src/ipfs_client/gw/terminating_requestor.cc -new file mode 100644 -index 0000000000000..791ffd849ddd4 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/gw/terminating_requestor.cc -@@ -0,0 +1,23 @@ -+#include "ipfs_client/gw/terminating_requestor.h" -+ -+#include -+ -+#include "log_macros.h" -+ -+using Self = ipfs::gw::TerminatingRequestor; -+ -+std::string_view Self::name() const { -+ return "Terminating requestor"; -+} -+auto Self::handle(ipfs::gw::RequestPtr r) -> HandleOutcome { -+ if (r->type == Type::Zombie) { -+ return HandleOutcome::DONE; -+ } else if (r->parallel) { -+ return HandleOutcome::PENDING; -+ } else { -+ VLOG(2) << "Out of options, giving up on gateway request " -+ << r->debug_string(); -+ definitive_failure(r); -+ return HandleOutcome::DONE; -+ } -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/http_request_description.cc b/third_party/ipfs_client/src/ipfs_client/http_request_description.cc -new file mode 100644 -index 0000000000000..19b29d0ccde51 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/http_request_description.cc -@@ -0,0 +1,12 @@ -+#include -+ -+using Self = ipfs::HttpRequestDescription; -+ -+bool Self::operator==(HttpRequestDescription const& r) const { -+ // The concept of identity does NOT involve feedback-looping timeout fudge -+ // Nor is the acceptable size of a response necessary to distinguish. -+ return url == r.url && accept == r.accept; -+} -+bool Self::operator<(HttpRequestDescription const& r) const { -+ return url == r.url ? accept < r.accept : url < r.url; -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/identity_cid.cc b/third_party/ipfs_client/src/ipfs_client/identity_cid.cc -new file mode 100644 -index 0000000000000..9ea2421d5cdf3 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/identity_cid.cc -@@ -0,0 +1,19 @@ -+#include -+ -+#include -+ -+namespace Self = ipfs::id_cid; -+ -+auto Self::forText(std::string_view txt) -> Cid { -+ txt = txt.substr(0UL, MaximumHashLength); -+ auto p = reinterpret_cast(txt.data()); -+ auto b = ByteView{p, txt.size()}; -+ MultiHash mh(HashType::IDENTITY, b); -+ if (mh.valid()) { -+ return Cid{MultiCodec::RAW, mh}; -+ } else { -+ LOG(FATAL) -+ << "We really shouldn't be able to fail to 'hash' using identity."; -+ return forText("Unreachable"); -+ } -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/ipfs_request.cc b/third_party/ipfs_client/src/ipfs_client/ipfs_request.cc -new file mode 100644 -index 0000000000000..e4f3e1e4b47e3 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipfs_request.cc -@@ -0,0 +1,43 @@ -+#include -+ -+#include -+ -+#include "log_macros.h" -+ -+#include -+ -+using Self = ipfs::IpfsRequest; -+ -+// Self::IpfsRequest(std::string path_p) -+// : path_{path_p}, callback_([](auto&, auto&) {}) {} -+Self::IpfsRequest(std::string path_p, Finisher f) -+ : path_{path_p}, callback_{f} {} -+ -+std::shared_ptr Self::fromUrl(std::string url, ipfs::IpfsRequest::Finisher f) { -+ url.erase(4UL, 2UL ); -+ url.insert(0UL, 1UL, '/'); -+ return std::make_shared(std::move(url), std::move(f)); -+} -+ -+void Self::till_next(std::size_t w) { -+ waiting_ = w; -+} -+void Self::finish(ipfs::Response& r) { -+ VLOG(2) << "IpfsRequest::finish(" << waiting_ << ',' << r.status_ << ");"; -+ if (waiting_) { -+ if (--waiting_) { -+ return; -+ } -+ } -+ callback_(*this, r); -+ // TODO - cancel other gw req pointing into this -+ callback_ = [](auto& q, auto&) { -+ VLOG(2) << "IPFS request " << q.path().pop_all() << " satisfied multiply"; -+ }; -+} -+bool Self::ready_after() { -+ return waiting_ == 0 || 0 == --waiting_; -+} -+void Self::new_path(std::string_view sv) { -+ path_.assign(sv); -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/chunk.cc b/third_party/ipfs_client/src/ipfs_client/ipld/chunk.cc -new file mode 100644 -index 0000000000000..e5540b080e4b3 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/chunk.cc -@@ -0,0 +1,19 @@ -+#include "chunk.h" -+ -+#include "log_macros.h" -+ -+using Chunk = ipfs::ipld::Chunk; -+ -+Chunk::Chunk(std::string data) : data_{data} {} -+Chunk::~Chunk() {} -+ -+auto Chunk::resolve(ResolutionState& params) -> ResolveResult { -+ if (params.IsFinalComponent()) { -+ return Response{"", 200, data_, params.MyPath().to_string()}; -+ } else { -+ LOG(ERROR) << "Can't resolve a path (" << params.MyPath() -+ << ") inside of a file chunk!"; -+ return ProvenAbsent{}; -+ } -+} -+ -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/chunk.h b/third_party/ipfs_client/src/ipfs_client/ipld/chunk.h -new file mode 100644 -index 0000000000000..b846cc5379171 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/chunk.h -@@ -0,0 +1,18 @@ -+#ifndef IPFS_CHUNK_H_ -+#define IPFS_CHUNK_H_ -+ -+#include -+ -+namespace ipfs::ipld { -+class Chunk : public DagNode { -+ std::string const data_; -+ -+ ResolveResult resolve(ResolutionState&) override; -+ -+ public: -+ explicit Chunk(std::string); -+ virtual ~Chunk() noexcept; -+}; -+} // namespace ipfs::ipld -+ -+#endif // IPFS_CHUNK_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/dag_cbor_node.cc b/third_party/ipfs_client/src/ipfs_client/ipld/dag_cbor_node.cc -new file mode 100644 -index 0000000000000..064a89373f743 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/dag_cbor_node.cc -@@ -0,0 +1,25 @@ -+#include "dag_cbor_node.h" -+ -+#include "log_macros.h" -+ -+using Self = ipfs::ipld::DagCborNode; -+ -+auto Self::resolve(ResolutionState& params) -> ResolveResult { -+ if (auto cid = doc_->as_link()) { -+ auto cid_str = cid.value().to_string(); -+ return CallChild(params, "", cid_str); -+ } -+ if (params.IsFinalComponent()) { -+ return Response{"text/html", 200, doc_->html(), -+ params.PathToResolve().to_string()}; -+ } -+ return CallChild(params, [this](std::string_view element_name) -> NodePtr { -+ if (auto child = doc_->at(element_name)) { -+ return std::make_shared(std::move(child)); -+ } -+ return {}; -+ }); -+} -+ -+Self::DagCborNode(std::unique_ptr p) : doc_{std::move(p)} {} -+Self::~DagCborNode() {} -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/dag_cbor_node.h b/third_party/ipfs_client/src/ipfs_client/ipld/dag_cbor_node.h -new file mode 100644 -index 0000000000000..c9ba53331674a ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/dag_cbor_node.h -@@ -0,0 +1,22 @@ -+#ifndef IPFS_DAG_CBOR_NODE_H_ -+#define IPFS_DAG_CBOR_NODE_H_ -+ -+#include -+ -+#include -+ -+namespace ipfs::ipld { -+class DagCborNode final : public DagNode { -+ ResolveResult resolve(ResolutionState&) override; -+ -+ public: -+ using Data = DagCborValue; -+ explicit DagCborNode(std::unique_ptr); -+ ~DagCborNode() noexcept override; -+ -+ private: -+ std::unique_ptr doc_; -+}; -+} -+ -+#endif // IPFS_DAG_CBOR_NODE_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/dag_json_node.cc b/third_party/ipfs_client/src/ipfs_client/ipld/dag_json_node.cc -new file mode 100644 -index 0000000000000..dfb3f38b0a0e1 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/dag_json_node.cc -@@ -0,0 +1,95 @@ -+#include "dag_json_node.h" -+ -+#include -+ -+#include -+ -+using Self = ipfs::ipld::DagJsonNode; -+ -+Self::DagJsonNode(std::unique_ptr j) : data_(std::move(j)) { -+ auto cid = data_->get_if_link(); -+ if (!cid) { -+ return; -+ } -+ auto cid_str = cid->to_string(); -+ if (cid_str.size()) { -+ links_.emplace_back("", Link(cid_str)); -+ } -+} -+Self::~DagJsonNode() noexcept {} -+ -+auto Self::resolve(ResolutionState& params) -> ResolveResult { -+ auto respond_as_link = CallChild(params, ""); -+ if (!std::get_if(&respond_as_link)) { -+ return respond_as_link; -+ } -+ if (params.IsFinalComponent()) { -+ return Response{"text/html", 200, html(), params.MyPath().to_string()}; -+ } -+ return CallChild(params, [this](std::string_view name) -> NodePtr { -+ auto child_data = (*data_)[name]; -+ if (child_data) { -+ return std::make_shared(std::move(child_data)); -+ } -+ return {}; -+ }); -+} -+ -+auto Self::is_link() -> Link* { -+ if (links_.size() == 1UL && links_.front().first.empty()) { -+ return &links_.front().second; -+ } else { -+ return nullptr; -+ } -+} -+namespace { -+void write_body(std::ostream& str, ipfs::DagJsonValue const& val) { -+ if (auto link = val.get_if_link()) { -+ auto cid_str = link.value().to_string(); -+ str << "" << cid_str << "\n"; -+ } else if (auto keys = val.object_keys()) { -+ str << "{\n"; -+ for (auto& key : keys.value()) { -+ str << " \n \n" -+ << " \n \n \n"; -+ } -+ str << "
  ""; -+ for (auto c : key) { -+ str << html_escape(c); -+ } -+ str << "":\n"; -+ auto child = val[key]; -+ write_body(str, *child); -+ str << ",
}\n"; -+ } else if (val.iterate_list([](auto&) {})) { -+ str << "[\n"; -+ val.iterate_list([&str](auto& child) { -+ str << " \n \n \n \n"; -+ }); -+ str << "
  \n"; -+ write_body(str, child); -+ str << "
]\n"; -+ } else { -+ auto plain = val.pretty_print(); -+ // str << "

"; -+ for (auto c : plain) { -+ if (c == '\n') { -+ str << "
\n"; -+ } else { -+ str << html_escape(c); -+ } -+ } -+ // str << "

\n"; -+ } -+} -+} // namespace -+std::string const& Self::html() { -+ if (html_.empty()) { -+ std::ostringstream html; -+ html << "Preview of DAG-JSON\n"; -+ write_body(html, *data_); -+ html << "\n"; -+ html_ = html.str(); -+ } -+ return html_; -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/dag_json_node.h b/third_party/ipfs_client/src/ipfs_client/ipld/dag_json_node.h -new file mode 100644 -index 0000000000000..1d8012a007487 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/dag_json_node.h -@@ -0,0 +1,22 @@ -+#ifndef IPFS_DAG_JSON_NODE_H_ -+#define IPFS_DAG_JSON_NODE_H_ -+ -+#include -+#include -+ -+namespace ipfs::ipld { -+class DagJsonNode final : public DagNode { -+ std::unique_ptr data_; -+ std::string html_; -+ ResolveResult resolve(ResolutionState& params) override; -+ Link* is_link(); -+ std::string const& html(); -+ -+ public: -+ DagJsonNode(std::unique_ptr); -+ ~DagJsonNode() noexcept override; -+}; -+ -+} // namespace ipfs::ipld -+ -+#endif // IPFS_DAG_JSON_NODE_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/dag_node.cc b/third_party/ipfs_client/src/ipfs_client/ipld/dag_node.cc -new file mode 100644 -index 0000000000000..4d11f6f23bc78 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/dag_node.cc -@@ -0,0 +1,248 @@ -+#include -+ -+#include "chunk.h" -+#include "dag_cbor_node.h" -+#include "dag_json_node.h" -+#include "directory_shard.h" -+#include "ipns_name.h" -+#include "root.h" -+#include "small_directory.h" -+#include "symlink.h" -+#include "unixfs_file.h" -+ -+#include -+#include -+#include -+ -+#include "log_macros.h" -+ -+#include -+#include -+ -+using Node = ipfs::ipld::DagNode; -+ -+std::shared_ptr Node::fromBytes(std::shared_ptr const& api, -+ Cid const& cid, -+ std::string_view bytes) { -+ return fromBytes(api, cid, as_bytes(bytes)); -+} -+auto Node::fromBytes(std::shared_ptr const& api, -+ ipfs::Cid const& cid, -+ ipfs::ByteView bytes) -> NodePtr { -+ std::shared_ptr result = nullptr; -+ auto hash = api->Hash(cid.hash_type(), bytes); -+ if (!hash.has_value()) { -+ LOG(ERROR) << "Could not hash response for " << cid.to_string(); -+ return {}; -+ } -+ if (hash.value().size() != cid.hash().size()) { -+ return {}; -+ } -+ for (auto i = 0U; i < hash.value().size(); ++i) { -+ auto e = cid.hash()[i]; -+ auto a = hash.value().at(i); -+ if (e != a) { -+ return {}; -+ } -+ } -+ auto required = cid.hash(); -+ auto calculated = hash.value(); -+ if (!std::equal(required.begin(), required.end(), calculated.begin(), -+ calculated.end())) { -+ LOG(ERROR) << "Hash of response did not match the one in the CID " -+ << cid.to_string(); -+ return {}; -+ } -+ switch (cid.codec()) { -+ case MultiCodec::DAG_CBOR: { -+ auto p = reinterpret_cast(bytes.data()); -+ auto cbor = api->ParseCbor({p, bytes.size()}); -+ if (cbor) { -+ result = std::make_shared(std::move(cbor)); -+ } else { -+ LOG(ERROR) << "CBOR node " << cid.to_string() -+ << " does not parse as CBOR."; -+ } -+ } break; -+ case MultiCodec::DAG_JSON: { -+ auto p = reinterpret_cast(bytes.data()); -+ auto json = api->ParseJson({p, bytes.size()}); -+ if (json) { -+ result = std::make_shared(std::move(json)); -+ } else { -+ LOG(ERROR) << "JSON node " << cid.to_string() -+ << " does not parse as JSON."; -+ } -+ } break; -+ case MultiCodec::RAW: -+ case MultiCodec::DAG_PB: { -+ ipfs::PbDag b{cid, bytes}; -+ if (b.valid()) { -+ result = fromBlock(b); -+ } else { -+ std::ostringstream hex; -+ for (auto byt : bytes) { -+ hex << ' ' << std::hex -+ << static_cast(static_cast(byt)); -+ } -+ LOG(ERROR) -+ << "Have a response that did not parse as a valid block, cid: " -+ << cid.to_string() << " contents: " << bytes.size() -+ << " bytes = " << hex.str(); -+ } -+ } break; -+ case MultiCodec::INVALID: -+ case MultiCodec::IDENTITY: -+ case MultiCodec::LIBP2P_KEY: -+ default: -+ LOG(ERROR) << "Response for unhandled CID Codec: " -+ << GetName(cid.codec()); -+ } -+ if (result) { -+ result->set_api(api); -+ } -+ return result; -+} -+std::shared_ptr Node::fromBlock(ipfs::PbDag const& block) { -+ std::shared_ptr result; -+ switch (block.type()) { -+ case PbDag::Type::FileChunk: -+ return std::make_shared(block.chunk_data()); -+ case PbDag::Type::NonFs: -+ return std::make_shared(block.unparsed()); -+ case PbDag::Type::Symlink: -+ return std::make_shared(block.chunk_data()); -+ case PbDag::Type::Directory: -+ result = std::make_shared(); -+ break; -+ case PbDag::Type::File: -+ case PbDag::Type::Raw: -+ result = std::make_shared(); -+ break; -+ case PbDag::Type::HAMTShard: -+ if (block.fsdata().has_fanout()) { -+ result = std::make_shared(block.fsdata().fanout()); -+ } else { -+ result = std::make_shared(); -+ } -+ break; -+ case PbDag::Type::Metadata: -+ LOG(ERROR) << "Metadata blocks unhandled."; -+ return result; -+ case PbDag::Type::Invalid: -+ LOG(ERROR) << "Invalid block."; -+ return result; -+ default: -+ LOG(FATAL) << "TODO " << static_cast(block.type()); -+ } -+ auto add_link = [&result](auto& n, auto c) { -+ result->links_.emplace_back(n, c); -+ return true; -+ }; -+ block.List(add_link); -+ return result; -+} -+ -+auto Node::fromIpnsRecord(ipfs::ValidatedIpns const& v) -> NodePtr { -+ return std::make_shared(v.value); -+} -+ -+std::shared_ptr Node::deroot() { -+ return shared_from_this(); -+} -+std::shared_ptr Node::rooted() { -+ return std::make_shared(shared_from_this()); -+} -+auto Node::as_hamt() -> DirShard* { -+ return nullptr; -+} -+void Node::set_api(std::shared_ptr api) { -+ api_ = api; -+} -+auto Node::resolve(SlashDelimited initial_path, BlockLookup blu) -+ -> ResolveResult { -+ ResolutionState state; -+ state.resolved_path_components = ""; -+ state.unresolved_path = initial_path; -+ state.get_available_block = blu; -+ return resolve(state); -+} -+auto Node::CallChild(ipfs::ipld::ResolutionState& state) -> ResolveResult { -+ return CallChild(state, state.NextComponent(api_.get())); -+} -+auto Node::CallChild(ipfs::ipld::ResolutionState& state, -+ std::string_view link_key, -+ std::string_view block_key) -> ResolveResult { -+ auto child = FindChild(link_key); -+ if (!child) { -+ links_.emplace_back(link_key, Link{std::string{block_key}, {}}); -+ } -+ return CallChild(state, link_key); -+} -+auto Node::CallChild(ResolutionState& state, std::string_view link_key) -+ -> ResolveResult { -+ auto* child = FindChild(link_key); -+ if (!child) { -+ return ProvenAbsent{}; -+ } -+ auto& node = child->node; -+ if (!node) { -+ node = state.GetBlock(child->cid); -+ } -+ if (node) { -+ Descend(state); -+ return node->resolve(state); -+ } else { -+ std::string needed{"/ipfs/"}; -+ needed.append(child->cid); -+ auto more = state.unresolved_path.to_view(); -+ if (more.size()) { -+ if (more.front() != '/') { -+ needed.push_back('/'); -+ } -+ needed.append(more); -+ } -+ return MoreDataNeeded{needed}; -+ } -+} -+auto Node::CallChild(ResolutionState& state, -+ std::function gen_child) -+ -> ResolveResult { -+ auto link_key = state.NextComponent(api_.get()); -+ auto child = FindChild(link_key); -+ if (!child) { -+ links_.emplace_back(link_key, Link{{}, {}}); -+ child = &links_.back().second; -+ } -+ auto& node = child->node; -+ if (!node) { -+ node = gen_child(link_key); -+ if (!node) { -+ return ProvenAbsent{}; -+ } -+ } -+ Descend(state); -+ return node->resolve(state); -+} -+auto Node::FindChild(std::string_view link_key) -> Link* { -+ for (auto& [name, link] : links_) { -+ if (name == link_key) { -+ return &link; -+ } -+ } -+ return nullptr; -+} -+void Node::Descend(ResolutionState& state) { -+ auto next = state.unresolved_path.pop(); -+ if (next.empty()) { -+ return; -+ } -+ if (!state.resolved_path_components.ends_with('/')) { -+ state.resolved_path_components.push_back('/'); -+ } -+ state.resolved_path_components.append(next); -+} -+ -+std::ostream& operator<<(std::ostream& s, ipfs::ipld::PathChange const& c) { -+ return s << "PathChange{" << c.new_path << '}'; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/directory_shard.cc b/third_party/ipfs_client/src/ipfs_client/ipld/directory_shard.cc -new file mode 100644 -index 0000000000000..7839e62b66247 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/directory_shard.cc -@@ -0,0 +1,101 @@ -+#include "directory_shard.h" -+ -+#include "log_macros.h" -+ -+#include -+#include -+ -+#include -+ -+#include -+#include -+#include -+ -+using namespace std::literals; -+ -+using Self = ipfs::ipld::DirShard; -+ -+auto Self::resolve(ResolutionState& parms) -> ResolveResult { -+ if (parms.IsFinalComponent()) { -+ auto index_parm = parms.WithPath("index.html"sv); -+ auto result = resolve(index_parm); -+ // TODO generate index.html if not present -+ auto resp = std::get_if(&result); -+ if (resp) { -+ resp->mime_ = "text/html"; -+ } -+ return result; -+ } -+ std::string name{parms.NextComponent(api_.get())}; -+ auto hash = hexhash(name); -+ return resolve_internal(hash.begin(), hash.end(), name, parms); -+} -+auto Self::resolve_internal(ipfs::ipld::DirShard::HashIter hash_b, -+ ipfs::ipld::DirShard::HashIter hash_e, -+ std::string_view human_name, -+ ResolutionState& parms) -> ResolveResult { -+ auto hash_chunk = hash_b == hash_e ? std::string{} : *hash_b; -+ for (auto& [name, link] : links_) { -+ if (!starts_with(name, hash_chunk)) { -+ continue; -+ } -+ if (ends_with(name, human_name)) { -+ VLOG(2) << "Found " << human_name << ", leaving HAMT sharded directory " -+ << name << "->" << link.cid; -+ return CallChild(parms, name); -+ } -+ auto node = parms.GetBlock(link.cid); -+ if (!node) { -+ // Unfortunately we can't really append more path and do a full Car -+ // request -+ // The gateway would hash whatever we gave it and compare it to a -+ // partially-consumed hash -+ return MoreDataNeeded{{"/ipfs/" + link.cid}}; -+ } -+ auto downcast = node->as_hamt(); -+ if (downcast) { -+ if (hash_b == hash_e) { -+ LOG(ERROR) << "Ran out of hash bits."; -+ return ProvenAbsent{}; -+ } -+ VLOG(2) << "Found hash chunk, continuing to next level of HAMT sharded " -+ "directory " -+ << name << "->" << link.cid; -+ return downcast->resolve_internal(std::next(hash_b), hash_e, human_name, -+ parms); -+ } else { -+ return ProvenAbsent{}; -+ } -+ } -+ return ProvenAbsent{}; -+} -+std::vector Self::hexhash(std::string_view path_element) const { -+ auto hex_width = 0U; -+ for (auto x = fanout_; (x >>= 4); ++hex_width) -+ ; -+ std::array digest = {0U, 0U}; -+ MurmurHash3_x64_128(path_element.data(), path_element.size(), 0, -+ digest.data()); -+ std::vector result; -+ for (auto d : digest) { -+ auto hash_bits = htobe64(d); -+ while (hash_bits) { -+ // 2. Pop the log2(fanout_) lowest bits from the path component hash -+ // digest,... -+ auto popped = hash_bits % fanout_; -+ hash_bits /= fanout_; -+ std::ostringstream oss; -+ // ... then hex encode (using 0-F) using little endian those bits ... -+ oss << std::setfill('0') << std::setw(hex_width) << std::uppercase -+ << std::hex << popped; -+ result.push_back(oss.str()); -+ } -+ } -+ return result; -+} -+ -+Self::DirShard(std::uint64_t fanout) : fanout_{fanout} {} -+Self::~DirShard() {} -+Self* Self::as_hamt() { -+ return this; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/directory_shard.h b/third_party/ipfs_client/src/ipfs_client/ipld/directory_shard.h -new file mode 100644 -index 0000000000000..c1cb811355922 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/directory_shard.h -@@ -0,0 +1,26 @@ -+#ifndef IPFS_DIRECTORY_SHARD_H_ -+#define IPFS_DIRECTORY_SHARD_H_ 1 -+ -+#include -+ -+namespace ipfs::ipld { -+class DirShard : public DagNode { -+ std::uint64_t const fanout_; -+ -+ ResolveResult resolve(ResolutionState&) override; -+ DirShard* as_hamt() override; -+ -+ std::vector hexhash(std::string_view path_element) const; -+ using HashIter = std::vector::const_iterator; -+ ResolveResult resolve_internal(HashIter, -+ HashIter, -+ std::string_view, -+ ResolutionState&); -+ -+ public: -+ explicit DirShard(std::uint64_t fanout = 256UL); -+ virtual ~DirShard() noexcept; -+}; -+} // namespace ipfs::ipld -+ -+#endif // IPFS_DIRECTORY_SHARD_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/ipns_name.cc b/third_party/ipfs_client/src/ipfs_client/ipld/ipns_name.cc -new file mode 100644 -index 0000000000000..f38200923f49f ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/ipns_name.cc -@@ -0,0 +1,25 @@ -+#include "ipns_name.h" -+ -+#include "log_macros.h" -+ -+using Self = ipfs::ipld::IpnsName; -+ -+Self::IpnsName(std::string_view target_abs_path) -+ : target_path_{target_abs_path} {} -+ -+auto Self::resolve(ResolutionState& params) -> ResolveResult { -+ // Can't use PathChange, as the target is truly absolute (rootless) -+ SlashDelimited t{target_path_}; -+ t.pop(); // Discard namespace, though realistically it's going to be ipfs -+ // basically all the time -+ auto name = t.pop(); -+ if (t) { -+ LOG(WARNING) << "Odd case: name points at /ns/root/MORE/PATH (" -+ << target_path_ << "): " << params.MyPath(); -+ auto path = t.to_string() + "/" + params.PathToResolve().to_string(); -+ auto altered = params.WithPath(path); -+ return CallChild(altered, "", name); -+ } else { -+ return CallChild(params, "", name); -+ } -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/ipns_name.h b/third_party/ipfs_client/src/ipfs_client/ipld/ipns_name.h -new file mode 100644 -index 0000000000000..8b50d6e86e397 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/ipns_name.h -@@ -0,0 +1,18 @@ -+#ifndef IPFS_IPLD_IPNS_NAME_H_ -+#define IPFS_IPLD_IPNS_NAME_H_ -+ -+#include "ipfs_client/ipld/dag_node.h" -+ -+namespace ipfs::ipld { -+class IpnsName : public DagNode { -+ std::string const target_path_; -+ -+ ResolveResult resolve(ResolutionState& params) override; -+ -+ public: -+ IpnsName(std::string_view target_abs_path); -+ virtual ~IpnsName() noexcept {} -+}; -+} // namespace ipfs::ipld -+ -+#endif // IPFS_IPLD_IPNS_NAME_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/link.cc b/third_party/ipfs_client/src/ipfs_client/ipld/link.cc -new file mode 100644 -index 0000000000000..f9dad98e58840 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/link.cc -@@ -0,0 +1,6 @@ -+#include "ipfs_client/ipld/link.h" -+ -+using Self = ipfs::ipld::Link; -+ -+Self::Link(std::string cid_s) : cid{cid_s} {} -+Self::Link(std::string s, std::shared_ptr n) : cid{s}, node{n} {} -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/resolution_state.cc b/third_party/ipfs_client/src/ipfs_client/ipld/resolution_state.cc -new file mode 100644 -index 0000000000000..7b51513d83d6f ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/resolution_state.cc -@@ -0,0 +1,36 @@ -+#include -+ -+#include -+ -+using Self = ipfs::ipld::ResolutionState; -+ -+bool Self::IsFinalComponent() const { -+ return !unresolved_path; -+} -+auto Self::PathToResolve() const -> SlashDelimited { -+ return unresolved_path; -+} -+auto Self::MyPath() const -> SlashDelimited { -+ return SlashDelimited{resolved_path_components}; -+} -+std::string Self::NextComponent(ContextApi const* api) const { -+ auto copy = unresolved_path; -+ if (api) { -+ return api->UnescapeUrlComponent(copy.pop()); -+ } else { -+ return std::string{copy.pop()}; -+ } -+} -+auto Self::GetBlock(std::string const& block_key) const -> NodePtr { -+ return get_available_block(block_key); -+} -+Self Self::WithPath(std::string_view p) const { -+ auto rv = *this; -+ rv.unresolved_path = SlashDelimited{p}; -+ return rv; -+} -+auto Self::RestartResolvedPath() const -> ResolutionState { -+ auto rv = *this; -+ rv.resolved_path_components.clear(); -+ return rv; -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/root.cc b/third_party/ipfs_client/src/ipfs_client/ipld/root.cc -new file mode 100644 -index 0000000000000..fd5af1b2891b2 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/root.cc -@@ -0,0 +1,90 @@ -+#include "root.h" -+ -+#include "log_macros.h" -+ -+using namespace std::literals; -+ -+using Self = ipfs::ipld::Root; -+using Ptr = std::shared_ptr; -+ -+Self::Root(std::shared_ptr under) { -+ links_.push_back({{}, Link{{}, under}}); -+} -+Self::~Root() {} -+ -+Ptr Self::deroot() { -+ return links_.at(0).second.node; -+} -+Ptr Self::rooted() { -+ return shared_from_this(); -+} -+ -+auto Self::resolve(ResolutionState& params) -> ResolveResult { -+ auto location = params.PathToResolve().to_string(); -+ auto result = deroot()->resolve(params); -+ if (auto pc = std::get_if(&result)) { -+ auto lower = params.WithPath(pc->new_path); -+ result = resolve(lower); -+ location.assign(lower.MyPath().to_view()); -+ } else if (std::get_if(&result)) { -+ if (params.NextComponent(api_.get()) == "_redirects") { -+ return result; -+ } -+ if (!redirects_.has_value()) { -+ auto redirects_path = params.WithPath("_redirects"); -+ result = resolve(redirects_path); -+ auto redirect_resp = std::get_if(&result); -+ if (redirect_resp && redirect_resp->status_ == 200) { -+ redirects_ = redirects::File(redirect_resp->body_); -+ } else { -+ // Either this is ProvenAbsent, in which case this will be interpreted -+ // as the original ProvenAbsent Or it's MoreDataNeeded but for -+ // _redirects, which is what we need now -+ return result; -+ } -+ } -+ if (redirects_.has_value() && redirects_.value().valid()) { -+ Response* resp = nullptr; -+ auto status = redirects_.value().rewrite(location); -+ if (location.find("://") < location.size()) { -+ LOG(INFO) << "_redirects file sent us to a whole URL, scheme-and-all: " -+ << location << " status=" << status; -+ return Response{"", status, "", location}; -+ } -+ auto lower_parm = params.WithPath(location).RestartResolvedPath(); -+ switch (status / 100) { -+ case 0: // no rewrites available -+ break; -+ case 2: -+ result = deroot()->resolve(lower_parm); -+ location.assign(lower_parm.MyPath().to_view()); -+ break; -+ case 3: -+ // Let the redirect happen -+ return Response{"", status, "", location}; -+ case 4: { -+ result = deroot()->resolve(lower_parm); -+ location.assign(lower_parm.MyPath().to_view()); -+ if (std::get_if(&result)) { -+ return Response{"", 500, "", location}; -+ } -+ resp = std::get_if(&result); -+ if (resp) { -+ resp->status_ = status; -+ return *resp; -+ } -+ break; // MoreDataNeeded to fetch e.g. custom 404 page -+ } -+ default: -+ LOG(ERROR) << "Unsupported status came back from _redirects file: " -+ << status; -+ return ProvenAbsent{}; -+ } -+ } -+ } -+ auto resp = std::get_if(&result); -+ if (resp && resp->location_.empty()) { -+ resp->location_ = location; -+ } -+ return result; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/root.h b/third_party/ipfs_client/src/ipfs_client/ipld/root.h -new file mode 100644 -index 0000000000000..b57951b42f7f1 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/root.h -@@ -0,0 +1,23 @@ -+#ifndef IPFS_ROOT_H_ -+#define IPFS_ROOT_H_ -+ -+#include -+#include -+ -+#include -+ -+namespace ipfs::ipld { -+class Root : public DagNode { -+ std::optional redirects_; -+ -+ ResolveResult resolve(ResolutionState& params) override; -+ std::shared_ptr rooted() override; -+ std::shared_ptr deroot() override; -+ -+ public: -+ Root(std::shared_ptr); -+ virtual ~Root() noexcept; -+}; -+} // namespace ipfs::ipld -+ -+#endif // IPFS_ROOT_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/small_directory.cc b/third_party/ipfs_client/src/ipfs_client/ipld/small_directory.cc -new file mode 100644 -index 0000000000000..b8613663932ca ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/small_directory.cc -@@ -0,0 +1,35 @@ -+#include "small_directory.h" -+ -+#include -+#include "ipfs_client/generated_directory_listing.h" -+#include "ipfs_client/path2url.h" -+ -+#include "log_macros.h" -+ -+#include -+ -+using namespace std::literals; -+ -+using Self = ipfs::ipld::SmallDirectory; -+ -+auto Self::resolve(ResolutionState& params) -> ResolveResult { -+ if (params.IsFinalComponent()) { -+ LOG(INFO) << "Directory listing requested for " << params.MyPath(); -+ auto result = CallChild(params, "index.html"); -+ if (auto resp = std::get_if(&result)) { -+ resp->mime_ = "text/html"; -+ } -+ if (!std::get_if(&result)) { -+ return result; -+ } -+ auto dir_path = params.MyPath().to_view(); -+ GeneratedDirectoryListing index_html{dir_path}; -+ for (auto& [name, link] : links_) { -+ index_html.AddEntry(name); -+ } -+ return Response{"text/html", 200, index_html.Finish(), ""}; -+ } -+ return CallChild(params); -+} -+ -+Self::~SmallDirectory() {} -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/small_directory.h b/third_party/ipfs_client/src/ipfs_client/ipld/small_directory.h -new file mode 100644 -index 0000000000000..a076122c5041f ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/small_directory.h -@@ -0,0 +1,17 @@ -+#ifndef IPFS_UNIXFS_DIRECTORY_H_ -+#define IPFS_UNIXFS_DIRECTORY_H_ -+ -+#include "ipfs_client/ipld/link.h" -+ -+#include -+ -+namespace ipfs::ipld { -+class SmallDirectory : public DagNode { -+ ResolveResult resolve(ResolutionState&) override; -+ -+ public: -+ virtual ~SmallDirectory() noexcept; -+}; -+} // namespace ipfs::ipld -+ -+#endif // IPFS_UNIXFS_DIRECTORY_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/symlink.cc b/third_party/ipfs_client/src/ipfs_client/ipld/symlink.cc -new file mode 100644 -index 0000000000000..b35725ad7f703 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/symlink.cc -@@ -0,0 +1,37 @@ -+#include "symlink.h" -+ -+#include "log_macros.h" -+ -+using Self = ipfs::ipld::Symlink; -+ -+Self::Symlink(std::string target) : target_{target} {} -+ -+Self::~Symlink() {} -+ -+auto Self::resolve(ResolutionState& params) -> ResolveResult { -+ std::string result; -+ if (!is_absolute()) { -+ auto left_path = params.MyPath(); -+ left_path.pop_n(2); // Returning a path relative to content root. -+ left_path.pop_back(); // Because the final component refers to this -+ // symlink, which is getting replaced with target -+ result.assign(left_path.to_view()); -+ } -+ result.append("/").append(target_); -+ if (!params.IsFinalComponent()) { -+ result.append("/").append(params.PathToResolve().to_string()); -+ } -+ std::size_t i; -+ while ((i = result.find("//")) != std::string::npos) { -+ result.erase(i, 1); -+ } -+ if (result.ends_with('/')) { -+ result.resize(result.size() - 1); -+ } -+ LOG(INFO) << "symlink: '" << params.MyPath() << "' -> '" << result << "'."; -+ return PathChange{result}; -+} -+ -+bool Self::is_absolute() const { -+ return target_.at(0) == '/'; -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/symlink.h b/third_party/ipfs_client/src/ipfs_client/ipld/symlink.h -new file mode 100644 -index 0000000000000..937f0d248c25d ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/symlink.h -@@ -0,0 +1,20 @@ -+#ifndef IPFS_SYMLINK_H_ -+#define IPFS_SYMLINK_H_ -+ -+#include -+ -+namespace ipfs::ipld { -+class Symlink : public DagNode { -+ std::string const target_; -+ -+ ResolveResult resolve(ResolutionState& params) override; -+ -+ bool is_absolute() const; -+ -+ public: -+ Symlink(std::string target); -+ ~Symlink() noexcept override; -+}; -+} // namespace ipfs::ipld -+ -+#endif // IPFS_SYMLINK_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/unixfs_file.cc b/third_party/ipfs_client/src/ipfs_client/ipld/unixfs_file.cc -new file mode 100644 -index 0000000000000..784a1df367152 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/unixfs_file.cc -@@ -0,0 +1,50 @@ -+#include "unixfs_file.h" -+ -+#include "log_macros.h" -+ -+using namespace std::literals; -+ -+using Self = ipfs::ipld::UnixfsFile; -+ -+auto Self::resolve(ResolutionState& params) -> ResolveResult { -+ if (!params.IsFinalComponent()) { -+ LOG(ERROR) << "Can't path through a file, (at " << params.MyPath() -+ << ") but given the path " << params.PathToResolve(); -+ return ProvenAbsent{}; -+ } -+ std::vector missing; -+ std::string body; -+ for (auto& child : links_) { -+ auto& link = child.second; -+ if (!link.node) { -+ link.node = params.GetBlock(link.cid); -+ } -+ if (link.node) { -+ auto recurse = link.node->resolve(params); -+ auto mdn = std::get_if(&recurse); -+ if (mdn) { -+ missing.insert(missing.end(), mdn->ipfs_abs_paths_.begin(), -+ mdn->ipfs_abs_paths_.end()); -+ continue; -+ } -+ if (missing.empty()) { -+ body.append(std::get(recurse).body_); -+ } -+ } else { -+ missing.push_back("/ipfs/" + link.cid); -+ } -+ } -+ if (missing.empty()) { -+ return Response{ -+ "", -+ 200, -+ body, -+ params.MyPath().to_string(), -+ }; -+ } -+ auto result = MoreDataNeeded{missing}; -+ result.insist_on_car = true; -+ return result; -+} -+ -+Self::~UnixfsFile() {} -diff --git a/third_party/ipfs_client/src/ipfs_client/ipld/unixfs_file.h b/third_party/ipfs_client/src/ipfs_client/ipld/unixfs_file.h -new file mode 100644 -index 0000000000000..3447e949d330e ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipld/unixfs_file.h -@@ -0,0 +1,15 @@ -+#ifndef IPFS_UNIXFS_FILE_H_ -+#define IPFS_UNIXFS_FILE_H_ -+ -+#include -+ -+namespace ipfs::ipld { -+class UnixfsFile : public DagNode { -+ ResolveResult resolve(ResolutionState&) override; -+ -+ public: -+ virtual ~UnixfsFile() noexcept; -+}; -+} // namespace ipfs::ipld -+ -+#endif // IPFS_UNIXFS_FILE_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/ipns_names.cc b/third_party/ipfs_client/src/ipfs_client/ipns_names.cc -new file mode 100644 -index 0000000000000..6eccfaa7dc51b ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipns_names.cc -@@ -0,0 +1,101 @@ -+#include -+ -+#include -+ -+#include "log_macros.h" -+ -+using Self = ipfs::IpnsNames; -+ -+void Self::NoSuchName(std::string const& name) { -+ names_[name]; // If it already exists, leave it. -+} -+void Self::AssignName(std::string const& name, ValidatedIpns entry) { -+ auto& res = entry.value; -+ if (res.size() && res.front() == '/') { -+ res.erase(0, 1); -+ } -+ auto endofcid = res.find_first_of("/?#", 6); -+ using namespace libp2p::multi; -+ auto cid_str = res.substr(5, endofcid); -+ LOG(INFO) << "IPNS points to CID " << cid_str; -+ auto cid = Cid(cid_str); -+ if (cid.valid()) { -+ auto desensitized = res.substr(0, 5); -+ desensitized.append(cid_str); -+ if (endofcid < res.size()) { -+ auto extra = res.substr(endofcid); -+ LOG(INFO) << name << " resolution contains oddity '" << extra; -+ desensitized.append(extra); -+ } -+ LOG(INFO) << name << " now resolves to (desensitized)" << desensitized; -+ entry.value = desensitized; -+ } else { -+ LOG(INFO) << name << " now resolves to (extra level)" << res; -+ } -+ auto it = names_.find(name); -+ if (it == names_.end()) { -+ names_.emplace(name, std::move(entry)); -+ } else if (it->second.sequence < entry.sequence) { -+ LOG(INFO) << "Updating IPNS record for " << name << " from sequence " -+ << it->second.sequence << " where it pointed to " -+ << it->second.value << " to sequence " << entry.sequence -+ << " where it points to " << entry.value; -+ it->second = std::move(entry); -+ } else { -+ LOG(INFO) << "Discarding redundant IPNS record for " << name; -+ } -+} -+void Self::AssignDnsLink(std::string const& name, std::string_view target) { -+ ValidatedIpns v; -+ v.value.assign(target); -+ auto t = std::time(nullptr); -+ v.use_until = v.cache_until = t + 300; -+ AssignName(name, std::move(v)); -+} -+ -+std::string_view Self::NameResolvedTo(std::string_view original_name) const { -+ std::string name{original_name}; -+ std::string_view prev = ""; -+ auto trailer = names_.end(); -+ auto trail_step = false; -+ auto now = std::time(nullptr); -+ while (true) { -+ auto it = names_.find(name); -+ if (names_.end() == it) { -+ LOG(INFO) << "Host not in immediate access map: " << name << " (" -+ << std::string{original_name} << ')'; -+ return prev; -+ } else if (it == trailer) { -+ LOG(ERROR) << "Host cycle found in IPNS: " << std::string{original_name} -+ << ' ' << name; -+ return ""; -+ } -+ auto& target = it->second.value; -+ if (target.empty()) { -+ return kNoSuchName; -+ } -+ if (target.at(2) == 'f') { -+ return target; -+ } -+ if (it->second.use_until < now) { -+ return prev; -+ } -+ if (trail_step) { -+ if (trailer == names_.end()) { -+ trailer = names_.find(name); -+ } else { -+ trailer = names_.find(trailer->second.value.substr(5)); -+ } -+ } -+ trail_step = !trail_step; -+ prev = it->second.value; -+ name.assign(prev, 5); -+ } -+} -+auto Self::Entry(std::string const& name) -> ValidatedIpns const* { -+ auto it = names_.find(name); -+ return it == names_.end() ? nullptr : &(it->second); -+} -+ -+Self::IpnsNames() {} -+Self::~IpnsNames() {} -diff --git a/third_party/ipfs_client/src/ipfs_client/ipns_record.cc b/third_party/ipfs_client/src/ipfs_client/ipns_record.cc -new file mode 100644 -index 0000000000000..86be780f9066f ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/ipns_record.cc -@@ -0,0 +1,244 @@ -+#include -+ -+#include -+#include -+#include -+ -+#include "log_macros.h" -+ -+#include -+#include -+ -+#if __has_include() -+#include -+#else -+#include "ipfs_client/ipns_record.pb.h" -+#endif -+ -+namespace { -+bool matches(ipfs::MultiHash const& hash, -+ ipfs::ByteView pubkey_bytes, -+ ipfs::ContextApi& api) { -+ auto result = api.Hash(hash.type(), pubkey_bytes); -+ if (!result.has_value()) { -+ return false; -+ } -+ return std::equal(result->begin(), result->end(), hash.digest().begin(), -+ hash.digest().end()); -+} -+} // namespace -+ -+namespace { -+void assign(std::string& out, -+ ipfs::DagCborValue& top, -+ std::string_view key) { -+ auto p = top.at(key); -+ if (!p) { -+ out.assign("Key '").append(key).append("' not present in IPNS CBOR!"); -+ } else { -+ // YEP! as_bytes() . There are only 2 string values here, they are logically -+ // text, but they are defined in the spec to be bytes. -+ auto o = p->as_bytes(); -+ if (o.has_value()) { -+ auto chars = reinterpret_cast(o.value().data()); -+ out.assign(chars, o.value().size()); -+ } else { -+ out.assign("Key '").append(key).append( -+ "' was not a string in IPNS CBOR!"); -+ } -+ } -+} -+void assign(std::uint64_t& out, -+ ipfs::DagCborValue& top, -+ std::string_view key) { -+ auto p = top.at(key); -+ if (!p) { -+ LOG(ERROR) << "Key '" << key << "' is not present in IPNS CBOR!"; -+ out = std::numeric_limits::max(); -+ } else { -+ auto o = p->as_unsigned(); -+ if (o.has_value()) { -+ out = o.value(); -+ } else { -+ LOG(ERROR) << "Key '" << key -+ << "' is not an unsigned integer in IPNS CBOR!"; -+ out = std::numeric_limits::max(); -+ } -+ } -+} -+} // namespace -+ -+auto ipfs::ValidateIpnsRecord(ipfs::ByteView top_level_bytes, -+ Cid const& name, -+ ContextApi& api) -> std::optional { -+ DCHECK_EQ(name.codec(), MultiCodec::LIBP2P_KEY); -+ if (name.codec() != MultiCodec::LIBP2P_KEY) { -+ return {}; -+ } -+ // https://github.com/ipfs/specs/blob/main/ipns/IPNS.md#record-verification -+ -+ // Before parsing the protobuf, confirm that the serialized IpnsEntry bytes -+ // sum to less than or equal to the size limit. -+ if (top_level_bytes.size() > MAX_IPNS_PB_SERIALIZED_SIZE) { -+ LOG(ERROR) << "IPNS record too large: " << top_level_bytes.size(); -+ return {}; -+ } -+ -+ ipfs::ipns::IpnsEntry entry; -+ if (!entry.ParseFromArray(top_level_bytes.data(), top_level_bytes.size())) { -+ LOG(ERROR) << "Failed to parse top-level bytes as a protobuf"; -+ return {}; -+ } -+ -+ // Confirm IpnsEntry.signatureV2 and IpnsEntry.data are present and are not -+ // empty -+ if (!entry.has_signaturev2()) { -+ LOG(ERROR) << "IPNS record contains no .signatureV2!"; -+ return {}; -+ } -+ if (!entry.has_data() || entry.data().empty()) { -+ LOG(ERROR) << "IPNS record has no .data"; -+ return {}; -+ } -+ -+ // The only supported value is 0, which indicates the validity field contains -+ // the expiration date after which the IPNS record becomes invalid. -+ DCHECK_EQ(entry.validitytype(), 0); -+ -+ auto parsed = -+ api.ParseCbor({reinterpret_cast(entry.data().data()), -+ entry.data().size()}); -+ if (!parsed) { -+ LOG(ERROR) << "CBOR parsing failed."; -+ return {}; -+ } -+ IpnsCborEntry result; -+ assign(result.value, *parsed, "Value"); -+ if (entry.has_value() && result.value != entry.value()) { -+ LOG(ERROR) << "Mismatch on Value field in IPNS record... CBOR(v2): '" -+ << result.value << "' but PB(v1): '" << entry.value() -+ << "' : " << parsed->html(); -+ return {}; -+ } -+ ipfs::ByteView public_key; -+ if (entry.has_pubkey()) { -+ public_key = ipfs::ByteView{ -+ reinterpret_cast(entry.pubkey().data()), -+ entry.pubkey().size()}; -+ if (!matches(name.multi_hash(), public_key, api)) { -+ LOG(ERROR) << "Given IPNS record contains a pubkey that does not match " -+ "the hash from the IPNS name that fetched it!"; -+ return {}; -+ } -+ } else if (name.hash_type() == HashType::IDENTITY) { -+ public_key = name.hash(); -+ } else { -+ LOG(ERROR) << "IPNS record contains no public key, and the IPNS name " -+ << name.to_string() -+ << " is a true hash, not identity. Validation impossible."; -+ return {}; -+ } -+ ipfs::ipns::PublicKey pk; -+ auto* pkbp = reinterpret_cast(public_key.data()); -+ if (!pk.ParseFromArray(pkbp, public_key.size())) { -+ LOG(ERROR) << "Failed to parse public key bytes"; -+ return {}; -+ } -+ LOG(INFO) << "Record contains a public key of type " << pk.type() -+ << " and points to " << entry.value(); -+ auto& signature_str = entry.signaturev2(); -+ ByteView signature{reinterpret_cast(signature_str.data()), -+ signature_str.size()}; -+ // https://specs.ipfs.tech/ipns/ipns-record/#record-verification -+ // Create bytes for signature verification by concatenating -+ // ipto_hex(ns-signature:// prefix (bytes in hex: -+ // 69706e732d7369676e61747572653a) with raw CBOR bytes from IpnsEntry.data -+ auto bytes_str = entry.data(); -+ bytes_str.insert( -+ 0, "\x69\x70\x6e\x73\x2d\x73\x69\x67\x6e\x61\x74\x75\x72\x65\x3a"); -+ ByteView bytes{reinterpret_cast(bytes_str.data()), -+ bytes_str.size()}; -+ ByteView key_bytes{reinterpret_cast(pk.data().data()), -+ pk.data().size()}; -+ if (!api.VerifyKeySignature(static_cast(pk.type()), signature, -+ bytes, key_bytes)) { -+ LOG(ERROR) << "Verification failed!!"; -+ return {}; -+ } -+ // TODO check expiration date -+ if (entry.has_value() && entry.value() != result.value) { -+ LOG(ERROR) << "IPNS " << name.to_string() << " has different values for V1(" -+ << entry.value() << ") and V2(" << result.value << ')'; -+ return {}; -+ } -+ assign(result.validity, *parsed, "Validity"); -+ if (entry.has_validity() && entry.validity() != result.validity) { -+ LOG(ERROR) << "IPNS " << name.to_string() -+ << " has different validity for V1(" << entry.validity() -+ << ") and V2(" << result.validity << ')'; -+ return {}; -+ } -+ assign(result.validityType, *parsed, "ValidityType"); -+ if (entry.has_validitytype() && -+ entry.validitytype() != static_cast(result.validityType)) { -+ LOG(ERROR) << "IPNS " << name.to_string() -+ << " has different validity types for V1(" -+ << entry.validitytype() << ") and V2(" << result.validityType -+ << ')'; -+ return {}; -+ } -+ assign(result.sequence, *parsed, "Sequence"); -+ if (entry.has_sequence() && entry.sequence() != result.sequence) { -+ LOG(ERROR) << "IPNS " << name.to_string() -+ << " has different validity types for V1(" << entry.sequence() -+ << ") and V2(" << result.sequence << ')'; -+ return {}; -+ } -+ assign(result.ttl, *parsed, "TTL"); -+ if (entry.has_ttl() && entry.ttl() != result.ttl) { -+ LOG(ERROR) << "IPNS " << name.to_string() -+ << " has different validity types for V1(" << entry.ttl() -+ << ") and V2(" << result.ttl << ')'; -+ return {}; -+ } -+ LOG(INFO) << "IPNS record verification passes for " << name.to_string() -+ << " sequence: " << result.sequence << " points at " -+ << result.value; -+ return result; -+} -+ -+ipfs::ValidatedIpns::ValidatedIpns() = default; -+ipfs::ValidatedIpns::ValidatedIpns(ValidatedIpns&&) = default; -+ipfs::ValidatedIpns::ValidatedIpns(ValidatedIpns const&) = default; -+auto ipfs::ValidatedIpns::operator=(ValidatedIpns const&) -+ -> ValidatedIpns& = default; -+ipfs::ValidatedIpns::ValidatedIpns(IpnsCborEntry const& e) -+ : value{e.value}, sequence{e.sequence} { -+ std::istringstream ss{e.validity}; -+ std::tm t = {}; -+ ss >> std::get_time(&t, "%Y-%m-%dT%H:%M:%S"); -+ long ttl = (e.ttl / 1'000'000'000UL) + 1; -+#ifdef _MSC_VER -+ use_until = _mkgmtime(&t); -+#else -+ use_until = timegm(&t); -+#endif -+ cache_until = std::time(nullptr) + ttl; -+} -+ -+std::string ipfs::ValidatedIpns::Serialize() const { -+ DCHECK_EQ(value.find(' '), std::string::npos); -+ DCHECK_EQ(gateway_source.find(' '), std::string::npos); -+ std::ostringstream ss; -+ ss << std::hex << sequence << ' ' << use_until << ' ' << cache_until << ' ' -+ << fetch_time << ' ' << resolution_ms << ' ' << value << ' ' -+ << gateway_source; -+ return ss.str(); -+} -+auto ipfs::ValidatedIpns::Deserialize(std::string s) -> ValidatedIpns { -+ std::istringstream ss(s); -+ ValidatedIpns e; -+ ss >> std::hex >> e.sequence >> e.use_until >> e.cache_until >> -+ e.fetch_time >> e.resolution_ms >> e.value >> e.gateway_source; -+ return e; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/logger.cc b/third_party/ipfs_client/src/ipfs_client/logger.cc -new file mode 100644 -index 0000000000000..8c093bfca89aa ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/logger.cc -@@ -0,0 +1,76 @@ -+#include -+ -+#include -+ -+#include -+ -+namespace lg = ipfs::log; -+ -+namespace { -+lg::Level current_level = lg::Level::WARN; -+lg::Handler current_handler = nullptr; -+ -+void CheckLevel(google::protobuf::LogLevel lv, -+ char const* f, -+ int l, -+ std::string const& m) { -+ auto lev = static_cast(lv); -+ if (lev < static_cast(current_level)) { -+ return; -+ } -+ if (!current_handler) { -+ return; -+ } -+ current_handler(m, f, l, static_cast(lev)); -+} -+} // namespace -+ -+void lg::SetLevel(Level lev) { -+ IsInitialized(); -+ current_level = lev; -+} -+ -+void lg::SetHandler(Handler h) { -+ current_handler = h; -+ google::protobuf::SetLogHandler(&CheckLevel); -+} -+ -+void lg::DefaultHandler(std::string const& message, -+ char const* source_file, -+ int source_line, -+ Level lev) { -+ std::clog << source_file << ':' << source_line << ": " << LevelDescriptor(lev) -+ << ": " << message << '\n'; -+ if (lev == Level::FATAL) { -+ std::abort(); -+ } -+} -+ -+std::string_view lg::LevelDescriptor(Level l) { -+ switch (l) { -+ case Level::TRACE: -+ return "trace"; -+ case Level::DEBUG: -+ return "debug"; -+ case Level::INFO: -+ return "note"; // The next 3 are gcc- & clang-inspired -+ case Level::WARN: -+ return "warning"; -+ case Level::ERROR: -+ return "error"; -+ case Level::FATAL: -+ return " ### FATAL ERROR ### "; -+ case Level::OFF: -+ return "off"; -+ default: -+ return "Unknown log level used: possible corruption?"; -+ } -+} -+ -+bool lg::IsInitialized() { -+ if (current_handler) { -+ return true; -+ } -+ SetHandler(&DefaultHandler); -+ return false; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/multi_base.cc b/third_party/ipfs_client/src/ipfs_client/multi_base.cc -new file mode 100644 -index 0000000000000..58c9a0f18d100 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/multi_base.cc -@@ -0,0 +1,133 @@ -+#include "ipfs_client/multi_base.h" -+ -+#include "bases/b16_upper.h" -+#include "bases/b32.h" -+ -+#include -+ -+#include "log_macros.h" -+ -+using namespace std::literals; -+ -+namespace imb = ipfs::mb; -+namespace { -+constexpr std::string_view UnsupportedMultibase = "unsupported-multibase"; -+ -+template -+std::string encode_adapt(ipfs::ByteView bytes) { -+ auto p = reinterpret_cast(bytes.data()); -+ typename Target::encoder target; -+ return target.process({p, bytes.size()}); -+} -+enum class EncodedCase { lower, UPPER, Sensitive }; -+template -+std::vector decode_adapt(std::string_view encoded_sv) { -+ typename Target::decoder target; -+ std::string encoded_s{encoded_sv}; -+ switch (ec) { -+ case EncodedCase::lower: -+ for (auto& c : encoded_s) { -+ if (c >= 'A' && c <= 'Z') { -+ c = c - 'A' + 'a'; -+ } -+ } -+ break; -+ case EncodedCase::UPPER: -+ for (auto& c : encoded_s) { -+ if (c >= 'a' && c <= 'z') { -+ c = c - 'a' + 'A'; -+ } -+ } -+ break; -+ case EncodedCase::Sensitive: -+ break; -+ } -+ auto s = target.process(encoded_s); -+ auto b = reinterpret_cast(s.data()); -+ auto e = b + s.size(); -+ return std::vector(b, e); -+} -+template -+constexpr imb::Codec adapt(std::string_view name) { -+ return imb::Codec{&decode_adapt, -+ &encode_adapt, name}; -+} -+} // namespace -+ -+auto imb::Codec::Get(Code c) -> Codec const* { -+ switch (c) { -+ case Code::IDENTITY: -+ return nullptr; -+ case Code::UNSUPPORTED: -+ return nullptr; -+ case Code::BASE16_LOWER: { -+ static auto b16 = -+ adapt("base16"sv); -+ return &b16; -+ } -+ case Code::BASE16_UPPER: { -+ static auto b16u = -+ adapt("base16upper"sv); -+ return &b16u; -+ } -+ case Code::BASE32_LOWER: { -+ static auto b32 = adapt("base32"sv); -+ return &b32; -+ } -+ case Code::BASE32_UPPER: { -+ static auto b32u = -+ adapt("base32upper"sv); -+ return &b32u; -+ } -+ case Code::BASE36_LOWER: { -+ static auto b36 = -+ adapt("base36"sv); -+ return &b36; -+ } -+ case Code::BASE36_UPPER: -+ return nullptr; -+ case Code::BASE58_BTC: { -+ static auto b58 = -+ adapt("base58btc"sv); -+ return &b58; -+ } -+ case Code::BASE64: -+ return nullptr; -+ } -+ return nullptr; -+} -+std::string_view imb::GetName(Code c) { -+ if (auto codec = Codec::Get(c)) { -+ return codec->name; -+ } -+ return UnsupportedMultibase; -+} -+auto imb::CodeFromPrefix(char ch) -> Code { -+ auto c = static_cast(ch); -+ return Codec::Get(c) ? Code::UNSUPPORTED : c; -+} -+auto imb::decode(std::string_view mb_str) -> std::optional> { -+ if (mb_str.empty()) { -+ return std::nullopt; -+ } -+ if (auto* codec = Codec::Get(static_cast(mb_str[0]))) { -+ return codec->decode(mb_str.substr(1)); -+ } else { -+ return std::nullopt; -+ } -+} -+std::string imb::encode(Code c, ByteView bs) { -+ if (auto codec = Codec::Get(c)) { -+ auto rv = codec->encode(bs); -+ if (rv.size() >= bs.size()) { -+ rv.insert(0UL, 1UL, static_cast(c)); -+ return rv; -+ } else { -+ LOG(ERROR) << "Error encoding into base " << codec->name; -+ } -+ } else { -+ LOG(ERROR) << "Can't encode to multibase " << static_cast(c) -+ << " because I can't find a codec??"; -+ } -+ return {}; -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/multi_hash.cc b/third_party/ipfs_client/src/ipfs_client/multi_hash.cc -new file mode 100644 -index 0000000000000..20cf5b19a16c8 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/multi_hash.cc -@@ -0,0 +1,56 @@ -+#include -+ -+#include -+ -+using Self = ipfs::MultiHash; -+using VarInt = libp2p::multi::UVarint; -+ -+Self::MultiHash(ipfs::HashType t, ipfs::ByteView digest) -+ : type_{t}, hash_(digest.begin(), digest.end()) {} -+ -+Self::MultiHash(ipfs::ByteView bytes) { -+ ReadPrefix(bytes); -+} -+bool Self::ReadPrefix(ipfs::ByteView& bytes) { -+ auto i = VarInt::create(bytes); -+ if (!i) { -+ return false; -+ } -+ bytes = bytes.subspan(i->size()); -+ auto type = Validate(static_cast(i->toUInt64())); -+ i = VarInt::create(bytes); -+ if (!i) { -+ return false; -+ } -+ auto length = i->toUInt64(); -+ if (length > bytes.size()) { -+ return false; -+ } -+ bytes = bytes.subspan(i->size()); -+ hash_.assign(bytes.begin(), std::next(bytes.begin(), length)); -+ bytes = bytes.subspan(length); -+ type_ = type; -+ return true; -+} -+bool Self::valid() const { -+ return type_ != HashType::INVALID && hash_.size() > 0UL; -+} -+namespace { -+constexpr std::string_view InvalidHashTypeName; -+} -+std::string_view ipfs::GetName(HashType t) { -+ switch (t) { -+ case HashType::INVALID: -+ return InvalidHashTypeName; -+ case HashType::IDENTITY: -+ return "identity"; -+ case HashType::SHA2_256: -+ return "sha2-256"; -+ } -+ // Don't use default: -> let it fall through. We want compiler warnings about -+ // unhandled cases. -+ return InvalidHashTypeName; -+} -+auto ipfs::Validate(HashType t) -> HashType { -+ return GetName(t) == InvalidHashTypeName ? HashType::INVALID : t; -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/multicodec.cc b/third_party/ipfs_client/src/ipfs_client/multicodec.cc -new file mode 100644 -index 0000000000000..68cad03ea5862 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/multicodec.cc -@@ -0,0 +1,33 @@ -+#include -+ -+using Cdc = ipfs::MultiCodec; -+ -+namespace { -+constexpr std::string_view InvalidMulticodecLabel{"invalid-multicodec"}; -+} -+ -+std::string_view ipfs::GetName(Cdc c) { -+ switch (c) { -+ case Cdc::INVALID: -+ return InvalidMulticodecLabel; -+ case Cdc::IDENTITY: -+ return "identity"; -+ case Cdc::RAW: -+ return "raw"; -+ case Cdc::DAG_PB: -+ return "dag-pb"; -+ case Cdc::DAG_CBOR: -+ return "dag-cbor"; -+ case Cdc::LIBP2P_KEY: -+ return "libp2p-key"; -+ case Cdc::DAG_JSON: -+ return "dag-json"; -+ } -+ return InvalidMulticodecLabel; -+} -+Cdc ipfs::Validate(Cdc c) { -+ if (GetName(c) == InvalidMulticodecLabel) { -+ return Cdc::INVALID; -+ } -+ return c; -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/orchestrator.cc b/third_party/ipfs_client/src/ipfs_client/orchestrator.cc -new file mode 100644 -index 0000000000000..3392ae1126e39 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/orchestrator.cc -@@ -0,0 +1,146 @@ -+#include "ipfs_client/orchestrator.h" -+ -+#include -+#include -+#include -+ -+#include "log_macros.h" -+#include "path2url.h" -+ -+using namespace std::literals; -+ -+using Self = ipfs::Orchestrator; -+ -+Self::Orchestrator(std::shared_ptr requestor, -+ std::shared_ptr api) -+ // : gw_requestor_{ga}, api_{api}, requestor_{requestor} { -+ : api_{api}, requestor_{requestor} { -+ DCHECK(requestor); -+} -+ -+void Self::build_response(std::shared_ptr req) { -+ if (!req || !req->ready_after()) { -+ return; -+ } -+ auto req_path = req->path(); -+ VLOG(2) << "build_response(" << req_path.to_string() << ')'; -+ req_path.pop(); // namespace -+ std::string affinity{req_path.pop()}; -+ auto it = dags_.find(affinity); -+ if (dags_.end() == it) { -+ if (gw_request(req, req->path(), affinity)) { -+ build_response(req); -+ } -+ } else { -+ VLOG(2) << "Requesting root " << affinity << " resolve path " -+ << req_path.to_string(); -+ auto root = it->second->rooted(); -+ if (root != it->second) { -+ it->second = root; -+ } -+ from_tree(req, root, req_path, affinity); -+ } -+} -+void Self::from_tree(std::shared_ptr req, -+ ipfs::ipld::NodePtr& node, -+ SlashDelimited relative_path, -+ std::string const& affinity) { -+ auto root = node->rooted(); -+ auto block_look_up = [this](auto& k) { -+ auto i = dags_.find(k); -+ return i == dags_.end() ? ipld::NodePtr{} : i->second; -+ }; -+ auto start = std::string{req->path().pop_n(2)}; -+ auto result = root->resolve(relative_path, block_look_up); -+ auto response = std::get_if(&result); -+ if (response) { -+ VLOG(2) << "Tree gave us a response: status=" << response->status_ -+ << " mime=" << response->mime_ -+ << " location=" << response->location_ << " body is " -+ << response->body_.size() << " bytes."; -+ if (response->mime_.empty() && !response->body_.empty()) { -+ if (response->location_.empty()) { -+ LOG(INFO) << "Request for " << req->path() -+ << " returned no location, so sniffing from request path and " -+ "body of " -+ << response->body_.size() << "B."; -+ response->mime_ = sniff(req->path(), response->body_); -+ } else { -+ std::string hit_path{req->path().pop_n(2)}; -+ if (!hit_path.ends_with('/') && -+ !(response->location_.starts_with('/'))) { -+ hit_path.push_back('/'); -+ } -+ hit_path.append(response->location_); -+ LOG(INFO) << "Request for " << req->path() << " returned a location of " -+ << response->location_ << " and a body of " -+ << response->body_.size() << " bytes, sniffing mime from " -+ << hit_path; -+ response->mime_ = sniff(SlashDelimited{hit_path}, response->body_); -+ } -+ } -+ req->finish(*response); -+ } else if (std::holds_alternative(result)) { -+ auto& np = std::get(result); -+ LOG(INFO) << "Symlink converts request to " << req->path().to_string() -+ << " into " << np.new_path -+ << ". TODO - check for infinite loops."; -+ req->new_path(np.new_path); -+ build_response(req); -+ } else if (std::get_if(&result)) { -+ req->finish(Response::IMMUTABLY_GONE); -+ } else { -+ auto& mps = std::get(result).ipfs_abs_paths_; -+ req->till_next(mps.size()); -+ if (std::any_of(mps.begin(), mps.end(), [this, &req, &affinity](auto& p) { -+ return gw_request(req, SlashDelimited{p}, affinity); -+ })) { -+ from_tree(req, node, relative_path, affinity); -+ } -+ } -+} -+bool Self::gw_request(std::shared_ptr ir, -+ ipfs::SlashDelimited path, -+ std::string const& aff) { -+ VLOG(1) << "Seeking " << path.to_string(); -+ auto req = gw::GatewayRequest::fromIpfsPath(path); -+ if (req) { -+ req->dependent = ir; -+ req->orchestrator(shared_from_this()); -+ req->affinity = aff; -+ requestor_->request(req); -+ } else { -+ LOG(ERROR) << "Failed to create a request for " << path.to_string(); -+ } -+ return false; -+} -+ -+bool Self::add_node(std::string key, ipfs::ipld::NodePtr p) { -+ if (p) { -+ if (dags_.insert({key, p}).second) { -+ p->set_api(api_); -+ } -+ return true; -+ } else { -+ LOG(INFO) << "NULL block attempted to be added for " << key; -+ } -+ return false; -+} -+ -+std::string Self::sniff(ipfs::SlashDelimited p, std::string const& body) const { -+ auto fake_url = path2url(p.to_string()); -+ auto file_name = p.peek_back(); -+ auto dot = file_name.find_last_of('.'); -+ std::string ext = ""; -+ if (dot < file_name.size()) { -+ ext.assign(file_name, dot + 1); -+ } -+ auto result = api_->MimeType(ext, body, fake_url); -+ LOG(INFO) << "Deduced mime from (ext=" << ext << " body of " << body.size() -+ << " bytes, 'url'=" << fake_url << ")=" << result; -+ return result; -+} -+ -+bool Self::has_key(std::string const& k) const { -+ return dags_.count(k); -+} -\ No newline at end of file -diff --git a/third_party/ipfs_client/src/ipfs_client/path2url.cc b/third_party/ipfs_client/src/ipfs_client/path2url.cc -new file mode 100644 -index 0000000000000..0d7cf305a47b4 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/path2url.cc -@@ -0,0 +1,16 @@ -+#include "path2url.h" -+ -+#include "log_macros.h" -+ -+std::string ipfs::path2url(std::string p) { -+ while (!p.empty() && p[0] == '/') { -+ p.erase(0UL, 1UL); -+ } -+ DCHECK_EQ(p.at(0), 'i'); -+ DCHECK_EQ(p.at(1), 'p'); -+ DCHECK(p.at(2) == 'f' || p.at(2) == 'n'); -+ DCHECK_EQ(p.at(3), 's'); -+ DCHECK_EQ(p.at(4), '/'); -+ p.insert(4, ":/"); -+ return p; -+} -diff --git a/third_party/ipfs_client/src/ipfs_client/path2url.h b/third_party/ipfs_client/src/ipfs_client/path2url.h -new file mode 100644 -index 0000000000000..683e92d759b4e ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/path2url.h -@@ -0,0 +1,10 @@ -+#ifndef IPFS_PATH2URL_H_ -+#define IPFS_PATH2URL_H_ -+ -+#include -+ -+namespace ipfs { -+std::string path2url(std::string path_as_string); -+} -+ -+#endif // IPFS_PATH2URL_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/redirects.cc b/third_party/ipfs_client/src/ipfs_client/redirects.cc -new file mode 100644 -index 0000000000000..b2395dcae75c0 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/redirects.cc -@@ -0,0 +1,259 @@ -+#include "redirects.h" -+ -+#include "log_macros.h" -+ -+#include -+ -+#include -+#include -+ -+namespace r = ipfs::redirects; -+using namespace std::literals; -+ -+namespace { -+// 2.4.4 Max File Size -+// The file size must not exceed 64 KiB. -+constexpr std::size_t MAX_SIZE = 64UL * 1024UL * 1024UL; -+ -+// Not including \n which terminates lines -+constexpr std::string_view WHITESPACE = " \t\f\r\v\n"; -+ -+// https://specs.ipfs.tech/http-gateways/web-redirects-file/#status -+constexpr int DEFAULT_STATUS = 301; -+// https://specs.ipfs.tech/http-gateways/web-redirects-file/#error-handling -+constexpr int PARSE_ERROR_STATUS = 500; -+} // namespace -+ -+r::Directive::Directive(std::string_view from, std::string_view to, int status) -+ : to_{to}, status_{status} { -+ SlashDelimited comp_str_s{from}; -+ std::unordered_set placeholders; -+ while (comp_str_s) { -+ auto comp_str = comp_str_s.pop(); -+ if (comp_str.empty()) { -+ LOG(ERROR) << "Got empty slash-delimited component. Should not have."; -+ return; -+ } else if (comp_str == "*") { -+ components_.emplace_back(ComponentType::SPLAT, comp_str); -+ } else if (comp_str[0] == ':') { -+ if (placeholders.insert(comp_str).second) { -+ components_.emplace_back(ComponentType::PLACEHOLDER, comp_str); -+ } else { -+ to_.assign("ERROR: Duplicate placeholder ").append(comp_str); -+ return; -+ } -+ } else { -+ components_.emplace_back(ComponentType::LITERAL, comp_str); -+ } -+ } -+} -+std::uint16_t r::Directive::rewrite(std::string& path) const { -+ auto input = SlashDelimited{path}; -+ auto result = to_; -+ auto replace = [&result](std::string_view ph, std::string_view val) { -+ std::size_t pos; -+ while ((pos = result.find(ph)) < result.size()) { -+ result.replace(pos, ph.size(), val); -+ } -+ }; -+ for (auto [type, comp_str] : components_) { -+ if (!input) { -+ VLOG(2) << "Ran out of input in [" << path -+ << "] before running out of pattern components to match against " -+ "(was looking for [" -+ << comp_str << "]. Not a match."; -+ return 0; -+ } -+ if (type == ComponentType::LITERAL) { -+ if (comp_str != input.pop()) { -+ return 0; -+ } -+ } else if (type == ComponentType::PLACEHOLDER) { -+ replace(comp_str, input.pop()); -+ } else { -+ replace(":splat"sv, input.pop_all()); -+ } -+ } -+ if (input) { -+ return 0; -+ } else { -+ path = result; -+ return status_; -+ } -+} -+std::string r::Directive::error() const { -+ if (starts_with(to_, "ERROR: ")) { -+ return to_; -+ } -+ if (status_ < 200 || status_ > 451) { -+ return "UNSUPPORTED STATUS " + std::to_string(status_); -+ } -+ if (components_.empty()) { -+ return "Empty directive pattern"; -+ } -+ if (to_.empty()) { -+ return "Empty redirect target location"; -+ } -+ if (to_.at(0) != '/' && to_.find("://") == std::string::npos) { -+ return "Location must begin with / or be a URL"; -+ } -+ return {}; -+} -+ -+std::uint16_t r::File::rewrite(std::string& missing_path) const { -+ for (auto& directive : directives_) { -+ auto status = directive.rewrite(missing_path); -+ if (status) { -+ return status; -+ } -+ } -+ return 0; -+} -+r::File::File(std::string_view to_parse) { -+ if (to_parse.size() > MAX_SIZE) { -+ error_ = "INPUT FILE TOO LARGE " + std::to_string(to_parse.size()); -+ return; -+ } -+ for (auto line_number = 1; valid() && to_parse.size(); ++line_number) { -+ auto line_end = to_parse.find('\n'); -+ auto line = to_parse.substr(0UL, line_end); -+ if (!parse_line(line, line_number)) { -+ LOG(INFO) << "Line #" << line_number << " ignored: [" << line << ']'; -+ } else if (directives_.empty()) { -+ LOG(ERROR) << "Expected to have a directive after parsing line #" -+ << line_number << ": " << line; -+ } else if (directives_.back().valid()) { -+ VLOG(1) << "Line #" << line_number << " parsed. " << line; -+ } else { -+ error_ = "FAILURE PARSING LINE # " + std::to_string(line_number); -+ error_.append(": ") -+ .append(directives_.back().error()) -+ .append(" [") -+ .append(line) -+ .push_back(']'); -+ LOG(ERROR) << error_; -+ return; -+ } -+ if (line_end < to_parse.size()) { -+ to_parse.remove_prefix(line_end + 1); -+ } else { -+ break; -+ } -+ } -+ if (directives_.empty()) { -+ error_ = "No redirection directives in _redirects"; -+ LOG(ERROR) << error_; -+ } -+} -+ -+namespace { -+std::pair parse_status(std::string_view line, -+ std::size_t col); -+} -+bool r::File::parse_line(std::string_view line, int line_number) { -+ if (line.empty()) { -+ // empty line is not a directive -+ return false; -+ } -+ auto bpos = line.find_first_not_of(WHITESPACE); -+ if (bpos == std::string_view::npos) { -+ // effectively empty line -+ return false; -+ } else if (line[bpos] == '#') { -+ // https://specs.ipfs.tech/http-gateways/web-redirects-file/#comments -+ return false; -+ } -+ auto epos = line.find_first_of(WHITESPACE, bpos); -+ if (epos == std::string_view::npos) { -+ error_ = "Parsing _redirects file: line # " + std::to_string(line_number); -+ error_ -+ .append(" , expected at least 2 tokens (from and to) for directive: [") -+ .append(line) -+ .append("], but didn't even get whitespace to end from"); -+ return false; -+ } -+ auto from = line.substr(bpos, epos - bpos); -+ bpos = line.find_first_not_of(WHITESPACE, epos); -+ if (bpos == std::string_view::npos) { -+ error_ = "Parsing _redirects file: line # " + std::to_string(line_number); -+ error_ -+ .append(" , expected at least 2 tokens (from and to) for directive: [") -+ .append(line) -+ .append("], but didn't get a to"); -+ return false; -+ } -+ epos = line.find_first_of(WHITESPACE, bpos); -+ auto to = line.substr(bpos, epos - bpos); -+ auto [status, err] = parse_status(line, epos); -+ if (err.empty()) { -+ directives_.emplace_back(from, to, status); -+ return true; -+ } else { -+ error_ = err; -+ LOG(ERROR) << "Error parsing status on line #" << line_number << " [" -+ << line << "]."; -+ return false; -+ } -+} -+ -+namespace { -+ -+std::pair parse_status(std::string_view line, -+ std::size_t col) { -+ if (col >= line.size()) { -+ VLOG(2) << " No status specified, using default."; -+ return {DEFAULT_STATUS, ""}; -+ } -+ auto b = line.find_first_not_of(WHITESPACE, col); -+ if (b >= line.size()) { -+ VLOG(2) -+ << " No status specified (line ended in whitespace), using default."; -+ return {DEFAULT_STATUS, ""}; -+ } -+ auto status_str = line.substr(b); -+ if (status_str.size() < 3) { -+ return {PARSE_ERROR_STATUS, -+ " Not enough characters for a valid status string: [" + -+ std::string{status_str} + "]."}; -+ } -+ auto good = [](int i) { return std::make_pair(i, ""s); }; -+ auto unsupported = [status_str]() { -+ return std::make_pair( -+ PARSE_ERROR_STATUS, -+ "Unsupported status specified in directive:" + std::string{status_str}); -+ }; -+ /* -+ * 200 - OK treated as a rewrite, without changing the URL in the browser. -+ * 301 - Permanent Redirect (default) -+ * 302 - Found (commonly used for Temporary Redirect) -+ * 303 - See Other (replacing PUT and POST with GET) -+ * 307 - Temporary Redirect (explicitly preserving body and HTTP method) -+ * 308 - Permanent Redirect (preserving body & method of original request) -+ * 404 - Not Found (Useful for a pretty 404 page) -+ * 410 - Gone -+ * 451 - Unavailable For Legal Reasons -+ */ -+ switch (status_str[0]) { -+ case '2': -+ return status_str == "200" ? good(200) : unsupported(); -+ case '3': -+ if (status_str[1] != '0') { -+ return unsupported(); -+ } -+ return good(300 + status_str[2] - '0'); -+ case '4': -+ switch (status_str[1]) { -+ case '0': -+ return status_str[2] == '4' ? good(404) : unsupported(); -+ case '1': -+ return status_str[2] == '0' ? good(410) : unsupported(); -+ case '5': -+ return status_str[2] == '1' ? good(451) : unsupported(); -+ default: -+ return unsupported(); -+ } -+ default: -+ return unsupported(); -+ } -+} -+} // namespace -diff --git a/third_party/ipfs_client/src/ipfs_client/redirects.h b/third_party/ipfs_client/src/ipfs_client/redirects.h -new file mode 100644 -index 0000000000000..e0b333f1de2f1 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/redirects.h -@@ -0,0 +1,41 @@ -+#ifndef IPFS_REDIRECTS_H_ -+#define IPFS_REDIRECTS_H_ -+ -+#include -+ -+#include -+#include -+#include -+ -+namespace ipfs { -+namespace redirects { -+class Directive { -+ enum class ComponentType { LITERAL, PLACEHOLDER, SPLAT }; -+ std::vector> components_; -+ std::string to_; -+ int const status_; -+ -+ public: -+ Directive(std::string_view, std::string_view, int); -+ std::uint16_t rewrite(std::string&) const; -+ std::string error() const; -+ bool valid() const { return error().empty(); } -+}; -+class File { -+ std::vector directives_; -+ std::string error_; -+ -+ public: -+ File(std::string_view to_parse); -+ -+ bool valid() const { return error().empty(); } -+ std::string const& error() const { return error_; } -+ std::uint16_t rewrite(std::string& missing_path) const; -+ -+ private: -+ bool parse_line(std::string_view, int); -+}; -+} // namespace redirects -+} // namespace ipfs -+ -+#endif // IPFS_REDIRECTS_H_ -diff --git a/third_party/ipfs_client/src/ipfs_client/response.cc b/third_party/ipfs_client/src/ipfs_client/response.cc -new file mode 100644 -index 0000000000000..411d87d1354e4 ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/response.cc -@@ -0,0 +1,16 @@ -+#include "ipfs_client/response.h" -+ -+using Self = ipfs::Response; -+ -+Self Self::PLAIN_NOT_FOUND{"text/html", static_cast(404), -+ std::string{}, std::string{}}; -+Self Self::IMMUTABLY_GONE{"text/plain", 410, -+ "Using immutable data it has been proven the " -+ "resource does not exist anywhere.", -+ std::string{}}; -+ -+Self Self::HOST_NOT_FOUND{ -+ "text/plain", Self::HOST_NOT_FOUND_STATUS, -+ "either a hostname didn't resolve a DNS TXT records for dnslink=, or we " -+ "can't find a gateway with the necessary IPNS record", -+ std::string{}}; -diff --git a/third_party/ipfs_client/src/ipfs_client/signing_key_type.cc b/third_party/ipfs_client/src/ipfs_client/signing_key_type.cc -new file mode 100644 -index 0000000000000..b6489a47b130f ---- /dev/null -+++ b/third_party/ipfs_client/src/ipfs_client/signing_key_type.cc -@@ -0,0 +1,15 @@ -+#include -+ -+#include -+ -+using T = ipfs::SigningKeyType; -+namespace n = ipfs::ipns; -+ -+// It is critically important that these 2 enumerations remain in-synch. -+// However, some headers that reference SigningKeyType need to be able to -+// compile without access to protobuf. -+static_assert(static_cast(T::RSA) == n::RSA); -+static_assert(static_cast(T::Ed25519) == n::Ed25519); -+static_assert(static_cast(T::Secp256k1) == n::Secp256k1); -+static_assert(static_cast(T::ECDSA) == n::ECDSA); -+static_assert(static_cast(T::KeyTypeCount) == n::KeyType_ARRAYSIZE); -diff --git a/third_party/ipfs_client/src/libp2p/crypto/protobuf_key.hpp b/third_party/ipfs_client/src/libp2p/crypto/protobuf_key.hpp -new file mode 100644 -index 0000000000000..459426f8c58a2 ---- /dev/null -+++ b/third_party/ipfs_client/src/libp2p/crypto/protobuf_key.hpp -@@ -0,0 +1,29 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#ifndef KAGOME_PROTOBUF_KEY_HPP -+#define KAGOME_PROTOBUF_KEY_HPP -+ -+#include -+#include -+ -+#include -+ -+namespace libp2p::crypto { -+ /** -+ * Strict type for key, which is encoded into Protobuf format -+ */ -+ struct ProtobufKey : public boost::equality_comparable { -+ explicit ProtobufKey(std::vector key) : key{std::move(key)} {} -+ -+ std::vector key; -+ -+ bool operator==(const ProtobufKey &other) const { -+ return key == other.key; -+ } -+ }; -+} // namespace libp2p::crypto -+ -+#endif // KAGOME_PROTOBUF_KEY_HPP -diff --git a/third_party/ipfs_client/src/libp2p/multi/multibase_codec/codecs/base16.cc b/third_party/ipfs_client/src/libp2p/multi/multibase_codec/codecs/base16.cc -new file mode 100644 -index 0000000000000..b032cccbbdc1c ---- /dev/null -+++ b/third_party/ipfs_client/src/libp2p/multi/multibase_codec/codecs/base16.cc -@@ -0,0 +1,104 @@ -+#include -+ -+namespace b16 = ipfs::base16; -+ -+namespace { -+std::uint8_t to_i(char c); -+template -+char to_c(std::uint8_t n) { -+ if (n < 10) { -+ return n + '0'; -+ } else { -+ return n - 10 + a; -+ } -+} -+template -+std::string encode(ipfs::ByteView bytes) { -+ std::string result; -+ result.reserve(bytes.size() * 2); -+ for (auto b : bytes) { -+ auto i = to_integer(b); -+ result.push_back(to_c(i >> 4)); -+ result.push_back(to_c(i & 0xF)); -+ } -+ return result; -+} -+} // namespace -+ -+std::string b16::encodeLower(ByteView bytes) { -+ return encode<'a'>(bytes); -+} -+std::string b16::encodeUpper(ByteView bytes) { -+ return encode<'A'>(bytes); -+} -+auto b16::decode(std::string_view s) -> Decoded { -+ ByteArray result(s.size() / 2, ipfs::Byte{}); -+ for (auto i = 0U; i + 1U < s.size(); i += 2U) { -+ auto a = to_i(s[i]); -+ auto b = to_i(s[i + 1]); -+ if (a > 0xF || b > 0xF) { -+ return ipfs::unexpected{BaseError::INVALID_BASE16_INPUT}; -+ } -+ result[i / 2] = ipfs::Byte{static_cast((a << 4) | b)}; -+ } -+ if (s.size() % 2) { -+ auto a = to_i(s.back()); -+ if (a <= 0xF) { -+ result.push_back(ipfs::Byte{a}); -+ } -+ } -+ return result; -+} -+ -+namespace { -+std::uint8_t to_i(char c) { -+ switch (c) { -+ case '0': -+ return 0; -+ case '1': -+ return 1; -+ case '2': -+ return 2; -+ case '3': -+ return 3; -+ case '4': -+ return 4; -+ case '5': -+ return 5; -+ case '6': -+ return 6; -+ case '7': -+ return 7; -+ case '8': -+ return 8; -+ case '9': -+ return 9; -+ case 'a': -+ return 10; -+ case 'b': -+ return 11; -+ case 'c': -+ return 12; -+ case 'd': -+ return 13; -+ case 'e': -+ return 14; -+ case 'f': -+ return 15; -+ case 'A': -+ return 10; -+ case 'B': -+ return 11; -+ case 'C': -+ return 12; -+ case 'D': -+ return 13; -+ case 'E': -+ return 14; -+ case 'F': -+ return 15; -+ default: -+ return 0xFF; -+ } -+} -+} // namespace -diff --git a/third_party/ipfs_client/src/libp2p/multi/multibase_codec/codecs/base32.cc b/third_party/ipfs_client/src/libp2p/multi/multibase_codec/codecs/base32.cc -new file mode 100644 -index 0000000000000..36030d0b445fb ---- /dev/null -+++ b/third_party/ipfs_client/src/libp2p/multi/multibase_codec/codecs/base32.cc -@@ -0,0 +1,200 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+/** -+ * base32 (de)coder implementation as specified by RFC4648. -+ * -+ * Copyright (c) 2010 Adrien Kunysz -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining a copy -+ * of this software and associated documentation files (the "Software"), to deal -+ * in the Software without restriction, including without limitation the rights -+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+ * copies of the Software, and to permit persons to whom the Software is -+ * furnished to do so, subject to the following conditions: -+ * -+ * The above copyright notice and this permission notice shall be included in -+ * all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -+ * THE SOFTWARE. -+ **/ -+ -+#include "libp2p/multi/multibase_codec/codecs/base32.hpp" -+#include "libp2p/multi/multibase_codec/codecs/base_error.hpp" -+ -+#include -+ -+namespace libp2p::multi::detail { -+const std::string kUpperBase32Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"; -+const std::string kLowerBase32Alphabet = "abcdefghijklmnopqrstuvwxyz234567"; -+ -+enum Base32Mode { -+ LOWER, -+ UPPER, -+}; -+ -+int get_byte(int block) { -+ return block * 5 / 8; -+} -+ -+int get_bit(int block) { -+ return 8 - 5 - block * 5 % 8; -+} -+ -+char encode_char(unsigned char c, Base32Mode mode) { -+ if (mode == Base32Mode::UPPER) { -+ return kUpperBase32Alphabet[c & 0x1F]; // 0001 1111 -+ } -+ return kLowerBase32Alphabet[c & 0x1F]; -+} -+ -+unsigned char shift_right(uint8_t byte, int8_t offset) { -+ if (offset > 0) { -+ return byte >> offset; -+ } -+ -+ return byte << -offset; -+} -+ -+unsigned char shift_left(uint8_t byte, int8_t offset) { -+ return shift_right(byte, -offset); -+} -+ -+int encode_sequence(ipfs::span plain, -+ ipfs::span coded, -+ Base32Mode mode) { -+ for (int block = 0; block < 8; block++) { -+ int byte = get_byte(block); -+ int bit = get_bit(block); -+ -+ if (byte >= static_cast(plain.size())) { -+ return block; -+ } -+ -+ unsigned char c = shift_right(plain[byte], bit); -+ -+ if (bit < 0 && byte < static_cast(plain.size()) - 1L) { -+ c |= shift_right(plain[byte + 1], 8 + bit); -+ } -+ coded[block] = encode_char(c, mode); -+ } -+ return 8; -+} -+ -+std::string encodeBase32(ipfs::ByteView bytes, Base32Mode mode) { -+ std::string result; -+ if (bytes.size() % 5 == 0) { -+ result = std::string(bytes.size() / 5 * 8, ' '); -+ } else { -+ result = std::string((bytes.size() / 5 + 1) * 8, ' '); -+ } -+ -+ for (size_t i = 0, j = 0; i < bytes.size(); i += 5, j += 8) { -+ int n = encode_sequence( -+ ipfs::span(reinterpret_cast(&bytes[i]), -+ std::min(bytes.size() - i, 5)), -+ ipfs::span(&result[j], 8U), mode); -+ if (n < 8) { -+ result.erase(result.end() - (8 - n), result.end()); -+ } -+ } -+ -+ return result; -+} -+ -+std::string encodeBase32Upper(ipfs::ByteView bytes) { -+ return encodeBase32(bytes, Base32Mode::UPPER); -+} -+ -+std::string encodeBase32Lower(ipfs::ByteView bytes) { -+ return encodeBase32(bytes, Base32Mode::LOWER); -+} -+ -+int decode_char(unsigned char c, Base32Mode mode) { -+ char decoded_ch = -1; -+ -+ if (mode == Base32Mode::UPPER) { -+ if (c >= 'A' && c <= 'Z') { -+ decoded_ch = c - 'A'; // NOLINT -+ } -+ } else { -+ if (c >= 'a' && c <= 'z') { -+ decoded_ch = c - 'a'; // NOLINT -+ } -+ } -+ if (c >= '2' && c <= '7') { -+ decoded_ch = c - '2' + 26; // NOLINT -+ } -+ -+ return decoded_ch; -+} -+ -+ipfs::expected decode_sequence(ipfs::span coded, -+ ipfs::span plain, -+ Base32Mode mode) { -+ plain[0] = 0; -+ for (int block = 0; block < 8; block++) { -+ int bit = get_bit(block); -+ int byte = get_byte(block); -+ -+ if (block >= static_cast(coded.size())) { -+ return byte; -+ } -+ int c = decode_char(coded[block], mode); -+ if (c < 0) { -+ // return absl::InvalidArgumentError("INVALID_BASE32_INPUT"); -+ return ipfs::unexpected{BaseError::INVALID_BASE32_INPUT}; -+ } -+ -+ plain[byte] |= shift_left(c, bit); -+ if (bit < 0) { -+ plain[byte + 1] = shift_left(c, 8 + bit); -+ } -+ } -+ return 5; -+} -+ -+ipfs::expected decodeBase32( -+ std::string_view string, -+ Base32Mode mode) { -+ common::ByteArray result; -+ if (string.size() % 8 == 0) { -+ result = common::ByteArray(string.size() / 8 * 5, ipfs::Byte{0}); -+ } else { -+ result = common::ByteArray((string.size() / 8 + 1) * 5, ipfs::Byte{0}); -+ } -+ -+ for (size_t i = 0, j = 0; i < string.size(); i += 8, j += 5) { -+ auto n = decode_sequence( -+ ipfs::span(&string[i], -+ std::min(string.size() - i, 8)), -+ ipfs::span(reinterpret_cast(&result[j]), 5U), mode); -+ if (!n.has_value()) { -+ return ipfs::unexpected{n.error()}; -+ } -+ if (n.value() < 5) { -+ result.erase(result.end() - (5 - n.value()), result.end()); -+ } -+ } -+ return result; -+} -+ -+ipfs::expected decodeBase32Upper( -+ std::string_view string) { -+ return decodeBase32(string, Base32Mode::UPPER); -+} -+ -+ipfs::expected decodeBase32Lower( -+ std::string_view string) { -+ return decodeBase32(string, Base32Mode::LOWER); -+} -+ -+} // namespace libp2p::multi::detail -diff --git a/third_party/ipfs_client/src/libp2p/multi/multibase_codec/codecs/base36.cc b/third_party/ipfs_client/src/libp2p/multi/multibase_codec/codecs/base36.cc -new file mode 100644 -index 0000000000000..2f508979a004c ---- /dev/null -+++ b/third_party/ipfs_client/src/libp2p/multi/multibase_codec/codecs/base36.cc -@@ -0,0 +1,58 @@ -+#include -+ -+#include -+ -+#include -+ -+#include -+ -+namespace det = libp2p::multi::detail; -+ -+namespace { -+constexpr double kLengthRatio = 0.646240625; // log(36)/log(256) -+ -+std::int_least16_t digit_value(char digit) { -+ if (digit < '0') { -+ return -1; -+ } else if (digit <= '9') { -+ return digit - '0'; -+ } else if (digit < 'A') { -+ return -2; -+ } else if (digit <= 'Z') { -+ return (digit - 'A') + 10; -+ } else if (digit < 'a') { -+ return -3; -+ } else if (digit <= 'z') { -+ return (digit - 'a') + 10; -+ } else { -+ return -4; -+ } -+} -+int operator*(int a, ipfs::Byte b) { -+ return a * static_cast(b); -+} -+} // namespace -+ -+std::string det::encodeBase36Lower(ipfs::ByteView) { -+ std::abort(); -+} -+ -+auto det::decodeBase36(std::string_view str_b36) -+ -> ipfs::expected { -+ common::ByteArray out; -+ out.resize(std::ceil(static_cast(str_b36.size()) * kLengthRatio), -+ ipfs::Byte{}); -+ for (auto digit : str_b36) { // chunk) { -+ int val = digit_value(digit); -+ if (val < 0) { -+ return ipfs::unexpected{BaseError::INVALID_BASE36_INPUT}; -+ } -+ auto mod_byte = [&val](auto& b) { -+ val += 36 * b; -+ b = static_cast(val & 0xFF); -+ val >>= 8; -+ }; -+ std::for_each(out.rbegin(), out.rend(), mod_byte); -+ } -+ return out; -+} -diff --git a/third_party/ipfs_client/src/libp2p/multi/uvarint.cc b/third_party/ipfs_client/src/libp2p/multi/uvarint.cc -new file mode 100644 -index 0000000000000..2e6ed6eb0bada ---- /dev/null -+++ b/third_party/ipfs_client/src/libp2p/multi/uvarint.cc -@@ -0,0 +1,107 @@ -+/** -+ * Copyright Soramitsu Co., Ltd. All Rights Reserved. -+ * SPDX-License-Identifier: Apache-2.0 -+ */ -+ -+#include -+ -+namespace libp2p::multi { -+ -+UVarint::UVarint(UVarint const& rhs) : bytes_(rhs.bytes_) {} -+UVarint::UVarint(uint64_t number) { -+ do { -+ auto byte = static_cast(number) & ipfs::Byte{0x7f}; -+ number >>= 7; -+ if (number != 0) { -+ byte |= ipfs::Byte{0x80}; -+ } -+ bytes_.push_back(byte); -+ } while (number != 0); -+} -+ -+UVarint::UVarint(ipfs::ByteView varint_bytes) { -+ auto size = calculateSize(varint_bytes); -+ if (size <= varint_bytes.size()) { -+ bytes_.assign(varint_bytes.begin(), varint_bytes.begin() + size); -+ } -+} -+ -+UVarint::UVarint(ipfs::ByteView varint_bytes, size_t varint_size) -+ : bytes_(varint_bytes.begin(), varint_bytes.begin() + varint_size) {} -+ -+std::optional UVarint::create(ipfs::ByteView varint_bytes) { -+ size_t size = calculateSize(varint_bytes); -+ if (size > 0 && size <= varint_bytes.size()) { -+ return UVarint{varint_bytes, size}; -+ } -+ return {}; -+} -+ -+uint64_t UVarint::toUInt64() const { -+ uint64_t res = 0; -+ size_t index = 0; -+ for (const auto& byte : bytes_) { -+ res += static_cast((byte & ipfs::Byte{0x7f})) << index; -+ index += 7; -+ } -+ return res; -+} -+ -+ipfs::ByteView UVarint::toBytes() const { -+ return ipfs::ByteView{bytes_.data(), bytes_.size()}; -+} -+ -+std::vector const& UVarint::toVector() const { -+ return bytes_; -+} -+ -+size_t UVarint::size() const { -+ return bytes_.size(); -+} -+ -+UVarint& UVarint::operator=(UVarint const& rhs) { -+ bytes_ = rhs.bytes_; // actually OK even if &rhs == this -+ return *this; -+} -+UVarint& UVarint::operator=(uint64_t n) { -+ *this = UVarint(n); -+ return *this; -+} -+ -+bool UVarint::operator==(const UVarint& r) const { -+ return std::equal(bytes_.begin(), bytes_.end(), r.bytes_.begin(), -+ r.bytes_.end()); -+} -+ -+bool UVarint::operator!=(const UVarint& r) const { -+ return !(*this == r); -+} -+ -+bool UVarint::operator<(const UVarint& r) const { -+ return toUInt64() < r.toUInt64(); -+} -+ -+size_t UVarint::calculateSize(ipfs::ByteView varint_bytes) { -+ size_t size = 0; -+ size_t shift = 0; -+ constexpr size_t capacity = sizeof(uint64_t) * 8; -+ bool last_byte_found = false; -+ for (const auto& byte : varint_bytes) { -+ ++size; -+ std::uint_least64_t slice = to_integer(byte) & 0x7f; -+ if (shift >= capacity || ((slice << shift) >> shift) != slice) { -+ size = 0; -+ break; -+ } -+ if ((byte & ipfs::Byte{0x80}) == ipfs::Byte{0}) { -+ last_byte_found = true; -+ break; -+ } -+ shift += 7; -+ } -+ return last_byte_found ? size : 0; -+} -+ -+UVarint::~UVarint() noexcept {} -+ -+} // namespace libp2p::multi -diff --git a/third_party/ipfs_client/src/log_macros.h b/third_party/ipfs_client/src/log_macros.h -new file mode 100644 -index 0000000000000..e406429d0f280 ---- /dev/null -+++ b/third_party/ipfs_client/src/log_macros.h -@@ -0,0 +1,53 @@ -+#ifndef IPFS_LOG_MACROS_H_ -+#define IPFS_LOG_MACROS_H_ -+ -+#include -+ -+#if __has_include("base/logging.h") //In Chromium -+ -+#include "base/logging.h" -+#include "base/check_op.h" -+ -+#else // Not in Chromium -+ -+#include -+ -+#include -+ -+#define DCHECK_EQ GOOGLE_DCHECK_EQ -+#define DCHECK_GT GOOGLE_DCHECK_GT -+#define DCHECK GOOGLE_DCHECK -+#define LOG GOOGLE_LOG -+ -+#define VLOG(X) \ -+ ::google::protobuf::internal::LogFinisher() = \ -+ ::google::protobuf::internal::LogMessage( \ -+ static_cast<::google::protobuf::LogLevel>( \ -+ ::google::protobuf::LOGLEVEL_INFO - X), \ -+ __FILE__, __LINE__) -+ -+#pragma GCC diagnostic push -+#pragma GCC diagnostic ignored "-Wunused-variable" -+namespace { -+static bool is_logging_initialized = ::ipfs::log::IsInitialized(); -+} -+#pragma GCC diagnostic pop -+ -+#endif //Chromium in-tree check -+ -+#define L_VAR(X) LOG(INFO) << "VAR " << #X << "='" << (X) << '\''; -+ -+inline bool starts_with(std::string_view full_text, std::string_view prefix) { -+ if (prefix.size() > full_text.size()) { -+ return false; -+ } -+ return full_text.substr(0UL, prefix.size()) == prefix; -+} -+inline bool ends_with(std::string_view full_text, std::string_view suffix) { -+ if (suffix.size() > full_text.size()) { -+ return false; -+ } -+ return full_text.substr(full_text.size() - suffix.size()) == suffix; -+} -+ -+#endif // IPFS_LOG_MACROS_H_ -diff --git a/third_party/ipfs_client/src/smhasher/MurmurHash3.cc b/third_party/ipfs_client/src/smhasher/MurmurHash3.cc -new file mode 100644 -index 0000000000000..677aedf1d7a55 ---- /dev/null -+++ b/third_party/ipfs_client/src/smhasher/MurmurHash3.cc -@@ -0,0 +1,424 @@ -+//----------------------------------------------------------------------------- -+// MurmurHash3 was written by Austin Appleby, and is placed in the public -+// domain. The author hereby disclaims copyright to this source code. -+ -+// Note - The x86 and x64 versions do _not_ produce the same results, as the -+// algorithms are optimized for their respective platforms. You can still -+// compile and run any of them on any platform, but your performance with the -+// non-native version will be less than optimal. -+ -+#include "smhasher/MurmurHash3.h" -+#ifdef __GNUG__ -+#pragma GCC diagnostic ignored "-Wimplicit-fallthrough" -+#endif -+ -+#ifdef __clang__ -+#pragma clang diagnostic ignored "-Wimplicit-fallthrough" -+#endif -+//----------------------------------------------------------------------------- -+// Platform-specific functions and macros -+ -+// Microsoft Visual Studio -+ -+#if defined(_MSC_VER) -+ -+#define FORCE_INLINE __forceinline -+ -+#include -+ -+#define ROTL32(x, y) _rotl(x, y) -+#define ROTL64(x, y) _rotl64(x, y) -+ -+#define BIG_CONSTANT(x) (x) -+ -+// Other compilers -+ -+#else // defined(_MSC_VER) -+ -+#define FORCE_INLINE inline __attribute__((always_inline)) -+ -+inline uint32_t rotl32(uint32_t x, int8_t r) { -+ return (x << r) | (x >> (32 - r)); -+} -+ -+inline uint64_t rotl64(uint64_t x, int8_t r) { -+ return (x << r) | (x >> (64 - r)); -+} -+ -+#define ROTL32(x, y) rotl32(x, y) -+#define ROTL64(x, y) rotl64(x, y) -+ -+#define BIG_CONSTANT(x) (x##LLU) -+ -+#endif // !defined(_MSC_VER) -+ -+//----------------------------------------------------------------------------- -+// Block read - if your platform needs to do endian-swapping or can only -+// handle aligned reads, do the conversion here -+ -+FORCE_INLINE uint32_t getblock32(const uint32_t* p, int i) { -+ return p[i]; -+} -+ -+FORCE_INLINE uint64_t getblock64(const uint64_t* p, int i) { -+ return p[i]; -+} -+ -+//----------------------------------------------------------------------------- -+// Finalization mix - force all bits of a hash block to avalanche -+ -+FORCE_INLINE uint32_t fmix32(uint32_t h) { -+ h ^= h >> 16; -+ h *= 0x85ebca6b; -+ h ^= h >> 13; -+ h *= 0xc2b2ae35; -+ h ^= h >> 16; -+ -+ return h; -+} -+ -+//---------- -+ -+FORCE_INLINE uint64_t fmix64(uint64_t k) { -+ k ^= k >> 33; -+ k *= BIG_CONSTANT(0xff51afd7ed558ccd); -+ k ^= k >> 33; -+ k *= BIG_CONSTANT(0xc4ceb9fe1a85ec53); -+ k ^= k >> 33; -+ -+ return k; -+} -+ -+//----------------------------------------------------------------------------- -+ -+void MurmurHash3_x86_32(const void* key, int len, uint32_t seed, void* out) { -+ const uint8_t* data = (const uint8_t*)key; -+ const int nblocks = len / 4; -+ -+ uint32_t h1 = seed; -+ -+ const uint32_t c1 = 0xcc9e2d51; -+ const uint32_t c2 = 0x1b873593; -+ -+ //---------- -+ // body -+ -+ const uint32_t* blocks = (const uint32_t*)(data + nblocks * 4); -+ -+ for (int i = -nblocks; i; i++) { -+ uint32_t k1 = getblock32(blocks, i); -+ -+ k1 *= c1; -+ k1 = ROTL32(k1, 15); -+ k1 *= c2; -+ -+ h1 ^= k1; -+ h1 = ROTL32(h1, 13); -+ h1 = h1 * 5 + 0xe6546b64; -+ } -+ -+ //---------- -+ // tail -+ -+ const uint8_t* tail = (const uint8_t*)(data + nblocks * 4); -+ -+ uint32_t k1 = 0; -+ -+ switch (len & 3) { -+ case 3: -+ k1 ^= tail[2] << 16; -+ case 2: -+ k1 ^= tail[1] << 8; -+ case 1: -+ k1 ^= tail[0]; -+ k1 *= c1; -+ k1 = ROTL32(k1, 15); -+ k1 *= c2; -+ h1 ^= k1; -+ }; -+ -+ //---------- -+ // finalization -+ -+ h1 ^= len; -+ -+ h1 = fmix32(h1); -+ -+ *(uint32_t*)out = h1; -+} -+ -+//----------------------------------------------------------------------------- -+ -+void MurmurHash3_x86_128(const void* key, -+ const int len, -+ uint32_t seed, -+ void* out) { -+ const uint8_t* data = (const uint8_t*)key; -+ const int nblocks = len / 16; -+ -+ uint32_t h1 = seed; -+ uint32_t h2 = seed; -+ uint32_t h3 = seed; -+ uint32_t h4 = seed; -+ -+ const uint32_t c1 = 0x239b961b; -+ const uint32_t c2 = 0xab0e9789; -+ const uint32_t c3 = 0x38b34ae5; -+ const uint32_t c4 = 0xa1e38b93; -+ -+ //---------- -+ // body -+ -+ const uint32_t* blocks = (const uint32_t*)(data + nblocks * 16); -+ -+ for (int i = -nblocks; i; i++) { -+ uint32_t k1 = getblock32(blocks, i * 4 + 0); -+ uint32_t k2 = getblock32(blocks, i * 4 + 1); -+ uint32_t k3 = getblock32(blocks, i * 4 + 2); -+ uint32_t k4 = getblock32(blocks, i * 4 + 3); -+ -+ k1 *= c1; -+ k1 = ROTL32(k1, 15); -+ k1 *= c2; -+ h1 ^= k1; -+ -+ h1 = ROTL32(h1, 19); -+ h1 += h2; -+ h1 = h1 * 5 + 0x561ccd1b; -+ -+ k2 *= c2; -+ k2 = ROTL32(k2, 16); -+ k2 *= c3; -+ h2 ^= k2; -+ -+ h2 = ROTL32(h2, 17); -+ h2 += h3; -+ h2 = h2 * 5 + 0x0bcaa747; -+ -+ k3 *= c3; -+ k3 = ROTL32(k3, 17); -+ k3 *= c4; -+ h3 ^= k3; -+ -+ h3 = ROTL32(h3, 15); -+ h3 += h4; -+ h3 = h3 * 5 + 0x96cd1c35; -+ -+ k4 *= c4; -+ k4 = ROTL32(k4, 18); -+ k4 *= c1; -+ h4 ^= k4; -+ -+ h4 = ROTL32(h4, 13); -+ h4 += h1; -+ h4 = h4 * 5 + 0x32ac3b17; -+ } -+ -+ //---------- -+ // tail -+ -+ const uint8_t* tail = (const uint8_t*)(data + nblocks * 16); -+ -+ uint32_t k1 = 0; -+ uint32_t k2 = 0; -+ uint32_t k3 = 0; -+ uint32_t k4 = 0; -+ -+ switch (len & 15) { -+ case 15: -+ k4 ^= tail[14] << 16; -+ case 14: -+ k4 ^= tail[13] << 8; -+ case 13: -+ k4 ^= tail[12] << 0; -+ k4 *= c4; -+ k4 = ROTL32(k4, 18); -+ k4 *= c1; -+ h4 ^= k4; -+ -+ case 12: -+ k3 ^= tail[11] << 24; -+ case 11: -+ k3 ^= tail[10] << 16; -+ case 10: -+ k3 ^= tail[9] << 8; -+ case 9: -+ k3 ^= tail[8] << 0; -+ k3 *= c3; -+ k3 = ROTL32(k3, 17); -+ k3 *= c4; -+ h3 ^= k3; -+ -+ case 8: -+ k2 ^= tail[7] << 24; -+ case 7: -+ k2 ^= tail[6] << 16; -+ case 6: -+ k2 ^= tail[5] << 8; -+ case 5: -+ k2 ^= tail[4] << 0; -+ k2 *= c2; -+ k2 = ROTL32(k2, 16); -+ k2 *= c3; -+ h2 ^= k2; -+ -+ case 4: -+ k1 ^= tail[3] << 24; -+ case 3: -+ k1 ^= tail[2] << 16; -+ case 2: -+ k1 ^= tail[1] << 8; -+ case 1: -+ k1 ^= tail[0] << 0; -+ k1 *= c1; -+ k1 = ROTL32(k1, 15); -+ k1 *= c2; -+ h1 ^= k1; -+ }; -+ -+ //---------- -+ // finalization -+ -+ h1 ^= len; -+ h2 ^= len; -+ h3 ^= len; -+ h4 ^= len; -+ -+ h1 += h2; -+ h1 += h3; -+ h1 += h4; -+ h2 += h1; -+ h3 += h1; -+ h4 += h1; -+ -+ h1 = fmix32(h1); -+ h2 = fmix32(h2); -+ h3 = fmix32(h3); -+ h4 = fmix32(h4); -+ -+ h1 += h2; -+ h1 += h3; -+ h1 += h4; -+ h2 += h1; -+ h3 += h1; -+ h4 += h1; -+ -+ ((uint32_t*)out)[0] = h1; -+ ((uint32_t*)out)[1] = h2; -+ ((uint32_t*)out)[2] = h3; -+ ((uint32_t*)out)[3] = h4; -+} -+ -+//----------------------------------------------------------------------------- -+ -+void MurmurHash3_x64_128(const void* key, -+ const int len, -+ const uint32_t seed, -+ void* out) { -+ const uint8_t* data = (const uint8_t*)key; -+ const int nblocks = len / 16; -+ -+ uint64_t h1 = seed; -+ uint64_t h2 = seed; -+ -+ const uint64_t c1 = BIG_CONSTANT(0x87c37b91114253d5); -+ const uint64_t c2 = BIG_CONSTANT(0x4cf5ad432745937f); -+ -+ //---------- -+ // body -+ -+ const uint64_t* blocks = (const uint64_t*)(data); -+ -+ for (int i = 0; i < nblocks; i++) { -+ uint64_t k1 = getblock64(blocks, i * 2 + 0); -+ uint64_t k2 = getblock64(blocks, i * 2 + 1); -+ -+ k1 *= c1; -+ k1 = ROTL64(k1, 31); -+ k1 *= c2; -+ h1 ^= k1; -+ -+ h1 = ROTL64(h1, 27); -+ h1 += h2; -+ h1 = h1 * 5 + 0x52dce729; -+ -+ k2 *= c2; -+ k2 = ROTL64(k2, 33); -+ k2 *= c1; -+ h2 ^= k2; -+ -+ h2 = ROTL64(h2, 31); -+ h2 += h1; -+ h2 = h2 * 5 + 0x38495ab5; -+ } -+ -+ //---------- -+ // tail -+ -+ const uint8_t* tail = (const uint8_t*)(data + nblocks * 16); -+ -+ uint64_t k1 = 0; -+ uint64_t k2 = 0; -+ -+ switch (len & 15) { -+ case 15: -+ k2 ^= ((uint64_t)tail[14]) << 48; -+ case 14: -+ k2 ^= ((uint64_t)tail[13]) << 40; -+ case 13: -+ k2 ^= ((uint64_t)tail[12]) << 32; -+ case 12: -+ k2 ^= ((uint64_t)tail[11]) << 24; -+ case 11: -+ k2 ^= ((uint64_t)tail[10]) << 16; -+ case 10: -+ k2 ^= ((uint64_t)tail[9]) << 8; -+ case 9: -+ k2 ^= ((uint64_t)tail[8]) << 0; -+ k2 *= c2; -+ k2 = ROTL64(k2, 33); -+ k2 *= c1; -+ h2 ^= k2; -+ -+ case 8: -+ k1 ^= ((uint64_t)tail[7]) << 56; -+ case 7: -+ k1 ^= ((uint64_t)tail[6]) << 48; -+ case 6: -+ k1 ^= ((uint64_t)tail[5]) << 40; -+ case 5: -+ k1 ^= ((uint64_t)tail[4]) << 32; -+ case 4: -+ k1 ^= ((uint64_t)tail[3]) << 24; -+ case 3: -+ k1 ^= ((uint64_t)tail[2]) << 16; -+ case 2: -+ k1 ^= ((uint64_t)tail[1]) << 8; -+ case 1: -+ k1 ^= ((uint64_t)tail[0]) << 0; -+ k1 *= c1; -+ k1 = ROTL64(k1, 31); -+ k1 *= c2; -+ h1 ^= k1; -+ }; -+ -+ //---------- -+ // finalization -+ -+ h1 ^= len; -+ h2 ^= len; -+ -+ h1 += h2; -+ h2 += h1; -+ -+ h1 = fmix64(h1); -+ h2 = fmix64(h2); -+ -+ h1 += h2; -+ h2 += h1; -+ -+ ((uint64_t*)out)[0] = h1; -+ ((uint64_t*)out)[1] = h2; -+} -+ -+//----------------------------------------------------------------------------- -diff --git a/third_party/ipfs_client/src/vocab/byte_view.cc b/third_party/ipfs_client/src/vocab/byte_view.cc -new file mode 100644 -index 0000000000000..f71dcaa0181f1 ---- /dev/null -+++ b/third_party/ipfs_client/src/vocab/byte_view.cc -@@ -0,0 +1,2 @@ -+#include "vocab/byte_view.h" -+ -diff --git a/third_party/ipfs_client/src/vocab/slash_delimited.cc b/third_party/ipfs_client/src/vocab/slash_delimited.cc -new file mode 100644 -index 0000000000000..c81ae5823c867 ---- /dev/null -+++ b/third_party/ipfs_client/src/vocab/slash_delimited.cc -@@ -0,0 +1,117 @@ -+#include -+ -+#include "log_macros.h" -+ -+#include -+ -+#if __has_include() -+#include -+#define HAS_STRINGPIECE 1 -+#endif -+ -+using Self = ipfs::SlashDelimited; -+ -+Self::SlashDelimited(std::string_view unowned) : remainder_{unowned} {} -+ -+Self::operator bool() const { -+ return remainder_.find_first_not_of("/") < remainder_.size(); -+} -+std::string_view Self::pop() { -+ if (remainder_.empty()) { -+ return remainder_; -+ } -+ auto slash = remainder_.find('/'); -+ if (slash == std::string_view::npos) { -+ return pop_all(); -+ } -+ auto result = remainder_.substr(0UL, slash); -+ remainder_.remove_prefix(slash + 1); -+ if (result.empty()) { -+ return pop(); -+ } else { -+ return result; -+ } -+} -+std::string_view Self::pop_all() { -+ auto result = remainder_; -+ remainder_ = ""; -+ return result; -+} -+std::string_view Self::pop_n(std::size_t n) { -+ std::size_t a = 0UL; -+ while (n) { -+ auto slash = remainder_.find('/', a); -+ auto non_slash = remainder_.find_first_not_of("/", a); -+ if (slash == std::string_view::npos) { -+ auto result = remainder_; -+ remainder_ = ""; -+ return result; -+ } -+ if (non_slash < slash) { -+ --n; -+ } -+ a = slash + 1UL; -+ } -+ auto result = remainder_.substr(0UL, a - 1); -+ remainder_.remove_prefix(a); -+ return result; -+} -+std::string_view Self::peek_back() const { -+ auto s = remainder_; -+ while (!s.empty() && s.back() == '/') { -+ s.remove_suffix(1); -+ } -+ if (s.empty()) { -+ return s; -+ } -+ auto last_slash = s.find_last_of('/'); -+ if (last_slash < remainder_.size()) { -+ return remainder_.substr(last_slash + 1); -+ } else { -+ return s; -+ } -+} -+std::string Self::pop_back() { -+ auto non_slash = remainder_.find_last_not_of('/'); -+ if (non_slash == std::string_view::npos) { -+ return ""; -+ } -+ auto slash = remainder_.find_last_of('/', non_slash); -+ std::string rv; -+ if (slash == std::string_view::npos) { -+ rv = remainder_; -+ remainder_ = ""; -+ } else { -+ rv = remainder_.substr(slash + 1, non_slash - slash); -+ remainder_ = remainder_.substr(0UL, slash); -+ } -+ return rv; -+} -+ -+std::ostream& operator<<(std::ostream& str, ipfs::SlashDelimited const& sd) { -+ return str << sd.to_view(); -+} -+ -+#if __has_include() -+#include -+ -+using namespace google::protobuf::internal; -+using namespace google::protobuf; -+ -+#if PROTOBUF_VERSION >= 3020000 -+#include -+LogMessage& operator<<(LogMessage& str, ipfs::SlashDelimited const& sd) { -+ return str << sd.to_view(); -+} -+#elif __has_include() -+#include -+LogMessage& operator<<(LogMessage& str, ipfs::SlashDelimited const& sd) { -+ return str << StringPiece{sd.to_view()}; -+} -+#else -+LogMessage& operator<<(LogMessage& str, ipfs::SlashDelimited const& sd) { -+ return str << std::string{sd.to_view()}; -+} -+#endif -+ -+#endif -diff --git a/third_party/ipfs_client/unix_fs.proto b/third_party/ipfs_client/unix_fs.proto -new file mode 100644 -index 0000000000000..9d117a4d66bdf ---- /dev/null -+++ b/third_party/ipfs_client/unix_fs.proto -@@ -0,0 +1,32 @@ -+syntax = "proto2"; -+option optimize_for = LITE_RUNTIME; -+package ipfs.unix_fs; -+ -+message Data { -+ enum DataType { -+ Raw = 0; -+ Directory = 1; -+ File = 2; -+ Metadata = 3; -+ Symlink = 4; -+ HAMTShard = 5; -+ } -+ -+ required DataType Type = 1; -+ optional bytes Data = 2; -+ optional uint64 filesize = 3; -+ repeated uint64 blocksizes = 4; -+ optional uint64 hashType = 5; -+ optional uint64 fanout = 6; -+ optional uint32 mode = 7; -+ optional UnixTime mtime = 8; -+} -+ -+message Metadata { -+ optional string MimeType = 1; -+} -+ -+message UnixTime { -+ required int64 Seconds = 1; -+ optional fixed32 FractionalNanoseconds = 2; -+} -diff --git a/url/BUILD.gn b/url/BUILD.gn -index c525c166979d6..ce2b1ae43c0a7 100644 ---- a/url/BUILD.gn -+++ b/url/BUILD.gn -@@ -5,6 +5,7 @@ - import("//build/buildflag_header.gni") - import("//testing/libfuzzer/fuzzer_test.gni") - import("//testing/test.gni") -+import("//third_party/ipfs_client/args.gni") - import("features.gni") - - import("//build/config/cronet/config.gni") -@@ -67,6 +68,7 @@ component("url") { - public_deps = [ - "//base", - "//build:robolectric_buildflags", -+ "//third_party/ipfs_client:ipfs_buildflags", - ] - - configs += [ "//build/config/compiler:wexit_time_destructors" ] -@@ -89,6 +91,11 @@ component("url") { - public_configs = [ "//third_party/jdk" ] - } - -+ if (enable_ipfs) { -+ sources += [ "url_canon_ipfs.cc" ] -+ deps += [ "//third_party/ipfs_client:ipfs_client" ] -+ } -+ - if (is_win) { - # Don't conflict with Windows' "url.dll". - output_name = "url_lib" -diff --git a/url/url_canon.h b/url/url_canon.h -index 913b3685c6fec..3c3c55e580564 100644 ---- a/url/url_canon.h -+++ b/url/url_canon.h -@@ -792,6 +792,23 @@ bool CanonicalizeMailtoURL(const char16_t* spec, - CanonOutput* output, - Parsed* new_parsed); - -+COMPONENT_EXPORT(URL) -+bool CanonicalizeIpfsURL(const char* spec, -+ int spec_len, -+ const Parsed& parsed, -+ SchemeType scheme_type, -+ CharsetConverter* query_converter, -+ CanonOutput* output, -+ Parsed* new_parsed); -+COMPONENT_EXPORT(URL) -+bool CanonicalizeIpfsURL(const char16_t* spec, -+ int spec_len, -+ const Parsed& parsed, -+ SchemeType scheme_type, -+ CharsetConverter* query_converter, -+ CanonOutput* output, -+ Parsed* new_parsed); -+ - // Part replacer -------------------------------------------------------------- - - // Internal structure used for storing separate strings for each component. -diff --git a/url/url_canon_ipfs.cc b/url/url_canon_ipfs.cc -new file mode 100644 -index 0000000000000..9511e3f5e6f5c ---- /dev/null -+++ b/url/url_canon_ipfs.cc -@@ -0,0 +1,55 @@ -+#include "url_canon_internal.h" -+ -+#include -+#include -+ -+#include -+ -+bool url::CanonicalizeIpfsURL(const char* spec, -+ int spec_len, -+ const Parsed& parsed, -+ SchemeType scheme_type, -+ CharsetConverter* charset_converter, -+ CanonOutput* output, -+ Parsed* output_parsed) { -+ if ( spec_len < 1 || !spec ) { -+ return false; -+ } -+ if ( parsed.host.len < 1 ) { -+ return false; -+ } -+ std::string_view cid_str{ spec + parsed.host.begin, static_cast(parsed.host.len) }; -+ auto cid = ipfs::Cid(cid_str); -+ if ( !cid.valid() ) { -+ cid = ipfs::id_cid::forText( std::string{cid_str} + " is not a valid CID." ); -+ } -+ auto as_str = cid.to_string(); -+ if ( as_str.empty() ) { -+ return false; -+ } -+ std::string stdurl{ spec, static_cast(parsed.host.begin) }; -+ stdurl.append( as_str ); -+ stdurl.append( spec + parsed.host.end(), spec_len - parsed.host.end() ); -+ spec = stdurl.data(); -+ spec_len = static_cast(stdurl.size()); -+ Parsed parsed_input; -+ ParseStandardURL(spec, spec_len, &parsed_input); -+ return CanonicalizeStandardURL( -+ spec, spec_len, -+ parsed_input, -+ scheme_type, -+ charset_converter, -+ output, output_parsed -+ ); -+} -+bool url::CanonicalizeIpfsURL(const char16_t* spec, -+ int spec_len, -+ const Parsed& parsed, -+ SchemeType scheme_type, -+ CharsetConverter* query_converter, -+ CanonOutput* output, -+ Parsed* new_parsed) { -+ RawCanonOutput<2048> as8; -+ ConvertUTF16ToUTF8(spec, spec_len, &as8); -+ return CanonicalizeIpfsURL(as8.data(), as8.length(), parsed, scheme_type, query_converter, output, new_parsed); -+} -diff --git a/url/url_util.cc b/url/url_util.cc -index 9258cfcfada47..daf10e4c3b741 100644 ---- a/url/url_util.cc -+++ b/url/url_util.cc -@@ -277,6 +277,12 @@ bool DoCanonicalize(const CHAR* spec, - charset_converter, output, - output_parsed); - -+ } else if (DoCompareSchemeComponent(spec, scheme, "ipfs")) { -+ // Switch multibase away from case-sensitive ones before continuing canonicalization. -+ ParseStandardURL(spec, spec_len, &parsed_input); -+ success = CanonicalizeIpfsURL(spec, spec_len, parsed_input, scheme_type, -+ charset_converter, output, output_parsed); -+ - } else if (DoIsStandard(spec, scheme, &scheme_type)) { - // All "normal" URLs. - ParseStandardURL(spec, spec_len, &parsed_input); - diff --git a/library/BUILD.gn.in b/library/BUILD.gn.in index 61d4338a..15c2434e 100644 --- a/library/BUILD.gn.in +++ b/library/BUILD.gn.in @@ -19,13 +19,9 @@ if (enable_ipfs) { static_library("ipfs_client") { if (is_nacl) { sources = cxx_sources - [ - "src/ipfs_client/gw/gateway_request.cc", - "src/ipfs_client/gw/gateway_http_requestor.cc", - "src/ipfs_client/gw/requestor.cc", "src/ipfs_client/ipld/dag_node.cc", "src/ipfs_client/ipns_names.cc", "src/ipfs_client/ipns_record.cc", - "src/ipfs_client/logger.cc", "src/ipfs_client/pb_dag.cc", "src/ipfs_client/signing_key_type.cc", ] diff --git a/library/CMakeLists.txt b/library/CMakeLists.txt index 66bdec9b..183dde2b 100644 --- a/library/CMakeLists.txt +++ b/library/CMakeLists.txt @@ -145,13 +145,6 @@ add_custom_target(upload_library WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" ) -if(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) - include(CodeCoverage OPTIONAL RESULT_VARIABLE INCLUDED_COVERAGE) - if(INCLUDED_COVERAGE) - append_coverage_compiler_flags_to_target(ipfs_client_covered) - endif() -endif() - file(GLOB_RECURSE unit_test_sources CONFIGURE_DEPENDS @@ -216,14 +209,34 @@ if(GTest_FOUND AND IN_WORKSPACE) COMMAND "${CMAKE_COMMAND}" -E echo "Tests up-to-date" ) endif() - if(LCOV_PATH) - setup_target_for_coverage_lcov( - NAME cov - DEPENDENCIES run_tests - EXECUTABLE $ - ) - else() - message(WARNING "Cannot provide coverage report without lcov") + if(${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) + include(CodeCoverage OPTIONAL RESULT_VARIABLE INCLUDED_COVERAGE) + if(INCLUDED_COVERAGE) + append_coverage_compiler_flags_to_target(ipfs_client_covered) + append_coverage_compiler_flags_to_target(unit_test_runner) + if(CMAKE_BUILD_TYPE STREQUAL Debug) + target_compile_options(ipfs_client_covered + PRIVATE + ${coverage_debug_flags} + ) + endif() + if(CMAKE_BUILD_TYPE STREQUAL Debug) + target_compile_options(unit_test_runner + PRIVATE + ${coverage_debug_flags} + ) + endif() + endif() + if(LCOV_PATH) + setup_target_for_coverage_lcov( + NAME cov + DEPENDENCIES run_tests + EXECUTABLE $ + EXCLUDE ${unit_test_sources} + ) + else() + message(WARNING "Cannot provide coverage report without lcov") + endif() endif() else() message(WARNING "Not running tests - no gtest available.") diff --git a/library/include/ipfs_client/context_api.h b/library/include/ipfs_client/context_api.h index dc46f903..f269f6bd 100644 --- a/library/include/ipfs_client/context_api.h +++ b/library/include/ipfs_client/context_api.h @@ -79,8 +79,9 @@ class ContextApi : public std::enable_shared_from_this { std::optional> Hash(HashType, ByteView data); virtual std::optional GetGateway(std::size_t index) const = 0; - virtual unsigned GetGatewayRate(std::string_view); + virtual unsigned GetGatewayRate(std::string_view) = 0; virtual void SetGatewayRate(std::string_view, unsigned); + virtual void AddGateway(std::string_view) = 0; protected: std::unordered_map> hashers_; diff --git a/library/include/ipfs_client/gw/block_request_splitter.h b/library/include/ipfs_client/gw/block_request_splitter.h index 0f308a99..e49b88ef 100644 --- a/library/include/ipfs_client/gw/block_request_splitter.h +++ b/library/include/ipfs_client/gw/block_request_splitter.h @@ -3,12 +3,17 @@ #include "requestor.h" +#include +#include + namespace ipfs { class ContextApi; } namespace ipfs::gw { class BlockRequestSplitter final : public Requestor { + std::array recent_provider_requests; + std::size_t old_provider_request = 0UL; HandleOutcome handle(RequestPtr) override; std::string_view name() const override; }; diff --git a/library/include/ipfs_client/ipfs_request.h b/library/include/ipfs_client/ipfs_request.h index eda8bdfa..0b699906 100644 --- a/library/include/ipfs_client/ipfs_request.h +++ b/library/include/ipfs_client/ipfs_request.h @@ -16,14 +16,12 @@ class IpfsRequest { private: std::string path_; Finisher callback_; - std::size_t waiting_ = 0UL; public: IpfsRequest(std::string path, Finisher); SlashDelimited path() const { return SlashDelimited{path_}; } void finish(Response& r); void till_next(std::size_t); - bool ready_after(); void new_path(std::string_view); static std::shared_ptr fromUrl(std::string url, Finisher); diff --git a/library/include/ipfs_client/pb_dag.h b/library/include/ipfs_client/pb_dag.h index d6cb392f..48355152 100644 --- a/library/include/ipfs_client/pb_dag.h +++ b/library/include/ipfs_client/pb_dag.h @@ -1,19 +1,13 @@ #ifndef IPFS_PB_DAG_H_ #define IPFS_PB_DAG_H_ -#if __has_include() -#include -#include -#else -#include "ipfs_client/pb_dag.pb.h" -#include "ipfs_client/unix_fs.pb.h" -#endif - #include "cid.h" #include +#include #include +#include #include namespace ipfs { @@ -47,7 +41,7 @@ class PbDag { PbDag(Cid const& cid, std::string_view bytes); PbDag(PbDag const&); - PbDag& operator=(PbDag const&) = default; +// PbDag& operator=(PbDag const&) = default; PbDag(); ///< Construct an invalid block @@ -78,12 +72,6 @@ class PbDag { std::string const& unparsed() const; ///< Original bytes (with protobuf bits) - /*! - * \brief Accessor for all UnixFS data as a protobuf object - * \deprecated - */ - unix_fs::Data const& fsdata() const { return fsdata_; } - Cid const& cid() const; ///< Getter for Content IDentifier bool cid_matches_data(ContextApi&) const; ///< Basic validation @@ -92,29 +80,12 @@ class PbDag { std::vector binary_hash(ContextApi&, HashType = HashType::INVALID) const; - /*! - * \brief Iterate through the links of this UnixFS node - * \param foo - Called for each link with (name, cid) - * should return converts-to-bool - * name is convertable from std::string const& - * cid is convertable from std::string&& - */ - template - void List(Functor foo) const { - for (auto& link : node_.links()) { - // protobuf uses string for binary data, too - auto hash = ipfs::ByteView{ - reinterpret_cast(link.hash().data()), - link.hash().size()}; - if (!foo(link.name(), LinkCid(hash))) { - break; - } - } - } + void List(std::function) const; + std::optional Fanout() const; private: - pb_dag::PBNode node_; - unix_fs::Data fsdata_; + struct Data; + std::unique_ptr pimpl_; bool valid_ = false; bool fs_node_ = false; std::string mime_ = {}; diff --git a/library/include/ipfs_client/test_context.h b/library/include/ipfs_client/test_context.h index 9216fb0c..9e4e2325 100644 --- a/library/include/ipfs_client/test_context.h +++ b/library/include/ipfs_client/test_context.h @@ -121,7 +121,6 @@ class TestContext final : public ContextApi { GOOGLE_LOG(ERROR) << "TODO\n"; return true; } - std::optional GetGateway(std::size_t) const; std::vector gateways_; boost::asio::io_context& io_; @@ -135,14 +134,19 @@ class TestContext final : public ContextApi { TestContext(boost::asio::io_context& io); ~TestContext() noexcept override; void DnsResults(std::string&, ares_txt_reply&); + std::optional GetGateway(std::size_t) const; + void AddGateway(std::string_view) override; + void SetGatewayRate(std::string_view, unsigned); + unsigned int GetGatewayRate(std::string_view) override; + std::vector::iterator FindGateway(std::string_view); }; -inline std::shared_ptr start_default( - boost::asio::io_context& io) { +inline std::pair, std::shared_ptr> +start_default(boost::asio::io_context& io) { auto api = std::make_shared(io); auto gl = Gateways::DefaultGateways(); auto rtor = gw::default_requestor(gl, {}, api); auto orc = std::make_shared(rtor, api); - return orc; + return {api, orc}; } } // namespace ipfs diff --git a/library/include/vocab/html_escape.h b/library/include/vocab/html_escape.h index 60339ad7..30cdf3af 100644 --- a/library/include/vocab/html_escape.h +++ b/library/include/vocab/html_escape.h @@ -3,7 +3,7 @@ #include -constexpr inline std::string_view html_escape(char& c) { +constexpr std::string_view html_escape(char& c) { switch (c) { case '"': return """; diff --git a/library/src/ipfs_client/context_api.cc b/library/src/ipfs_client/context_api.cc index f58a062d..b9fc82ae 100644 --- a/library/src/ipfs_client/context_api.cc +++ b/library/src/ipfs_client/context_api.cc @@ -20,7 +20,7 @@ auto Self::Hash(HashType ht, ByteView data) return it->second->hash(data); } -unsigned int Self::GetGatewayRate(std::string_view) { - return 120; -} void Self::SetGatewayRate(std::string_view, unsigned int) {} +void Self::AddGateway(std::string_view gw) { + SetGatewayRate(gw, 60U); +} \ No newline at end of file diff --git a/library/src/ipfs_client/crypto/openssl_sha2_256.cc b/library/src/ipfs_client/crypto/openssl_sha2_256.cc index ff5c7a24..162818f9 100644 --- a/library/src/ipfs_client/crypto/openssl_sha2_256.cc +++ b/library/src/ipfs_client/crypto/openssl_sha2_256.cc @@ -6,9 +6,10 @@ using Self = ipfs::crypto::OpensslSha2_256; #if HAS_OPENSSL_SHA +#include #include -Self::~OpensslSha2_256() {} +Self::~OpensslSha2_256() noexcept {} auto Self::hash(ipfs::ByteView data) -> std::optional> { SHA256_CTX ctx; if (1 != SHA256_Init(&ctx)) { diff --git a/library/src/ipfs_client/gateways.cc b/library/src/ipfs_client/gateways.cc index a5b7bf83..31a72ace 100644 --- a/library/src/ipfs_client/gateways.cc +++ b/library/src/ipfs_client/gateways.cc @@ -100,19 +100,26 @@ auto ipfs::Gateways::DefaultGateways() -> GatewayList { } return result; } - return {{"http://localhost:8080/"s, 854}, - {"https://jcsl.hopto.org/"s, 791}, - {"https://ipfs.io/"s, 720}, - {"https://human.mypinata.cloud/"s, 622}, + return {{"http://localhost:8080/"s, 5994}, + {"https://jcsl.hopto.org/"s, 751}, + {"https://ipfs.io/"s, 722}, {"https://gateway.ipfs.io/"s, 606}, - {"https://dweb.link/"s, 373}, - {"https://gateway.pinata.cloud/"s, 324}, - {"https://ipfs.runfission.com/"s, 289}, - {"https://ipfs.joaoleitao.org/"s, 259}, - {"https://nftstorage.link/"s, 175}, - {"https://w3s.link/"s, 91}, - {"https://permaweb.eu.org/"s, 63}, - {"https://ipfs.fleek.co/"s, 27}, + {"https://human.mypinata.cloud/"s, 377}, + {"https://dag.w3s.link/", 235}, + {"https://ipfs.runfission.com/"s, 142}, + {"https://dweb.link/"s, 103}, + {"https://gateway.pinata.cloud/"s, 62}, + {"https://permaweb.eu.org/"s, 60}, + {"https://cesginc.com/", 59}, + {"https://http.f02620.devtty.eu/", 47}, + {"https://ipfs.joaoleitao.org/"s, 46}, + {"https://f010479.twinquasar.io/", 35}, + {"https://ipfs.omnicloudstorage.com:9443/", 28}, + {"http://f02095132.datasetcreators.com/", 23}, + {"https://data.filstorage.io/", 11}, + {"https://nftstorage.link/"s, 7}, + {"https://ipfs.fleek.co/"s, 6}, + {"https://w3s.link/"s, 5}, {"https://hardbin.com/"s, 4}, {"https://ipfs.jpu.jp/"s, 3}, {"https://ipfs.soul-network.com/"s, 2}, diff --git a/library/src/ipfs_client/gateways_unittest.cc b/library/src/ipfs_client/gateways_unittest.cc index 1786f812..273795b6 100644 --- a/library/src/ipfs_client/gateways_unittest.cc +++ b/library/src/ipfs_client/gateways_unittest.cc @@ -8,7 +8,7 @@ TEST(GatewaysTest, DefaultListMeetsBasicGuidelines) { EXPECT_GT(dg.size(), 9U); EXPECT_EQ(dg.at(0).prefix, "http://localhost:8080/"); for (auto i = 1U; i < dg.size(); ++i) { - EXPECT_EQ(dg.at(i).prefix.substr(0, 8), std::string{"https://"}); + EXPECT_EQ(dg.at(i).prefix.substr(0, 4), std::string{"http"}); EXPECT_EQ(dg.at(i).prefix.back(), '/'); // I considered asserting the number of /s and :s, but that _is_ allowed to // change diff --git a/library/src/ipfs_client/gw/block_request_splitter.cc b/library/src/ipfs_client/gw/block_request_splitter.cc index 3ded788f..7769b3ed 100644 --- a/library/src/ipfs_client/gw/block_request_splitter.cc +++ b/library/src/ipfs_client/gw/block_request_splitter.cc @@ -2,6 +2,8 @@ #include +#include + using Self = ipfs::gw::BlockRequestSplitter; std::string_view Self::name() const { @@ -17,14 +19,17 @@ auto Self::handle(ipfs::gw::RequestPtr r) -> HandleOutcome { br->path.clear(); forward(br); } - /* - { + auto it = std::find(recent_provider_requests.begin(), + recent_provider_requests.end(), r->main_param); + if (recent_provider_requests.end() == it) { + auto i = old_provider_request % recent_provider_requests.size(); + recent_provider_requests[i] = r->main_param; + ++old_provider_request; auto pr = std::make_shared(*r); pr->type = Type::Providers; pr->path.clear(); pr->affinity.clear(); forward(pr); } - */ return HandleOutcome::NOT_HANDLED; } \ No newline at end of file diff --git a/library/src/ipfs_client/gw/block_request_splitter_unittest.cc b/library/src/ipfs_client/gw/block_request_splitter_unittest.cc index 5f742282..8ff6eaf5 100644 --- a/library/src/ipfs_client/gw/block_request_splitter_unittest.cc +++ b/library/src/ipfs_client/gw/block_request_splitter_unittest.cc @@ -20,10 +20,7 @@ struct Recording : public g::Requestor { }; } // namespace -TEST(BlockRequestSplitterTest, not_yet_implemented) { - // Until the gateway requestors know how to handle things like Car and - // Providers, Don't bother forwarding them. When you DO make those changes, - // change BRS, which will force you to change this test. +TEST(BlockRequestSplitterTest, split2three) { Tested tested; auto rec = std::make_shared(); tested.or_else(rec); @@ -33,20 +30,19 @@ TEST(BlockRequestSplitterTest, not_yet_implemented) { req->path = "path"; req->parallel = 123; tested.request(req); - EXPECT_EQ(rec->requests_received.size(), 2U); + EXPECT_EQ(rec->requests_received.size(), 3U); EXPECT_TRUE(rec->requests_received.at(0)->type == g::Type::Block) << static_cast(rec->requests_received.at(0)->type); - // EXPECT_TRUE(rec->requests_received.at(1)->type == g::Type::Providers) << - // static_cast(rec->requests_received.at(0)->type); - // EXPECT_TRUE(rec->requests_received.at(2)->type == g::Type::Car) << - // static_cast(rec->requests_received.at(0)->type); EXPECT_EQ(rec->requests_received.at(0)->main_param, "cid"); - // EXPECT_EQ(rec->requests_received.at(1)->main_param, "cid"); - // EXPECT_EQ(rec->requests_received.at(2)->main_param, "cid"); - // EXPECT_EQ(rec->requests_received.at(0)->path, ""); EXPECT_EQ(rec->requests_received.at(0)->path, ""); - EXPECT_EQ(rec->requests_received.at(1)->path, "path"); - EXPECT_EQ(rec->requests_received.at(0)->parallel, 123); - // EXPECT_EQ(rec->requests_received.at(1)->parallel, 123); - // EXPECT_EQ(rec->requests_received.at(2)->parallel, 123); + + EXPECT_TRUE(rec->requests_received.at(1)->type == g::Type::Providers) + << static_cast(rec->requests_received.at(2)->type); + EXPECT_EQ(rec->requests_received.at(1)->main_param, "cid"); + EXPECT_EQ(rec->requests_received.at(1)->path, ""); + + EXPECT_TRUE(rec->requests_received.at(2)->type == g::Type::Car) + << static_cast(rec->requests_received.at(2)->type); + EXPECT_EQ(rec->requests_received.at(2)->main_param, "cid"); + EXPECT_EQ(rec->requests_received.at(2)->path, "path"); } diff --git a/library/src/ipfs_client/gw/default_requestor.cc b/library/src/ipfs_client/gw/default_requestor.cc index e58c4dc4..e9cb18b5 100644 --- a/library/src/ipfs_client/gw/default_requestor.cc +++ b/library/src/ipfs_client/gw/default_requestor.cc @@ -2,7 +2,6 @@ #include #include -#include #include #include #include diff --git a/library/src/ipfs_client/gw/gateway_http_requestor.h b/library/src/ipfs_client/gw/gateway_http_requestor.h deleted file mode 100644 index 8c61bef8..00000000 --- a/library/src/ipfs_client/gw/gateway_http_requestor.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef IPFS_GATEWAY_HTTP_REQUESTOR_H_ -#define IPFS_GATEWAY_HTTP_REQUESTOR_H_ - -#include -#include -#include - -#include -#include -#include - -namespace ipfs::gw { -class GatewayHttpRequestor final : public Requestor { - std::string prefix_; - int strength_; - std::unordered_map seen_; - std::set aff_good_, aff_bad_; - std::set typ_good_, typ_bad_; - int pending_ = 0; - int extra_seconds_ = 0; - - HandleOutcome handle(RequestPtr) override; - std::string_view name() const override; - int target(GatewayRequest const&) const; - - public: - GatewayHttpRequestor(std::string gateway_prefix, - int strength, - std::shared_ptr); - ~GatewayHttpRequestor() noexcept override; -}; -} // namespace ipfs::gw - -#endif // IPFS_GATEWAY_HTTP_REQUESTOR_H_ diff --git a/library/src/ipfs_client/gw/gateway_request.cc b/library/src/ipfs_client/gw/gateway_request.cc index a4335a3c..8d05f34f 100644 --- a/library/src/ipfs_client/gw/gateway_request.cc +++ b/library/src/ipfs_client/gw/gateway_request.cc @@ -1,5 +1,6 @@ #include +#include #include #include #include @@ -106,15 +107,15 @@ std::string_view Self::accept() const { short Self::timeout_seconds() const { switch (type) { case Type::DnsLink: - return 32; + return 16; case Type::Block: - return 64; + return 32; case Type::Providers: - return 128; - case Type::Car: - return 256; + return 33; case Type::Ipns: - return 512; + return 64; + case Type::Car: + return 65; case Type::Identity: case Type::Zombie: return 0; @@ -185,11 +186,11 @@ std::optional Self::max_response_size() const { return 0; case Type::Providers: // This one's tricky. - // One could easily guess a pracitical limit to the size of a Peer, - // and the spec says it SHOULD be limited to 100 peers. + // One could easily guess a practical limit to the size of a Peer's + // json, and the spec says it SHOULD be limited to 100 peers. // But there's no guaranteed limits. A peer could have an unlimited // number of multiaddrs. And they're allowed to throw in arbitrary - // fields I'm supposed to ignore. So in theory it could be infinitely + // fields I'm supposed to ignore. So in theory it could be arbitrarily // large. return std::nullopt; } @@ -297,7 +298,7 @@ bool Self::RespondSuccessfully(std::string_view bytes, break; } case Type::Providers: - LOG(WARNING) << "TODO - handle responses to providers requests."; + providers::ProcessResponse(bytes, *api); break; case Type::Zombie: LOG(WARNING) << "Responding to a zombie is ill-advised."; @@ -306,13 +307,15 @@ bool Self::RespondSuccessfully(std::string_view bytes, LOG(ERROR) << "TODO " << static_cast(type); } if (success) { + LOG(INFO) << "Request " << this->debug_string() + << " was successful. Calling hooks and finishing."; for (auto& hook : bytes_received_hooks) { hook(bytes); } bytes_received_hooks.clear(); orchestrator_->build_response(dependent); + type = Type::Zombie; } - type = Type::Zombie; return success; } void Self::Hook(std::function f) { @@ -327,3 +330,5 @@ bool Self::PartiallyRedundant() const { } return orchestrator_->has_key(main_param); } + +#include diff --git a/library/src/ipfs_client/gw/gateway_state.cc b/library/src/ipfs_client/gw/gateway_state.cc index 6e0f5951..8064960b 100644 --- a/library/src/ipfs_client/gw/gateway_state.cc +++ b/library/src/ipfs_client/gw/gateway_state.cc @@ -41,12 +41,14 @@ unsigned int& Self::current_bucket() { return sent_counts[last_hist_update % sent_counts.size()]; } void Self::hit(GatewayRequest const& req) { - std::clog << "GatewayState::hit " << static_cast(this) << ' ' - << static_cast(&req) << std::endl; request_type_success.at(static_cast(req.type))++; affinity_success[req.affinity]++; } bool Self::miss(GatewayRequest const& req) { request_type_success.at(static_cast(req.type))--; + slowness++; return affinity_success[req.affinity]-- >= 0; } +void Self::timed_out() { + slowness += 10; +} \ No newline at end of file diff --git a/library/src/ipfs_client/gw/gateway_state.h b/library/src/ipfs_client/gw/gateway_state.h index 7adf7072..4d21c909 100644 --- a/library/src/ipfs_client/gw/gateway_state.h +++ b/library/src/ipfs_client/gw/gateway_state.h @@ -18,6 +18,7 @@ class GatewayState { std::size_t total_sent = 0UL; std::time_t last_hist_update; unsigned& current_bucket(); + long slowness = 0; public: GatewayState(); @@ -28,6 +29,8 @@ class GatewayState { void just_sent_one(); void hit(GatewayRequest const&); bool miss(GatewayRequest const&); + void timed_out(); + long extra_ms() { return slowness; } }; } // namespace ipfs::gw diff --git a/library/src/ipfs_client/gw/multi_gateway_requestor.cc b/library/src/ipfs_client/gw/multi_gateway_requestor.cc index 2d1aa39f..5cb4a68d 100644 --- a/library/src/ipfs_client/gw/multi_gateway_requestor.cc +++ b/library/src/ipfs_client/gw/multi_gateway_requestor.cc @@ -32,9 +32,11 @@ bool Self::Process(RequestPtr const& req) { return false; } auto state_iter = state_.begin(); - auto config_idx = 0UL; - std::vector> candidates; + auto config_idx = 0U; + using Candidate = std::tuple; + std::vector candidates; auto bored = 0U; + Candidate over_rate = {0, {}, nullptr}; while (auto gw = api_->GetGateway(config_idx++)) { if (state_iter == state_.end() || state_iter->first > gw->prefix) { VLOG(2) << "A new gateway has entered the chat: " << gw->prefix << '=' @@ -55,9 +57,12 @@ bool Self::Process(RequestPtr const& req) { // VLOG(2) << "Not going to resend " << req->debug_string() << " to " // << gw->prefix << " as it has already failed us."; } else if (state_iter->second.over_rate(gw->rate)) { - // VLOG(2) << "Not considering " << gw->prefix - // << " at the moment as it's over its rate limit " << - // gw->rate; + auto score = state_iter->second.score(*req, gw->rate); + if (std::get<0>(over_rate) <= score) { + VLOG(2) << gw->prefix + << " may be over-rate, but keep it as a fallback."; + over_rate = std::make_tuple(score, gw->prefix, &(state_iter->second)); + } } else { candidates.push_back({state_iter->second.score(*req, gw->rate), gw->prefix, &(state_iter->second)}); @@ -67,13 +72,18 @@ bool Self::Process(RequestPtr const& req) { } std::advance(state_iter, 1); } + if (std::get<2>(over_rate)) { + if (candidates.empty()) { + LOG(INFO) << "Overburdened."; + } + candidates.push_back(over_rate); + } if (candidates.empty() && config_idx <= req->failures.size()) { - LOG(ERROR) << "Request has failed on every gateway I have:" - << req->debug_string(); + LOG(ERROR) << "Run out of gateways to send this to:" << req->debug_string(); forward(req); return false; } - auto to_send = std::max(bored / 2, 3U); + auto to_send = std::max(bored / 3UL, 2UL); std::sort(candidates.begin(), candidates.end(), std::greater{}); for (auto& [score, prefix, state] : candidates) { DoSend(req, prefix, *state); @@ -92,6 +102,9 @@ void Self::DoSend(RequestPtr req, std::string const& gw, GatewayState& state) { << req->debug_string(); return; } + if (state.extra_ms()) { + desc->timeout_seconds += state.extra_ms() / 1000L + 1L; + } auto timeout_threshold = ch::system_clock::now() + ch::seconds(desc->timeout_seconds ? desc->timeout_seconds : 300) - @@ -114,6 +127,7 @@ void Self::HandleResponse(HttpRequestDescription const& desc, bool timed_out) { if (req->type == Type::Zombie || (req->PartiallyRedundant() && req->type == Type::Block)) { + VLOG(1) << "Request has finished:" << req->debug_string(); return; } auto i = state_.find(gw); @@ -124,37 +138,50 @@ void Self::HandleResponse(HttpRequestDescription const& desc, LOG(ERROR) << "No content-type header?"; } else if (desc.accept.size() && ct.find(desc.accept) == std::string::npos) { - LOG(WARNING) << "Requested with Accept: " << desc.accept - << " but received response with content-type: " << ct; - } else if (!req->RespondSuccessfully(body, api_)) { - LOG(ERROR) << "Got an unuseful response from " << gw - << " forwarding request " << req->debug_string() - << " to next requestor."; + VLOG(2) << "Requested with Accept: " << desc.accept + << " but received response with content-type: " << ct; + return; + } + if (!req->RespondSuccessfully(body, api_)) { + LOG(ERROR) << "Got an unuseful response from " << gw << " for request " + << req->debug_string(); } else { + LOG(INFO) << "Response from " << gw << " to " << req->debug_string() + << " was successful & useful - progress made."; if (state_.end() != i) { i->second.hit(*req); } auto rpm = api_->GetGatewayRate(gw); + LOG(INFO) << "Rate for " << gw << " _WAS_ " << rpm + << " and is about to go up."; if (rpm < 15) { - api_->SetGatewayRate(gw, rpm * 2 + 1); - } else { - api_->SetGatewayRate(gw, rpm + 1); + rpm *= 2; } + rpm += 2; + api_->SetGatewayRate(gw, rpm); return; } } auto rpm = api_->GetGatewayRate(gw); if (status == 408 || status == 504 || status == 429 || status == 110 || timed_out) { - VLOG(1) << gw << " timed out."; - if (rpm > 9) { - api_->SetGatewayRate(gw, rpm - 4); - } else if (rpm) { - api_->SetGatewayRate(gw, 0U); + LOG(ERROR) << gw << " timed out on request " << req->debug_string(); + if (req->type == Type::Block) { + if (state_.end() != i) { + i->second.timed_out(); + } + if (rpm > 60U) { + api_->SetGatewayRate(gw, rpm - 9); + } else if (rpm) { + api_->SetGatewayRate(gw, rpm - 1); + } } + } else { + VLOG(1) << "Gateway " << gw << " failed request: " << req->debug_string(); + req->failures.insert(gw); } - req->failures.insert(gw); - if (state_.end() != i && i->second.miss(*req) && rpm) { + if (state_.end() != i && i->second.miss(*req) && rpm && + req->type == Type::Block) { api_->SetGatewayRate(gw, rpm - 1); } Process(req); diff --git a/library/src/ipfs_client/gw/providers_response.cc b/library/src/ipfs_client/gw/providers_response.cc new file mode 100644 index 00000000..26ba7b69 --- /dev/null +++ b/library/src/ipfs_client/gw/providers_response.cc @@ -0,0 +1,86 @@ +#include "providers_response.h" + +#include +#include + +#include + +#include "log_macros.h" + +using namespace std::literals; + +namespace prov = ipfs::providers; + +namespace { +std::string MultiaddrToGatewayPrefix(ipfs::SlashDelimited ma) { + auto addr_proto = ma.pop(); + VLOG(2) + << "Protocol expected to be one of ip4|ip6|dnsaddr|dns|dns4|dns6 , is:" + << addr_proto; + auto host = ma.pop(); + auto tcp = ma.pop(); + DCHECK_EQ(tcp, "tcp"); + auto port = ma.pop(); + auto app_proto = ma.pop(); + DCHECK_EQ(app_proto.substr(0, 4), "http"); + std::string rv{app_proto}; + rv.append("://").append(host).append(":").append(port).append("/").append( + ma.to_view()); + return rv; +} + +void ParseProvider(ipfs::DagJsonValue const& provider, ipfs::ContextApi& api) { + auto proto = provider["Protocol"sv]; + if (!proto) { + // Perhaps Scheme == peer. Not an error, but not used as of now. + return; + } + if (auto proto_name = proto->get_if_string()) { + if (proto_name.value() != "transport-ipfs-gateway-http") { + // Perhaps transport-bitswap or transport-graphsync-filecoinv1. + // Not an error, but not used here yet. + return; + } + } else { + LOG(ERROR) << ".Providers[x].Protocol was not a string?"; + return; + } + auto addrs = provider["Addrs"]; + if (!addrs) { + LOG(WARNING) << "Gateway with no addrs"; + return; + } + auto handle_addr = [&api](ipfs::DagJsonValue const& addr) { + if (auto s = addr.get_if_string()) { + auto gw_pre = MultiaddrToGatewayPrefix(ipfs::SlashDelimited{s.value()}); + LOG(INFO) << "'" << *s << "' -> '" << gw_pre << "'."; + api.AddGateway(gw_pre); + } else { + LOG(ERROR) << ".Providers[x].Addrs[x] is not a string"; + } + }; + if (!addrs->iterate_list(handle_addr)) { + LOG(ERROR) << ".Providers[x].Addrs is not a list"; + } +} +} // namespace + +void prov::ProcessResponse(std::string_view json_str, ContextApi& api) { + auto parsed = api.ParseJson(json_str); + if (!parsed) { + LOG(ERROR) + << "Response to routing/v1 providers request did not parse as JSON: " + << json_str; + return; + } + auto list = (*parsed)["Providers"]; + if (!list) { + LOG(ERROR) << "Response to routing/v1 providers request did not contain a " + "top-level key 'Providers': " + << json_str; + return; + } + if (!list->iterate_list([&api](auto& p) { ParseProvider(p, api); })) { + LOG(ERROR) << ".Providers was not a list."; + } +} diff --git a/library/src/ipfs_client/gw/providers_response.h b/library/src/ipfs_client/gw/providers_response.h new file mode 100644 index 00000000..5f261390 --- /dev/null +++ b/library/src/ipfs_client/gw/providers_response.h @@ -0,0 +1,14 @@ +#ifndef IPFS_CHROMIUM_PROVIDERS_RESPONSE_H +#define IPFS_CHROMIUM_PROVIDERS_RESPONSE_H + +#include + +namespace ipfs { +class ContextApi; +} + +namespace ipfs::providers { +void ProcessResponse(std::string_view json_str, ContextApi& api); +} + +#endif // IPFS_CHROMIUM_PROVIDERS_RESPONSE_H diff --git a/library/src/ipfs_client/gw/terminating_requestor.cc b/library/src/ipfs_client/gw/terminating_requestor.cc index 791ffd84..dd66c712 100644 --- a/library/src/ipfs_client/gw/terminating_requestor.cc +++ b/library/src/ipfs_client/gw/terminating_requestor.cc @@ -15,9 +15,10 @@ auto Self::handle(ipfs::gw::RequestPtr r) -> HandleOutcome { } else if (r->parallel) { return HandleOutcome::PENDING; } else { - VLOG(2) << "Out of options, giving up on gateway request " - << r->debug_string(); + LOG(ERROR) << "Out of options, giving up on gateway request " + << r->debug_string(); definitive_failure(r); + r->type = Type::Zombie; return HandleOutcome::DONE; } } diff --git a/library/src/ipfs_client/ipfs_request.cc b/library/src/ipfs_client/ipfs_request.cc index 90222a0b..a7367067 100644 --- a/library/src/ipfs_client/ipfs_request.cc +++ b/library/src/ipfs_client/ipfs_request.cc @@ -19,24 +19,13 @@ std::shared_ptr Self::fromUrl(std::string url, ipfs::IpfsRequest::Finisher return std::make_shared(std::move(url), std::move(f)); } -void Self::till_next(std::size_t w) { - waiting_ = w; -} void Self::finish(ipfs::Response& r) { - if (waiting_) { - if (--waiting_) { - return; - } - } callback_(*this, r); // TODO - cancel other gw req pointing into this callback_ = [](auto& q, auto&) { VLOG(2) << "IPFS request " << q.path().pop_all() << " satisfied multiply"; }; } -bool Self::ready_after() { - return waiting_ == 0 || 0 == --waiting_; -} void Self::new_path(std::string_view sv) { path_.assign(sv); } \ No newline at end of file diff --git a/library/src/ipfs_client/ipld/dag_node.cc b/library/src/ipfs_client/ipld/dag_node.cc index 0abe598b..d6ffd400 100644 --- a/library/src/ipfs_client/ipld/dag_node.cc +++ b/library/src/ipfs_client/ipld/dag_node.cc @@ -120,8 +120,8 @@ std::shared_ptr Node::fromBlock(ipfs::PbDag const& block) { result = std::make_shared(); break; case PbDag::Type::HAMTShard: - if (block.fsdata().has_fanout()) { - result = std::make_shared(block.fsdata().fanout()); + if (auto fanout = block.Fanout()) { + result = std::make_shared(fanout.value()); } else { result = std::make_shared(); } diff --git a/library/src/ipfs_client/ipns_record_unittest.cc b/library/src/ipfs_client/ipns_record_unittest.cc index 182d9803..f8135196 100644 --- a/library/src/ipfs_client/ipns_record_unittest.cc +++ b/library/src/ipfs_client/ipns_record_unittest.cc @@ -76,7 +76,8 @@ struct Api final : public i::ContextApi { std::optional GetGateway(std::size_t) const { return std::nullopt; } - + unsigned GetGatewayRate(std::string_view) { return 120U; } + void AddGateway(std::string_view) {} virtual ~Api() noexcept {} }; } // namespace diff --git a/library/src/ipfs_client/orchestrator.cc b/library/src/ipfs_client/orchestrator.cc index 45a4bec9..8af67bab 100644 --- a/library/src/ipfs_client/orchestrator.cc +++ b/library/src/ipfs_client/orchestrator.cc @@ -19,7 +19,8 @@ Self::Orchestrator(std::shared_ptr requestor, } void Self::build_response(std::shared_ptr req) { - if (!req || !req->ready_after()) { + if (!req) { + LOG(ERROR) << "Can't build a response to NULL."; return; } auto req_path = req->path(); @@ -31,8 +32,8 @@ void Self::build_response(std::shared_ptr req) { build_response(req); } } else { - VLOG(2) << "Requesting root " << affinity << " resolve path " - << req_path.to_string(); + LOG(INFO) << "Requesting root " << affinity << " resolve path " + << req_path.to_string(); auto root = it->second->rooted(); if (root != it->second) { it->second = root; @@ -91,7 +92,6 @@ void Self::from_tree(std::shared_ptr req, req->finish(Response::IMMUTABLY_GONE); } else { auto& mps = std::get(result).ipfs_abs_paths_; - req->till_next(mps.size()); for (auto& mp : mps) { VLOG(2) << "Attempt to resolve " << relative_path << " for " << req->path() << " leads to request for " << mp; diff --git a/library/src/ipfs_client/orchestrator_unittest.cc b/library/src/ipfs_client/orchestrator_unittest.cc index a0578c03..d2d87db8 100644 --- a/library/src/ipfs_client/orchestrator_unittest.cc +++ b/library/src/ipfs_client/orchestrator_unittest.cc @@ -75,6 +75,8 @@ struct MockApi final : public ipfs::ContextApi { cbors.erase(cbors.begin()); return std::move(r); } + unsigned GetGatewayRate(std::string_view) { return 120U; } + void AddGateway(std::string_view) {} }; struct TestRequestor final : public ig::Requestor { TestRequestor() { api_ = std::make_shared(); } diff --git a/library/src/ipfs_client/pb_dag.cc b/library/src/ipfs_client/pb_dag.cc index 86cbb42d..dcb859a9 100644 --- a/library/src/ipfs_client/pb_dag.cc +++ b/library/src/ipfs_client/pb_dag.cc @@ -6,7 +6,13 @@ #include -#include +#if __has_include() +#include +#include +#else +#include "ipfs_client/pb_dag.pb.h" +#include "ipfs_client/unix_fs.pb.h" +#endif namespace { std::string get_bytes(std::string const& s) { @@ -57,21 +63,28 @@ std::pair InitBlock(ipfs::MultiCodec c, } } // namespace -ipfs::PbDag::PbDag(Cid const& c, std::istream& s) : cid_(c) { - std::tie(valid_, fs_node_) = InitBlock(c.codec(), s, node_, fsdata_); +struct ipfs::PbDag::Data { + pb_dag::PBNode node_; + unix_fs::Data fsdata_; +}; + +ipfs::PbDag::PbDag(Cid const& c, std::istream& s) + : pimpl_{std::make_unique()}, cid_(c) { + std::tie(valid_, fs_node_) = + InitBlock(c.codec(), s, pimpl_->node_, pimpl_->fsdata_); } ipfs::PbDag::PbDag(Cid const& c, ByteView s) - : cid_(c), + : pimpl_{std::make_unique()}, + cid_(c), original_bytes_(reinterpret_cast(s.data()), s.size()) { std::tie(valid_, fs_node_) = - InitBlock(c.codec(), original_bytes_, node_, fsdata_); + InitBlock(c.codec(), original_bytes_, pimpl_->node_, pimpl_->fsdata_); } ipfs::PbDag::PbDag(Cid const& c, std::string_view s) : PbDag(c, as_bytes(s)) {} ipfs::PbDag::PbDag(PbDag const& rhs) - : node_(rhs.node_), - fsdata_(rhs.fsdata_), + : pimpl_(std::make_unique(*rhs.pimpl_)), valid_(rhs.valid_), fs_node_(rhs.fs_node_), mime_(rhs.mime_), @@ -94,28 +107,29 @@ auto ipfs::PbDag::type() const -> Type { return Type::NonFs; } if (is_file()) { - if (fsdata_.blocksizes_size() > 0) { + if (pimpl_->fsdata_.blocksizes_size() > 0) { return Type::File; } else { return Type::FileChunk; } } - if (fsdata_.type()) { - return static_cast(fsdata_.type()); + if (pimpl_->fsdata_.type()) { + return static_cast(pimpl_->fsdata_.type()); } return Type::Invalid; } bool ipfs::PbDag::is_file() const { - return valid() && fs_node_ && fsdata_.type() == unix_fs::Data_DataType_File; + return valid() && fs_node_ && + pimpl_->fsdata_.type() == unix_fs::Data_DataType_File; } std::string const& ipfs::PbDag::chunk_data() const { - return fsdata_.data(); + return pimpl_->fsdata_.data(); } std::string const& ipfs::PbDag::unparsed() const { - return node_.data(); + return pimpl_->node_.data(); } auto ipfs::PbDag::cid() const -> Cid const& { @@ -168,6 +182,23 @@ std::vector ipfs::PbDag::binary_hash(ContextApi& api, } } +void ipfs::PbDag::List( + std::function foo) const { + for (auto& link : pimpl_->node_.links()) { + // protobuf uses string for binary data, too + auto hash = as_bytes(link.hash()); + if (!foo(link.name(), LinkCid(hash))) { + break; + } + } +} +std::optional ipfs::PbDag::Fanout() const { + if (pimpl_ && fs_node_ && pimpl_->fsdata_.has_fanout()) { + return pimpl_->fsdata_.fanout(); + } + return std::nullopt; +} + std::ostream& operator<<(std::ostream& s, ipfs::PbDag::Type t) { switch (t) { case ipfs::PbDag::Type::Raw: diff --git a/library/src/ipfs_client/test_context.cc b/library/src/ipfs_client/test_context.cc index 56c885ea..2f0da360 100644 --- a/library/src/ipfs_client/test_context.cc +++ b/library/src/ipfs_client/test_context.cc @@ -110,30 +110,32 @@ void Self::CAresProcess() { io_.post([this]() { CAresProcess(); }); } } - +namespace http = boost::beast::http; class HttpSession : public std::enable_shared_from_this { using tcp = boost::asio::ip::tcp; + boost::asio::io_context& ioc_; + boost::asio::strand strand_; tcp::resolver resolver_; boost::asio::ssl::context& ssl_ctx_; boost::beast::ssl_stream stream_; boost::beast::flat_buffer buffer_; // (Must persist between reads) - boost::beast::http::request req_; + http::request req_; ipfs::ContextApi::HttpCompleteCallback cb_; int expiry_seconds_ = 91; std::string host_, port_, target_; ipfs::HttpRequestDescription desc_; static std::map resolutions_; std::string parsed_host_; - boost::beast::http::response_parser - response_parser_; - std::optional> - res_; + http::response_parser response_parser_; + std::optional> res_; + std::shared_ptr prev; void fail(boost::beast::error_code ec, char const* what) { - GOOGLE_LOG(WARNING) << what << ": " << ec.value() << ' ' << ec.message() - << " URL:" << desc_.url << " HOST:" << host_ - << " PORT:" << port_ << " TARGET:" << target_; - cb_(500, "", [](auto) { return std::string{}; }); + GOOGLE_LOG(INFO) << what << ": " << ec.value() << ' ' << ec.message() + << " URL:" << desc_.url << " HOST:" << host_ + << " PORT:" << port_ << " TARGET:" << target_; + auto status = ec.value() == 1 ? 408 : 500; + cb_(status, "", [](auto) { return std::string{}; }); } std::string parse_url() { ipfs::SlashDelimited ss{desc_.url}; @@ -163,9 +165,11 @@ class HttpSession : public std::enable_shared_from_this { boost::asio::ssl::context& ssc, ipfs::HttpRequestDescription& desc, ipfs::ContextApi::HttpCompleteCallback cb) - : resolver_(boost::asio::make_strand(ioc)), + : ioc_{ioc}, + strand_{boost::asio::make_strand(ioc)}, + resolver_(strand_), ssl_ctx_(ssc), - stream_(boost::asio::make_strand(ioc), ssc), + stream_(strand_, ssc), cb_{cb}, desc_{desc} { if (auto sz = desc_.max_response_size) { @@ -192,24 +196,29 @@ class HttpSession : public std::enable_shared_from_this { } req_.version(11); - req_.method(boost::beast::http::verb::get); + req_.method(http::verb::get); req_.target(target_); - req_.set(boost::beast::http::field::host, parsed_host_); + req_.set(http::field::host, parsed_host_); if (desc_.accept.size()) { // std::clog << "Setting Accept: " << desc_.accept << '\n'; req_.set("Accept", desc_.accept); } + extend_time(); + auto me = shared_from_this(); if (resolution().empty()) { GOOGLE_LOG(DEBUG) << "Starting " << desc_.url << " with a host resolution of " << host_ << ':' << port_; - extend_time(); resolver_.async_resolve( host_, port_, - boost::beast::bind_front_handler(&HttpSession::on_resolve, - shared_from_this())); + boost::beast::bind_front_handler(&HttpSession::on_resolve, me)); } else { - on_resolve({}, resolution()); + auto do_connect = [me]() { + boost::beast::get_lowest_layer(me->stream_) + .async_connect(me->resolution(), boost::beast::bind_front_handler( + &HttpSession::on_connect, me)); + }; + boost::asio::defer(strand_, do_connect); } } void on_resolve(boost::beast::error_code ec, @@ -219,10 +228,9 @@ class HttpSession : public std::enable_shared_from_this { resolution() = results; for (auto& ep : results) { GOOGLE_LOG(DEBUG) << desc_.url << " Resolved " << host_ - << ", now connecting to " - << req_[boost::beast::http::field::host] << " aka " - << ep.host_name() << ':' << ep.service_name() << " for " - << target_; + << ", now connecting to " << req_[http::field::host] + << " aka " << ep.host_name() << ':' << ep.service_name() + << " for " << target_; } extend_time(); boost::beast::get_lowest_layer(stream_).async_connect( @@ -244,10 +252,9 @@ class HttpSession : public std::enable_shared_from_this { shared_from_this())); } else { GOOGLE_LOG(DEBUG) << "Skipping the SSL handshake because port=" << port_; - boost::beast::http::async_write( - boost::beast::get_lowest_layer(stream_), req_, - boost::beast::bind_front_handler(&HttpSession::on_write, - shared_from_this())); + http::async_write(boost::beast::get_lowest_layer(stream_), req_, + boost::beast::bind_front_handler(&HttpSession::on_write, + shared_from_this())); } } bool use_ssl() const { return port_ == "443" || port_ == "https"; } @@ -261,10 +268,9 @@ class HttpSession : public std::enable_shared_from_this { if (ec) return fail(ec, "handshake"); extend_time(); - boost::beast::http::async_write( - stream_, req_, - boost::beast::bind_front_handler(&HttpSession::on_write, - shared_from_this())); + http::async_write(stream_, req_, + boost::beast::bind_front_handler(&HttpSession::on_write, + shared_from_this())); } void on_write(boost::beast::error_code ec, std::size_t) { @@ -273,15 +279,14 @@ class HttpSession : public std::enable_shared_from_this { GOOGLE_LOG(TRACE) << desc_.url << " request written."; extend_time(); if (use_ssl()) { - boost::beast::http::async_read( - stream_, buffer_, response_parser_, - boost::beast::bind_front_handler(&HttpSession::on_read, - shared_from_this())); + http::async_read(stream_, buffer_, response_parser_, + boost::beast::bind_front_handler(&HttpSession::on_read, + shared_from_this())); } else { - boost::beast::http::async_read( - boost::beast::get_lowest_layer(stream_), buffer_, response_parser_, - boost::beast::bind_front_handler(&HttpSession::on_read, - shared_from_this())); + http::async_read(boost::beast::get_lowest_layer(stream_), buffer_, + response_parser_, + boost::beast::bind_front_handler(&HttpSession::on_read, + shared_from_this())); } } @@ -310,29 +315,50 @@ class HttpSession : public std::enable_shared_from_this { } } if (res_->result_int() / 100 == 3) { - auto loc = (*res_)[boost::beast::http::field::location]; - if (loc.size()) { - desc_.url = loc; - close(); + auto loc = (*res_)[http::field::location]; + if (loc.empty()) { + LOG(ERROR) << "No Location header given for a redirect response."; + } else if (redirect_count(loc) >= 0xFF) { + LOG(ERROR) << "Too many redirects!! Giving up on " << loc << '\n'; + } else { GOOGLE_LOG(WARNING) << "Redirecting to " << loc << " aka " << desc_.url; - res_ = boost::beast::http::response{}; - req_.set(boost::beast::http::field::host, parse_url()); - req_.target(target_); - on_resolve({}, resolution()); - return; + auto desc = desc_; + desc.url = loc; + auto next = std::make_shared(ioc_, ssl_ctx_, desc, cb_); + next->prev = shared_from_this(); + next->run(); } + close(); + return; } - auto content_type = (*res_)[boost::beast::http::field::content_type]; + auto content_type = (*res_)[http::field::content_type]; + auto me = shared_from_this(); + auto respond = [me, get_hdr]() { + auto& r = *(me->res_); + me->cb_(r.result_int(), r.body(), get_hdr); + }; if (content_type.empty() || boost::algorithm::icontains(content_type, desc_.accept)) { - cb_(res_->result_int(), res_->body(), get_hdr); + LOG(TRACE) << "Got " << content_type; } else { - GOOGLE_LOG(INFO) << desc_.url - << " response incorrect content type: " << content_type - << " != " << desc_.accept; + LOG(INFO) << desc_.url + << " response incorrect content type: " << content_type + << " != " << desc_.accept; + res_->result(501); } + boost::asio::defer(strand_, respond); close(); } + int redirect_count(std::string_view comp) { + if (comp == desc_.url) { + LOG(ERROR) << "Redirect loop on " << comp; + return 0xFF; + } else if (!prev) { + return 1; + } else { + return 1 + prev->redirect_count(comp); + } + } void close() { if (use_ssl()) { stream_.async_shutdown(boost::beast::bind_front_handler( @@ -345,11 +371,12 @@ class HttpSession : public std::enable_shared_from_this { namespace E = boost::asio::error; switch (ec.value()) { case 0: + case 1: case 2: case ENOTCONN: return; default: - return fail(ec, "shutdown"); + fail(ec, "shutdown"); } } }; @@ -368,5 +395,37 @@ std::optional Self::GetGateway(std::size_t index) const { } return std::nullopt; } - +void Self::AddGateway(std::string_view prefix) { + auto it = FindGateway(prefix); + if (gateways_.end() != it && it->prefix == prefix) { + it->rate++; + LOG(INFO) << "Re-found existing gateway. Bumping it: " << prefix << '=' + << it->rate; + } else { + LOG(INFO) << "Adding new gateway:" << prefix; + gateways_.insert(it, GatewaySpec{std::string{prefix}, 60U}); + DCHECK( + std::is_sorted(gateways_.begin(), gateways_.end(), + [](auto& a, auto& b) { return a.prefix < b.prefix; })); + } +} +void Self::SetGatewayRate(std::string_view prefix, unsigned int rate) { + auto it = FindGateway(prefix); + if (gateways_.end() != it && it->prefix == prefix) { + LOG(INFO) << "Set gateway rate for " << prefix << " to " << rate; + it->rate = rate; + } else { + LOG(INFO) << "Attempted to set the rate of an unknown gateway " << prefix + << " to " << rate; + } +} +unsigned Self::GetGatewayRate(std::string_view prefix) { + auto i = FindGateway(prefix); + return gateways_.end() == i ? 60U : i->rate; +} +auto Self::FindGateway(std::string_view prefix) + -> std::vector::iterator { + auto cmp = [](auto& g, std::string_view p) { return g.prefix < p; }; + return std::lower_bound(gateways_.begin(), gateways_.end(), prefix, cmp); +} #endif diff --git a/library/src/vocab/html_escape_unittest.cc b/library/src/vocab/html_escape_unittest.cc index 151fb60c..5be98ccf 100644 --- a/library/src/vocab/html_escape_unittest.cc +++ b/library/src/vocab/html_escape_unittest.cc @@ -1,7 +1,7 @@ -#include - #include +#include + using namespace std::literals; TEST(HTMLEscapeTest, CommonForbiddenCharacters) { diff --git a/test_data/blocks/QmR6d4PC2FKNG46Gew68Try6cmXDkkxKHo21U64yUqZyKu b/test_data/blocks/QmR6d4PC2FKNG46Gew68Try6cmXDkkxKHo21U64yUqZyKu deleted file mode 100644 index c25b9e39..00000000 --- a/test_data/blocks/QmR6d4PC2FKNG46Gew68Try6cmXDkkxKHo21U64yUqZyKu +++ /dev/null @@ -1,2 +0,0 @@ - -˜Uf6 Uf7 Uf8 Uf9 Ug0 Ug1 Ug2 Ug3 Ug4 Ug5 Ug6 Ug7 Ug8 Ug9 Uh0 Uh1 Uh2 Uh3 Uh4 Uh5 Uh6 Uh7 Uh8 Uh9 Ui0 Ui1 Ui2 Ui3 Ui4 Ui5 Ui6 Ui7 Ui8 Ui9 Uj0 Uj1  \ No newline at end of file diff --git a/test_data/blocks/QmR9U6TzmfpRuvCHSwR1fbdjYXLAGmdTnTQYLYN5S1jKy9 b/test_data/blocks/QmR9U6TzmfpRuvCHSwR1fbdjYXLAGmdTnTQYLYN5S1jKy9 deleted file mode 100644 index 511da664..00000000 --- a/test_data/blocks/QmR9U6TzmfpRuvCHSwR1fbdjYXLAGmdTnTQYLYN5S1jKy9 +++ /dev/null @@ -1,2 +0,0 @@ - -˜Mb2 Mb3 Mb4 Mb5 Mb6 Mb7 Mb8 Mb9 Mc0 Mc1 Mc2 Mc3 Mc4 Mc5 Mc6 Mc7 Mc8 Mc9 Md0 Md1 Md2 Md3 Md4 Md5 Md6 Md7 Md8 Md9 Me0 Me1 Me2 Me3 Me4 Me5 Me6 Me7  \ No newline at end of file diff --git a/test_data/blocks/QmRJm8JS1FjtHvG4iaXKW14xuZUfoyAJLpuhGUK1VSS8Bt b/test_data/blocks/QmRJm8JS1FjtHvG4iaXKW14xuZUfoyAJLpuhGUK1VSS8Bt deleted file mode 100644 index df97d2af..00000000 --- a/test_data/blocks/QmRJm8JS1FjtHvG4iaXKW14xuZUfoyAJLpuhGUK1VSS8Bt +++ /dev/null @@ -1,2 +0,0 @@ - -˜Ok4 Ok5 Ok6 Ok7 Ok8 Ok9 Ol0 Ol1 Ol2 Ol3 Ol4 Ol5 Ol6 Ol7 Ol8 Ol9 Om0 Om1 Om2 Om3 Om4 Om5 Om6 Om7 Om8 Om9 On0 On1 On2 On3 On4 On5 On6 On7 On8 On9  \ No newline at end of file diff --git a/test_data/blocks/QmRRF8bLEMzjgnUZBRMAkyUyZUQax2PJBKgDuSzqW8CVT4 b/test_data/blocks/QmRRF8bLEMzjgnUZBRMAkyUyZUQax2PJBKgDuSzqW8CVT4 deleted file mode 100644 index 02d19da4..00000000 --- a/test_data/blocks/QmRRF8bLEMzjgnUZBRMAkyUyZUQax2PJBKgDuSzqW8CVT4 +++ /dev/null @@ -1,2 +0,0 @@ - -˜Db2 Db3 Db4 Db5 Db6 Db7 Db8 Db9 Dc0 Dc1 Dc2 Dc3 Dc4 Dc5 Dc6 Dc7 Dc8 Dc9 Dd0 Dd1 Dd2 Dd3 Dd4 Dd5 Dd6 Dd7 Dd8 Dd9 De0 De1 De2 De3 De4 De5 De6 De7  \ No newline at end of file diff --git a/test_data/blocks/QmRcxaA3HnB2SrGsrFdJyhXVGHLkXSXXyCc5iZCqYsWf6x b/test_data/blocks/QmRcxaA3HnB2SrGsrFdJyhXVGHLkXSXXyCc5iZCqYsWf6x deleted file mode 100644 index 2635702c..00000000 --- a/test_data/blocks/QmRcxaA3HnB2SrGsrFdJyhXVGHLkXSXXyCc5iZCqYsWf6x +++ /dev/null @@ -1,2 +0,0 @@ - -˜No8 No9 Np0 Np1 Np2 Np3 Np4 Np5 Np6 Np7 Np8 Np9 Nq0 Nq1 Nq2 Nq3 Nq4 Nq5 Nq6 Nq7 Nq8 Nq9 Nr0 Nr1 Nr2 Nr3 Nr4 Nr5 Nr6 Nr7 Nr8 Nr9 Ns0 Ns1 Ns2 Ns3  \ No newline at end of file diff --git a/test_data/blocks/QmRekb75JctBPndJ1vxwcmNMJP9WNq9MXUKkHWi1MpadAP b/test_data/blocks/QmRekb75JctBPndJ1vxwcmNMJP9WNq9MXUKkHWi1MpadAP deleted file mode 100644 index 06919de5..00000000 --- a/test_data/blocks/QmRekb75JctBPndJ1vxwcmNMJP9WNq9MXUKkHWi1MpadAP +++ /dev/null @@ -1,2 +0,0 @@ - -˜Sh2 Sh3 Sh4 Sh5 Sh6 Sh7 Sh8 Sh9 Si0 Si1 Si2 Si3 Si4 Si5 Si6 Si7 Si8 Si9 Sj0 Sj1 Sj2 Sj3 Sj4 Sj5 Sj6 Sj7 Sj8 Sj9 Sk0 Sk1 Sk2 Sk3 Sk4 Sk5 Sk6 Sk7  \ No newline at end of file diff --git a/test_data/blocks/QmRgUfZs5Gm8LjT4BxouNDEPY2eqYpqpLrZc7T2isPHdgi b/test_data/blocks/QmRgUfZs5Gm8LjT4BxouNDEPY2eqYpqpLrZc7T2isPHdgi deleted file mode 100644 index 9592ded0..00000000 --- a/test_data/blocks/QmRgUfZs5Gm8LjT4BxouNDEPY2eqYpqpLrZc7T2isPHdgi +++ /dev/null @@ -1,2 +0,0 @@ - -˜Yu4 Yu5 Yu6 Yu7 Yu8 Yu9 Yv0 Yv1 Yv2 Yv3 Yv4 Yv5 Yv6 Yv7 Yv8 Yv9 Yw0 Yw1 Yw2 Yw3 Yw4 Yw5 Yw6 Yw7 Yw8 Yw9 Yx0 Yx1 Yx2 Yx3 Yx4 Yx5 Yx6 Yx7 Yx8 Yx9  \ No newline at end of file diff --git a/test_data/blocks/QmRi4KVCJDJtkuNN8d2CBn6fHBfy7vkwytpVct5EEpyF8b b/test_data/blocks/QmRi4KVCJDJtkuNN8d2CBn6fHBfy7vkwytpVct5EEpyF8b deleted file mode 100644 index aef1f2d4..00000000 --- a/test_data/blocks/QmRi4KVCJDJtkuNN8d2CBn6fHBfy7vkwytpVct5EEpyF8b +++ /dev/null @@ -1,2 +0,0 @@ - -˜Ov2 Ov3 Ov4 Ov5 Ov6 Ov7 Ov8 Ov9 Ow0 Ow1 Ow2 Ow3 Ow4 Ow5 Ow6 Ow7 Ow8 Ow9 Ox0 Ox1 Ox2 Ox3 Ox4 Ox5 Ox6 Ox7 Ox8 Ox9 Oy0 Oy1 Oy2 Oy3 Oy4 Oy5 Oy6 Oy7  \ No newline at end of file diff --git a/test_data/blocks/QmS4HusdPJcQKn7M4VkkLCccm3robyr6hiJzywvZqyJPK8 b/test_data/blocks/QmS4HusdPJcQKn7M4VkkLCccm3robyr6hiJzywvZqyJPK8 deleted file mode 100644 index 45d444b4..00000000 --- a/test_data/blocks/QmS4HusdPJcQKn7M4VkkLCccm3robyr6hiJzywvZqyJPK8 +++ /dev/null @@ -1,2 +0,0 @@ - -˜Me8 Me9 Mf0 Mf1 Mf2 Mf3 Mf4 Mf5 Mf6 Mf7 Mf8 Mf9 Mg0 Mg1 Mg2 Mg3 Mg4 Mg5 Mg6 Mg7 Mg8 Mg9 Mh0 Mh1 Mh2 Mh3 Mh4 Mh5 Mh6 Mh7 Mh8 Mh9 Mi0 Mi1 Mi2 Mi3  \ No newline at end of file diff --git a/test_data/blocks/QmS6ZNKE9s8fsHoEnArsZXnzMWijKddhXXDsAev8LdTT5z b/test_data/blocks/QmS6ZNKE9s8fsHoEnArsZXnzMWijKddhXXDsAev8LdTT5z deleted file mode 100644 index b838bd73..00000000 --- a/test_data/blocks/QmS6ZNKE9s8fsHoEnArsZXnzMWijKddhXXDsAev8LdTT5z +++ /dev/null @@ -1,3 +0,0 @@ - - my index - \ No newline at end of file diff --git a/test_data/blocks/QmS8SG3PL3pmpwThwEQoaTtPD3tCYtomHrYJGmeZyhnHJP b/test_data/blocks/QmS8SG3PL3pmpwThwEQoaTtPD3tCYtomHrYJGmeZyhnHJP deleted file mode 100644 index e2fff992..00000000 --- a/test_data/blocks/QmS8SG3PL3pmpwThwEQoaTtPD3tCYtomHrYJGmeZyhnHJP +++ /dev/null @@ -1,2 +0,0 @@ - -˜Zb6 Zb7 Zb8 Zb9 Zc0 Zc1 Zc2 Zc3 Zc4 Zc5 Zc6 Zc7 Zc8 Zc9 Zd0 Zd1 Zd2 Zd3 Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Ze0 Ze1 Ze2 Ze3 Ze4 Ze5 Ze6 Ze7 Ze8 Ze9 Zf0 Zf1  \ No newline at end of file diff --git a/test_data/blocks/QmSGqw3vXsbtFcqKukUwL1L4gAEzuJxVtUiPhWndR92H1m b/test_data/blocks/QmSGqw3vXsbtFcqKukUwL1L4gAEzuJxVtUiPhWndR92H1m deleted file mode 100644 index f0af5948..00000000 --- a/test_data/blocks/QmSGqw3vXsbtFcqKukUwL1L4gAEzuJxVtUiPhWndR92H1m +++ /dev/null @@ -1,2 +0,0 @@ - -˜Yn2 Yn3 Yn4 Yn5 Yn6 Yn7 Yn8 Yn9 Yo0 Yo1 Yo2 Yo3 Yo4 Yo5 Yo6 Yo7 Yo8 Yo9 Yp0 Yp1 Yp2 Yp3 Yp4 Yp5 Yp6 Yp7 Yp8 Yp9 Yq0 Yq1 Yq2 Yq3 Yq4 Yq5 Yq6 Yq7  \ No newline at end of file diff --git a/test_data/blocks/QmSH5WEvzAQMnTX2VUmWf3yjjoXBtxNbLk1jaKSnSnxStL b/test_data/blocks/QmSH5WEvzAQMnTX2VUmWf3yjjoXBtxNbLk1jaKSnSnxStL deleted file mode 100644 index b6984642..00000000 --- a/test_data/blocks/QmSH5WEvzAQMnTX2VUmWf3yjjoXBtxNbLk1jaKSnSnxStL +++ /dev/null @@ -1,2 +0,0 @@ - -˜Ri0 Ri1 Ri2 Ri3 Ri4 Ri5 Ri6 Ri7 Ri8 Ri9 Rj0 Rj1 Rj2 Rj3 Rj4 Rj5 Rj6 Rj7 Rj8 Rj9 Rk0 Rk1 Rk2 Rk3 Rk4 Rk5 Rk6 Rk7 Rk8 Rk9 Rl0 Rl1 Rl2 Rl3 Rl4 Rl5  \ No newline at end of file diff --git a/test_data/blocks/QmSLYaLhN3Tanoa5AzxTYmMikiLFsTMdLBDRNLasZUAVhN b/test_data/blocks/QmSLYaLhN3Tanoa5AzxTYmMikiLFsTMdLBDRNLasZUAVhN deleted file mode 100644 index 78bff88f..00000000 --- a/test_data/blocks/QmSLYaLhN3Tanoa5AzxTYmMikiLFsTMdLBDRNLasZUAVhN +++ /dev/null @@ -1,2 +0,0 @@ - -˜Is8 Is9 It0 It1 It2 It3 It4 It5 It6 It7 It8 It9 Iu0 Iu1 Iu2 Iu3 Iu4 Iu5 Iu6 Iu7 Iu8 Iu9 Iv0 Iv1 Iv2 Iv3 Iv4 Iv5 Iv6 Iv7 Iv8 Iv9 Iw0 Iw1 Iw2 Iw3  \ No newline at end of file diff --git a/test_data/blocks/QmSRA6TUXLM2bbJNDvADRQJ7h7QQDWVi76SvDoHgCqDxPk b/test_data/blocks/QmSRA6TUXLM2bbJNDvADRQJ7h7QQDWVi76SvDoHgCqDxPk deleted file mode 100644 index 5938dac5..00000000 --- a/test_data/blocks/QmSRA6TUXLM2bbJNDvADRQJ7h7QQDWVi76SvDoHgCqDxPk +++ /dev/null @@ -1,2 +0,0 @@ - -˜Pj6 Pj7 Pj8 Pj9 Pk0 Pk1 Pk2 Pk3 Pk4 Pk5 Pk6 Pk7 Pk8 Pk9 Pl0 Pl1 Pl2 Pl3 Pl4 Pl5 Pl6 Pl7 Pl8 Pl9 Pm0 Pm1 Pm2 Pm3 Pm4 Pm5 Pm6 Pm7 Pm8 Pm9 Pn0 Pn1  \ No newline at end of file diff --git a/test_data/blocks/QmT4Jfjp858emhSLfzUvVT2xYANwtQ1rj61YKavYTEL3WC b/test_data/blocks/QmT4Jfjp858emhSLfzUvVT2xYANwtQ1rj61YKavYTEL3WC deleted file mode 100644 index 8dbacb0a..00000000 --- a/test_data/blocks/QmT4Jfjp858emhSLfzUvVT2xYANwtQ1rj61YKavYTEL3WC +++ /dev/null @@ -1,2 +0,0 @@ - -˜Ky4 Ky5 Ky6 Ky7 Ky8 Ky9 Kz0 Kz1 Kz2 Kz3 Kz4 Kz5 Kz6 Kz7 Kz8 Kz9 La0 La1 La2 La3 La4 La5 La6 La7 La8 La9 Lb0 Lb1 Lb2 Lb3 Lb4 Lb5 Lb6 Lb7 Lb8 Lb9  \ No newline at end of file diff --git a/test_data/blocks/QmUBxFhRagQGubsUWWV6Th3C8WRubdsG64FKA62ZpaFiV4 b/test_data/blocks/QmUBxFhRagQGubsUWWV6Th3C8WRubdsG64FKA62ZpaFiV4 deleted file mode 100644 index 55644faa..00000000 --- a/test_data/blocks/QmUBxFhRagQGubsUWWV6Th3C8WRubdsG64FKA62ZpaFiV4 +++ /dev/null @@ -1,94 +0,0 @@ - -‚ƒø‚ - - - IPFS Multi-Gateway Experiment in Chromium | IPFS Blog & News - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IPFS Multi-Gateway Experiment in Chromium

IPFS Multi-Gateway Experiment in Chromium

IPFS (opens new window) is a protocol suite for a content-addressed networking (opens new window). If you'd like to run a node (opens new window) and participate in the peer-to-peer network, by all means give it a try (opens new window)!

The most important thing to get: With IPFS you can fetch something by a Content ID (CID (opens new window)), which represents what it is, not where it's coming from.

The other way of fetching things from the IPFS ecosystem is through IPNS (opens new window), which allows someone to cryptographically sign a reference to a CID, then you can request whatever content that person/organization is currently pointing to as their site.

Essentially, http:// specifies "where" to find it, ipfs:// specifies "what" to find, and ipns:// specifies "whose" content to find.

What about people who don't know about IPFS, and just run across a link (opens new window)? What if they'd like to be able to use that link in their browser? This is where a "client" fits in - software that can talk to nodes to fetch the content they want, but without running one yourself.

# What is this all about?

Most IPFS clients talk to a particular HTTP gateway (opens new window). Multi-Gateway Clients proposed in IPIP-359 (opens new window) fulfill your requests using multiple Trustless Gateways (opens new window). This gives you more resilience, as you're not dependent on a single HTTP endpoint that can be censored or blocked by your ISP. It also can result in better performance, as you can multiplex requests that would typically run through a single server.

Here we're talking about a project to implement IPFS in Chromium (opens new window). The result is an experimental racing multi-gateway client built directly into the browser, which means the same request might get sent to multiple Trustless Gateways, and the first one to get the result verified wins. And it's built into a custom-patched build of Chromium.

# Why build this?

This is by no means the first time IPFS has been usable in a browser, or even Chromium-based browsers in particular. Javier Fernández at Igalia has written some good explanations of other approaches that have been taken over at his blog in his post Discovering Chrome’s pre-defined Custom Handlers (opens new window), and there's an overview on the IPFS blog (opens new window) as well.

Most of these approaches share in common the idea of translating IPFS and IPNS (opens new window) requests, 1:1, into HTTP requests. For example, if you have an HTTP gateway running locally on your machine, something like:

ipfs://bafybeihpy2n6vwt2jjq5gusv23ajtilzbao3ekfb2hiev2xvuxscdxqcp4

might become:

http://localhost:8080/ipfs/bafybeihpy2n6vwt2jjq5gusv23ajtilzbao3ekfb2hiev2xvuxscdxqcp4/

Or maybe it could become

https://ipfs.io/ipfs/bafybeihpy2n6vwt2jjq5gusv23ajtilzbao3ekfb2hiev2xvuxscdxqcp4/ (opens new window)

Or preferably (when Origin isolation (opens new window) matters):

https://bafybeihpy2n6vwt2jjq5gusv23ajtilzbao3ekfb2hiev2xvuxscdxqcp4.ipfs.dweb.link/ (opens new window)

In each case, you're delegating all the "IPFS stuff", including CID (hash) verification, to a particular node. This is effective for completing requests, but has some trade-offs, including the privacy and integrity risks when using a remote gateway provided by a third-party.

# Performance

If the gateway you're using happens to have the data you're seeking already on-hand, your performance will be great, since it can simply return to you what it already has. Perforance might even be better than the multi-gateway client, since no extraneous requests would be made. However, if you were unlucky, that gateway will have to spend more time querying the IPFS network to try to find the data you request before it gives up. The ideal gateway to use may very well depend on what you happen to be doing at the moment - and may differ from one of your tabs to another. A multi-gateway client will have the worst case performance more rarely.

And while we've been talking about "files" for the most part, IPFS breaks larger files down into "blocks". So you can apply these same techniques at the block level, and it's also conceivable that for a sufficiently large file which exists on multiple gateways you're talking to, a verifying multi-gateway client might be able to be faster than a single-gateway client, since you might be pulling down parts of the file from different sources concurrently. RAPIDE (opens new window) is a more advanced in-development client which also makes use of this principle (along with other things). And it's showing promising results - watch a recent talk from IPFS Thing by Jorropo (opens new window) on it!

# Installation (vs. local gateway)

If you're reading this, installing a local node might seem like no big deal to you. However, we want IPFS to be accessible to people who haven't heard of it, and make it easy for them to click a link without having to think about which protocol-handling software they have installed ahead of time.

One approach is to have the browser install and start its own IPFS node. This is a pretty reasonable approach, but it can raise questions about when to dedicate resources to installation or the node's daemon (opens new window). The most notable example of this approach is Brave (opens new window).

Brave IPFS Choice

However, regardless of whether the browser manages a Kubo (opens new window) node as Brave does or implements IPFS natively, the architecture of the application has changed in a significant way - from being strictly a client, to being a server.

Including HTTP-client-only IPFS capabilities in a Chromium-based browser doesn't change the installation experience in a noticeable way, nor require any major rethink of the browser security model.

# Security (vs. single public gateway)

Content-addressed networking involves a validation step to make sure that the data you received matches the hash (opens new window) requested (it's a part of the CID). When you're requesting a file from an HTTP gateway, by default, the verification of the content is delegated to the node running the gateway. Further, if you receive the file in its final deserialized form as a response to a single request, naively using just an HTTP client, it's no longer possible to verify locally.

This is probably fine if the gateway you're talking to is one you're running locally. Presumably you trust that software as much as you trust your own browser.

The public IPFS gateways today appear to be consistently and reliably returning the correct results. Nonetheless the possibility exists, and it would be preferable if we didn't have to trust. That's why this experimental Chromium implementation uses the Trustless Gateway (opens new window) API and verifies the retrieved content locally.

# Where is the code?

In the repo you'll see separation between component (opens new window) and library (opens new window), where the former contains Chromium-specific code, and the latter contains code that helps with IPFS implementation details that can build without Chromium.

This distinction disappears when you switch over to the Chromium build. Both sets of source are dumped into a component (basically a submodule) called ipfs, that implements the handling of ipfs:// and ipns:// URLs.

Those who embed Chromium into another application generally provide an implementation of a couple of interfaces, namely ContentClient and ContentBrowserClient. They would need to add a little code to their implementations to use the ipfs component. Our repo contains a patch file which alters Chrome's implementations of these two as a demonstration to show how usage might work. That patch file might be useful as-is to someone who uses a patching approach to make a Chromium-derived browser.

# How (in more detail)?

# Hooking into Chromium

# Issuing HTTP(S) requests to Trustless Gateways

The detailed steps of the algorithm are laid out in the design doc (opens new window), but here's the basic idea:

  • An IPFS link will have a CID in the URL. This is the root (opens new window) of its DAG (opens new window), which contains directly or indirectly all the info needed to get all the files related to the site, and will be the first block (opens new window) needed to access the file/resource.
  • For any given block that is known to be needed, but not present in-memory, send requests to several gateways which haven't responded with an error for this CID yet and don't currently have pending requests to them. These requests have ?format=raw so that we'll get just the one block (with Content-Type application/vnd.ipld.raw (opens new window)), not the whole file.
  • When a response comes from a gateway, hash it according to the algo specified in the CID's multihash (opens new window). Right now, that has to be sha-256, and luckily it generally is. If the hashes don't match, the gateway's response gets treated much like an error - the gateway gets reduced in priority, and a new request goes out to a gateway that hasn't yet received this request.
  • If the hashes are equal, store the block, process the block as described in Codecs (below). If the new node includes links to more blocks we also need, send requests for those blocks.
  • When the browser has all the blocks needed, piece together the full file/resource and create an HTTP response and return it, as if it had been a single HTTP request all along.

# Codecs

If a CID is V0, we assume the codec (opens new window) is dag-pb (opens new window) (see below). Other CIDs specify the codec, and right now we support these 2:

# raw (0x55)

A block of this type is a blob - a bunch of bytes. We'll populate the body of the response with it.

# dag-pb (0x70)

That's ProtoBuf (opens new window)-encoded Directed Acyclic Graph (opens new window). A block of this type is a node in a DAG, and contains some bytes to let you know what kind of node it is. There is one very special and important type of node ipfs-chromium deals with a lot:

# UnixFS Node

The payload of these nodes have another ProtoBuf layer, and the DAG functions in a conceptually similar way to a read-only file system.

Not all kinds of UnixFS nodes are fully handled yet, but we cover these:

# File (simple case)

These nodes each have a data byte array that is the contents of a file. We'll use those bytes as the body of a response.

# File (multi-node)

In UnixFS a node can represent a file as the concatenation of other file nodes, to which it has links. The decision to use this kind of node generally has to do with the size of the file. A single node can't be much more than a megabyte, so files larger than that get cut into chunks and handled as a tree of nodes. There are a couple of reasons for that:

  • Data deduplication (it's possible the same sequences of bytes, and thus same CID, appears in multiple files or even within the same file)
  • In the case that a gateway were malicious, we wouldn't want to wait until a file of potentially unbounded size finishes downloading before we verify that it's correct. "ipfs-chromium" enforces a limit of 2MB per block.
  • It enables the possibility that one could concurrently fetch different parts of the file from different gateways.

If we have all the nodes linked-to already, we can concatenate their data together and make a response body out of it. If we don't, we'll convert the missing links to CIDs and request them from gateways.

# Directory (normal)

In this case the data field isn't really important to us. The links, however, represent items in the directory.

  • If your URL has a path, find the link matching the first element in the path, and repeat the whole process with that link's CID and the remainder of the path.
  • If you don't have a path, we'll assume you want index.html
    • If there's no index.html we'll generate an directory listing HTML file for you.
# HAMT (opens new window) (sharded) Directory

This is for directories with just too many entries in them to fit in a single block. The links from this directory node might be entries in the directory or they might be other HAMT nodes referring to the same directory (basically, the directory itself is getting split up over a tree of nodes).

  • If you're coming in from another HAMT node, you might have some unused bits of the hash to select the next child.
  • If you have a path, hash the name of the item you're looking for, pop the correct number of bits off the hash, and use it to select which element you're going to next.
  • If you don't have a path, we'll assume you want index.html.
  • We don't generate listings of sharded directories today, and this isn't a high-priority as it's an unreasonable use case.

The first element after ipns:// is the "ipns-name (opens new window)".

  • If the name is formatted as a CIDv1, and has its codec set to libp2p-key (0x72), ipfs-chromium will retrieve a signed IPNS record (opens new window) of what it points at from a gateway, and then load that content. -
    • The cryptographic signature in the record is verified using the public key, which corresponds to the "ipns-name"
    • Note: only two multibase (opens new window) encodings are fully supported for now: base36 and base32. If your IPNS or DNSLink record points to something base58 that should work, but otherwise avoid it (don't use it in the address bar!).
  • If the name is not formatted as a CIDv1, a DNS request is created for the appropriate TXT record to resolve it as a DNSLink (opens new window).

IPNS names may point to other IPNS names, in which case this process recurses. More commonly they point at an IPFS DAG, in which case ipfs-chromium will then load that content as described above.

# Bottom Line

So, in the end, the user gets to treat ipfs:// links to snapshotted data like any other link, gets the result in a reasonable timeframe, and can rely on the data they get back being the correct data.

ipns:// URLs of the DNSLink variety rely only on DNS being accurate.
-Regular ipns:// URLs, however, are verified by the cryptographically signed record (opens new window).

# Trying it out

If you want to try this yourself today, you can build it (opens new window) from source, or you may install a pre-built binary from GitHub releases (opens new window) or an IPFS gateway (opens new window).

If you'd just like to see it in action, here are the links I use in the video below:

  • ipfs://bafybeigchjo5f3jyzfjwmbavhr27jwdhu6wwhsodxg4qq4x72aasxewp64/blog.html - a snapshot of this blog post
  • ipns://k51qzi5uqu5dkq4jxcqvujfm2woh4p9y6inrojofxflzdnfht168zf8ynfzuu1/blog.html - a mutable pointer to the current version of this blog
  • ipns://docs.ipfs.tech - The IPFS documentation.
  • ipns://en.wikipedia-on-ipfs.org/wiki/ - Wikipedia, as a big HAMT + DNSLink
  • ipns://ipfs.io - an unusual case: a DNSLink to another DNSLink
  • https://littlebearlabs.io - an HTTPs URL for comparison.

# When could this be widespread?

This is very experimental, and will not be in mainstream browsers tomorrow. Feel free to vote for the issue (opens new window) where we discuss its future.

# Who is doing this?

Little Bear Labs (opens new window) and Protocol Labs (opens new window)

- - - -ø‚ \ No newline at end of file diff --git a/test_data/blocks/QmVKrEdppsp1HPGxE7x4w7gZpCmdmf8MyPo2w3kXXRSfdM b/test_data/blocks/QmVKrEdppsp1HPGxE7x4w7gZpCmdmf8MyPo2w3kXXRSfdM deleted file mode 100644 index 195eb694..00000000 --- a/test_data/blocks/QmVKrEdppsp1HPGxE7x4w7gZpCmdmf8MyPo2w3kXXRSfdM +++ /dev/null @@ -1,94 +0,0 @@ - -‚ƒø‚ - - - IPFS Multi-Gateway Experiment in Chromium | IPFS Blog & News - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IPFS Multi-Gateway Experiment in Chromium

IPFS Multi-Gateway Experiment in Chromium

IPFS (opens new window) is a protocol suite for a content-addressed networking (opens new window). If you'd like to run a node (opens new window) and participate in the peer-to-peer network, by all means give it a try (opens new window)!

The most important thing to get: With IPFS you can fetch something by a Content ID (CID (opens new window)), which represents what it is, not where it's coming from.

The other way of fetching things from the IPFS ecosystem is through IPNS (opens new window), which allows someone to cryptographically sign a reference to a CID, then you can request whatever content that person/organization is currently pointing to as their site.

Essentially, http:// specifies "where" to find it, ipfs:// specifies "what" to find, and ipns:// specifies "whose" content to find.

What about people who don't know about IPFS, and just run across a link (opens new window)? What if they'd like to be able to use that link in their browser? This is where a "client" fits in - software that can talk to nodes to fetch the content they want, but without running one yourself.

# What is this all about?

Most IPFS clients talk to a particular HTTP gateway (opens new window). Multi-Gateway Clients proposed in IPIP-359 (opens new window) fulfill your requests using multiple Trustless Gateways (opens new window). This gives you more resilience, as you're not dependent on a single HTTP endpoint that can be censored or blocked by your ISP. It also can result in better performance, as you can multiplex requests that would typically run through a single server.

Here we're talking about a project to implement IPFS in Chromium (opens new window). The result is an experimental racing multi-gateway client built directly into the browser, which means the same request might get sent to multiple Trustless Gateways, and the first one to get the result verified wins. And it's built into a custom-patched build of Chromium.

# Why build this?

This is by no means the first time IPFS has been usable in a browser, or even Chromium-based browsers in particular. Javier Fernández at Igalia has written some good explanations of other approaches that have been taken over at his blog in his post Discovering Chrome’s pre-defined Custom Handlers (opens new window), and there's an overview on the IPFS blog (opens new window) as well.

Most of these approaches share in common the idea of translating IPFS and IPNS (opens new window) requests, 1:1, into HTTP requests. For example, if you have an HTTP gateway running locally on your machine, something like:

ipfs://bafybeihpy2n6vwt2jjq5gusv23ajtilzbao3ekfb2hiev2xvuxscdxqcp4

might become:

http://localhost:8080/ipfs/bafybeihpy2n6vwt2jjq5gusv23ajtilzbao3ekfb2hiev2xvuxscdxqcp4/

Or maybe it could become

https://ipfs.io/ipfs/bafybeihpy2n6vwt2jjq5gusv23ajtilzbao3ekfb2hiev2xvuxscdxqcp4/ (opens new window)

Or preferably (when Origin isolation (opens new window) matters):

https://bafybeihpy2n6vwt2jjq5gusv23ajtilzbao3ekfb2hiev2xvuxscdxqcp4.ipfs.dweb.link/ (opens new window)

In each case, you're delegating all the "IPFS stuff", including CID (hash) verification, to a particular node. This is effective for completing requests, but has some trade-offs, including the privacy and integrity risks when using a remote gateway provided by a third-party.

# Performance

If the gateway you're using happens to have the data you're seeking already on-hand, your performance will be great, since it can simply return to you what it already has. Perforance might even be better than the multi-gateway client, since no extraneous requests would be made. However, if you were unlucky, that gateway will have to spend more time querying the IPFS network to try to find the data you request before it gives up. The ideal gateway to use may very well depend on what you happen to be doing at the moment - and may differ from one of your tabs to another. A multi-gateway client will have the worst case performance more rarely.

And while we've been talking about "files" for the most part, IPFS breaks larger files down into "blocks". So you can apply these same techniques at the block level, and it's also conceivable that for a sufficiently large file which exists on multiple gateways you're talking to, a verifying multi-gateway client might be able to be faster than a single-gateway client, since you might be pulling down parts of the file from different sources concurrently. RAPIDE (opens new window) is a more advanced in-development client which also makes use of this principle (along with other things). And it's showing promising results - watch a recent talk from IPFS Thing by Jorropo (opens new window) on it!

# Installation (vs. local gateway)

If you're reading this, installing a local node might seem like no big deal to you. However, we want IPFS to be accessible to people who haven't heard of it, and make it easy for them to click a link without having to think about which protocol-handling software they have installed ahead of time.

One approach is to have the browser install and start its own IPFS node. This is a pretty reasonable approach, but it can raise questions about when to dedicate resources to installation or the node's daemon (opens new window). The most notable example of this approach is Brave (opens new window).

Brave IPFS Choice

However, regardless of whether the browser manages a Kubo (opens new window) node as Brave does or implements IPFS natively, the architecture of the application has changed in a significant way - from being strictly a client, to being a server.

Including HTTP-client-only IPFS capabilities in a Chromium-based browser doesn't change the installation experience in a noticeable way, nor require any major rethink of the browser security model.

# Security (vs. single public gateway)

Content-addressed networking involves a validation step to make sure that the data you received matches the hash (opens new window) requested (it's a part of the CID). When you're requesting a file from an HTTP gateway, by default, the verification of the content is delegated to the node running the gateway. Further, if you receive the file in its final deserialized form as a response to a single request, naively using just an HTTP client, it's no longer possible to verify locally.

This is probably fine if the gateway you're talking to is one you're running locally. Presumably you trust that software as much as you trust your own browser.

The public IPFS gateways today appear to be consistently and reliably returning the correct results. Nonetheless the possibility exists, and it would be preferable if we didn't have to trust. That's why this experimental Chromium implementation uses the Trustless Gateway (opens new window) API and verifies the retrieved content locally.

# Where is the code?

In the repo you'll see separation between component (opens new window) and library (opens new window), where the former contains Chromium-specific code, and the latter contains code that helps with IPFS implementation details that can build without Chromium.

This distinction disappears when you switch over to the Chromium build. Both sets of source are dumped into a component (basically a submodule) called ipfs, that implements the handling of ipfs:// and ipns:// URLs.

Those who embed Chromium into another application generally provide an implementation of a couple of interfaces, namely ContentClient and ContentBrowserClient. They would need to add a little code to their implementations to use the ipfs component. Our repo contains a patch file which alters Chrome's implementations of these two as a demonstration to show how usage might work. That patch file might be useful as-is to someone who uses a patching approach to make a Chromium-derived browser.

# How (in more detail)?

# Hooking into Chromium

# Issuing HTTP(S) requests to Trustless Gateways

The detailed steps of the algorithm are laid out in the design doc (opens new window), but here's the basic idea:

  • An IPFS link will have a CID in the URL. This is the root (opens new window) of its DAG (opens new window), which contains directly or indirectly all the info needed to get all the files related to the site, and will be the first block (opens new window) needed to access the file/resource.
  • For any given block that is known to be needed, but not present in-memory, send requests to several gateways which haven't responded with an error for this CID yet and don't currently have pending requests to them. These requests have ?format=raw so that we'll get just the one block (with Content-Type application/vnd.ipld.raw (opens new window)), not the whole file.
  • When a response comes from a gateway, hash it according to the algo specified in the CID's multihash (opens new window). Right now, that has to be sha-256, and luckily it generally is. If the hashes don't match, the gateway's response gets treated much like an error - the gateway gets reduced in priority, and a new request goes out to a gateway that hasn't yet received this request.
  • If the hashes are equal, store the block, process the block as described in Codecs (below). If the new node includes links to more blocks we also need, send requests for those blocks.
  • When the browser has all the blocks needed, piece together the full file/resource and create an HTTP response and return it, as if it had been a single HTTP request all along.

# Codecs

If a CID is V0, we assume the codec (opens new window) is dag-pb (opens new window) (see below). Other CIDs specify the codec, and right now we support these 2:

# raw (0x55)

A block of this type is a blob - a bunch of bytes. We'll populate the body of the response with it.

# dag-pb (0x70)

That's ProtoBuf (opens new window)-encoded Directed Acyclic Graph (opens new window). A block of this type is a node in a DAG, and contains some bytes to let you know what kind of node it is. There is one very special and important type of node ipfs-chromium deals with a lot:

# UnixFS Node

The payload of these nodes have another ProtoBuf layer, and the DAG functions in a conceptually similar way to a read-only file system.

Not all kinds of UnixFS nodes are fully handled yet, but we cover these:

# File (simple case)

These nodes each have a data byte array that is the contents of a file. We'll use those bytes as the body of a response.

# File (multi-node)

In UnixFS a node can represent a file as the concatenation of other file nodes, to which it has links. The decision to use this kind of node generally has to do with the size of the file. A single node can't be much more than a megabyte, so files larger than that get cut into chunks and handled as a tree of nodes. There are a couple of reasons for that:

  • Data deduplication (it's possible the same sequences of bytes, and thus same CID, appears in multiple files or even within the same file)
  • In the case that a gateway were malicious, we wouldn't want to wait until a file of potentially unbounded size finishes downloading before we verify that it's correct. "ipfs-chromium" enforces a limit of 2MB per block.
  • It enables the possibility that one could concurrently fetch different parts of the file from different gateways.

If we have all the nodes linked-to already, we can concatenate their data together and make a response body out of it. If we don't, we'll convert the missing links to CIDs and request them from gateways.

# Directory (normal)

In this case the data field isn't really important to us. The links, however, represent items in the directory.

  • If your URL has a path, find the link matching the first element in the path, and repeat the whole process with that link's CID and the remainder of the path.
  • If you don't have a path, we'll assume you want index.html
    • If there's no index.html we'll generate an directory listing HTML file for you.
# HAMT (opens new window) (sharded) Directory

This is for directories with just too many entries in them to fit in a single block. The links from this directory node might be entries in the directory or they might be other HAMT nodes referring to the same directory (basically, the directory itself is getting split up over a tree of nodes).

  • If you're coming in from another HAMT node, you might have some unused bits of the hash to select the next child.
  • If you have a path, hash the name of the item you're looking for, pop the correct number of bits off the hash, and use it to select which element you're going to next.
  • If you don't have a path, we'll assume you want index.html.
  • We don't generate listings of sharded directories today, and this isn't a high-priority as it's an unreasonable use case.

The first element after ipns:// is the "ipns-name (opens new window)".

  • If the name is formatted as a CIDv1, and has its codec set to libp2p-key (0x72), ipfs-chromium will retrieve a signed IPNS record (opens new window) of what it points at from a gateway, and then load that content. -
    • The cryptographic signature in the record is verified using the public key, which corresponds to the "ipns-name"
    • Note: only two multibase (opens new window) encodings are fully supported for now: base36 and base32. If your IPNS or DNSLink record points to something base58 that should work, but otherwise avoid it (don't use it in the address bar!).
  • If the name is not formatted as a CIDv1, a DNS request is created for the appropriate TXT record to resolve it as a DNSLink (opens new window).

IPNS names may point to other IPNS names, in which case this process recurses. More commonly they point at an IPFS DAG, in which case ipfs-chromium will then load that content as described above.

# Bottom Line

So, in the end, the user gets to treat ipfs:// links to snapshotted data like any other link, gets the result in a reasonable timeframe, and can rely on the data they get back being the correct data.

ipns:// URLs of the DNSLink variety rely only on DNS being accurate.
-Regular ipns:// URLs, however, are verified by the cryptographically signed record (opens new window).

# Trying it out

If you want to try this yourself today, you can build it (opens new window) from source, or you may install a pre-built binary from GitHub releases (opens new window) or an IPFS gateway (opens new window).

If you'd just like to see it in action, here are the links I use in the video below:

  • ipfs://bafybeigchjo5f3jyzfjwmbavhr27jwdhu6wwhsodxg4qq4x72aasxewp64/blog.html - a snapshot of this blog post
  • ipns://k51qzi5uqu5dkq4jxcqvujfm2woh4p9y6inrojofxflzdnfht168zf8ynfzuu1/blog.html - a mutable pointer to the current version of this blog
  • ipns://docs.ipfs.tech - The IPFS documentation.
  • ipns://en.wikipedia-on-ipfs.org/wiki/ - Wikipedia, as a big HAMT + DNSLink
  • ipns://ipfs.io - an unusual case: a DNSLink to another DNSLink
  • https://littlebearlabs.io - an HTTPs URL for comparison.

# When could this be widespread?

This is very experimental, and will not be in mainstream browsers tomorrow. Feel free to vote for the issue (opens new window) where we discuss its future.

# Who is doing this?

Little Bear Labs (opens new window) and Protocol Labs (opens new window)

- - - -ø‚ \ No newline at end of file diff --git a/test_data/blocks/QmaWDLb4gnJcJbT1Df5X3j91ysiwkkyxw6329NLiC1KMDR b/test_data/blocks/QmaWDLb4gnJcJbT1Df5X3j91ysiwkkyxw6329NLiC1KMDR deleted file mode 100644 index 67ce7197..00000000 --- a/test_data/blocks/QmaWDLb4gnJcJbT1Df5X3j91ysiwkkyxw6329NLiC1KMDR +++ /dev/null @@ -1,3 +0,0 @@ -- -" ÞóÂe¶ŽGDT2ç®KLW8cÎ1ǘJuYP=¥”2022ç - \ No newline at end of file diff --git a/test_data/blocks/Qmb92YVGixJwh2HHRpy91H2x9KqpnzgyaqHxm3XAgzTWK5 b/test_data/blocks/Qmb92YVGixJwh2HHRpy91H2x9KqpnzgyaqHxm3XAgzTWK5 deleted file mode 100644 index 5529eabb..00000000 --- a/test_data/blocks/Qmb92YVGixJwh2HHRpy91H2x9KqpnzgyaqHxm3XAgzTWK5 +++ /dev/null @@ -1,195 +0,0 @@ - -¿ŸµŸ - - - -An open system to manage data without a central server | IPFS - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Discover What's
Out There with IPFS

IPFS is an open system to manage data without a central server

A Universe of Uses

IPFS's versatility shines across different industries – making it the multi-purpose tool for the decentralized age.

Why IPFS?

Our peer-to-peer content delivery network is built around the innovation of content addressing: store, retrieve, and locate data based on the fingerprint of its actual content rather than its name or location.

Open

The IPFS network is distributed and participatory, which reduces the problem of data silos that plague central servers.

Verifiable

The integrity of all data is verified using hash functions, so you can trust that you always get the data you’re looking for.

Resilient

Files and data can be stored across multiple nodes, which keeps content at the ready even during critical outages.

Get Started

Join thousands of developers who choose IPFS to build software that’s open, verifiable, and resilient.

Build peer-to-peer apps with IPFS

Our most popular implementations are written in Go, Rust, and JavaScript – and we also have support for desktop, browsers, mobile, embedded devices, and more.

Store and manage your data on IPFS

Use content addressing to give your data unique identifiers, and use IPFS for large-scale data storage and compute.

Use IPFS apps

Share files, stream music, publish your website, store NFTs, and much more through hundreds of applications built on IPFS.

Develop tooling for IPFS

Design storage, compute, encryption, and implementation layers to optimize the way developers use IPFS.

Connect Through Community

We've sparked the most robust open-source ecosystem on Earth, and together we're achieving interplanetary aspirations.

Our protocol's success hinges on participation from all of our neighbors: Each new node that joins IPFS makes the network stronger for everyone.

Join the Community

IPFS by the Numbers

2000+

active contributors

280,000+

unique nodes

1 Billion+

CIDs published to network

From The Community

- - -µŸ \ No newline at end of file diff --git a/test_data/blocks/QmdVDRcZcAQPBensuRn4edoJa7NK8qUfWBSJULnGo8aYZj b/test_data/blocks/QmdVDRcZcAQPBensuRn4edoJa7NK8qUfWBSJULnGo8aYZj deleted file mode 100644 index c051cfdbb58edd060bde50b30bee4c5cd022eb95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30972 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ªù@‡=5 ? -index.html†ƒ - \ No newline at end of file diff --git a/test_data/blocks/QmeMo2QuaXiXjwsQMVQwK5PHZwqoFv8NYqndJBGa5junwA b/test_data/blocks/QmeMo2QuaXiXjwsQMVQwK5PHZwqoFv8NYqndJBGa5junwA deleted file mode 100644 index 7e53e135..00000000 --- a/test_data/blocks/QmeMo2QuaXiXjwsQMVQwK5PHZwqoFv8NYqndJBGa5junwA +++ /dev/null @@ -1,2 +0,0 @@ - -˜Ty4 Ty5 Ty6 Ty7 Ty8 Ty9 Tz0 Tz1 Tz2 Tz3 Tz4 Tz5 Tz6 Tz7 Tz8 Tz9 Ua0 Ua1 Ua2 Ua3 Ua4 Ua5 Ua6 Ua7 Ua8 Ua9 Ub0 Ub1 Ub2 Ub3 Ub4 Ub5 Ub6 Ub7 Ub8 Ub9  \ No newline at end of file diff --git a/test_data/blocks/Qmew6Rpt8DVLp6DrPuq1yhVNcvCywWMEeaNW13sNkSoRtH b/test_data/blocks/Qmew6Rpt8DVLp6DrPuq1yhVNcvCywWMEeaNW13sNkSoRtH deleted file mode 100644 index 206aedfd..00000000 --- a/test_data/blocks/Qmew6Rpt8DVLp6DrPuq1yhVNcvCywWMEeaNW13sNkSoRtH +++ /dev/null @@ -1,2 +0,0 @@ - -˜Qm4 Qm5 Qm6 Qm7 Qm8 Qm9 Qn0 Qn1 Qn2 Qn3 Qn4 Qn5 Qn6 Qn7 Qn8 Qn9 Qo0 Qo1 Qo2 Qo3 Qo4 Qo5 Qo6 Qo7 Qo8 Qo9 Qp0 Qp1 Qp2 Qp3 Qp4 Qp5 Qp6 Qp7 Qp8 Qp9  \ No newline at end of file diff --git a/test_data/blocks/QmexustWHXRkcFFt1g37mxBmC1bSmZM5oXmDVDdT6tTELJ b/test_data/blocks/QmexustWHXRkcFFt1g37mxBmC1bSmZM5oXmDVDdT6tTELJ deleted file mode 100644 index 62b93b50..00000000 --- a/test_data/blocks/QmexustWHXRkcFFt1g37mxBmC1bSmZM5oXmDVDdT6tTELJ +++ /dev/null @@ -1,2 +0,0 @@ - -˜Og8 Og9 Oh0 Oh1 Oh2 Oh3 Oh4 Oh5 Oh6 Oh7 Oh8 Oh9 Oi0 Oi1 Oi2 Oi3 Oi4 Oi5 Oi6 Oi7 Oi8 Oi9 Oj0 Oj1 Oj2 Oj3 Oj4 Oj5 Oj6 Oj7 Oj8 Oj9 Ok0 Ok1 Ok2 Ok3  \ No newline at end of file diff --git a/test_data/blocks/Qmf34HtFeHfGeawV5jVUrssu2r7bLiEc4Xrf1digi2bAWD b/test_data/blocks/Qmf34HtFeHfGeawV5jVUrssu2r7bLiEc4Xrf1digi2bAWD deleted file mode 100644 index 160dc06a..00000000 --- a/test_data/blocks/Qmf34HtFeHfGeawV5jVUrssu2r7bLiEc4Xrf1digi2bAWD +++ /dev/null @@ -1,2 +0,0 @@ - -˜Nl2 Nl3 Nl4 Nl5 Nl6 Nl7 Nl8 Nl9 Nm0 Nm1 Nm2 Nm3 Nm4 Nm5 Nm6 Nm7 Nm8 Nm9 Nn0 Nn1 Nn2 Nn3 Nn4 Nn5 Nn6 Nn7 Nn8 Nn9 No0 No1 No2 No3 No4 No5 No6 No7  \ No newline at end of file diff --git a/test_data/blocks/QmfAvAZqcgbb4ijk8KqvUZ8hAAQ7rNToeU1Q8cEWb1czzY b/test_data/blocks/QmfAvAZqcgbb4ijk8KqvUZ8hAAQ7rNToeU1Q8cEWb1czzY deleted file mode 100644 index 85f19620..00000000 --- a/test_data/blocks/QmfAvAZqcgbb4ijk8KqvUZ8hAAQ7rNToeU1Q8cEWb1czzY +++ /dev/null @@ -1,4 +0,0 @@ -. -" µ‘°¥7Vnuæð -†äžu¢Ù¸åŽa!å¸lƒZ—‡Icdir®¨ - \ No newline at end of file diff --git a/test_data/blocks/QmfBsRowJSgkv1NCFCmXJ29wyYXAF2xU1jdCppwTazyQCx b/test_data/blocks/QmfBsRowJSgkv1NCFCmXJ29wyYXAF2xU1jdCppwTazyQCx deleted file mode 100644 index 09372359..00000000 --- a/test_data/blocks/QmfBsRowJSgkv1NCFCmXJ29wyYXAF2xU1jdCppwTazyQCx +++ /dev/null @@ -1,2 +0,0 @@ - -˜Cj2 Cj3 Cj4 Cj5 Cj6 Cj7 Cj8 Cj9 Ck0 Ck1 Ck2 Ck3 Ck4 Ck5 Ck6 Ck7 Ck8 Ck9 Cl0 Cl1 Cl2 Cl3 Cl4 Cl5 Cl6 Cl7 Cl8 Cl9 Cm0 Cm1 Cm2 Cm3 Cm4 Cm5 Cm6 Cm7  \ No newline at end of file diff --git a/test_data/blocks/bafkreiaehjyyo5gfok6yujnnx2y37tk4ajlk4eooz6pzyp4sluhffpvpre b/test_data/blocks/bafkreiaehjyyo5gfok6yujnnx2y37tk4ajlk4eooz6pzyp4sluhffpvpre deleted file mode 100644 index 2f259b79..00000000 --- a/test_data/blocks/bafkreiaehjyyo5gfok6yujnnx2y37tk4ajlk4eooz6pzyp4sluhffpvpre +++ /dev/null @@ -1 +0,0 @@ -s \ No newline at end of file diff --git a/test_data/blocks/bafkreiaurxu4lj5ejum6k3gzvynfks7wpbd27mgfr5xbf6rjvr657suzia b/test_data/blocks/bafkreiaurxu4lj5ejum6k3gzvynfks7wpbd27mgfr5xbf6rjvr657suzia deleted file mode 100644 index 4f6c4ee9..00000000 --- a/test_data/blocks/bafkreiaurxu4lj5ejum6k3gzvynfks7wpbd27mgfr5xbf6rjvr657suzia +++ /dev/null @@ -1 +0,0 @@ -p \ No newline at end of file diff --git a/test_data/blocks/bafybeid7szco6ai6bsicmwdtp35b6oxjzb4ppqzhuwn5byxhmlb6bbdmzu b/test_data/blocks/bafybeid7szco6ai6bsicmwdtp35b6oxjzb4ppqzhuwn5byxhmlb6bbdmzu new file mode 100644 index 0000000000000000000000000000000000000000..dd97690e1609d41f1914896c1de8fedea94387a1 GIT binary patch literal 262158 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

`yy}vaBpOo{iXGoa&P@#?F3;tSJx- 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 z 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 literal 0 HcmV?d00001 diff --git a/test_data/blocks/bafybeidcikfflh4rydhubchh46lxjxlagnmfo64mges5zbddwmzaglnixi b/test_data/blocks/bafybeidcikfflh4rydhubchh46lxjxlagnmfo64mges5zbddwmzaglnixi new file mode 100644 index 0000000000000000000000000000000000000000..f19d1d853006488b54866e832b6e89cdb9fd2561 GIT binary patch literal 262158 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�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⪙vH=8PZ_LiF?lmg^w%YL3DoO!$#JlS zfDf>2wA{=y(x5QrVLNsAuV``Mm<}~b#it;5CLRQ$TIK*8L{@@NaHPe?tH#g(_aFPX zsnJmEL(bS2{UvsZ*UiPT4D3bS#2W%?PLL*YJ$EfQ{RQhW8)@dMPE*=I zEP89Gw*L#^TLJybsz2*QV@KbTM4!WPq6()_H8pS(hdVVvjg
  • cEe)1_-tt4y2N6 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
    Mb5| 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%0A-=QtI%L!HJJ^?PxV9?XaPE*t1t%)$VATr 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 literal 0 HcmV?d00001 diff --git a/test_data/blocks/bafybeieymwabzccklmmqsz2in66tafzvrsv6dgydpcb2xgt2vcrzj6jzae b/test_data/blocks/bafybeieymwabzccklmmqsz2in66tafzvrsv6dgydpcb2xgt2vcrzj6jzae new file mode 100644 index 0000000000000000000000000000000000000000..629431c24642fff1f7ce81b9b376248fc9ef61a5 GIT binary patch literal 262158 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§#^x~2rP0tB}c2Qr9A1Of0N5-9t+9uqR9|X1yJ{E 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≧LC#m zBGiWB{Z2ns>|0H*UhWvw`8c`ejE8JU^yHWCCbM_u#yrfdR?d2tvYY$B7yqqd%HgbPL)Ycnt^y*yzFY-3$d- zQFj+CJ@3Q7o<$l;6l_i@Ox1t2M@@xNRs%wIV5*WOz$%kA|OF8*zKtHY7#&VU> zel)v62=bJj*dbmy{ehFu(N70gax9+?IWCNMcGjKao4vW6F*yEG;iaV&F-m4!_CH{W z$l3HMR~kZg%+R-GFV)}=(%LaZ4_q3rej=IN8w6`hzBPGFV6#GNDYi8J+*FB6RO# z)2iHSqmi+VxL{SKQu}nGPTGw|B(rc4LWUH^;zZIq0}aIGzX}e6yGuMYb9)(F$tuyK zz;7+wnbTGFj;+260|d(L$?5Nvp}*{VB^-F3b;81ftv31ZJ1TnK?KAPB2@|~M#IKF1 z-*dFu5#Q%aE@7nX3X}~BvPy}*yUB(@T`x!~H_!TTxsQ#5Uf_l+aG-7)&+ z0UF;pu&n_R9wL|VYe5OYgy9W=j0l8rQeXT4Cc;NrV&&GEAyRNyv%d#xXd2jjYS|jC ze%U|h9nJGwCdJFZk%y~=V^njohKL1m!)tB5_ zu%3I{KXSJQ9#)ulko-8=y4qo&^X!+D6`c>y7(8^*4I~@2(?Acc-nL1)UvD9W8gYypQ!W?G+0d~*`@<9k16aq>BkyAbayNKugpG`%AT52Bx zPZojAK_FHmpfX*xF9Jsyndu+%%i4{D$T(I7o%76R#Oez}bDKJN7s-zrKj^=@d&e^Y ze5D8aC`O+tuOV0q zC7k+B4lBIirTgJcskViJDc96+uY)D4xw&*C@D8R~g`FR4(tcvN@@()yk;COCedXsf zcz763M&8&+UCwZ(T-dIa-;u*F&{*v*=6abM>Xg;C)o|m;j@w2S_E>_-8Flut|Vkf|%4MUlI1Jmr0zzIx^Aqpuj5*aCv8 zW>r7q#Bj_3f24ZnN_)(Vkn^8|2Z&iVtP}_YkA24v_l-}z?Hd6*XZyE+d;@i_Am7mO z+F{PCZfk4%7Hb_oFRxt9v;;dmV+H*C&tl_2zL8y6gQG>bSs-(sVEyw^{?VFcYhm}8 z0;PX_yGYvdbEY@I z!PH0`6!~FGP^Cdjk!5rJAs?SSQ|^`72Z#By3kL7EGNm)tcE5q_6tYY)nkw;AWT0-E z_MU#Mu}l!YMIux!J}nd?4N4ynFbLH+;Wk{Q)Gbb3v_{?3<*6d?Y|pLFV>tFSD~eKi zC6#mF#TseHJYJkL*VdcC1Cu%PB(OXvPrm6=4%i66D>;k;<@Jh3SK*p=4t50|c&mzl z%z;H18f2v-F7PK5Bf?Kd1jA{TGPc+ubTZ@7rd~B4k@(hAK?B$I>|K^EXl9=`Yrext@AVuaq4~l{?MJVxOlv2! z-=H{}OJ6s(2TeaN`6eM|1cf-)9IKg9z?p?pg^N?}mcDu+f}%iJ(0qb8kViW=M%B;n z{end&@}yG*fe_&wjq>Dw5{L-hbRIGg!3>O0Kd6R#$b_ z(vzGwGd_FX4v&r_&x}m34k)teJ~YVg`!KDvT(fDKEAPsQ)*n*_fUi{h^>)4>S=?$P zA<3Dil;RIAbmG41IQ6A6J1W4IJg6*Y8!p)U*DUJg_6RuFKz{{Q$@-ot@v>hJgrw#V zM=siQG>rYXO=~B=2SOvoxWHPwj;~aZ;q>J6gUNwM-HvBm?_}l_7&CE-UX5T~VVO5E zcDBN1_Pm!j3&ttkjn@tL3L=||dvI&7?UUM8U_}K1cm1|VzJz@A$um+q5nN5}5T<>z%h;K4#6tU577&?{ivikzbObkL@?>4(o3g{Bsly|6Xjo^aPygreOp1af=W4#3^brC( z=kwDk^$T;*k5DZi`=lqXvq^kKHL5;xTE?>;>>my=asj$V0Wz5ptv z1c1B5-p^DsBKnHt+X+SW^! z5H1Sxe!URI?v*mq7C-%x0d zhdfO4uoP^uhLFbhGB8%w_5?J+&-oM(VH)TFZeCJ{+=bqjsIl9+0nEy)VlRov^`v1} z%>G$ZJ!u_qUpDc!E>Bt^hXh|4J;DWot~!lfz;+sVT6BvSzz>p}#`4o|7IdA`Dc14T zGv`5CAZXah4F|;&g<8k3hfNi$q)?aw_lzkbxE}3T#QBNU-W~9!RiH>+x2wq7w`l+@ z3I~q&J^jcsKe3)`ODfgqGz5v0jC~$%hn~)n8IcA0f9!3qcFqvhF7;NqHYBe{IcTy# zWr0ah9w-Zc_BAk@0^ZtDC?M z=}RA0;g`81uhxNPj6anbeTbzzU+Q^i8daYrZ1x!pGT{xjo0I1YX1@sR%yfVCp_w4cAc}$S;=uz_PFEB2Ype=BEq7hS{Qh*`1(U> zJQwOttjuME-8xc>bOirz2|`&dmG;bhmqd|brBBxWW7qQXg+LrlEbBViQg&3pH_}s% zF38kzU+qpC=$u^m*j0@D<+)cCj;ia|7JtTAdb+wym1!K?rnB6YJ9q5PdicVyv1FSu zACth`-^Ly*7dF|&vuv8*GL>^8W!EhSDfBR$^v@Qx2HESMjla&i~1zBu;Bb_KOw9G}^5HfKiVn=ew`xUw{W-T_nLGo^Cvf#bAy zq?iF#3TLu5*;(QXUxhDc<{PZmVF|1)XDUMb%Ha*KR!h$+v5lowFi~19)>2asg0#l| zn>ffyYgftvi0^3787r+m4uw~lMveCnWFDpi*h94QB zA=ylvh65K2c-KC$iXJ|KHAjf(9?fHULcK%ow6`lgCRQ>fgC2Y6A2BFO*vt9?uVyHv z-B(cM>dE^Rbt-kL&zC=MY`dtGA$VQZ>Fc(1p3Um|bK+{%<5jOM#+pjV0r!x18+W+u zFvX3|i&9o4;~@UEjF2^zKW229 zsyVsU+98;5h<7b4q%GbEmYG%uK5!ZHC4SNoLTjl~L0v3obJN|D<@9OSB4rWI;eKc4 z7!SW_dIYHyCd$DtOiSRJMOX7K4{48@nwHaRzkM280SvcKu^i9fjJH*3?`*HjhG6+S zX8!SsPs6KW%z2%oG~BvcQ_{I<)9->~O$A#9{xVH98{en{i|%>KQB!{%$yYgb>5%u? z2-$8~4`9`7&yBXBu;UV~oOnHKZ&^Hp8jcBq>uZE1?wqGMxLj7FTN^P`l^O2FKg9SE zV+zzaw4TBMB~bc}XK-2eU?W{g`*s`7tq7#S+|X;p0mzpqa^+Wu6F{bp%V1D|z;qMQ zA?F>k_ok`bsX5U_XvffyemU@1);jwM`=9)vmDq9nBrEgeU-F4}hS}c2af{TqIwMOL zjk{EL9J6R6GwTXcr+$2Y<|h<174H7Zh~$+~sRY82n-)T*1V#+FwZRs!VqJ`JSt=0&RV8l$>lWv-eA zPo)V;ZnBEg$Yn=8wMoavy7}dFQj`AW9~gauH_j@- z?%}ZCkS-el4t*;<2=jHF(W2zH6m_kUs9QbB81jq!7%)`SgRzE zw3ItAB5=(`_wiKJlbQ;N!f;$XtV@{0Xu^Jq?ZTbOMUGR2`B$5CE)lmC-{oIsEdjDq z=hrj$e$$<@$tbJE`@Z^xyLm*&{0pNx1WGTY+)iG0VCzw@A2mnY4yev#ZHToTo?UCbu6rLz*o*h?r zRsQcuL&9?ZPq(cOLow|O1kMSqAqMbaPD@JwjxwZxMeR8tV(y)wu-Mt#gI=#3>YOeH zP96DZ&&_MKFrDbTkaH-AyD=f*IXld6cGk1tu?)M9SCniuVbG9Mgn(rTTDwz-Ci*dbX_3>I19+#-Dono;A&h1!|Wp7SIne|+4(G48Slk{`~u8JX5r zt~tb2%lL1FeRPOv}ADV2Y|or~DlWd$nC| z)JP2rZmKows&7WZ<^9hEj~9lC6u%IOH%%?COmO!m-JZ}6{8qS5xQY993;08vRE`XX zi7HnO1?Rubbx>%xSBG8SF?CB;>2O|}h9fyB)HAWd%sv;vTbhP#W;8U@w{Fb*5jc^# zm)2@%(!yPR-&`mi5#i!%3fN-~?G^?6kiWBY0(Fp07H60uY5W{^PuB=7*8<#>g9_%lgIlb%z-kR)vd@(cV84}(_+Y#rb zvvj4_NfSos$q$f!paq;6dwwVmz=cXNqp^*21;!QgJnH!}5>hn~My0JypIjuok!EF@ zx|qV_4I2I$X9^u|#nplJYscg*=^xXj#jIB;?Y%y*COU)j>(w$vFyHs;V;tw%oKeSU z;+1>hcuV!m&qOc=39ir=xII@mr-@(NwG3D<_plh&;PKEGkuuwEIbJ>$qmz&x++vVS;Y&9~p2oeGDPN@!F)7ZY(#4sy+1B0plcdJrOYC=*H&bT8OwH7$F z8ipyrt=AEvqf(7_9S%E=`;kQ2Y;hY@?C7ZgV0|-v9@a+dVhKtwDhfb6UBS-*cD)@k z!m#6nAIk9JYrUluOgt0txQ_;v%1fRoO*X0w$kTz2N(G$3Ofofo(=;mH6unXR(+&+Ej&tdzavHYC`Xlv_XoSs)Tn0-9ui{dbl^Z$qx6ImZJ0^R}9^SbSmoOmXqOSoGa?a9Wg zZdX5*cd|;i)NJ09AqGM+oZWY@QwzUWsmm*lH!%M`=m|~wILMF?RFtn%)P9Y z%#BAkk6@bcTM>kG7_h680!are)I4YmXYYQe-QEB26&m=n%Haw$?M}9MmjD;C`(^XV zzCwp7;|9!^IKY_$EIj3BGoc;SiZAU#41KhvQ*l8mX z4xLIjV0%{+YqrbGi7h>^NO;M~OxxA%>&!bkiF^LtGB91g;%LC;=}N38xmXs`Mwf*e z%f^(#y@8p!WO?wd^+(j=rUK%=K0_vk?MBRB&qwo7`bic$U6Id zvR%QRj5dzQr#!w-m3M)}MSOu=%BkNMZlA@>J^wM^n(QQR5U zYCnEXw+|1;%iZvD{Kep=a?Aj#a}zFIk~4MyVb014y&?MF#V~>bU#l6DpbmJ9hE_{o z>!PfdqeiKUoG)AB6@D4%dr5GmTWj#2L$gKv`jJ=|ZuCg2-QBemOEdQ65@jXdL+>NT zh40O>*sxoH;Y4&2pLABT%C{_;_~NpHMzZldch<->+OCm~w3i(HDI7@wjQcS&4cBip z7K<@M|1E83p<(<%3RZbeLl@(9`DtD>R!jyBvM+Rn=*h7~P%J=T@Gy###JcM9bz}qd`#=C@|_AmLpim7PF_X2)Y^(G+#ZN z5g*qI)f!E*jAyLbtEcc+@_j1TfAWO-9fGR!hh7t{f}oZWA@XYtmASd2I*apruvkzbtJwcvdbIjbS)!WCg_x}O6c;?3UF42!i61~R}` zp$e4c+?0LsK*C3_`+_s&52RUgdpre^D~c{RUz+)JaLy7SMsnT14hM*V_l7pjPCLIu z&twodv9h0|uStM>BpjpQ+JPeFl2Q8)eP%%UhVbgQHHWu`_lQJ(Gq0GZEpxXux1PcA zJPro*$6}*`28{uh8WghkDxC6`D}iX{r=Oy?ya;5AmPcVcgtCuDCw{vL^omg`gF!Zp z9H+A_WFEFCw<{bNfaN;Pvg2rSrQ!+W7z_e}9*wZ_6`h1l)cIS6BOY)c@IdBZaiBjF zvP$Zo>FWLS<~s_wej73RCFHDbAjjBTj=%Y4x@^MO)T@meK8wc-7BnZEt*W=qq=+52 zCe^`GSm2|B%KjIv8{ zkb7~_5^K06@yIuS6KR!qeF1s$9c{a$@oi%zgXdMfI&+3?CD;qpSKnAM04HeTtwc!< zGXd;`lx0#~ss=W(n?`2yv3MK13E5(?1hy} zoV{_K>m9BEiyWE{Iv#8&m2cQ?CI~a2%yL|X^2<(^rZk@1m`<_Z#3m9C_fdGs6a2*I zeQ-2WXMGKiM{@DD&5w-4WI3Pk>JOf!9K9JWx^IS`U6Y{Uc1u6`C%}0})7YR9U8xru zoJ_Z+to~|}p>1ZkbB=Lc;>Li92Oo~_^?<)4-Amu@(+@5j^L6{z(-g~scW5oIe~$I* z87{^&uVTpa;9cMQg~PJ9C+v8=AT!~6Oy_o6mgDH4hAXik6VE2v_>Axf%Ziqt9frK3 zE}j9R>h3cd$Q@$qfofbwoqkDa3PT*p`g6(TF0eWUwWL24iQ?(Q3zDQ2G&Wa3{Lm*Efo)RG#%h8CQZxC6J(PZ@%fnzJJe-4F!N}-^b z22JyB8qFkE>Vi@r(WekHBqM$nZ3i7z_r5H+Hhq)K@M6$&8+$Ys4|HWXtNgVI1Z}yc zi7-#?Yg;4PekxQ6WOw>ygsi*uz#-pSvMoNW@}6Mpm8uWV#kvb&-Z0=T&TqR|ulsVI zR?L(+WGHmkJwLixXz*kC!cz4qjie51wgW$Shu^Jz*CmE6Ah+jakeS1JI5CkOnalat zb@sQ@o9qBj_4vGzoWn`ykgGn}4tz1;E74|(R3fDLW-n1**l$6kxG!KGya#rCw~0Oe z+qz^DZ>E*c*jM;7?wnXNZd%04{Pwaf#j~~3CwEIS=QIY2yz}Bi3 z^oxNTL`g6Rc^ycO51xo`7c8vdg8(<$nrOUDAT^miEbLP|5@2%qAD_&8PTqC-`<&Hb zJy{5Yc|?uZ&U9L4B0Y-6WMF|qCw7P^k_LGqW!1-MXX)X;+BqF&ourBIc?8^qAN*9%x2!ZlAJ$p1@k2ck|Jr<6iEt z{_{M?6YffZz>fRf$i7h%>GlC)*pK3CFWWH4G;63Bisl``{N4Y}et`&Tf{gHaZda@{Z`I zX9^}9(PSld@<%=UwkMpuLwjlKyDNb=j*DV0&e6L6O7Wf4qLP2owr8nBcAOptV^?FyO963Pa-eKTwg<+?B+J3;xi2q~9Aa?9i3g}mfT_W*>J9AN<^7yxfksf*H$ zKQVYuckD$`{p7=?g{1E62O=lIhxDSyD<}3V*Hprfb)DuiiW9Br`}q?>?fbKZR*hiB zoG+Z8`gO$4p6Xp53-w!bAmu}5h2;uE;RGA!&{>`~*Y-?(HSWN8@8?g}t6bROePrg6 zS6ZJ>mt?Wab(YU~mBo}<7jD>ZzO@P3R2b3-cwPEyF`vLv8AL6+hbC<1im!B5z|4E0 zr7vG59+Hq0IYN8;%1x{lm&3H@2XU4*k1t`ZPqQw;w_ZI4!|Vlkr*p_MpedIhZFN~@}nj@y_6HrRbRA&`{-NzoZ#=Cpu9BydBAofKWs;$ zFGvfUhOcFjE9SA0v@%nMBF9iKG*YGkJH1=Ia&%ix35@@~Dusb{jic^~X<$E*MJD4L zbHeruDAFiZWH|nJ7MPl7`ich5wNAxYY^UnYc-%wCQvHIfwO;SIZn&I~$XYc6nTJ#n z`}jx5>Q(c(VY*+vZk4+r^Fk4K6+j|w!r<3PWPAQUobV)I-26gW!)VLA$=;*p zt&qaKgDsuGMO0SWE6JZ4AVsOkF?!j|UTTR1NWGS(@6|wPD9z3|xEK;|a#SSih!<1V z{Ur<_TV9nHu;c#VZS8=y${`Kd9u-mrkNQ^EeY}KP(QmoxXplevNry=8-05RPvYNZT1ck zi{C5qWZQY+`eU1mgZnbmzjnJlb}(O3bZ17xqKeO_v_0RC_HXIgusokX_e{^bed|EB zrZ=(R?kWe-hc9&siNVuayARu{p5z&4)t}QT9+|yy{d$?v%`!-vV)KEo11zu5Uhi&l zCtY)j0j}4LkBMveq&X;OUtwez_d`EvV9o3B+dJDr#J0w^nfHAk?k z%%;b06I%RV&{&g`mAc`Pr#5Bu6OwW`nr|l2=^a9D$o`k-ZT8?*JRRD^-hsZtK=NW4 z)~qW*T=@&N%~Osw=4ZxAZ$62fM}EY$6hfoDN{DHGy5G`+k=o4UEqaDJ?)C+p##YP2 z<`~tDcH86mO$;bfxOgsY74pvPATZ)#xR~1_h+$o##~{f8NQFUJFJcf|mXjuYivg!Q zd)YomAHp~*#(fg+`9#=}`KwD_*7{B(K$hLGj(st{^LC_E%2ImS;BhR?NpC^IPq7+nsFHa^We0d#_|<}NVouP8V*JtUuhgKM>US_ z8n`2pJHJ45OWgw0+!>ff*Kv_~5HBk5g_SMo9;mq$dS5V3T}vqKcm=So&s_)IMp`8; z%T@?J5de%|BKlw%W{TNcIzyi^yyx#9@dKn3+6Q4e_^ zvR7);_%b$U(3oNRt<*I@+o1ml?KDO(tF`?YwmoW@7?dUBuhQeh7#>Q%AgK|9#`y6n z_e=i&ZLOyZM)6{a*agVq(o2ALiC_cijXo>z@}zKPU~keDzjFcJ5S8PJJ1`0l5qc=d z>yAFZV<5X~Q_DdyJ9V#N)NXGewz~@+t*yKH>~i8`=a0LFx_F39?hRG!nDcH+S|c3F zx8k}l5Bc==^Ww6Ep3O+U_rQV&X5V1kaVPmVaV*g)ov5Mk3+fjbft1^>5lV{6@LcrB zI^LIgm`OXiAT8z8HFus>5s;-)k1~@Hv4Ltx{*Fc-3Td|McXoutns`iIx0^X6ay&-K zmj%=|4cR2d^_NCX`U6M$4FGadw}jGCho_i@Y=bqb!DU2=+{dQdezPf%^D3lF)fX?G z=xg^{3#TQ=>BZ?`wNG&V{+blTv@)x^3>8Ew#jEPjjYD8kpx+-c;=Wo zHG=}LmDk|wOCu#;@^w~(T2#4$g(@9Q@Y_fg+U(T&Caf!5SG-RlRY<>8x(s4I?z{A# zRQ^0`e=YfH5m`j{V@mE@R0vfL3oJ%Nuo)&RSxR7nWzoMvuFlGrF~2oXeCCg|kK z-S;Nm-~LI=_(qf_G5Ws05gU6*|5ED1;a^@A6Wq$Pcm6(^DKK}qVH+Ob(7s{p-;$L|y2Yc;cB%V9M4T zzCdqK0fVrp;O&n&pvt3Z%}6_+;|!)84x6s9LVwf0UMZYbK~=<)-ewvC5K87A?OgqM zTdhONW%CpnaZ4MNp2WZ#wU1$Sg}{Wlu^+`pKDf*c))u#oE(?;#e|dPxHxig|s=jqH#)D+Vjup0;LC+nTU)If}z!6%5OxWNo^|PHICEU1{_U3^L$o&yZRrV;VWppB$)?Sxj-`TB0 z?Tg>u=G}aA8U?C+X}MY;_H6FBvJX}Y#iZ2E{fQOcVs;0RMMigzYy{o%D*1t@-xjQ% zm@wTts2Mi9Q)G(2z7=IA23;KvKR=yYeNC6bDkP2vw7dk;3bd}P-}i}uXMC7Eb8}Ag z{@A?ya^&#VDOLvHx=>>2xC$l6#@@mg*6;d-;27=(??nSE>Djgp6eu!!{`-zFzeHNP zlo1bvw9@rJ&7v0_tM7*GIsM~_4S#OAMkJ&SR?V9FYxPR9PwnbsnU9svm6p5Rr4CDg zc$*RM@>kgdPJP(Ej8ALstdfy1dY8Ku(8sQ7y4*j0KPJhZIwSw-myQ^;YrHCzzOd$t zaBCjhkKFE)PeC%R+y6u?LWOTwEnvl)UC%&PSsbi_nRNA6@)1B9?7=Q)jNxN)Opby? zJ}63%w#lgygQ+!_tAP)|96N;1MmiDOt9=4jRkXbZ5FWTF#*^?O(ola!#U@i2T?Am- z$)&)34(djr4C1h7X7X4!Fq_+c-;5!URXMfA;Us1a^Yjp5iRY7#tVMrk0iwZQmEd!J077x1Gq8kXsNqvF-Kyyi0;2?fyK;I<-ujasF( z{_PaA5QA_}Dp{#e8Wyiu{ zdjEarZSSKX+_o*s#;))6Y}4z4PI>MS+$3bSu2-&Q77(k1rQL6P=CQZ0d;hu?_y0R7 za(D-WE^vbQaW6}olN1}yKjWU&Bg&BMxJRhII#;5NJ&$`UV<&$-8%DunKd>*s(ZYWI zotvsNN+?wFQ5&1n-(UT>QEZaGX8aK=AFPwHzR*JyA+UdRde5P|@d zw;7%se?AjbC7=_}NaNc_nvW>+L;3c6oRQp3OJU*i_CrU*zqsyzL-S1zr@^_b=pdd= zsnYI)U2$0++4rpt{zi`^sNcI?f6-qywZ+|Bv(smF{5r)6oaj7rwV-=T`e*@sda?+= zLNK?vH)jbkW_P6R+NUdtcV!C*JK|L*%=x&sR3)BoqL2@3PrnC`8I;K>|E4|p(`FQc zeAeLWZ{A0M{e~zEJ^qJ78ZkNwQ1L^%L{fg>QvG4KH?8K^IsAb1aY{i>4514DDIKUw zc@{}X3%Ca<@E`NHA)EVFE)@4za#{Zty-c>`gXSwS?Je;~f|ZeSPGNV-z9{JdXcr15 zpVNbH6nWgz=C?fsCn%@Q+#1YP#55S~(^ApQn(xyYbUocQJ(i68JdbJMb3RdtIxjtE zREp4NJ)|=-WwvlNC8)ZRYkGn!oE^bJh~$*dpi(FxEAk51CDP5)D<>S-zfT90UO#0u zVe-7R?iUMKPR6ZpdePBo*A^`9QU0&2m7chN6|1?Ov$`W3LQC>`)Epkf_b}zne11S8 zqe=qrX7JhnR;oHF3f4DHm)_RPEDG7adRFeg$(tp--&NQyqS1aK4N;qhTGm+)ZAY9q zA{T30F`Dl&Uq!9}VzG(*uT@B9Omsr`BO?fme7jpviCaKV4FG8lyH*1&)KzUU!#Kzx z=kU&Sf*%EqZ6GCrsT7t!?KM7t?bckFC|15y3s#-9xL}mE@)>5bAYB0ZwZ&Et3`PXVt(F3;mNN`jhfNDMhW7@^GmW+upPMv)*np?hpWQ z|Mc?lWv!D7=;2@qM6&;*C`^zG#nqrT|Wmvd$T;)*Jai5c6l- zXY(&$GbUb~wV<(E=*FTC`$)%LJaBeaaN%kC2Z{WvbwY-Kb@|I%w9~Bk228Vei$C&I zba_CVGGoskEs!6}<2{^5!GSGBxKPBrMB<%f&d@6T_Z$jz zmM%IS)$b@BFFl3&lWY#kXUUx+y_hA#ptSt0`_Wr%rLn^ch|z_L_m2w}+`oc{aikh) zKC(U|h-qW71I>T)X#VI1LJ@sQXw)c@b}DT_RIi?yb%8{mFMAx@-3}QlY2hYUJ@=u_ zOYEPgiPdYv82t9MB6vevJk$QWs{w9aO|m*yu5_2?Z(B^AAY<8A6y8gs&>y#m(12{h zNJx^nS5<}VSC(d(g=S|r-;uF%)D`bj=n^`HgUVB#1usiLRty^qC-LQY<9=mG&X%F~n3ofc21m>oz4rJfn7`EprL1TOs zq&JoAK85rIY6|MQAxLD<83}DYTBBSwKC6~6EHxZvxl@pk%2In!eMtW|cz%0IloG4H zY88DTteBj967KUkezZI8$r`lL-HZbq#l#MMBdMic(u!`p5(5fvC3B+rl z-->agfLuR%ei2p`FHK5_p-J5`KK>29W98XN=e3z1ZhR^qeU;PrH8aNJcT0doEhx9G zUkkO2MOOJ!4d2Y$IBGRg!x-v)*0zrJOwmHLnYB&BzBlTn(hqMv`l)gu9P$_Mx_kpn zoK?}IGT`wv_po^IMY4s#)hR{*bJMH?6Qx{?BgrRiLB@loKvh?YwshY!URK2sSF zX5kMWWnr){9>KZVi4-KE($>~s?Yn@pAqB}0&VZRScRUv#Xjg}X7*kI7M7Yx}+OmgF zOv~88?G#l5+RvWis<4>!y{CY-#Bk+S;jZ)NIyr?co#|c6nRLv_KKbe5q^Jkhrpye} z#B102zGDv8MoMW{hhf=^`rSW3^}Z?u7MK7jFRMc22U1hNR_u?AQYntTd0^vViTA?J zSF#ty=l1M6NE7v<%F{TzLu}ZIB&PwrH>%)ZD^3Mi$#!lGiy>#+s75153qPCw8xJ)gV3~02<|QtbaI9(i#I6s5+k9u}3Wq>v}Z5f}JJ)_SuP)Y62MI9@3kLG8zwp%hUiD5yC&M~Fa zOHVY-J^Jfp{k!CcQu?Kf&CWNM&lLFK`fYKx6JQmXD`wYoKYA0PeJ8FCY@ui;sLc_F zi*!YdDwKjp5>FHPK2O_PQQ%V~Twlnr-&=lD`kYaPH}NcEmcjHX^>6_;WKtSGo24Cs zV3KQYD;#_RUnl~&-r17=C6C*QqKQdlwD8%292bzO6@Ca`l13Op2y^b)b9^G^Zh`7{ zqsPBsWR3!T;q{ZmjBE)I@lbKEX(CD^HSng(e5UE?vGWswyG;!HYFZ>f;}W`=Ue~{U zRviVR>fL0{&AmBWHU9!(E%Q8si%l|B$~$ri6m}vXECxA)u6?hSghfu&8nhI>@^Ih! z3>q+mQr)%2GvSWHJ2MKL4~-bUr5(0Cz5^VGOE?>1QJyNAcqK6E&4j!|Ab0M=*9Dx6 znF_K-v=3nRboPjo^Q!ef>T6O=!S=|_&>~4B5-B_G4qI1gIW3k`c+?N|EE%! ze3|+@H>^>QYfexO4rPR*UIPxdc_nc-Rh^6ka=!c>QyhcsPBoq*ZNTDAndjCCvI@mW zgP@TpIUsA3I_*zE=*Zd}rvXd>*d`8pZo2Tb3h_#I9L;!%y-^%Q>kl#*f4FR2Ey}$K zlQ}4@$&$RhGcsNB5DEoA-?-(*zzJYfh59DcRD7dO*GT1!;7VPTbNOgY9Z_B`0I}aW)h4_Jq>(4(7xFP)AIR3RMaPm--@@uvb z6+x2s`?)u+pKEUG^eTU4>W_3ARx2e@2mh2SQU)lH(l%#u5sn&^&kS;*4N(jsjduLb zJbcc`@@bLF8dYOV(rS{WTxh4JgYA>mROTmEy5WfQkoC|P+p04hRpKYYzW^;l`wJDd z*3bhoN}CO~=U&8?7D{X;U)+4u?r`4JDiZn_P95+o0d@v?0evv zrshd7P9q@T)7cY*);zd+mlN)r;UC3^3EljS@Zegb7|8bq^PkA%=uODWnW_>TG^EYn z3T*wDd19dJkC`5BM_WeV1iV!{SI=5ZCCGKil_`ljVVETJUd=6`gH6=;@S=`zH4UOn z?Wuo7R&l^P9*&m!irr#tkUW29q6q&#uBaDu4iXCzMl$ucn8Ip0sa86(I{e`+S}=}_ z$15q`d+70d+3fl85+E5Z=Or})|G4Va5Z(2weR`tHH-Uzx%b`N&&spf!WGYq zM*XU_US}fyCAM`H&2oIx)M=h@+-MG;-DN=e-8_BFSnY8%6(?`HUwHax#VStN|Ke@(zAi65 zd~YMJmJ!Y1#ZfyXM@iqf^VIX$23SqOn|VcBT!6V8;%88Vn7RJRMB!anwwhhW^IuDl^L3Cmw+dcgN7g;HHM=0No<1~#Kg6tF?#&G7{C*VfF&$(Tlq zhi0HP*~Fcc8S0<9=PQwDFQE{B;J{xrcB0xn z@%$M)0)0RIr(ESLb3YK_%(ScGDREi@F9(8~{+~GBKmIVdPaL(n1kHOyp8I#g zWFujt1D__<(IJ-CZ7~ZJX8*RkQ|FbAv;w<<0(h8HQVuIov|A zeytERVs2+ZG5LTMXLeRJg?Kav_!ODBEW7EO3U+CUBan3O@8?I(b{y{CQF1`P;1Sx_ zD_&M)+}uRTaWuJgDxuih;i!Ij@mr72|eWei##$#_)IO-4E2t9lnQn~^i zt}86a%y8nm-`^7B$k;gqp~K8lB5r@8>y=fkU+FHk7r!>pIZ2GEPHj@Pg>TyTWTfC+ zh$!|I)G=$IwNlr6lqALOp4vCmy-ja0o*miqo=l4_sibv;HsXh7h8sEqwFRv)kRgb>(>rw?N^`}kuxSJ>DdN~2M>0q zHJ|&%Rh$NUmu&iycA>Ik;E!H*%1oXDZ6?Q&h^J-BSi<_+x>Uom(ba;uogr5T@HqpmOKolR${>FicLzVh@3p> z4oc>P3B4M5C4$%z?TCAa?#bK8t^&?)rB}Vxm=$EtQb0!V$BQKp{i8WhgogQ)UN6bC9zrbzAgT*Lq|7ejQL)dw3{+p~No62^e&RYqjw*#)MbuJ1gbWeae)J zPr-Xr*f07$d5WP{0egV!_#-mlSh|35HvYiIbRF>MZyrmb7Rz3X2hD($>7H{kM-`=` zqHapd?Db>|4m(<;Q=AG#iM*TjqgA0w_CcZ1SvlG3N8nR~?OC>sD1|nwP7NlNJmY+= zD=zy`i}u>Nv}s16gJtENf8|{7#hGXJ4qUf!S$#I;nYfm3{}MRIJ>JO*eeUYZzcLb) zzb5-+GCP40At0uef4O@dDb1L_Cny6ASk-D3yuHT$s~@?lKh|SCa{W1Qq5QJc1Xv-^ zd-!;*xXn5PG=z}0W+WkX%a5uY5zS;uGT)SED)Utxh|>aC!@Ipb{;;*l2P==D?cv=E zhscP_C|PbYd|ZDTn3SGn-inG%@o1KMGL*L~{f*Ff%`ZL*a9g^z2!YsK=CHu@Rk{9y zr7}6nGb9SD2!?(jPLuhGS9iRj33B4OouD)DzK}<-rJqSeY#sEeNL#NmkVm)dy?8hI zH+daYPa1%XXt4xeQk|D0BEp)Bn&*Z?-q(%mzI`i|n?vu6*9wqMvwygbZ?v`P;=?ex z6qi&mm5Bk1-QCWkCAX^gYxTWM&n_-h6Q2m#VX}+h66}3NgU+|4bfl8>;%Esh#@CBq zUpx^WPmuZOY@@S=EDqg<8+ zo^JEI>|LknW(qx>Bux@)$LB}|CILeX?WvIVD*Ds4_h)k?z_3w_#lAZCaD@2r^0ior zQ6B4KZ7h&5^?i3Q=c<2c7Ze^hnmX|m#qcI~Q}n{s>5-py^MNh1=Z3SQ-CGsC^|iJw z|IVB$+u-RzX}si1XWX%MIAzlY(wQ?{qNwwit_w4XwMmmrg>lhJ>rWOi-G@itecSMj zvx91PmpqN&uRrLaY@3|EWtYbwu6aMR(^wmgrvf-U<Gu8PZmWV#3$@QGb`pp0##PPGS9+?WT`j`{ zWuT>)%653x=X^@fqpju9QVJAYN>OvADctwC4NYf|U*@G49^$e66k_xJUZIx5@cEQ& zKZ^LUtsGLBEJ#@3_rNBJl?HA`1u%rUaiJ*8d;@GUE@wSQDg5q$gSU3n4_GoHHjN!IXB+`1+(; z9C|siL2(g9G`|sB=KTv-AixoKECdYe)z`@@!_}|+?wy(;al_nHL80R9xT7h* z+9+i|8KV{E97iFvyuASA#=slB6@~R(u99=hoRuX&SButA+BG+vdEsaYFh5P1F`=7A z4*f;H!h8^|nH&1w?hm11_5M}MQL;a`+UsJ0MCt%BXp{k0#%AV>_(c_gnAwa?Y9- zHhSglO$<9LCWe1bcqk;hHOd!UE=v>>MUQ!@Z*K3pvbE57)m2 zt97t1nH*O3@mg<3r6&pKy z{H8Stewj+NQ@(<7;BKQ>FpE=9r9|ghh6|&W)f93$EFhB)8l-he!FJ%kydb}o9=m5QHWThk90e;UqTNdYmrPA^P|bA z#(^;uXLK?&K&qh_wYr?HJ0L6gK{5RZ9kQxBQ9QD}5A-rJRs6)XSpqq}&X+-1_5TgH z=2;@9XWCz(N|}R(i^163L2r%`Z?Xs7a|L7CL34?eO8?`YbvSGzVpdy#1`&?h$vV+Ozogyc^6T$@Jwhwkw z2duCi!SzfW$ zO8SOn&GRV)olUn^Z9&laefz!8*b}4>0{j}0jsv>EAs+U-d8!_);=4QXr5 z1uHjk0d@Y4ohU$5<|D)me%bYgqGz!TUcXT^e6RCZl&B}b-&9B zROk!~YKBHwtxfwx*g07&?PvVjC_igjYE9dW2A*tz`X{dV2jBhUam%9*UoXp@qi&Pe zShg7%WQDk++!ka}C>rYL$_q=**}!p(>^kt22KD`@D}p zn!SW?F>_=4sEFAub@WeEeKck4jgE3@v%9D6{u3|g&!C5EW!$zhReJNyUlh!R+5`67 zkVdnL-yo}Hs<>#oRcivpT%7RjgL@;pk@ELz?AAanzJboqDeAzei#K(8WXrnVKt2Wj z@zf?7Q9_SB{F$_PSKq;hV+*}(#J)IjCn)WkghC9c3oJ8Mr}`u!cZ%TY3gjiq5<{g* zFua^@p}|~Eh^jT-Zd4>boLoqgLi>US_0Dj+bJh&gfJ|6>XKn@vh84S&Jo$uC>21D$wB)*kQ8!nwyU5=a8npwi#&7NARJ1S0NW% zxWEWMxR3(UjnCSWL$6K_r0|Q6f=3RmnlF6NP`eJdAxua*`)??I+DAX3AflOLZQBs_%|3DH32yF^FQxKmu#2LmEfND_^4z-=zp(>Tj`T4$$c$zrP{2D z3qC(|4fOaC#M-pxluTHy$+ zPGYj->diopCniRX6lmOf;;1avJu50DZRcV|X(l_(3s8*{3J2o%p;-;u3|926qrX7h zerZFLE00QIEW>P#rCU98_j1ZxA>MtDvI1ya^-vf=93K;4_);{%c`W@}b*R_5_*o@& zoz0V>&em!)_0|0OpE+nl=w0;}OyfRvc1Ty{b5km1c)>rmi||WtJ{R2lbe;lEf>=5i zF#u{GMnJ>ydq?t~yQgq$K+aibZ}0)bOCFt%c0W|v0W1{vNY8w_oVGb!oKoWLn81>h z$fZI zJV&uKfN|yUZ{=I=+(1!oR`-H@T~4zb$cCgjtr?NOu4>m(K-&0|Yws6sYMe?Vqbwg- zc58ind|GOw~5kAn?=H;a_I8 zVFuaF{unwlUp-bHxFB-8J>DTIRMmL}9xy$u;`7`0YW)WUf0o+I2+#aTF;h%LHYsh9 zU@k>{3}E3isW+RrYAP-VDX4bhoYB!9O-5BY)d>*DhPht9zP7mKJ}6 z+OUHe*9Iu{tT}Sh#SWj3-P5{b_pcUcUWtEiy2iKeO=(`GJK@Mg=ZLhCNAyaT;Q8ix z=`M8t!83g6*{KnO>n{GD`HnDFc_2})`E*Hmq(Jjf9@ca-DDMh0LOEe^YUB60BnvnG zP#aUPQ22-@=3>w}vD8pCNzB02!L60zL??hq@+=B;I+nFPZoX zkCzuDRfSh6#FOjNTRTYi!LzHN0O;M&>Nimb5tThW>#Zea>df9j<8!PMT?#7)qpPQ< zOLu%fGeRsJ^}t;y;OgK%0N-29`oY~)nG2*qP4UHe#tsX^!it=6l_BA1igQKi@xdyu zTXqC4n@^r({B3pa)H!D;!Bvykw`&WoK}r>`DyRLy%rk5t6zF=w9Esh*njZ0EY_}wBIk9Aq|heKOyeSj z9~?YXOS+lVXoiU2-I~_8QG#=(%1o7EJF5~FcuL(no82zZEi{07S9{a@8|VBbn)AN+ zechc=Ku-b+JAyU(I>U@QzC%gX=i`#oM#Nn-1d>RbIx+t3yTIdXXhuDkvD|gs$BKJG zwf^Pmvh2r^?cxineaTHnOpVH_+n>MrZ_liMHIKBDww$C214DBbVxQn#=b}Ym>J{!} z&%@hI2i{CHs~@4Ok|Y0ksT3dw#{ax5_W)O(N~cW&#ThoI{6|a`B9jcELuNvN;h%_})a~@+4*kw%M*}&leyjnu&<95{*Yq5E8CGGa`v` zgC!PPK`}i3WgjojAs*?FKYt!v?ns)v1alP@E$MiE%4NYzh`bM^N_qj1Lh`Bs^PWm6 z%po>O;GuqLFq^L_VYb1f&j(j_8-CrnHD@<|cJhl0Ej*NYMVr_e3zQ`5;7G-kdrb6~ zQ54|Xp%_Z2S`4lghBhH}M}%njYfD`{jJXloKKjlRLD6sVxi#+9OSs0|6JQ`x{YjOJ z5FS+OA8S4tXW5OvS4N)>$8gD2A$P1HQF zohKE#wHwsSJ$BNbg*yg>X6UP5{SFKHqwY$!CrcpmriYqSz|w~TP73CW{3I+PT2XeaUwky_h)`34+b?9% z8Uc18eZDt^@#M;39h4Aj*7;vS93W{5RN5>K^&Ln8-Aj@M(7ztL;ijO(P^FK;!kiq| z4}4yGV8eRZF(9~@z_tBB;UDR>PmCF3N-V_1c&kQ~7z%NB0~scULJdygAw3B`MvvC- zgXx`-pETOm{p8Qjw0rvKe#?B_9X}@p$}AUVCG~Gnj9!rx>`Ucyk2HtwsyzBI@xWA(>-?#lJmmNoW^~vAaTX zm&;ei6Z0&A{#>^s_h`Um@S^}0DIdOS5K&xY;;pl!6D;@&#w)pTl=Qf{x8W3ODfKF_ z`SXpsVXnsx4dL~{;d}9feAeccs#wNX%+L@ZEPYdmiz4^d^&yJb%=!0orQ%^B_|bGm z<+v+4sK@H^N5885x?TKOM0qe}HORH~$y!C@GRGyTT@k|X0Gf-07%5Y^5vReQhL%pk ztf%%fb^C2tXhR&kCOwhc5l|2ciERIiV0LY|M^N|OE^R6!^Op5AXo zpp~|XGRPa2+``5J;}b5=GlYESP?%ONF+==%kKQ*`51(NQPcCG+MZ|08l*~CNz(|&$PW){fqImlYA;BjL7fSL>;E;rx)XneoGP78|x zwR__st=L+E#%IK-{W6mBy1A0OIfLvtD`XxPl*0+m87SU=CuB_R%GX z_eBNQz46YF+1G)o2D48H4ETv6Pxj;Tm#Y32`xQBI6sD_cK$z*adIynof8K*>o)Q@` zCayl-wK$c%VwN2+_c;NruD!|mtayHZ43k(EzU>lYs_?Uk{ha@f1#s7Xm~X4oT2Mul zyC#j72C z5B{krP+)k$Cu;j_KPhT-h%|pWOlmtI`M^3p zDwOW|Nih=!WiG|jWG4=9YAEB6#Rnm$!aDGYT;FlA^Fcger!z=>UPzsVo$;l6{RrkP zjpe59;*(tiG74IKJA^=_(^e+bVjZB|3r{yI@Gt1^P~|%~FefLRe%k2QKVoe#n>0%BZ+x*W}!HNR{_n0<5V@GOv*RV+0 zpARI@bE;}QsQlb1za_S)`*p}Vu{vw_5d-GWn&m6>9aB#l9bn|n-#L56g+4kVjOZ_HCNvBA22yG9w#wWpq`Yh;KE{3VAJ!opXd|V?qHzlb|&MDx}Es?9SHY0Wpwp@~f|^ zeoQ1!b4IxKPTjXe5a`GH{OllXj46f%#{x7wIgVnB??qu7a(UpF0`%E?K9TkW)AzCQ z{hcGrIL5x&SuVF6RgQ6`Bsx^;9rdL)&z0PJHagx8XJ}5F-8uD70(Zi016pI^jOh=3 zlD7TawO3s3dW~gZU>4WR_gMeG6%NyNzd0>VU%LWpR0mVsu%m$a%UhdGUPU}sv_*gO z77^~_LOa{>CjJGf>!Q$Qk@Vu$#bTO&(v5elIr}GtAf`Hf`eZO722+EZ+fcPXQ(Wq$ zAHqq$;oIQ?jL;|fp795GdCZM+Y;^K;tlW@dEZTHms$y)mdI3oPMb19fMojO|tbOIi zUW-=Hg-!J6e6A8-uTF2hdaC%&6T*@Lx>q08fb2QfHqEG32vn=h!=MEz#arYqPHVBe zoJuGo&-~o2QCB^G=gbjG=X37v5VZpi%Q>M>%H2L(o-{lx*JD+%XviY{RkT6Nnc7k; z3_^*TQ4z=}&Y?#;2$2Fc7fFJtwFBmdA8d2n27hC&?u|PY@a)#t_PXny3O`diL%tKu ztn+;KSm09$X-8pokU<_%&)!7QN`o_rUPK?Y&*=ZExx(;f8rJf+45Md1u%DT}hh|@X5wzkV@LN zq}Yoa{7;P7eevl{aal2{i^KupkSaG4SZC-Ri=v|zGZjbjEEflQ)<&{urvx4b(wXlz=Z<&?1pv!Xo59s`zVlmsJQbH3P&o_ z!$MlwJNRndh@oXWKd;b^(u+&iIxZmYVD*-ZE??_&jVCB+k@N$J_biTM+7~{G(57qf z)us)m#!Q-xnW`SIA0&MEyU9dKZdUYPjdjhQrIdrmnk~QfO+dUPvH?FlGMi6yo?Y_{ zP+o|(V&Eu|xf&P_0oNpIeG2V-w&cz-ADgr@Y-UPj*c{1jhF1(dSmp!*mr!ntb%_xn zrhsXGu|r$&V#!3QVv}<36VL5zAs%2F#hgzeGo|Kr7%K)E!*~OZ7!XUZb1@3nOlB)9 z0exMfM4=XkhfA97$ES>&85jaxEEG(6RSj|_ zwJF&1WCdDQ?#F`XX=@-a{NS0Z+foW;InR1B#N*XaDyO_k!;Hnu;jCCzXX3R@rf65Z zvVI)-)E(N2vb1R%#+a+QxUdh$S*r>mDN6si3A((Huo^G)4k-)ml%i$#3Jv}x5q-kt zJW-|E@fX$CO@Z+a6)NQq6|=1^#ASCacxa*lCnwB{?=p71bWx^{^VU2uP#N^1L5qjT`o9n*R}R?q(BGdf!Ssz|4!?qk;Nh#(p5YzJwbm8cUl zSieEXE_mqOS1I+(XOy8*?{wk`*LkFpBD3iEhKXVsO<&l!IJHko2oQeD$dI_S3HZY9 z12eoiPd)(cxVEI_q*AN*t|5?acno>tM?kWJw86z@`BA+T3Rr&t3T0O#H5c#5H{T~$ z*D8{0i+!E%5qtRW!RZRB)qER1$d@M%vE}XPx@@NnE1Mh0okM|>QxBrEj8)PDkB-Je zSPK;DoF0Zv)7O{q3EdMeAxD9B`|SeGkw+s#TEBy*6==wLl9$fj|B+iuL8(}oDwS(= z8q_;NR6(%I#HK1B5~5x^nLKM+LK-h}@F`a|u+fN4bGh4i8dp4C4=XQ)T@5tGM%D6HsqKlbq0)PyhTYbKma zYb6$lQAfylDYE)**!QwPDZ#pmAGi6wqCXV5XqXZLK~7D(ktuP{hzJLUr;diwcRw?FLUPZ-kCJ+ z+5*;gY9m#O%aK04p6bZ^^i4YCXcP@jFg+exRx;jTpolyy63A$;IZMXLCv^1<&K%pO?VW zZ1IulS!|D1AWdfXd8i<7Y@Yb}j8DXzu}D0bWpVjBWoo0`wmemLL4jBnVo1-46`h=2?gn?}%=OOf?8&Md2_6Y-M(m%Yde>?)TT0mHD%UlIi z01sf!Cl{pdr!3fubDRBVS@qTy5U{j5K}m$k^H0&mNNesG?^s^yIBXo*-YLSP(!1|c zSQ{$(ixEX0_`K*P*qJXYCi=i7hRfYQk5S+rX_Dt9i@;cHPChsn1uu+g{RZ;xjWbrdSGW z-8h`p$P^IX{Z|95KWmjKr7jDE8LI;>xl?l9T*kv`hm(ssx!SnQrhE}=z^j9AM_R#l zt|KruqtgL{91X?V=rZ;KcWZH#mIvop4+WP&ZIN;JrX%K{>Mq&+M_lR@r>V^1Z@J*}Ee5B{F3+C@zd+c;MWl#ZK+uRDO-I zu5A|OvZ;0Mx65(fo@%O>)MxiaZ)S?l^ruM-de+_Q~9fb6BZq? zx+l5f{9Lv|kUw_uiJNxacE_;L*`-#cKYRmj9|&N-U$m@MXNJ4PBn%x3-AHR$IdH9; z?eO&d6xdMe)o_Rs!^Y%K_sgpS?VcE|WL^L9GTsG;M+%Urs*YGcMf(>=jS?He~w zD1yTCyH|efn&ziGZ&TQ%Ny=B=hNw7YE&w=NMYAx!LtIQEH>jw87}zwBdjl6v>O^bx zc^b-s=@}ZO3-6-B@3Eh;V0Km#{Y@=LggviI*8LEjh>xREXEoEc$3RX(%6--fg#wBB z*9-$kkYo5BGKIT01JwQ#R}&Z7*!Dw7=fuC?{U1k10vA*FJ@3uZv`_n9)1G!o(!y(@ zRgx`9ri3JwL`n2oB#J_j^kqsCUzCIpMhi(2QrV|$38`#ZKK^I^^ZU)Y@9yh4_uO;O zy*GdC8$=@Za*35j0K19dmm)}eIrYM<7@d3}ri-u09k*Xu$FA4q-r&+i9Vi7XT|^6Q z>~n-~`}?#SL3zpwPrPU%ct~0NN+ht&7<-vtCDa_SWu1oSS!U{zkEe!1>}z0Ze^r{5oDig(5$d3rb%sXA~=p4h%1(GF%m)K`2LV5gzl@#d8^}Nkw z2a~f9bzStkTNfZ@v6XGgm)wDAksc8_^;wKsM?z96(e%uzM2r*6%Sz55X~dSLxLLR! zh~r2=n!Kjj;(l%OkT@6BQaV)-BnJTlAyCZK$xAs&hAEb^|FHIGmnSrvj45wU~9 ztd?!m5AIXP8|m%IbPA#>F7+VisSA2hN0Xn&xw=vioQ7H99Svlc$oXu0$#@3^Gmt?Y zWNxWIXTtNXj^$!oY1DiOxV+LI$jG=X2<1w;ttC=eJHl_K1X0TIF!g#=Tvs7h$8^W8 zYRR9V?I|bsb*vY!Aqi>l7cqoHvK5P%x8=ao_^;eh3WyL)S)=hzc6GxB@=63nTZl_Q zxVs17T-~E6eVDMi{sIi7=3X$rN)d2r{6(ffVLktu)oXqk-K8k~p>XVJp&)hV7JVZ{ z51&%$-J7lg%UkLXFmkOj-_6IgxIubOXdF?@4L`wHh+Mo|@%ANK_6{~@&@B09MuDi! z1LWSsQu5axYLm#L`EuE$8XlA1hvZO;50wW>^*b z?O8DXL_Xo{0ZOCp{QvW_%I4@Q#>6PQajsg?+jY_a~}Mw{O)8y@4-WnPnx4t1(zcCxVd@K zw7gWTt=Gs&iFhqpt<#IUt5Owm3kH@tzrV>%)$v)c!T5UL{n|*tg;Sfj{VX0c4U&Gm zH?-fd(bLi}CB;I~k}91vbKbEQ$NQ9vkkKNuv06^m-Lb4Y=)+{W_BvCAq8Y-4E3cQa z4u<7te~H}m%;N34>f3Oq*n0mSgp!8zDMX(2b*yC*M2^^8r?0k)e2gwrI({M_wDG zU_faq6rH%f8F$I%iN*p4ZI$#oOB+3R23eYNL>NKZgZw=!=*^2;|LTIXd?K(^R;&;i zRB!!FbBmOF`9(J+tJ|m|Aq#ma=h{66pzR?cYvh($=c;Jvv)Z=V*Vh z#bhOQ2>94LGP`+3KY1}_uS{*-SmfH-ncj-jw9v3o)G5?CekLdssSuG(%{(l9WngNS z3FyF0+czLFq~0my_<~+G-=9Y00QHe^0N*;OebOLxNtX7rE8JD>oSicvM3gpqg1A4h zN_`F<*uXMbwmo>#v>XY+`g4lg0->%zdWUbp&an%k1YhO7$Hx29z9G+e$JG8c-+F;|$Zy7-J#& zBGm>E9zrlgdh&2mVb|*;`2u@d>@+MED9EjPgHZB1m%{@)-$eAt(5f66xIGtXOgWHk zwrS-ixM?)JAgCL|5nMti5UgZI^pr|~Sa>GH3>GU@;#6Ui3xn@Ex(Aakv0tU8fBUe`w^)gtgU8T^_?J+`2wW> zgP~bw8r2{eAaFWf!;40kofP|+GWSfnWgSIbS!z-sQqs=$GCpd zypTvzWtOQn5s`w_Lt;n!+TS!(_E`KlT(e{Qnj!YE5qX6rM`eghj1O3jKfYf`yZn|+ zIw^KAVE?Y9)edw70y$94jQW_>7WE3931+jUWVvc+V_A?8^{Qv^W-Z8#(3}?KLLELQ zh29JPo~>UyH1x=I8~L^-ipe?t;K%wqxBGgy`j_)fKB0$7%bi%?D0sql??vk(G3Dbh?_v@?kW8$SlG20w#9Yuzj`y!beQ4jx4$_xvZ zo~yk5j=X)T`P9Or-3HZpV8~pE6IWD+!5XZZ79Um>)5NVzg!c6@oBYc-jn@ z%d*?N-RB5lW`&T@MHw72j1(~-H`@`1PoUS~;u#bWV?SYf%E0vucP@&C?3zZs&Is94 zVz+(I7<#YHC{?w@%T>MP769v^y|?7?et(*1Xc9Jh#@HOv3ePO)GSr_+;zoWH-s$lq zFZc`2?K!CeED0-fKf)7V8W9bye_;HB794Zs6hfJP@i(!}79lzBeE}Nm-Yl`3%0>i? zvBy=QIw2n@c7Y`<6!{$&;+LgA0!Au@w5avnQ>=hK1x`uv7kHRf9Z1bH0%B7b_a}21 zCU;13fJ<_^XUGe*xRLu?Jay^RIoZ{WT>9y9UqG!H`6yC1> zaG6LwoqgacIQCZ3L@ZN7!8WG+3VXz_iwAC|1AY#5#PYW-Z=_ScVct}-+s5umKW5W} zMZW-x4zAVRJXj)2kZ!Yb;C=mKihgafV%4O2X*L&}r`^pwY%3Wb)Z94qZRZk-_?t60 zz701CGR*vhHneuFdy%TzQz^uJtq~8bulUC`_VmH0X6?s=|M{;_@yHJ|+GIKXcBI85 zC$c7Y`%#Cl#fjFR7R2tTn3?9}PkLs)w1R*?+V`EA-Ya9uyhL*sh&FLf4ZL2d4qAyb z`n4Ei58hqOEPf`nHK49+s$aoauPiZ(sn6AyYd^3LfVX?bK8}4{%;saBd?857uqN#B za^`O_m3)T$uZu||=YWjGLRtR(zHc?H_$@~z!$F!B7nAWu`@6s7L1y{P1f%K+yE|8E z{!pU7cX}46)!1k4J#+o0+Ms&o1!mZ9fNg5!Nlq{&V~;QM;ql!Ys$(~GXYYKtFpb{1 zLLQGBE&dLJ_xnEw^usrJ)3K>?f45nfU7Q}iU~a?L@I1$MT^KIO$T#T=l%*8XO+dw??ya$edgh=k|r=5 z!bE+IRmo*V5_IPuP&2A?AH}fj$1yKTX5vScrrxyqsFy+cOwxWO8Ob%Dci&Lh(z;Us zTAl~N5-VQ_+UlI{$?3`tiW3U&<}vXZZOuU3Y`@QxSmziKba?AF{*D0C>5KNMPLP&n z9K3v@47@Hj_vfY{iS0SNW`>(^wotB`{d%f;5Qkb!6oAUR^;aNTluki(^IDUGxyl_Z zH)K4Y)WKn|-ufC~#1oZ_DYIc}=Sq*!jHycM%~*;30W)Xt0NzVfC&kt<5OIm$H`Hnw zMKq|PGbq#{aAG5kV@}7GBx4i@v7Tx7rxl>Z4Cz`Pi*NjHe9ivj7>-f<@%$wqG^4l` zxW0vOT-@UpR2@!d_**DKF5+^xY8buHBxubDkUlLcs>nTTH`D>Jo1q#llvWF{$dPU~ zepkD!Y#nk!PxjnERjcxx)w5|(Am$$z;U<>bZkts(;bmlvN?T`8#DV6u3T2lDKxa|; zn{ex`B@&No+TFg*##OMg?KFi@BB52X#YI9uJojQ-EIqEPj;*1U726ohOe8q^+5#^Z z#$LWCY(nWwuBz4E$%&x9L<*Q`XWlw8W?&B~d~a-kJ0`8u;(`2;zG`+k+v{I%!McSX zdGaRL7ydmmZEin%{DJV*nS_3G%4GW1EppTXFw8+d(OcCt?QA`7ufnG9bJLe^;ljzX z3SQEQqpKv|EVhvXa|xI*^(@LOG(~oJOD8NwjVGn$(7SGmAeSht7*jic12pP_s}0gQ~*T4fie2({+k zpFMj2t@NHU*nM-gBhQeJ^IV3|UP=IDT!GXqR5-t9i;ckx_kQ5izbb(^0j+y)QwQWz z0%QaKowU6p>xV+ockLaoEE=D`P5Qvl;Lg<>8Tj%ybhmutxn=SfRh6Tz?fGc(HGqm$ zkT=`2p-r7sIK*PMV1^;In>=fAzb%Iu0`r|R%n zCMH#GMY^JmP#jkvUnDSozb@vx*;5AhId5)sqzw!yD z$@YR}r*LY;Qze0u>p({&r&$K<#>En$Qj96_*#3`~N2C~GHA$Ta4z&;NiXd1g{_4rO zG38lAncbrAtv5KQVYRHSWNXs!el>4+K+7L_PL#1@R%bcNyOfvjb}y0meTzshSfgBd ztwKi5jjOq$xH{57S$#zytaFh9-~Dq2DnZhAukzvTee25W zFEC#5>){_MyT^X&H>!=0H{9K@mhKr*f69oSRDjYUeXr{wcs#y?VuNzV%){r4=j@r* zdm=1dvz755yO~uX{JX`)Fa|v7L0n$Sf?j68cs3CfCe}ZW zt+q0&!*LIiJaYU{`q8Xtqa8oWP~FiXefa$Dtzk5tCy`iiE@d^2DHHcTFGmqd6)bn| zBA2G`A}nfdw_{WWPJ=+?Az#N`(XN4j9=GE0hbSqA0Z(=e)j`~nAO$ajVI?E8gW6g%#k_sn>-;CM+2eCykg^fej~q}2DqUc8*oMd zAU(N0kW%~yA5E~_sxEWq?O){z5$kmWo;gUC$YzBe*fMDiO{nuu*=_wCPPU<9ra{=T zucH$JW*BEkNEF2}jRNl*tDr`uOoH-Fx@7#%Dhe2L;`zZcQxxnZbzeO2(Vcd;hk?>q zB9+723|}mCw^rRBTaU$AV&pJuB~*iAr&iwU{dd*}Z`!$7RahXr=+-f9NjE9i4Iw60 zh4&M=9juN9L9|~jc{=<9z;dk3U+lL-4fiinU|89Q@I-3JWVYQpboEAJHb6#IBT_pGZ z{CsWcB)bao=gf%iH#iardZyK!q3(07)#G;yr^c9-G%TidkaV#ZF4+pwD$HWe9ZPdh zzNQe_HGn~bSSprBgoIY(`5u0+20sm3UVn!nHABfRx;0s#Yl(Y!G+5j$z|oUuk4jHQ z2AKt`o!3MnW#QXsyf}a0x`i(NL8&gre=zmsmvO9xY=P`|Ngs8!K!2vX*_IPi-k5Uu zW>jE=?aw8;fG?mnUtyigWdFn6aRJk)AaV|gK>jR{pW_w4ZtZR%VK`BUnhX;D)*!PP zAJ!Q16p-cNeDJzTwR}d5*Vv@6iw~+kI~fnR9ZM21Z2_M#*EL$)u8tRjXx=K>%pq5{ zkHTq(k&pMjRng$Fm*qGg$cbrRY1B0aiRb`^ohWOKH%Ra1reE71>1O)&gXGdoy1vtx zLLTQBX+*?G*&0O7*RK$&@qxJj(H0sdfo;9LGFC~$eg6u9HXRnVaOH>)*wsrzO5v$3 zGEHKR2ppeWz8aL}5eE!+>HJpY42BTvKnoMVj5}MF4TH=K0O|r0cjYdvqp(fYmwiTJ zL{~Cq14FP#2%6(=_FJ=qv1Gx>s!keI z>y(0b%{k0R&6TL&c8oVO8ViyLH<$8o90(cf*SMX0Eqz~|N#gyN&p%*d4=|8!x8y4{ zkblk*L*D?03);Z0u`LrQ1QRE<3%<>qD>XLK;%Qv>@%)BEsaS`49k$Gpq|_Wx>EE}8 z$1d8ez*_$j;gs{e4;=*aZME?-+m$o#$E1Ku~3KMTkjyU+eOqt4K z=H)i8ZC$;GKYZ)AflE(I!YzrUv)*0$Lt%`2Im{hIGQMPRIco#RrMvE4Kt+w~m6i~> zpDA$x`G$I>y6`9bmgG8v({VEmzC_^y3buF}y4|T2`%4a;v?Zh2)0MBXTWQ7BK$v87 zEXb8qSCsxk$WU*UgPQ4DA`vTJ2j-F*eizk&=vlc#GrODk@0cybuD{?yD?e(4$lf4t znK?VkY1!{Q(|*{#(0plmLC3{YGki<8!*k!JyMv)sildB^Ognhvn8LK%HEvCEGrvd2S_-Fr{Jj5i*tY#Zrq=At4t8J|cIB5` zd3G`Kd0of#ikyJHwRUgq5)xiFhiv*4K3AvN+ao_Ii!1@3>sy=aTiT;{+;V)z?b!3_ zbxg_nx-3{9tFy(tZ&EJ&KH+-y;rGy_4tUwB8AvCCJ?PCJ ze^flHnyjj1xA2y#4k#9=|*6pRPb;!{$2@ni{piYy39Sbj0O-btR4N&Po@PX`;fb!c&>} z9#v5N5HupFtOWBb3$Hvd=#~-!a4qw^Sz=6D_uL?x`n$KzpAs3UD}N}%?O4R1IL6e! zfu}O-Y*eoE!ZbqQ>t%m=j~LduUR%9lm%aQs^}o1mnl?~#_-MLbkNc*^Ux!#F&APQkga^Bb8x_hf zujVts(@Ill*0%7^1jCXi12(;9Uf6~okWD4dV?4Vv3P=dtKV9{@i-Nl6v!|mf!Xb~; z0!-1gGZk4^;0`x|xnLTNpITGQkbekFxkv+R|G5gJl%w)b+n?gBqPi>)+t{qC4MW)* zjYo@sF!b>dYNY_~aU6_2i8X|H{NsC-G^o>PrXNEv52+@xwh!4~u&TR+4o>kUbqKLY z7oNim^6EH1id4G!O&;86sW8Xo?jQyNe;UDv_)8DillObkKpMo#{xCPQ$%CH2ii{5( z%>rO<;??JQs~dR$Yq#Z&wCE3K5P^h1IMEOFM3XtTp!Idlq(m3l^v%0fNkc9KdY{$Q zsS`1cWoTv?soeIW6wB7VzZ08VQSJPRLVK-9Db2Z*#PTgtFZ$XXPSUewb!{J+5`1wv z0Iu9!iY13dYElR#{^&=OOg+8B-5;^>oyN_Iw(j#J87e&&55w;nef!pEpoBO$j`X_wOolqeQmi*RZmfJOo%_F zrIF_uH22U=5wQ4~-aHW)jC5n(unMr{@HrDg zmJdWinQ$auz_{A2I=H$)uJFuM?livd_*W5bChc&2a`#=EbmNtWGL`;rz*w3TzNkNH zkspPPW&<|vg9cI*CyJ;pzRx_idE82ac|eHk>w*;-x$)j@2A#p#FrB09gtMizXncd4 ziu<YKDTt5xO|aIk+?b3l@Qn2j0- zZfnCX>G?V?+E5A8^7L%aFG+7aru)-8_AoP#OrXapS!(-PUg@3x1V(&pjD(C!Z)Ie7 z?)w!fkkeg~T~Nok-;UI%{*%K=;*`M|Z2_oT9`3N@xvY4%tDRRMshe{eHn3jguZ$-n zWcHsO4wh_hf;{rmU)>Qnlp)ssNjMFgjA`inlDdWutB}F;)Y}#!M>b^8;4BUrUmUM5F*`j=R%n{cSzZA0x{5TqgSv5!*x)xJketLvViLSj zfV=mR6WM)k);HF6HFsC$&C1$SM@qoS4bfvX5WT1k>n#~fgX^M!(`__z(S6lJL&&?F zWmjTO+nO&Tp2E|@js?rnBv0R>(14}(Vk4vnvy=OLEMYElXDRpi_;{L&j1`H`t{E2Wa;L;$&{8y)a?2oDVg57?9ig}Wz<($fxq0cmRy z%)<9j(}Xg+kWF8?fLFoCrz8Di3LcmrK4Qz#M!CT9@L9B79l;?n8W6wAve57j8W}|c zI>`=7Y?9g~RFFZWPM*`wB#F=T@vspD}9-mw!HzxJSRn4XUIP@c9^yH-vK+N^ThsL0H6G&oolP%4>1=j&2MeX-T};zXFS zS;iZg9VN3&Bn}qL`zfobawL?>n|JZU(rD3qDpbMZ#LXkO<@Dax>c*VqrYudhOPx8h z{LRqs!{+m8BW@L|?um7XXJUi*y^i-jwMV*2(xwjVc{P?(RmmfkW|>JpT=3~hkk~r<=WTgiHfCkfIV<6vT$50G;|YesTkcaG&)8VaIrz+P*EF1u4CONds*|!;^N(FD zSZSH@wWoJ!Vh0T~uLs)t>pxS=4x4;=q%b5j^?F+TEi!wOtPl1E)1dDZF0;5wW`^c= z2l$NH6`i{srRN?KVgG%%h_G52ulb8`2a86gD+HIRsryB@WI@?)={iRL(xbuP375d*nZ|SZzkS(F=_=Vj z`3aBmvxJJaJT5V!T;?c#>O=9cZ@$&n*!5i0=l)PIZ=L&g0prS|fLEu=X73%VByut{ zbJzv!&2lU=#UEJV?ZQyWPrDimHD)B&@ic`*?(SnFtLWPSd)RW?7LH2hsk=7G(4e4w z*MHQVt{y&Ai6d-<#}iZ~4{d9}Jb-Z@X+BuqyF#CuRz0|ahfXl+&#|2SL~-zvw16Yf z;XvSnHQg3c`(?9L4)*e~V-^KsAR?mi6dL3|uMo<8MF1+7Ob`;qxa?N#H+Z=XEz`ZC zq=LaDd31sX;~%`^ZhJvCkoMpMxX7H||Lis%h%$OvSt9~Q(>n|fmh0-U7hl9unDS99 z-%^+4KqN1?ZPN6p0F8L$7l3ix@t`_dwCsflF-N{VLU+CAa#yZ6C`7l@@k;_hhl&|> zwGrx^CW~7{=slM}X$7K}*G3`6n4XW{gqxUvxkPSO-5`xA0I ztw6J0Er0vt`356RxW*!xmKA-@;zGhg9Y1^iFGD`oFK|6}1{CzXt9&aYk}OX@6`@u9 zV_3-J!a+3xKSLuTu49;mZ*Yb0^G{$E5XSE)he2R;!<2_t#eugJTi9y1K4X5GmpZk! z00?`&^n{14j=DrPXnZ~*#1O2zDIYx0v?wn{E8aUaK_9`pi@17D3 z<%je^vh5~6Vo!wZb#iyx(EB>crfE0#HziuT0{wiy`IA}^@&|TAkSA)6U~(YCb_Zf1 zPZ+atjzm1#WdoIN(`#uEfW8N_3d_ql=503@uSjGx$2A#PRf#Tc#qy0lDN#|QY|hgd zqdB_-_w@y!WcAO$nz1qdjWyX13v`NIAFX~rZ_;b_)p_G-TGsh8F5BOqZrQYPZNUAr zLSU2^teo@pesJw=8W?`eWGPXhEybehq=S}^JqH#A;GnAC1S@Xg42#{BBZeR)Mb(o! z&n5^RZOMPCqstsu=Z>0kf1wPQ( zkoWe_%dpBS<^nOxX8iBbDzVZXsFm7BV+%6k`H*3%Fj zAShsHr7#P|qV}UcYbw%#eSuFYNX+{f$lH{vt5nB$YV_2i5piS7)LE&wFLHyZtSN<_ zEp813A84n!W2;D;EpH|)nlnU1_uY*@RHS-2gEsqP-~w?n9=s|N2vjCafdyn!OihA=g@{1qF& zQ~qg`MK>PlD%Tt3881|K2CjTcJg}l?$d3~A^1?cIkvy>Nzm-++pQyziTzBXAoKbD5 z%)LjO-baC2!fh;u>R~Uqw};R>>KtG=lj&`@m&5o%{HE^vZx;6uabOWM0?0`pl8jp6 z@|Iw+o4lB`upU!*#{w+H z!PC~|(*TkqkE=2Nyx&4%IVwY-3s8Uf2<7Kg%5@>h!HY7Kd1#k3J2QeDXskg&_JCV3 z%QU3)o>fd$Bo?LOX&FG}f_|%~e91Gui^JSo{>|r;d{w!xU-c*=0pzlB@)yx*?*8Vz zZ2~ZCy;3hw%-ZEDd_lCz^02^Qhkrr~AP`)e5Uy=Zw6 z%fO^&jbT{uEsmW)gACz=A{PQeQ3VW)m-sn>^!hrQQNeO|02a86J~=!erEe9SvPmc3 z$qw|Q0`a_Kffx^;5qDIyh1z)cNb*$RCC*Hc>VBKJQtU-i98V_>E;8tpEIJbDZbHh)tv88@?_6?=4qpHDgc?Z}xn_ z-+ES%2vRt&z9g?zQi#-f3G&E@84$KRZx3>TSEzC_L)`j6c4HgEF%EwbgX(Cnp@6Vx z+*Z2Xx_9$~55cuDU29ZQsg3^OkK#?wRyXCY|KMUe$XtH`PKQppX-wSvX;c)%@4~CU9!615bQ0^q7MP*%|?Esrm^3+|L>l@_`!L5*7e5} z(~Oo=Krkp^;ffU)AFIwZm`h&vI#?mM?y5foRYp&l|JwMLBl)dYk1b-lGGc4}3v>=J zboJe62&%EUW3Muac>TkolUd(@W_E-e-3X4g)xXEOJe z(&Q#PuST$`zgm6E7);~ZD4q*_UhC$1-cfvb4{~TSuafc4_?Y`lg?1coOh@ygmZ1xk zW1`R!_xJ5*6Nl~6h_cD2!=l-)`IGnG-y1uY)0iSSVgIfRIc$gzhT4PC6yx-|)gj&v zjeIy9$O?3Dn?$SGAPk%%XgyCw zt-e9Kvf{-$2OF*1H zKM&d-TjsB?|263f?=fk89$E0-q_Bh)8M>H7S?=xUD+6U`9TGB+EQ~N+y1iz53_9b) zCJet^%>oW1mh~!RD^AUCuuUbly#dx<8YZ|v(8o68c*Wz0jTqXt+6*}e5q8m1#;i1= z6PTwyCyH^N(Sd*{K_8gfgFy8-GEf~aWc(x>(B_2moOpC`t|5R>M?-JC$ug@cW0{Yq z5Y(^K5kKw-{=2d1V4UX*T|CkJqIYr#Q$(zic?qmW$miYwx0S=Ah;$waTQUCRheZNh zQwYPv@|w6Q#}Ohz;a}n}4eWT+X#8|ttY{qyF8Zpse^mfzY8&i!-7i8?qGwIvd_0B0 z6k;G!-1y+^i$Gdp214RZJgks(+feBgBxFzHd&Hj}omI09{=AK6q*j|gZ=p&JlYxzA zKWN~@=FbsbYo?_sU^}^3U1y`#8Ts8_B-4h8>fetL{`(sz`y-sux$%sac;Fr2gdeir zIYe#*)#vQd;a5V;PK!psxSo#t#Upq(sQjKANZcZ}OJ8mq0)>Bn%N>5avj8PnXIDkO z$AD4|?rACEy7bZ)0<_hhYU%+ZF5}>nu0aaw2G7jRt15u-RT?@|mWu$_ZQT^OtM7a{ zj$!3?hr6W-7vKLQ!lmBm)ewmsniYvUynYAi5CPNomlO_rAfCQj{r@dc=KjlDjlL<> zWiM(-Ry1?}xyK%xlO{f=?KJ$JJJdU>+rVD5qvBeIy3tf_Z#IwhqF&|t@@AWKkf%XXK;Ptp#tRoBlm;@_%eljf&dw9#3bw#pMH;+&{!IHY za4Gso$Dadcv!Bw_q&@25Cfod4yw3Li`}=jOLnjTVOZd)N;x*$sOW$=z#PG7^*#bg$ zn(VbC(L19XpBsO{Y~o%hsA#qw|M_Ix@q2&Y3(e=cjG!Oq#?tQV`LFJ}C4cYL%)BcN zGvCLy_%uei=H|vdP!uXtyg_Y~IQ@XmZBgRFm|T2(we;XB#r+}b_4~SjIH47==t7bF z;4NUAkz#G^-UA zt{;hintqCO%gK8q_w>Joaqe0RuE;Ls_kE|lI*iAgZuK+CelkRAx1>T@$I{f-@^u+F z-;4sG5T1UZ<=N;wA#ZlXwqvVywJbUAZ$UHPbru}65?aLEP6(gTk!CgTzT2fk+ilaN z?n&f*$j|)g{D!e@^8)orG^D!}3-+aVN- z4-_&J%d#uoIpLu2DD|7)I=T`v<37IJX*osq3Vb6PS3^<7`-d`zGN+u`B5K&6lA9? z_WO{kRY9{iER^$9AOde-iESoM8O6kx-@El^m^+B5kj}^tRoKw3DMijy+gFf^sO++2 zCyu#JtH4rUe$vDHY% zA;axRv$)!B$j$&!N@1GzznUA+B7+A}Q>UQ|J8NBU}Y{b;J}R{W<|Hcd@1 zE6mizVf}bm;qsv@0Xl74Xl@MTNhwNKgg&t6fOgIK%bV!wLiAhHz~ikybm|bPtPATs zFO3mfqfQMdp63%O@|0r1%5Po({bcibMlh+f%tJJBL4u}X|Gk!*vi9)4z`XyOWl-+W zeYY=xOp9~AE7cVa{P7=m-y%zc141|4fX_zJ3&_ZEH+B zfV}0yfxDdDVL!@7mybHNm}Kt#?=zk3bwWCRO3U7`=4|?e&B{(uhS0}tCMaBLkPf&Q z9`Epy?zmkcKc=0kFBwwu!g<=eqcuxS3xqpj3bq-ahq?=5$JHh^);)YP7 zdlr3_jXCgco>l<&-=4j9TtWtpffvOeseZ*}TGbKrZg3+wCFhrKn0<-7Tlumtob}F) zDX%uIlmk-J4$60%HS3;PuY8JCHT75S-2aYG$h!C`&E`ADN8&sxWSPgG%qyL9DRMz1 z%!uU<=}79i0||nD0=A}$QtnbRJ;Ax>@<*AamzPH%|PvA>&@;Z|4@phi+hPpSbrmLmC)^PmEE^1 z7J%mG+bO>{;~8JP9h~X^(e=-;dR*Nm|J;%sluyg}x6W8$7_5;I#Ed4!Xi8yH3G2V` zW%&&?DpXOr%$>RV*8gpp(-P$E{P||kpSb@t2Ub<|6EowrTF*D;l0AtuCsJ8!Q;l2t z$ApPYE>o+SMg;UoM0LDPwd`cl0~mHuFm1MO$Qfjq%+h&SHs#i6gyxY#HaWHnv zNg<>@TVDlo;i>rx|JZ_6Zgyem8<0KxWMdBE_9wM3#MPtb%@~iaq7mNc79o@jMji7t z`3LZ1N1J{>I`GU9H~^6xJNGg@n~bHnYLqTIL2r=|;qi$@1?=M>y^9tLl|b2j+YBC> z)0|CJ-TLIT>WnM?|)i?ZS)B7OaOj`ZDctmRIGu-#YM4obY`<*+4a`}WMoEq&j2k$+Xdxl;3!TX}#nQF)CtcV2 ztuu58oY!ZxJQ~254wRgezYO%k4)fd%apIK3KiO2LL9DFRIa@G%0^EOvSkTR8Ka+7= zmq+82LB+gRUd1_l?`1azCc2|QaxNXQISegQxRgRpbYTg?=gJPKo&}~_vO-{%3l~m# zu$JKKXO@iZ(~YmtP~aJy-g1}g-Uy5;Ij~%*WSK-ERX=<=h!*!I%&9^m&%Nq}nSw-% zOjsu4w$e>I%;CQpW@aksnc~7Sx~$7pwJAxsljUWF(r9ifAd=;qIDG`~-y(5sBr|FMoc&-h+5W8}E>Ky@DD|ux-NGud#lyA4as+X0w&+Fc)zdGTI z)^JnF;jpLR5~hE*cro5KxaH6xm$S8Lu^TaH&7ame`|U>O#2x1|<}_Dac;l@R%e7Nf zII09PFB0D5x|P}249fB5>O9huVhnG)C@hSbOZ9l-StcV}#_a6IA$~tz{mg{?U zs4OMy)b^7+^XkEdRj`Qvq{#cI-1PeFi#f)L^Q&SPy9Bsn;5g7aU3jQbYIml!*_Z8!#{N4wzMFNGFY}3ahabNF_zyGb`X5ZF^sL`UKN+(| zR1v(rIBoMJ&c;BR9OZb``FWS`9MQ9$rk{qJe4))0hGkU$XN$`zo@EyDAS&-g$ha|M zaSU1(pr@UOTP&`K4sA%&ti!dt?3DRe=O%!)66*^EJ`TamUkW&o?xq`S((wJa!efll z>K^OYipWesIN>^XEy)l-1+pYUskK6orCCR30@*QA*S6`C5E$PP>E!#qVJxuufsaoc z;m9TqpWL4+zM54KQR@T@^)+H&@sC?59{+MNIEp05RR}_9v^!6%2u1^ppYzwPEd~2) zgPR8M+65ya7|_;@aNyUd)6dpGZ<#4bnliWi9tAH5_Yl)Q|8I^6nUyLu`Y@~GailKL z(8DH3c)TKS1{{b`LJ!uAVhjYV(yBW`?4F^?2USRGhn?=I$cGGGyXF*?c(UpB@whQQ z@?_mRF68~#!Ux(dK#IGts<(i!CWOSp>&0q3X)|RY>ZaTrsl#|=n-KZ$TVun8_)sA0 zy;H4(GGkzdnl9I{PX@j9490)aM|cohFw`H-=ChWHV2acKQK^7Y9Q{U*g3!40Md@2` z4v?5GX$?9_LX5RzcPEXlqkz41@FV7u)WxQ7MSQOt{q*kz;^MTL!8#SgMd~ycZ)?E@ z>zG1=q)!?G+eE64s;{gPu(8xFdbfFvMIzUg#*CD?~O= z4zo;rMU?$emsTWPcD|MW#4;VjPLX)sJJUi^e|Dhb$y5rYg{(jU|Nn(1#*tb8{^ZWD z!vsK&K=8(|5ut+GqDylGW!!a!@F#e&)MstQ3wUv;xE98T18XCR&+hZWbm{DT@G;;%qV-PiAbbX_-uEnz4|uNkk`EGa zbndpwJ*^&R0?$_K&J>tXH(mM?Li1~8-}OpY2GT=m#-&~QKW~eqbmkDtDWt_mtpl3= z{N^iNX9$#TcRRvvty<#CVLDZI*naDeeDJ(69k2fQU@*w0C(j!=UpdeSr+xd{k;tl-d{_TqoBsE(|6e()TH} z_6^)%FmsAj{xSYO@Ha$Qs?MO6C)G_IaT<5IQ=CJtk#f~x?y!G5^?DEOHsWD_=;yiK z@O#5j25FJmoSQ}o_YbU^mMBUKywDdON5|uvDS5k@UEnKT5JmY2vEj>`yHeDFG4JR@ z3YR3ivBwzPP*)m=-4zWur{nG(PJ?!ILpMkib}!h>+sC(=MXH1bl2X3ewOoZV z-vC=(1XbxvWq$0w4m-du)JZM;)w0Y3aHN zNkBJ?qr(|ANTi22C*pSIJ%u^}x=Pv^PD~O4896-%ZNQ0J=OGe*7@tzB5t~Hg5JfiH zHFpa$zLTS5HNg}jrScb`m!ig8fV+`;kLzG9faGaLPO2e1^kY?v5OO9tmk~$!CgqKw7AEdfgH>io z#%2!8;)Cg{J;)*i`ci1u*r67(CZ_3N3`Hh8~4~s0O(cJYatrZkz^L4VzY05M)sE5bjpd5B<&MdohJ8dP`{i_=-Wws_> zNN>#bOEdb~7bWACbxh#n>_Hh-SMwh4_;x9^Qel0JqypHTObYBDYAW@R=)dVhziK z1Zrk;^I2ZN!DCHJ29<2;CriDpZJr#^w}8D~@twsBHZ9(ikSbdt4yFsxG%KYmH- zjV-(~D1pW+bv)sEnPz4G6$|`M(1ZuWD0iM6JWj~5X4nN2`@V3(|2aI}!~qu>b8Rj- zht;n(&pNY$!zyO@dhW3Z)SPd`iR@TQqaaw^2~4kjn_;e{|>I0B};njTRXpI~%O$n*v+#2oDH8M%Ui!*>-Xuf?w!hJv&Ht% zj^!C*P*T0CfN^qaknIF`n~^1Dx$!Wsu*z#w3aAKVwH0)Qcm_lJbO}T44Sj|%cgb;t ztJ?U~L)ocrXk_q&Er?F@>Hc~Om0E~PR@d`yzSFlpeB9|T4SUYnSq7_PF04Nrg0WzZ z3-McL4Pq85-^m`s{KG|q{uF$!z6jE{!85L0C!T?Scw1T0r8=%-@nTKK|*uqY<^Q+@K)vu>|aQKn>C z_t}?+VHjW)PEfPd7{3mAj^W?}1%c5++UZ06N*ZK|1B#V25S@y}!fqbt>pWG*5k?@f z=0xEAl6@=`i!^wi`xJ=$lhHnGXMpHMWyDJ~t8&p1BzZ_rx2&MBDrf2)Q4v8*JtczM z?SW&U|oFi&(-7`xm5+H+c!>7FLd5t{P#rB zqOkHZdtM$KCXM?>+ ztw^p!A(i91u1JI=N?M{2Qq+$mOOm9L4sz5wDx_Kxy8q+<{e1R)zdJMEnfcDVdGqGY zdv8Wy7XzWFtUOFzNmVa8U3_hEhs4(OXYQO-yEjTbvpzW5 zQ9;Q>U!ha7Yadcg9@%?V%)yVlT&G8pqkmmD8cALH2@T+R;lV>>|>N2B`l{RiKFd!pAmLo_!&;w+lDt+(f^^ z>5BXm-ZgzOSo*CPEhr@=DZgudmn?}ZFwG%ebyA{RC-c`Tc8a?PJ!*3 zI~86s5SmX&(Zb*G-V=WK*Y(L@1AjL^v>Qxg-u)KT016zig2}|*NpK7A4Lk_ePjQg- z#SIX3plV;gPW9Z$X6u-B=dkLW9Se+RI|h!)n82S6==$TiBfb6nP-)7BMg1=l*6Wjx z?Yc64*sJo?Uw-bmAdjvb{O3&=L`3HUWA81lW~^^Yiau@pk{@C%BYs*RkchzMMm-!Q z*HiN50f=o}>r~0YF%dd%LFnf zi|H_c;w+H|2!BQ<6tJ#(=FU(t9HmB5 zci3=UF#0GOel5Ul@Z1$3?E{E;0#7*D0~#Dz@`E-VI`WLhgicl;O4KC^0eE;+-A|a7 zphU_~LNSHEh5k?RjMk_P-?aobyg3WeBMEB3S2e;8y?S9}XHS7OGTplmdd?E2Lw>_7 z;V`%Zli_LN=s9?Yv|yOD3MilVHp2n0*tPzB0|#K(kcR_!9QzpfLPyfW^-v&_0F6mL zLOup&2Mt~!f%Ho~K+^Yw84v`tP}pica*&-s_{z_mg3Qw-2SxzIKm*3ezk9a|__fv>||) zxIW)Ocq%5l&}zi5bbKu8kv11rRN@9@ zC#bGjF~HHLgPn+MC@%Iw^#S7dy%e`HaZh?-nKIk3u7CCxAbchX#Fg6oZi9xJG&ZE> z!WTbuyd037)TJN6O-AtmZ?#QFp)fQ!;o%&lZJXC8n)QUVuPw?4+{B z4JF)5RleNC^j=e7_~hrt3Y|+^MctxsF_i1Liqri0`ukXKX^K8$>yP?>0fcvexIWeR zMzIuqT=+=5`UcV$#?IOrQRePRw&w-Cn1ui*S`aR@O)`QupQye5nb#)!O)66{D`!}* zWDJ%aBbdcthkYL@kBu713+#MogMa$x z#)8o`Eb;ig1dj>l#`wh0sGA==a`QygAB9g_f}NlLeq)mL_T@At%|d1kkp3IRnpR?* zgW6qos4>@NnTA&bzCO4-8wPH47+f4AY7^PQ(EWj7(0BrQd8eux1aMHiR0U(-9=F`yPJhi&$E?f@)swE9( z$i-#Lt);Qxt_`Wp|KJi>lq(3!9A%1AQCLQfepk8`svU` zPUur8>d=V|=MY?lH3EL`>8B>zPX_A6tql^4=zrC4tY#gcLAD=wPNP7YE`UMkfbgH? zRjCe*a=P+@erQ(A&I7y3U!g!5y>;Ch1z`48c`sbUKoxkH2M{;_0VXm7!d+WHaqe1} z)(Z}V$j>!s<_!U0z`+KRP)J4ZSfN08-v1wzU}Mb?ueHc^jBYlxW>K=_z;F5SDHASq ze+z721I%jcT07c)oP!YG4gm$Ts$!b}&uQBF5XF55ur>LG=0&d8z(nT6CP)JboZV|B zVb;11mjnU7Bm@A%2SwLF*!915XM=&_2A8Rp?d5L&+D?eY>yo^CFVc{Gn-`DmLirh3 z<-VOonwX+E7Hw)j!Y^XLf^QdJu?Lb1JblBzw( z8$p4cFfqykxrSS^?gVNZ*Biq&AW}}1o@%kGVv6bGCC$tQFxvkp9v)j~M|aVYJ-4_f zNXXsi?08^txa7VF-@k!gjD-r}Nn6Q4Eg)`Ec#`RZ=*d)>2=ayjl7@Y^odzx#7P?(+ zN238Yq%@+1d-2{YDC^ixB8s*fQgL%B8kymrj|R-U4x-P;#ZTff^lPx%GjJ0T%Z9?E zy^xaKyLuj#5NVm^%(Mo#RGYCkzIY*C%ij5?(bg)(O#xBTCmTW)MafeW3Qm+*Gep}= zx)^$o*>}Gw`!D`=KNITxA~^T%zrg2?P@YkXz7RBRY<0cQS#hoCnOL3q5`fKH-pqvu zCuo9W(9{IO%{bmYuz6f5Q^7hY(WxHA=!_f_D1rC`dlYwLo98_J*%D*f!C^obDhx#<$lPtMM&5KF;(i3X@i0gqor1gp31vfRC=MbMo+yvt7^{p)$__V@L;l zDGwTJ^a3KDX}8}J>bXtJCX1H{WEh`i&E$%z?mgyF--Gg%kortG`eYMvDIdE>g*evd zupEA9EXeSbBI;B8nv)jxpyAh6xH~fXrzJYWj!v|0lshi8&U@a89Cv@{ve4y#>I7Hy z<)W3$u$?7hDu4UlJCL9MEDM|k4^9ZXeb;h5{1VVd*y4lj!mi=!m$-P|CoiAN6=|Dq zM}Kwi#Te8ZtQe?r4+d#&|K(azu=e#pZ0Lov4?oF-U17p23nRpA*7<+1@c+jP`OSAa z&EvQ2Ik^A0QnybN$^`zFpAihEfFyz^Jm>KA```NYk zVF=i=M@B2Yk^x2LQt$=9gLOq7VqoFOAm2wAvQGJ;2n}N1@W}IV1%}U?U+Q(;)!OV2{Z^ND(ExZ|d+v3iAKJiQ}7K zqWUFR0n8RlG8?ADMxqdIpusBmmcT*VjO8jVSk$2M-#w{MUxRflW=bjm>JQd&0ALPN z17K~|^}{!i0Q&$oyn}KJxR{d_T7_8&8c7ZC%>Zpwd&b15dz?4Zo3hHdySYp!>dmFa)4nLH9l$~;<FiC0AUg0-KhI!|Oz_WUrn{;K5sMdyLyH3z0SDu!_qDU5bLmgKXjczw!2 zaJco`n2AlaVOPH-i>-r+LFT+7Pssr)8^3Avo<)(jl=wqC{5J6gn?{5Rm8D#K;gZuz?P#^vhQvueGuT`m5))amSV`rhuBZ@642E z>0pOkhP;b+b@*nL^HlNo8L97UCR-XsG?3DhVO~!*@Ybi;5udO!#DJiDcXBkojD3yn{l&0(5^krWZpc+s8Nc zx11V@z>$XTm)MD*Q}S06w>_uX7s*c5UcqAz=r|($sK~05g31twblr9%zXUj=RV$KO zv(akb;gue{y;j-7+>e%}o>F-r^^Ikw;;x4e4;^NMTnac25wr4C`MSu`jzj&_gwJSU z`m*#M%w65fXac56=$r8YX~c1LhG>Jaz3cX&Ya;t(VCtTzo30AAeMxj&*eleOmDbD} zxVXP40?-cM<_Jq4>#o}Q!T)=0Dj;XiK!gRN4iF$l5a2}T!myI4=%hzzAshry_JJ8d z(u$G0IAd<@4K8$Js4hH6$HyC>>OFDP2oxM8^}p4C34wRs1as|${k>~MLiE+y+e}>I z5`45k9Yd}6+(N;rvsRim8YH%A;}#|MnrK~$fr%-?i%hiL)1~C>Fk~#1Nsuv7z#ZTjEcNMpLx5<%UVn>L^f&b9%v!r)5S5b_Gi!tkTTwXQ_wcAL((qnC|A|j z@{W0h9!aV&Gf24c?6o!rlhya>%JjdlhN~gXiYwFB107iGNCLp_xVmZnLnzBAaW2A{ z3qYjC5iyhzT|523k5KpMR5N6%*e~^Z$<}&Ne3%Ht_QscrTc;P(bhGTCuJ>yk7uVkl zYrb>d^js9wz4`Zb#P_B5i-Bo?=Lgce&*l@6D{AG@5Ba128y2q~Wlf8L`JmPyU|F8F%S(G-Q@ke>oXyp;;9@oDfRBV-1PZfqdyuGtON;cy9 zzo}S>qLIb*VwTHp=P&3j|BDjXj@~%BjZ2{ERX(JHyTMEQpXYEu)CP3(@Kc`ZRlonf zkGyGW@n>g@xs;lRL{4wL-^y8c=J7?HsDiR&>+dfqC7b+Fyjafmgo0WIGL2zEp5(ZC z^FCCZNVII54Y|Ab@yT6I7P`$LbVNP2UE~;?z&E6{SqYqbVc*X{Y0KBXR*;R z=!D>}*U4kr#s$E5eVa-GlDA7&>iz1U$ujJPL8-5q1krJY^}auD2k3?8(9326prS{F9CHEKjK?&QSEso||c)KZipbC2o6C4vCBB(U(2)r$(wE#T;3cRRv7L8 zufZH-obiP|h9crv+sq3vKOC2=TcOBz|idL+6umD8neSy*4aj%ALIy zBKnLD|7iX@5+%ZwTZI7!|E-PWBv%O)SjsYobcO?rv+G(?ET?UQ*Q+syr44m0P{Z+7 z7XIiSP=qc+>bu#4;TPWMB$D$Je(>@Au1Fk9_DBmbsXnFjYP|CJr$!^FuCE~E-{-z~ z>0!hK+lWZ}v{IVlvb`p@n{`JwGX1z(3KOryU*YfJF%-GwVFL8%x~FJI0{fsl(LhUa z`pOPiBRLGZf^B6m|YZ@qtf5utHT=V8`nOcQ3r>a{1J+yU?9BTv4kiGO_oEXvXj zHuSI3wN6=bbiLECi+?M(8IZaZ2Wm#!!}_Z`rAt=Mq1o6B?|&AOjRd+R*VBcWo;T+u z-sktk>JKEz;Ze9@Dl-wh=%jF&m6w~-0?Y;0wFKHP_A(+F1M6AIl1xmUQgn^j!O(b! zH-%yzk0R=Kb>fh)ew7#Ss9x#<)J|svlasRiF8auvd~lS&0op;lflepMht)!UZ%~n; zK&?U?A_*3cnh^*apY3S13?GQHu9^UUIn;1+{|FBRMMDCI(Rb=dp#gCK@kP zGTx(~yGGaVjVTPIbn^IL>ZEA@e+JxKdF~tod2S$MkllTiEWfgEW8`VW#M?#w`?G4? zPi{itc8}oMA-5bs>nq_caDn6Rdcf;G2MD3qB@iOA>#P?IVBF}!<17>i+yjYRz>h+P zflwA|1OAf+n`4oy_x;bbk7+nx|>1!%)KouBK8^L+PPzdug3ixVh9UdP5#uEr_jfFVP zhXQPL&HJ%;c87O?1e9-;I=>9DB{<+I!e7fff|L5S(`dl#?cH-Ane$`#;iieV=r(y1 zcd_JAj}3QRqfc}_5g5Exaj11t?V`298UCMaXOP>weBxTLdpi{fnL)+gm+o!AQp<+9P^%ie{uFt(Us#Y*IN1`gtBy({rE_TKw|r! z{;LZ&8;uVRUV%-s`RwJHO)q)?ACF`lmon4_51iZ9vvo{TW^=(L=e!GakkR$u&B&d< zx|7w}VwL%n=i%zC3V&3RqdDUNx&b^S%-`(H)Uliokm=!6Wm;JuJ;rzvoe=)M`?{+6 z?_WjF-^qx))k*ovCMa6g7u69CJ7Wy3KVEJuW2I$wE(WAkpW%pKkO~8&ZS%Nu2nulg zw%>{dEr{9n@w;$pQn=D9PU{+2RgQ&SC)&)s2tg2jJmt0G{16v#msSt?YH3^^UPJ}l?&8fn^C`i_D(Q8yCeJ6l= z;W=#__^iDafH`h301E%U<)OgZwb*9U4D?-y*MQD&0YM6EgYiPKJg6ts1C#E_d4&Qp z8z;nsi#I_IKU8Tt>@na#g{0AI9|Hh+H8H4Fz!Di%wm@O>81ywfBo9)e(3b7&U9GpoYLiTMII#q0uuUjg=!j`r@5aiQjW3 zDBKqe8U&)$2{N;N= zJBswO@`ix*2=e1G@mgfdSBSx=d zQ9ve@BL@r&`GHJyfjfUh<@F1vswEjTF}N$O+=C?hMLKCpP=g9KAC{`CZ81z|+B|wn zgHpKs7h(v32SgG(_uro2WpKdMn6s!1RNRp-pI+^vHGo?da9_u)CgM0hBX`NARmbM} zw6c%&$a~&Qb~Sd~u3Q*4v6{)3kWH^~Qb6=!=Z$A9NiL;}_=3}qWcW>TI6%TN_-IgX zGE4cGK0@1Bxjzxg6cDHK!=9i?WK0S;eMrB+Xb{|UI{zu24nk)z8fl8I1MbMn-c|{T z34p!y=5^(dUqBrH)#t@z<&lmSz|mj+SdVj(Dg1iwt||}`z<6BN&s5lUQ&??|D5e_T z%M~q9KN!IQ!CDAihz-D8Y^r!IKbkAZ6te{>9PGW~)t+hOn9+RUiCdio3@|mR%ZNh( zF&M?umAS|m@M)8VYOF)20KD)!G|vMP1K|E-!mI$EEqY~OEreenoHc_ zto#>VVW^D3t^jcoA@P{ZcP8A%-+WURMV{VKAO~G}`|6#;mvtOreO>MSH}!Wr?d2qi zoIiSYuJXtmk;~Tr>Ch({NOaF@81ScF5PgpRBiHF%a0I{Q6Jl1uPpg zM!U4gr>>AGPyy|8=;}Iai)a=H;j1 zK8X>c@eXrbV&4-lIcz#_k9F1P0miFn6Z~nHzH=F8%NEQ9c}%Mus9TJf>BA? zKK?CY+C|FBgZ4DzD(gcp!(8^YX8dbYrh2vhsg#%#CpRDqAr8anGI^ClA75j`e zL)I(w^me}4(d>I1pm27*Exy>ppN>-siP!AC|I$VA%5SIjM&E<9@zyRc{)`V#a)uK@ zg~Y2tj&>2oJ#Y#*e%tsq!}F`Y&KIlAy8H_p2C#uVXpmA?Ius{FhYlLZ?Q=Z3Osof& znCIHLx;y7G3es(N)LaSa_&edA+L1L%iMg9*C`jn7n4xC2c$iQ68)#dl* z!2?zVzrBoy!;)k0_#zAy%o`*}LFUU)b`{=$y~iWzmfZ(JD35GXs7PbWPa09G)E_vF zOOcoWCwvJn1rr@PK!f{!^z$kUS$T3Cvg(vCiN1%#j~EkRq?#rN7MzG;v33q5`Vecy zIO#VG#(aVA@R2J8(ov*g&T+~Og@LAmOg63sqv}w7dZLx2bPRo%?ya2j_;M|5J+ec2Mp?WVa0ZNqYYUc(M z+DQ8KO4=;t!!EZ!l#;cgyXz9qV=Le^lt?GKJ+mMd2QOuP!;NXMJHl4ucA9@OKKCGC zXRe$oNSRe8`3UfE{p9|~HIbsYxC*RIra*k){ zkU1ZziPSg;TMa0MFQ8Ubx=OsL{_oc4%Ynb}6%`J!7cwo^2`uG}fqUCT>|!1W?mjHR z0S$f&#d&Y9I;r4DhlxN>ds7f>b~d5%<&m$Co~EzVe|ticWwLxRbUojR-^%eE;{81; zRH>^nTOTmybGPgmO$ej%MGdQYS<)s?H6s_SB+|F!Lx)GkI{IPPuc;%Q{t_{@WW zL*j4ok6&ngYkC-~rYLhgM04P16U}OeB&dxWrI~G{V*XfiNIFC25?A}~?Iwz-X!Lp1 z2Vu$2v$ruY(i%zTp9C@nuO)ty<0oAAv;=yajz7C&Z%N%>YwUXh`BG@_BI5_l#q`ZJ23yi{vK6Zppl#^<)I>`A~xfir4PA6Ic0MgLN289iGM zTTk9O+qrQ@S?v~Ft1*cTae&-Y#dHv5&=1yh6;=>%SXLOdDbED)kx@u=6OV^FsbpOv!T-c}V*R-HI5c0Y6CZY>C-vWhC%jcceZud$A5EBj4V^Th1| za-_t1IpkX8WpmH8ESL79+6Qlq9vfb+2T`$jZu-0L+MSLMo~&==b3$|u^_rS!+59T3 zQMHnIZFpI5Sx7!L$*1POm0ExQ7EL7`22kG^8T%gmbs<}+1G}WV(&v%~4+kzt5>!?W z_rQ`V(9ecY9c25&SX2~*Uf_(IqOdwLbO=N>nGk9*AdpjJLx}OG!9_&P^pOGFT|5a$ z@V(&zVhZdW{yVc9P7{%2r(Qtb3-@ZVpH98Ek3@Z`di{d;Xtz*B^I+@Vr~<4lp!^4X zYUh%0&46#tXJfOkfnrSKJICMevHjRNyA}~_-!1kQz)8Lv(t~6J;@!93=w9keU zp{;5Gp0UM1^Vq+o=1XxiSBvWWckP={#W;L&)rMaac&NeRjWQO{9JcVg$^0-8TIeUk zFExD-%S6fNClG$!OD`zY59S`-3vU|vBEs@NM-+T)-@9SMIv=Dv?b!AF)16y7{p0b) z2k2ii3YPpOq0ocT1QaPs6llgeQ}+12K^Zu_-lp%US7C9)^n~cwIt?2QovG;o%dz+F zoAjzzbfb}>rsrnmKv+glN2~I3!(m)5hu@(Z(N^~4P)-$n;NE_^5XdA|ZT1A6sqPl?6}NV$&fXK=7=h3d?*F9QYi9%ThJ?5zklF zUPQ6Ann-nf{aPqp@UheI4y<3u`~dFb&eta_7RT{BCcn~^-bkG*(=t%_KHIei+tWBU z)0MD%R9|yh!1?yaE8pTPOBNo;l|Qh=WXNduHDU~3vLe~DpHw&<^xu~XHOwws*1K(z z)@36-YJ$=KyneUd`CuxfUbLZePDV!gXfykesOXJ==*|z`U(zfh>oVo=e>yVa^q}4yee742U4!BR$;EIvM%CXb*C>sRn{p_|nH}q$0p=@nbd3+c z9}re$@k5lWmw+N z(FByft;JE|s2XN}s!2yZ9Y@voB(4A%jif*_>y-AF8O0|n1mAKL}^9`b36Uh+;5&|IMOS$IrcwjT1$|*DKC1eI*4*fkp z94ttSio&%{Gce|38xpyIi(Hy|zOW~?Cta{C3Q2^EmnAKmFKP8raEpS^MWT6;l!p`w zrxrYVvMP2c0wAtJf62F+2)3 zP%9i=l*<4(+3@F6xx3wIPiFbDn81$)+mYb9)|hYd*C=kprz`r-){8V!pt^9I-effl zf+Ujzp;$E&@NsZ9njE$GbVZ=vc*4+Orv{~td1l~hqj380;rQue0W*u)I_5{;=sO1; zGd|AqiXpgBu~2pE*9k!&l&w>D2kLs|N9MMaRvX3WKg29!tQkFy8KR~n&(l}Z>a^PJ zID>pqTFeCVxA@-SI|k%TUM=aex7<@4+cW*zS>pYgTq%jO{uqS7u2=orzxaUlcSM4)@zrDI&1$oj;JYYRgIpg1MLbb-%qbI2 zR3ywA%ROG-v!5oV2o9-bV*CUKK*L@*FZ5KzSyQFNw!e0QY0?BNO~@$hN&fn?)ClL& z6~K2M_Pk<=oRZMAY#nc;wg8AZc3zXX&Vi|km5Bs{E@``?mZ@eyyIo194<)2uhh5Ub z0Rf+%I4y4PJ%5`+_qWK0f*btqHvs>|NrPCyK7Jwoe)67!`Bhdu?6I0O*o#wfl;Ql- zgHB>@vNRfl+-3;;Y92A``X)PUC!3C*)KA^pQJ9toR5_2gJ)8RBzjv8aMZsj8=3PI> zJ)eXqnS)OUo?Xit0>;8LfMHyhH`)I|1l&E4gF}z->|)QitV&R zeN4IJ%Lb*VmmUi@44VxD8v~*Xa$l;n0@pZEeTIcMdf3m$-G0u;pDch}xYNggV zY=I;P48qL-%mYRSkGyLs0|lli;kEU9XIwou2*16{4e`vSN!pF;!=<8NOqz<)Mt_ug z{`B{+Oxl~K_o1YaS{c?8+px|39^o^!W_gmvb&DK>5I>Fb&z(1|diBv=XGuR4OaWQy zsUS}wamRML*S@T`zdk>yu-;q61!q~|KFM}E8!!j`yB<9m9J1|#>wZ#_fs_sSc<5W$t1SX=YxYF>kPfAj)5XVg+dn#2FE zKsiY3R!=u--2sx1Xj&bqeDQH)?vp-qyS^6w<6QkMY;QAMEHnA~tWTOouIkh z9H1KuvdU(*pa5^D!N+m(DI;vX&?y0wcwp#8Kf_H=A0w7w26_PIzR`jIUWROL z{@27*+*a;E5sI6L9G0Z??#O(H=r(?6@s0)%b-2teF|%&8rq&9y2&I zc?rD~WS)SKuROjnbL+!ZRzke~)(J;k%$@3Jpc5x+<*W4_n{k4jKgVfF{1>=?oiYpV zWc$X~hDOpre0rL(aHdNZ1s9Kr;BOFij<Vs96+OFSs>3{Xsk zMK|Pi zV(01N`4TOx*}_lWfGizs{wEwBS}_+ioVIy$7Mh*F0sVF`In|Ah0RBaTu!%{Jqk zhw&xW8>`%5V?y*~3%Z^5x*VGpPl$J6T5)m10x3RwvNm!6fphJ|%DG-8L>H3xJOs{t z7CDqW%txGplkEQFg__>NF(5`@%Xsf;zYI7Z z1Uk(o+7E=IINE+l`}JQrl)9mg*Z}~nFe1D3Rrq3`b4b5@D_VQ-ny)j#8?KOR+J#US z@vKNDPlpZ6G8?>CMKBzsUHtjpV*FV=aW|OUIVYwsA{MY$1LglVy>YrbH|rD|mb8+Z z1rLM*`?gv(l_1VlV2g)r#)BG08n0e#9hxVH7%{+r7qwILd}ym;<9N ztea9iUslj`K0uo9pjBZ1nH@sO462}X*=r)5@8!jZ=c1lM$2Yz;2dlrtK#jHLL9ij@ z>|m9j=m?NZ`jQ9k><>80z`O(){+ewq7mwTub^L?vEdTA?eXTg>1IGDqmFWdj_tR7$ zwnO(mL9GyAo=Tm`4M|nv+1pT zILUyZoo&!7Q`w<5+!8~~DxRs-CPV`lg{8np)@b1ieR2&K;x1^&-2HdcZ?G8%n9g%l zn1Haw2h(P8?*tc!uc#J7Q!ao+wJvMlPJ(h^c)5NfAWX?;ens<8K6-K$_hEI%J%O~C z6UmMz*dJ{L{|-3pV5?hfBJOq0jP*zPmGZBkf(OjZvC$tnjNNQ_=&q{X!2dH^_FXWn z2tmyklH5E}yR#KhFM4Mhby)Dn^@mO;xTt_`!TZ+3`}gKX(N?z;*2{kGQ58&G|I)B- zJbK6POL7L*aHjD0w}`yL5#|acHp+H#<(~>0htl;pyR#n{pDBk7NU|ByhOPDjjoPlf zbTMm&tv|Rm^U3DvZYh<)u@e)>-4(kODfxQ-u%@yJHZ^_UH>0}xZ+2}t5s{6J(HiX@ zHj0J`|3xuIwmn6$u@|rI@xoN56GkrBSos;C2R9udw7i)>LA$02N3wNy#K)zci5*iG z_8=>znapY=PaS1hh+IJd=B-+*jdRmS$BS$}mRdo*VC7C80h|&yrvY3ab$cPr>Pl}f z7b6I&1H&ziF9kaBKFoE9zv>P;UGdUF*dOqH94mQRmU@ky^?Y>DhA1I)?O(l7o@lGY zhfLENeUPTv4FaU7;(Cf7VQ3+rtclK-9pf z;T7Z6aT@397!FV#;I>_?2R%Y)6xRb_lQ0c@H;_DlT~duXpLwIE{C*9vKl2*JuHr_! zI`pMc07w!#bPU8*ivP?WNQ6C*HMLvTwh(=c@PX=8+ipP2BlElLpy+}qDu7Z_8D`O+M}<~e*X<5_D7X#DjL5n4{4#=)&{$Id(WbQyXJ6} zprjNLUNO4Bi(Cwu@2BgdhofYg>Fh`6AJaY$8`W6kaGepH zoo58TT_H+GdIK)x`N6bs`itN14pDKJw>g=9Qh|ck?9G7|(d?GgL zC8Zvk7nQ!uSVO? zU~gGQiU<2#YALAQ6lLn}(?iPxCp$S{6#D;o8b>GRlp#`{V7rAPa4+=ba9oGsq+Lgd zyP5f-*e0H~t3JT?q2Ch+us(tRC6MQsM5vUO$9OCd$DY<4cM5aLrhp*iJQW;Je&B7Z zny=bLMd+ zYu5s1=Z=S{*l9YDd_9`-da@RUJ$LtRMyoW}F{1psC~zy}=aO=us4utqLIr};s|uK42o2j zN*~`|By z-xrU(0m9}9P4WBI4{vRDKOg83z&@j5tpRQK#4cHg^wtngPcuh%6!xt+idB15}=LK8JnJg`!Kq1NF7_~s*u2w0f zA(2C@khZ3SBhcMg)U^|24nObAm@*XG3H;aP19s=+!~?{*T7ARiPpp#wh~GLs3=tE% zOKiJ51@?!H$j-;R)^#i1q^!6i+b8PYUgBXg0TKyyEA@f+dWX;7m?v(Poq0a5d2A8N z$r{yTq-X6h!KfF3O%X%(RBs1x%dzB#PQI6L-M%RPPqvE}e2!Sip*=F`@L;~f?I_;x zD95L`0Z0Zs8{pQh7!2%?5j)m<=erEXL_c$}FH?}c?)SX|=iWp!J3CYmKBwQwxuOIi zkpYZPWBuhYs=xqw1*28Z^}%RMff(h+&=?j15R;KpQAlrrsHw_|=V!6m>nq*;hFQ?_ zn9XT>9gBW;|8}`p_-zFOI&GZP#$+z}hW87e?zP?bMhm@n;p&5iaqC?F`+Y^$qZ~g+ z5Wl`R_`KWuA6@QAY zKRY9I0UcBXNUj{Z_rz7;jYykq^*p_{Xby=}+;j)%oEo-F`OA1^Rl2o34bN{^(Fn}C zAPV4%(14IHg~Dyck@M5S06cbG;D-41DNUhz=D4s_9!w(NWyOJ=64)R?9Rq)5QQ)=w z93{NENCl1L>dq@vnUIsWqk&_94#A}Q}KOZ^aEQ@2~NqrYTkcNCTUi#%XE z2)wKO@wsy`f6&8B0iFb%y6?0A2Pp#@<1uDJX>ZT*g#%h39pD(*0!tOuQ3zn(h^X(G z6D`y_Ed{E95{M?Yb~K)yrLe|(vm7~_u-~h8wTiS>5^T@|Iuv*c6a1`KqfQRvljCgqCa)cZ)Wi(R^f`4?vx`xGost>=_XnI;^h3dRaZbGcjsTbp8xTbZQ+0r!IKkF11J(qgbwDPZP zy?dBKVO{NtqjoakWD15q@&KlI-`Dz<`3$DbR_Ue8v7Scq=Lsxg!Ut}XQvbN2#KBBWtLJAti~^oBWunG>;2d^$ zcaFa>T&JfL}3)SJzgct+=IM7DA+RC9nq zQxuXf`$GV>54;dQ5W|hWD8hk?hoJG@+3I0A^4KOOwwi$*i67kk?mG_AJVH79whH}! zDM>%m_y)YSs-{mLc?JA8f%Qa}E-YKA} z>^sx(Q!EYG({zc)Boz~`diSBktKGs{txheLe2?j% zRIji_lq+kPKaQ_J8!GlO4{N#@sq$QswYUP=c32C5+-i{`l3FODRjgtW3|1(K-_cXx z&AtC30d9-Uu*h#4)EfAfIci`v^YM8O{Bj&CHk`+uKGCIYS0UZ8MKvDiboEtREbe86 zZ!?G2 zgA^cj<7H}#$-RW#O&kH5c!Ls{-!Uf^#4 z4;z)MklF?jj0+`u)Zg@bK4Uip@+Y&DfD-DeLe{GW>+f@x|3oyX_<#mp7hw z*jSpC1a3ptq>?%bP9*yqe?$%-HF~#GW+Uh1Y4ketfTp z#`!+%3QdtGNPbSpr^CGVO@EmeJV}Mj0mK04#SeGJNiZ!QIMP8CQ0;whf!S&jCa&kj zpG~@JPOz^8i;xUO0v}rudBV_LtEp@}YK186a5Lv`_%FMvM=9Ghlmcg4HKmf2DaXYS zmO-Ej=;fMRckE*zzh9}Soxm<^;16RtitZqBm@rZe9{N}WaEhO|;L{Q1HF&6#ZfF39 z_kY7i_NXA%8yGu?uE%!hiaFW#UfDR?Wtkgu;&e(RBe=fG!dx;Ube6D_9CTyzL*)U( zT8W=4%`A0;f*Ru2KJM&%7dWrCT81`JaRr1YEkRbQwyjpNYbqsFg>1G0M zxr@%Ua+UgkKYLssu(_OLJB`yR)6H7C9Pdt-*6T-Dfvs&X+dEcRMp5hjiY-4u?K8C( zjDRWK=g2d`WZt4te^g|gO>--L^lBKJ3m&2{)xyN?L_B$K4vUayNd>%Ky$`w`(jy6y ztnn0?)FeQi@$`9wgY_s0<)+605j;_NKWT=b)>vagS40MjM_BAU?)ceA~0h{AKynu*5bVS2W3fpDP)E|N9@9??Wy*sKo2 zWv~c%nGh)g0;x(BC(o=90AjiL;5yM0CzXWV`wK&j%mcKH5d0Z{WWW)gC9jAot%1Y* zRa13CD{SdewQeLr7tkLmG~*wWL3W ztWhGgTDX}!)cY?NLaDmtVf`xZ5s57D#dl4i@6~vqY>isXO_8&z?@!kOdW{_$88hE5?J7oqHkfC#gL7F9L9A#ldBLYQRqoDKs!mQ|hIH_t-; zrEpT*gqsYCeVn*98StjqQj0XW(@+E5Ht}DQ_aJlMBv8S#Xawj<@LLXKe>58^04BiM ze1#_!CM=564kenwk3teG($hqmQvBqJ><@A92ze>=1GHn=Jhv_J5tqTHH*Y@5oF+b= z`zi(e8RM-oxS`6x$m#_n(;&=$kk7}K9WnZVsq)gLc>tTSAc&mJ{mT?xr9Tr(R;Ac>B);Y9j7-7y(BV|BoVI@0k}Ro)e|jB!ZNG7BJD{LzEJtmpnbvLB3jTHsBc@fe=(*4(5+G& zM&JR^tp!wu|K6=3&X~ib?C9i`#rt?tbgmH~tj^w-}<9)mK^8qx8j`WgRj-DfOW5(rbtgz&yGR5dvmuAG7@GbDb`X0OCwn=7*zX^Nc z{1tz)`}Qy|WSqP@{hsJ8jSZcLJNCaT3s8B16!68>wME!bpN!AS*3kSus|EpnB)2x- zFJS|aIzKV)0+1I$Sj@a^2QPd_`gmvv9#v`)V9Y%R=-@YLL{B#ncVW@@k>5c(lMO4_ znwBDNIeei#6xd^^>Ig-M9E3EqE6&Gf&nOFtbry4Buh7-agKTf5~+& z1h2%i0R+qx?KfF^b8=sz&@uv#=iv|J{GPcjxgQuGV@b!e&^QKuo#8u}`If-c!nuqb z*oBQGfDA)5k_i9)cOeA?VRZ;etsBC24PIqNsEiu@Q=)VcV0&YCAw=Pe`SdZmb?RQX zc{9}?O>Gr_=qVUGg(?89&k?R6eGZWgkl+T=4jSkE4?Tdv{>LuQ8H~rcri0fYj$9~djdDa1qP zcPx^H#BU#}iqPYEZvT1VhbruCBfI>y4Iq)ksRb1LC7@<^TsZFo@9sqP0h!<3g_o?G zS-vr}eMlw3zYSIz<&)Ohv^eBL3o4nr={i z5xdMLOir%GaPB`5LVs}+&KE}9thz}7cNf=0ktHA`!_NUfCKLTtm!Fc_=UKfMd@q{! z51Twm5@=U*tm%N+Nah8y02;i~JbNE;<^kN6RWeyT{2KIq96)-h$Q#Y@jieHwDS`op zYn%wISxl6_PYW$K9OAEo_8FStZ_XW~Qzz)zuii3qm-s}gjn2zFuTL_gRKQq;Mj|La&u&r0Jj z9)?QF-UE~iG60hAH=>d?A4z=jngoz@UVu6s;|tRf8-~nK?0$-B?2nP}*h03f*@p{E zD{!^Qqup?jZwk$>P~i}a-!G|GihLJfyM-7wHpFw_KFz|&>AvsrN92I|no$l)^XA(; zIp#Dz3V4k)F^r?G>V;QX2hFi<7bNV(dGQHKtHVy{j>`H?37zgZlcqV zr11CFBgvmGG}v$KrLO%Wf%G-NXm zZuCiMnzoi?3%U4sJoKS;mYl|9W1HWHO(-?FKpe@KWVPhaA$TWm2lHmsOL8G`Hr-J_ zF_in$R~G`l#L@kmeiO;j-Z_ywX~#rY+x0u+-P5&G^||I6e@XP4n~sYWYrH{86zs2 zqukzf3PqaUUygWFqO21X$mo-%6BxfQYW!{J1pT5(#*+{k5E8ro>Lf5m;~~P;kvD^f zQ&G46Ck7Xg-+-Hi)w$bIKQ^vAdm9zQWzn>{rN$XkP zy7@eeCr9SjHS0;?#h&laEl%f}EUV3jZhJbuIhH9Ot?`afden>#7CflZ*{`NDP^x~H zQaTy*fyD6_^MQTFn-bp>a}HN}FZFkrh5~w}_fJsBlg#N*?K}pvoUktoYAq;^qn*wX z^7jof+~>V5IQ?WZ2k&nwM~wN%8wKsXJuw@ikMPn_4VuW{&tsb+f_syTUbMQBBc4ao znVsi@Y)+rfo6#v9QZnFqy#Ba}#Bv$VS5k8bUh;^K-dpv%a&8GoDsu=9h)vw*LJ3>F z6k(9g7fA~3z9mHFM0G7VgHTQ@Tc{AM!yTC zF@BFHdK}t+KCUgj?Hqn#Cg9~&Cj8w5|0nD(BIvPawe-zC5aW49u#=nFTzkH0R~5## zn$-doB+ExcPVu5sOctBz{Eykw&R_#hw<2i?>s(%DF@q1MCbC0RtGRxhf^AJA18p~$cwbvW= z3$HbVBvxER`F@?|BIBp`ZWi#$IVqPpD|l=60*==|G{|a(mVHNs@}3g?;e#t*T4_?W zYrLA8?rFVA<0a`Hdw8aQ7`BR)68{=&OhMj7m89_%n|_U1$E0wYMK&fryvKzlp&G?< zHs&TT?%vQlys+2=dn{&5z&YTM)({qXX_QZ7rPwn!djK};y z(pcbm^1g0UY58`M^w{a6TI8w!e%HgU~kO6Z>vut4^07JPilQk}wSb<%)9& zokr#1f#A`W9UR|=tpGjeEQ($399{y5D}b&A6MAsFf{sciN3kL6iIR7! zDCxsdE3$sd3=5~w4cJjNW(kjSEuY8`ntyS8geKexLTFp?X`WSg1I-6ySi~kBk;M^R z1Yqd~Ws`tQeG=A`4j2>*%9zG-firju{lAZ8@;9>y2n4d>9ApfY!<>VX;Ec_@2yWq} z^~ng0jzGN(GtW}VX?NheK7b=TaOrMA=^v4(=Ti@`(;%OI2(qJ`CL>%VPtI)6Mb}}o z1Q_DMJ2LYXh$(4s;N*0iH#^?NyjVmF4x#>UTM6i57$~&+5J9Z6NGHgSQp$M?QU7jb8<0N$}Yk7R02b>KQcxOP;mUlp@fey64DndjUnHr94u)_nL9pd>v zzgBLdb`fvsfHLWACReOKP4|;&CUoo@)#nET54e`M-H~+A11J>x6Trgpb1Y;Hi;!yV z9<^U^g0%M*+u|@V+r+}4J6aP&fQ^%fPmn?Nr^~%IN`rmh(9#gy1 zzg3)R<-rBB_2Dmv2qLK0Nu=YAqmj{&$gg+)FzTv5@GsSf@KCo3)#Z>-PLi3ucIKrI z<-j~bIJ^Q4&>dSxE>v~dd^XtUOP+3*^@UOjh(O+ry4!JorgFzWi{?nlR) z`NC}H+!EsNPPOy9R;Ab6^UN;@>tLROI*r908dXl`J*C z)p8@;ets^&&%{DraO++o{VCch!w*uvhRdvnQ*NxYFgN{Ch>3Hi;s^Yvc8DTmCMO|S-g#tx;78$FA zAK$wU`0>*H=gL!`N)2rk_mC@+;Q-#G;?96BLHD)>a!B21ep^XRwv)vjg}UOHZHH}na}pH zFsql;d=+(f@`a9_97-;Dp?Kc)%3|S~aK@HmyS*8X_A81kv-DHYK*4TuyJB_(698-mbPYgD%(A`yg3aUL01u>L)8Rm-ip{`1?M zECfoWi)-HDvP{3N#oMkw?rqpiTq62GT`AcfJsE%c<*_=Y zetW4U75$2~pi*->TnYk3kH^OktX_`7$hLIE*}HV>tGIerfBQAFuzub8o{a2WE8&~w zNVk7gi|4t1Hk>zMz2N)JiIQG))oa3jL&HUan zeBWe)jN_{dxEF1#exmk@EQZ7Mqft%WI=nn|w92rYvfkH8+^{mpXJXL~!Zw*S$ZJTD=l6 zE45`v>*@`|7l$^yo1b3(&~Q@(h2@JLJX~##0aKk8JQO-EhqVFqqEwo_-veS$<{~e~ z_S;^l_zp>!SBstwgiy#VC|{-_CKNv~XWWTCis`OUbCk~9Vy2mN7nMqLNJQP3vN=Tk zV|#-bDo;hgh7~@?1ySFK2pYGAB5XFFRk5Qh_lwa-N+aS|u?9%tzsR3wm7qywI-R;c@yCfd)c(N@a&$-3W|L^QK` z*=V17{z$WU|8SATVLchXNH4r>c7@;-ThKlyz1+a`|})r z%ZivGG}!TCS|(NrmTt*)wc(U6`2BdhEdE-?HK+d3IT0ftxpQ_4!}N^SoSKPGO1%hL z9yRMJByZX|*AAJ}endGrV~yg$6A?)JQOnHkTmyTcvyb4$*)Us^x}c-g9s&})x_6`d z>qKeG=H<10S2{i6H`V8*<5(Rl(Go_y>Ru8O?f4%B&N3a=9$bCP#K@=p-sfF@h!x37 zKj5&@F8Mf_xZg&*UeN42^N(zKwdqa%?X7%2&B`nF?Yi0B>NA>WY6G6gFgEHr&KfHz zp^%dxR?HnaT+w5!zT1B-dK%sP?dd;;$f7a#z0|MsR(!V{*62LF3oi*}Q>Y-jKT&#d zus?#QJ+<#xL9y|WHWOs8vt>WJPd0m(Lj?n@{C-?bo$$`3vD}t-r@cx&_(y1um?19p@wDI;_8B zlvu5r;aYM!d8*d)I;>RBsHLq=CuarVhWiz`X%y*dHu%bKqsk@Xu=s;+5a2GJ(w z)%{m4h*dCpu3jtek0CwR@G)iG<*}2?s;|OZA&Bm39zF{5HjU#eA~fdiDOW)tW zCQW>pxm&yctmOYG1<-8rl1Ao=zBP&trs>UBLf4fQCmZIOy|Fx>)JaacnDx$L^K&x6yPKwp4YbTlQ{DS7o-;H?UTNKvzg65qw zWe6qu?zFQzk=%JdWVEMrtp$_U=8MN8{^>TZnUi<49Nwnuuyc_Ve}A<<(5*0BW6(h7 z9W0bInc!(aOwvLr-xx-5<6kX46=9huOCL=(F-fn_p|YM>96VxafB4AqdvwL*(A{1p zoA-PX&>B>y(uO=6Kg$|Lp;{|49VV9HVna8F_u*FuYZ7TUi|cw ziD7zV!55|QST7^}Ml-U{taxblLiJmvccEW(9+}hgTI-2VzYqdxz@`RK4k`iu>iGl@Q28}=mW4a&`D$s+U6z{gIbLreZ3O=w$_1ySma%(76*j$ zrd)}#sh+zCiPOv&EFRhVuTGGhCBth1 zMG16hyzCmrVp*{|4vV5d);MZzp!5;QFJzZGGN&6rGbRbJJkWj@V{|$AS&&%TGIA`g zh(!X$LWIv=WqEUpkX*nS&88Y!ijGHifcr7ilusyN04Lq+W#PMgG{ zP(-(KCQgJN2OI&J-0g@wWI+nb3f7%&*@wJfle&h-0`!NP3%43#UeCX!sh49? zpljcYZj@QF06$yCwBtt!@$)go{=Z#}=q$G{EA7HVF1`!f#jBG9+ZRFCOsf( zLw7VH0>a}Uh>2qUAv6t`Ng)KU2F9X`a1ttQ0-`q!2op9|RMMkJxEmFSBRtczjJ{@@hQ4-eT~gP)30<)hBxYot~qJ z+v#G(Rtf%1ER;z+{$XlYmRkeSWI=h?>e|j!M+XIka@o4J2<(;&WZr2qu}Y&8W_5e=PUMG|H|XzVhXqnRXYV;Q3|4MD zCwIMNaR1-$Pk+C>qK}c0RW}JfaCiQAlMVqx^D7ylvX4J{j`M-rHwoKv(u z8f{}ZclfWDm_Cnz?tv^xh!xhl*e{20E0mrU+;MjEcuseFrF^ke)X*}gBF$mydF?g$ zPq+1@+~bzhGWCpWMvOmtG73=zZ$!eS9NXD~f5m9GHm{XX*71M9b(k4lo(b6MzW(uD z#>dFezNCq3NMr`z%95G~ll##*)sOc)nm+bf_VHy0OP@%a45cTQ2-4n}bls;cnTYgg z*PW?-I5ZhpVeZb6bG2PK#S`*X(|#L)-d! z|3)wI%w>1}?AcEdt^7~lbk%yC;rot1+jd_ncfPUOp5d0Mr8Z_y;)!UaufinBK9J(j zj-u<%y|bO}UoQHrh(&6=`)Z5tL$>+Trtx=YDDZI-m#b9x^iI38qKsuW1gdCNRvHAp z>K48l?f89$LA&uvNRIts|2dYu0i$mZ>WO5XyHmB>Q%W8q>doN!ete7N{;loC0LLha{M{oN!i3`D7RwueK>aB0-25{ zCl5E^La7Bw-A<@y=O+b?bMpzl6!3VV;jGgtGzfUm}Z_{n=Oz({7A!&zXE68R~N-;7bZdY zdpq>5r>DP4wqh*9@!8?$cg=f)#eN!M%1k?rh0h2PtVqE3JCkP61oQ5GOD1P!pTdKf ztn?dfQtMaSIoIXVS(4v_5WcP!&wgzrzFxUg<(8HW*;!hFD;U3!@MX3zbaHFamh-C* z^5OrUIzholZO9Af6+Cr;;*!7RM{M03mJUzK$cmOO1lG9-a4-Td*nAk z=)7`*$MddIXXVfi2j5prQzjJTUs8BO(hY9DRBIYjA9pFeeP7|2MegBXX5iI_^m#UC zGhf}h;-cI}!y9R#8jzzF|GBRQOD?}6DKiLa}kVT~=&d*u(HAV9MhqGUQXI>W#>CS>A zxH6_(qnG%UoxmNRQIHwA3YeFGb>Fw2x1tvB*EiwBFH4%tytO8EJb4*v_RQX*;rphN51HHH;tCynS~oOq z=yu_OCr6IZ*`kU+I~PS!PkbGd`8M262p8A96MJ%25SB=R0kOnzS_bL|yT>g4H@8-W zT|fXeuMX>9&;Cf09F=C|kUsw@zuqaFUOWA$!|BsSMQQw)Z^5H(ZcfN#rRO=sqk zJ%gNML&K6ZMNVH<^$6WMr|TsCZ-e$5k}u&+6R6G}cboriP8dXot@V-q%RoQw{07xRjj*qIw`j|0=mDvqTz zt~VUPo)w_p|E7kYqAhpi5)IdA*e9vc8P8){FUs>C z(FqY-9;n!eRl-oDN)yJc8@4qPJ-+UR_nz?1}YoVIvIK3$H z?x*X=#kr`0M*r4fd=9*E4sJzh_SX>$)lHlY7xLTF>6~ky1mHv=&G%Q!pZaSu3|vD# zXPMPP9Ey?mB5lM*mMD62tKoo>udhEe#+@?Q=#vfc{g~a4DtNTQohekOy!|+TNQA5? zd+xq~4{BHONYiq;7wl{qDaQR7A5$^(5Xc$&l6ecWDlEw&7h3|pUwHAJ z-sL5)`Hhq236cFS@l4bihMV0zmk<430-Zpao}d7BSL3~gm1T|qgP3zB5dg*ddB2v8 z#xPX)_te3I@t8|t9w#ENY~Hf`7T(^ACNRyfC{BOFSZLI}eq`7|nUb2x7?fW_2+FvmrVhLKR zrl`=QfL!5zg|{3G;;2>;oprY0#?)8V-+Fk3?y0-`T5Yj$=3eUT(!}CrTQq)I?(gtiFbQig_U(T<(>1IXo6iz8Aj&HpEH=zuqnPv zhU0l^@251C9e*f_vX1lrl6J3UXrlbVSf|SFilC30k*uc6F`ulX684oT?IK?~{P0CM zrQMI#XUf_Bj$`FYAOJFI26%t)b#$>vR~(*3dnJ1EAkP#oO0^!8R`GU z`JK^-{?+xuUk`4x_Nm@@Cpa3YmppL0x$NvS8vYuY4cx|;!fNEMxWl&XL`BA%Z`;`V z^_VI8YuTn3vz>nTU76wvTWW8OF5qDqkLrB&=Y#297?*3n*GBgNL4Eft_CNXt$XZZ$ z_6|L7;=l=E?X7JkN;epf@du7i4X8^WaHmGs<( zpg-U;io^(rkZ%kyCPnk+aI9cCieE(@DHRbA{)P{+A;bl!fgI=)`EmR*d+ApcPGh{P z0o+MQV)+R{GbED+kETP@A!VpwaM?^mkriP4Y*2@(8NiNm(0e@eZH%VnRyNT|tKri7;9~tp0eJREx(+4}t6QAg+C`QgsUD^1Q zsok);LvG5M``+6$@^wN){Q2OwbE zD*2%?@`R56Z$(oBK;!8ueDO^BFeBysh)nc(d=h6rN7674+BA|ri0j&2A4@d5s6gI_lnO!<#OFGPVA1q%LDAy}>RYxh|_f32D$k!-X!Pujk{h>eMHYrfP&* z0}n7YJ7qa3{mt^Gg=QjfnexY{I$n;Ma9vCKx*}=f&lswdc`(g-3(5lqCj&pxq-D)M z3ZyMy`9^%}_q5Tu^;R;$OMIh-F3b&bdA4#fsK*}=Pn1+iXig+C^cK<16R`y3fz%ZQ zpmO>;#FH^A_jB0x`||GRhnbrq*whfMQbYsOZci^R{qT+1@Kh~R?fH*Ac@8i4lY-wT znoC`7FA|(bA0SB&Ziw{kr&`Lf$vhHNbH0-Y7J;NbN`?jpdjjGw>dV9y3cdLp@^qG1 zI+1aPEFY=Lrw)RNY$PWsgCSABlC>4p4P!ani4;MU+iaEfVT!Ly*(rifL9WPX$B>qan+nQx&%BO$ER(R!y zuV1uTYNGWw#0p@l-qq8rlz^hF2;=ryLDxxP;jwPbG0+VEkHoaj? zL;fpwdW;jj{BbTfu)n%}iGrI1+OI_UB2Wy{zLOmRcVGc5Z;}{rR3utJ120JG1mI7F zvjy<7hnGVM{(US|N<98fUY+o~DO9Vc&ZWf7Ra~WjyXH~&-7c%i{gntjCDTmJjMMcy zXH-;wQ8;Y;o&G4HJWjpuH^5@do~d{B=F=?UgrI8C`&?JD1!iB|6(oPeqA;a`NC}p~82Wg51f612Gb}Z%prm(Wu!Mk8| z>uoeYed_iTZKp7Tv+WNH_@DFL7UJ=l<g1T{30Vcs>q|;Sjt~n?c<-~-~6yh zS;Luzyj7s^0WvRqzMO9mk6h|lQfzT0v$$nDp^?3@e^l`DcJ5HDwbrHH*S|yxFmD(6 zKOS4s{N8g1WNouWM0#G?Mr=*&liOeXXWNAmb0uBwY)_SZ^@9CyTMZ7EAq;;Bqz{4luv-y?x|O$YYmV#P7#@heMdj$T?J zUn>+J(eypevgc2bkDOeeMw$Nhw5^ynR^gq~EinNxP$!@#gBV~-180@;d^jH5^lp1z z2bHxd4fpqG=DS~q(MVp2)+zoeZ}}{oTjJ+s&3~&9vsO#N{3k>6q1A&NtKyNs4HRwC z%!z3mZ`H@EbzUwL2A(1#pH*VB@wq>*UVK;D+xl#idn=v{-cm9 zvrNqBPS|h(=kNH>p2E-UkA&}qBdu3cy!mb>81j_l{g!1t5T5OP9$_WU8&D}FELZ%( z)a9paxkJ;$)|Pm>$c!O1b&ky$Y^{Xr!3|?HTfth3nTdd?aZlUIlbXBygT*p}1E1gM z$#JEY+Zc^~d2(KqsY@%RgzMn1pVYJ@uMIv69LepC86(9Z*gxH>z%^Yd-J9!ONw-7kTu{F-tX2OK{f*iZ~+WwU=#A255vJyek8 zHnu=<@L4P0;pm&h8K?I?+BYuz?dCh5D5bqd_HpqV6YF}ST~|w3zqw_sSfH(V2V?!R z=L4CmD;2M7Ij3wn0vL*nW=9q99lDMYzq}8-*{2Np%(*TVsh*FD&oZ1F@9wn=?A_F_ zz5e!A86o9eS-qS()b0|v_FXK@_W;nPJ)<{Ww_Q89Sl;*Kft?I~*3bJ|TS;$lL}L8o zlEEhnwI`m$`#QN(^QAanXQg5kl z^s8C=P{?`sZUL22PN}Hb^KH(MZn5f8@>>$HhvYogGKad6fln^w!6EAPF1FE5M7hr0 zdIxtXI9A1UZNkeIIg=yyO7HatmzW-1^jVe?u2Y{+=yS%s)t4rVQgb{PZa#=^e#z}e zeJFfEoJWne$oUhkS!mZy+xF`^-oiaOU+&AWRU%fot`E^@DsvoGfi!E6TNc;v{%N*4 z>oG?;Nk)A|j{L&w`Jl->msiXjpLpMIrtV8+Y02N6bj$TAEiJcjSo<=Hi5;4jzPx(a z%m>x}CW>LT`2y2)y))?ZcvZVV?LuciU#b= z>*2>|^(bO~?vKn3d<}uo6aGjxsig5NeVk-F-WUHf=w(0oI7rtFCn|RkYx35OP%pZI zyp5AI;NeNEq|nR_%b$K0bUiPPZsnQiAVr!$eD=yKD)XO{asI)(_Xml~r=ME$&Q{3j zjrnzHeb($;57X}y)KLVel0}co%ss#ZHSz3UIEU+lR;HC zpG@EHdT>O`*{8W5F-kPWe%Hg58%tX!R%0An=JLGXX7 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%0AH_8kE4B{a~sY3_BLZA^22$BXc= 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 literal 0 HcmV?d00001 diff --git a/test_data/include/mock_api.h b/test_data/include/mock_api.h index 8bb992e4..53170d4d 100644 --- a/test_data/include/mock_api.h +++ b/test_data/include/mock_api.h @@ -70,6 +70,8 @@ struct MockApi final : public i::ContextApi { std::optional GetGateway(std::size_t) const { return std::nullopt; } + unsigned GetGatewayRate(std::string_view) { return 120U; } + void AddGateway(std::string_view) {} }; } // namespace