diff --git a/Pipfile b/Pipfile index 6ad3649a..e6aa3ac0 100644 --- a/Pipfile +++ b/Pipfile @@ -4,12 +4,13 @@ verify_ssl = true name = "pypi" [packages] -feedparser = "*" +babel = "*" flickrapi = "*" GitPython = "*" google-api-python-client = "*" h11 = ">=0.16.0" # Ensure dependency is secure internetarchive = ">=5.5.1" +iso639-lang = "*" jupyterlab = ">=3.6.7" matplotlib = "*" numpy = "*" @@ -19,7 +20,6 @@ pillow = ">=11.3.0" # Ensure dependency is secure Pyarrow = "*" Pygments = "*" python-dotenv = "*" -PyYAML = "*" requests = ">=2.31.0" seaborn = "*" urllib3 = ">=2.5.0" diff --git a/Pipfile.lock b/Pipfile.lock index c111bd7d..71b934d3 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "0658ee0a643ae80db9419f8ef32887877922d18a5da188b1b87e4e9a1849a4a1" + "sha256": "e02046d1a76979165c9af35898f516f27a3405223ae583514e38db273926fb8b" }, "pipfile-spec": 6, "requires": { @@ -101,6 +101,7 @@ "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2" ], + "index": "pypi", "markers": "python_version >= '3.8'", "version": "==2.17.0" }, @@ -117,11 +118,11 @@ "css" ], "hashes": [ - "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", - "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f" + "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", + "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6" ], - "markers": "python_version >= '3.9'", - "version": "==6.2.0" + "markers": "python_version >= '3.10'", + "version": "==6.3.0" }, "cachetools": { "hashes": [ @@ -617,35 +618,36 @@ }, "google-api-core": { "hashes": [ - "sha256:779a380db4e21a4ee3d717cf8efbf324e53900bf37e1ffb273e5348a9916dd42", - "sha256:d32e2f5dd0517e91037169e75bf0a9783b255aff1d11730517c0b2b29e9db06a" + "sha256:2b405df02d68e68ce0fbc138559e6036559e685159d148ae5861013dc201baf8", + "sha256:4021b0f8ceb77a6fb4de6fde4502cecab45062e66ff4f2895169e0b35bc9466c" ], "markers": "python_version >= '3.7'", - "version": "==2.27.0" + "version": "==2.28.1" }, "google-api-python-client": { "hashes": [ - "sha256:00fe173a4b346d2397fbe0d37ac15368170dfbed91a0395a66ef2558e22b93fc", - "sha256:aa1b338e4bb0f141c2df26743f6b46b11f38705aacd775b61971cbc51da089c3" + "sha256:01b8ff446adbc10f495188400a9f7c3e88e5e75741663a25822f41e788475333", + "sha256:2ea4beba93e193d3a632c7bf865b6ccace42b0017269a964566e39b7e1f3cf79" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.185.0" + "version": "==2.186.0" }, "google-auth": { "hashes": [ - "sha256:754843be95575b9a19c604a848a41be03f7f2afd8c019f716dc1f51ee41c639d", - "sha256:b76b7b1f9e61f0cb7e88870d14f6a94aeef248959ef6992670efee37709cbfd2" + "sha256:30178b7a21aa50bffbdc1ffcb34ff770a2f65c712170ecd5446c4bef4dc2b94e", + "sha256:eb73d71c91fc95dbd221a2eb87477c278a355e7367a35c0d84e6b0e5f9b4ad11" ], "markers": "python_version >= '3.7'", - "version": "==2.41.1" + "version": "==2.42.1" }, "google-auth-httplib2": { "hashes": [ - "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05", - "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d" + "sha256:1be94c611db91c01f9703e7f62b0a59bbd5587a95571c7b6fade510d648bc08b", + "sha256:5ef03be3927423c87fb69607b42df23a444e434ddb2555b73b3679793187b7de" ], - "version": "==0.2.0" + "markers": "python_version >= '3.7'", + "version": "==0.2.1" }, "googleapis-common-protos": { "hashes": [ @@ -698,20 +700,20 @@ }, "internetarchive": { "hashes": [ - "sha256:1a4de65ceada60e4a86a26ce8dff150995d70e2e19f5e9ad9fed55654c298811", - "sha256:252332d838556a156131f8102e02e07f60424da489cc5f0e97c987f0a038a412" + "sha256:f35e545c4925e1fc5f37bd83e59b8b72f79645129d0a32772a6d25fb5252d92a", + "sha256:fcfcb729f4d7ffdad42aaed22247ac42e21fe2d99c122646870844cbbd981559" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==5.7.0" + "version": "==5.7.1" }, "ipykernel": { "hashes": [ - "sha256:2d3fd7cdef22071c2abbad78f142b743228c5d59cd470d034871ae0ac359533c", - "sha256:87182a8305e28954b6721087dec45b171712610111d494c17bb607befa1c4000" + "sha256:58a3fc88533d5930c3546dc7eac66c6d288acde4f801e2001e65edc5dc9cf0db", + "sha256:763b5ec6c5b7776f6a8d7ce09b267693b4e5ce75cb50ae696aaefb3c85e1ea4c" ], "markers": "python_version >= '3.10'", - "version": "==7.0.1" + "version": "==7.1.0" }, "ipython": { "hashes": [ @@ -729,6 +731,15 @@ "markers": "python_version >= '3.8'", "version": "==1.1.1" }, + "iso639-lang": { + "hashes": [ + "sha256:078ddb7cd0182dcc04367691acc8022ddf7158b6cb09f08f798af823fa864265", + "sha256:a6c2fb9f739dca180dc7f48b098880f303bcce2cdf93a4ca3152ed8bbbb94fbb" + ], + "index": "pypi", + "markers": "python_version >= '3.9'", + "version": "==2.6.3" + }, "isoduration": { "hashes": [ "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9", @@ -978,11 +989,11 @@ }, "lark": { "hashes": [ - "sha256:80661f261fb2584a9828a097a2432efd575af27d20be0fd35d17f0fe37253831", - "sha256:9a3839d0ca5e1faf7cfa3460e420e859b66bcbde05b634e73c369c8244c5fa48" + "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", + "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12" ], "markers": "python_version >= '3.8'", - "version": "==1.3.0" + "version": "==1.3.1" }, "markupsafe": { "hashes": [ @@ -1159,11 +1170,11 @@ }, "narwhals": { "hashes": [ - "sha256:c59f7de4763004ae81691ce16df71b4e55aead0ead7ccde8c8f2ef8c9559c765", - "sha256:d8cde40a6a8a7049d8e66608b7115ab19464acc6f305d136a8dc8ba396c4acfe" + "sha256:d6e3a9b1c0904a82984dec58a3d12b3bc08e9d61bbee639e7bb05349e663d036", + "sha256:eed3d9ec8f821963456fef306c1ad11017995982169fca1f38f71c97d6a97b9b" ], "markers": "python_version >= '3.9'", - "version": "==2.9.0" + "version": "==2.10.1" }, "nbclient": { "hashes": [ @@ -1545,18 +1556,28 @@ }, "psutil": { "hashes": [ - "sha256:092b6350145007389c1cfe5716050f02030a05219d90057ea867d18fe8d372fc", - "sha256:146a704f224fb2ded2be3da5ac67fc32b9ea90c45b51676f9114a6ac45616967", - "sha256:295c4025b5cd880f7445e4379e6826f7307e3d488947bf9834e865e7847dc5f7", - "sha256:2a95104eae85d088891716db676f780c1404fc15d47fde48a46a5d61e8f5ad2c", - "sha256:5457cf741ca13da54624126cd5d333871b454ab133999a9a103fb097a7d7d21a", - "sha256:8fa59d7b1f01f0337f12cd10dbd76e4312a4d3c730a4fedcbdd4e5447a8b8460", - "sha256:92ebc58030fb054fa0f26c3206ef01c31c29d67aee1367e3483c16665c25c8d2", - "sha256:98629cd8567acefcc45afe2f4ba1e9290f579eacf490a917967decce4b74ee9b", - "sha256:9b4f17c5f65e44f69bd3a3406071a47b79df45cf2236d1f717970afcb526bcd3" + "sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc", + "sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251", + "sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa", + "sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0", + "sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab", + "sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264", + "sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7", + "sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3", + "sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b", + "sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74", + "sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9", + "sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7", + "sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b", + "sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353", + "sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880", + "sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1", + "sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee", + "sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd", + "sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f" ], "markers": "python_version >= '3.6'", - "version": "==7.1.1" + "version": "==7.1.3" }, "ptyprocess": { "hashes": [ @@ -1679,12 +1700,12 @@ }, "python-dotenv": { "hashes": [ - "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc", - "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab" + "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", + "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==1.1.1" + "version": "==1.2.1" }, "python-json-logger": { "hashes": [ @@ -2236,11 +2257,11 @@ }, "webcolors": { "hashes": [ - "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", - "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6" + "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", + "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf" ], - "markers": "python_version >= '3.9'", - "version": "==24.11.1" + "markers": "python_version >= '3.10'", + "version": "==25.10.0" }, "webencodings": { "hashes": [ @@ -2716,11 +2737,11 @@ }, "virtualenv": { "hashes": [ - "sha256:4f1a845d131133bdff10590489610c98c168ff99dc75d6c96853801f7f67af44", - "sha256:63d106565078d8c8d0b206d48080f938a8b25361e19432d2c9db40d2899c810a" + "sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c", + "sha256:c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b" ], "markers": "python_version >= '3.8'", - "version": "==20.35.3" + "version": "==20.35.4" }, "wcwidth": { "hashes": [ diff --git a/data/license_url_to_identifier_mapping.csv b/data/license_url_to_identifier_mapping.csv new file mode 100644 index 00000000..25101635 --- /dev/null +++ b/data/license_url_to_identifier_mapping.csv @@ -0,0 +1,654 @@ +"LICENSE_URL","LICENSE" +"https://creativecommons.org/licenses/by/4.0","CC BY 4.0" +"https://creativecommons.org/licenses/by-nc/4.0","CC BY-NC 4.0" +"https://creativecommons.org/licenses/by-nc-nd/4.0","CC BY-NC-ND 4.0" +"https://creativecommons.org/licenses/by-nc-sa/4.0","CC BY-NC-SA 4.0" +"https://creativecommons.org/licenses/by-nd/4.0","CC BY-ND 4.0" +"https://creativecommons.org/licenses/by-sa/4.0","CC BY-SA 4.0" +"https://creativecommons.org/publicdomain/certification/1.0/us","CC CERTIFICATION 1.0 US" +"https://creativecommons.org/publicdomain/mark/1.0","PDM 1.0" +"https://creativecommons.org/publicdomain/zero/1.0","CC0 1.0" +"https://creativecommons.org/licenses/by/3.0","CC BY 3.0" +"https://creativecommons.org/licenses/by-nc/3.0","CC BY-NC 3.0" +"https://creativecommons.org/licenses/by-nc-nd/3.0","CC BY-NC-ND 3.0" +"https://creativecommons.org/licenses/by-nc-sa/3.0","CC BY-NC-SA 3.0" +"https://creativecommons.org/licenses/by-nd/3.0","CC BY-ND 3.0" +"https://creativecommons.org/licenses/by-sa/3.0","CC BY-SA 3.0" +"https://creativecommons.org/licenses/by/2.5","CC BY 2.5" +"https://creativecommons.org/licenses/by-nc/2.5","CC BY-NC 2.5" +"https://creativecommons.org/licenses/by-nc-nd/2.5","CC BY-NC-ND 2.5" +"https://creativecommons.org/licenses/by-nc-sa/2.5","CC BY-NC-SA 2.5" +"https://creativecommons.org/licenses/by-nd/2.5","CC BY-ND 2.5" +"https://creativecommons.org/licenses/by-sa/2.5","CC BY-SA 2.5" +"https://creativecommons.org/licenses/by/2.1","CC BY 2.1" +"https://creativecommons.org/licenses/by-nc/2.1","CC BY-NC 2.1" +"https://creativecommons.org/licenses/by-nc-nd/2.1","CC BY-NC-ND 2.1" +"https://creativecommons.org/licenses/by-nc-sa/2.1","CC BY-NC-SA 2.1" +"https://creativecommons.org/licenses/by-nd/2.1","CC BY-ND 2.1" +"https://creativecommons.org/licenses/by-sa/2.1","CC BY-SA 2.1" +"https://creativecommons.org/licenses/by/2.0","CC BY 2.0" +"https://creativecommons.org/licenses/by-nc/2.0","CC BY-NC 2.0" +"https://creativecommons.org/licenses/by-nc-nd/2.0","CC BY-NC-ND 2.0" +"https://creativecommons.org/licenses/by-nc-sa/2.0","CC BY-NC-SA 2.0" +"https://creativecommons.org/licenses/by-nd/2.0","CC BY-ND 2.0" +"https://creativecommons.org/licenses/by-nd-nc/2.0","CC BY-ND-NC 2.0" +"https://creativecommons.org/licenses/by-sa/2.0","CC BY-SA 2.0" +"https://creativecommons.org/licenses/by/1.0","CC BY 1.0" +"https://creativecommons.org/licenses/by-nc/1.0","CC BY-NC 1.0" +"https://creativecommons.org/licenses/by-nc-sa/1.0","CC BY-NC-SA 1.0" +"https://creativecommons.org/licenses/by-nd/1.0","CC BY-ND 1.0" +"https://creativecommons.org/licenses/by-nd-nc/1.0","CC BY-ND-NC 1.0" +"https://creativecommons.org/licenses/by-sa/1.0","CC BY-SA 1.0" +"https://creativecommons.org/licenses/by/3.0/am","CC BY 3.0 AM" +"https://creativecommons.org/licenses/by-nc/3.0/am","CC BY-NC 3.0 AM" +"https://creativecommons.org/licenses/by-nc-nd/3.0/am","CC BY-NC-ND 3.0 AM" +"https://creativecommons.org/licenses/by-nc-sa/3.0/am","CC BY-NC-SA 3.0 AM" +"https://creativecommons.org/licenses/by-nd/3.0/am","CC BY-ND 3.0 AM" +"https://creativecommons.org/licenses/by-sa/3.0/am","CC BY-SA 3.0 AM" +"https://creativecommons.org/licenses/by/3.0/at","CC BY 3.0 AT" +"https://creativecommons.org/licenses/by-nc/3.0/at","CC BY-NC 3.0 AT" +"https://creativecommons.org/licenses/by-nc-nd/3.0/at","CC BY-NC-ND 3.0 AT" +"https://creativecommons.org/licenses/by-nc-sa/3.0/at","CC BY-NC-SA 3.0 AT" +"https://creativecommons.org/licenses/by-nd/3.0/at","CC BY-ND 3.0 AT" +"https://creativecommons.org/licenses/by-sa/3.0/at","CC BY-SA 3.0 AT" +"https://creativecommons.org/licenses/by/3.0/au","CC BY 3.0 AU" +"https://creativecommons.org/licenses/by-nc/3.0/au","CC BY-NC 3.0 AU" +"https://creativecommons.org/licenses/by-nc-nd/3.0/au","CC BY-NC-ND 3.0 AU" +"https://creativecommons.org/licenses/by-nc-sa/3.0/au","CC BY-NC-SA 3.0 AU" +"https://creativecommons.org/licenses/by-nd/3.0/au","CC BY-ND 3.0 AU" +"https://creativecommons.org/licenses/by-sa/3.0/au","CC BY-SA 3.0 AU" +"https://creativecommons.org/licenses/by/3.0/az","CC BY 3.0 AZ" +"https://creativecommons.org/licenses/by-nc/3.0/az","CC BY-NC 3.0 AZ" +"https://creativecommons.org/licenses/by-nc-nd/3.0/az","CC BY-NC-ND 3.0 AZ" +"https://creativecommons.org/licenses/by-nc-sa/3.0/az","CC BY-NC-SA 3.0 AZ" +"https://creativecommons.org/licenses/by-nd/3.0/az","CC BY-ND 3.0 AZ" +"https://creativecommons.org/licenses/by-sa/3.0/az","CC BY-SA 3.0 AZ" +"https://creativecommons.org/licenses/by/3.0/br","CC BY 3.0 BR" +"https://creativecommons.org/licenses/by-nc/3.0/br","CC BY-NC 3.0 BR" +"https://creativecommons.org/licenses/by-nc-nd/3.0/br","CC BY-NC-ND 3.0 BR" +"https://creativecommons.org/licenses/by-nc-sa/3.0/br","CC BY-NC-SA 3.0 BR" +"https://creativecommons.org/licenses/by-nd/3.0/br","CC BY-ND 3.0 BR" +"https://creativecommons.org/licenses/by-sa/3.0/br","CC BY-SA 3.0 BR" +"https://creativecommons.org/licenses/by/3.0/ca","CC BY 3.0 CA" +"https://creativecommons.org/licenses/by-nc/3.0/ca","CC BY-NC 3.0 CA" +"https://creativecommons.org/licenses/by-nc-nd/3.0/ca","CC BY-NC-ND 3.0 CA" +"https://creativecommons.org/licenses/by-nc-sa/3.0/ca","CC BY-NC-SA 3.0 CA" +"https://creativecommons.org/licenses/by-nd/3.0/ca","CC BY-ND 3.0 CA" +"https://creativecommons.org/licenses/by-sa/3.0/ca","CC BY-SA 3.0 CA" +"https://creativecommons.org/licenses/by/3.0/ch","CC BY 3.0 CH" +"https://creativecommons.org/licenses/by-nc/3.0/ch","CC BY-NC 3.0 CH" +"https://creativecommons.org/licenses/by-nc-nd/3.0/ch","CC BY-NC-ND 3.0 CH" +"https://creativecommons.org/licenses/by-nc-sa/3.0/ch","CC BY-NC-SA 3.0 CH" +"https://creativecommons.org/licenses/by-nd/3.0/ch","CC BY-ND 3.0 CH" +"https://creativecommons.org/licenses/by-sa/3.0/ch","CC BY-SA 3.0 CH" +"https://creativecommons.org/licenses/by/3.0/cl","CC BY 3.0 CL" +"https://creativecommons.org/licenses/by-nc/3.0/cl","CC BY-NC 3.0 CL" +"https://creativecommons.org/licenses/by-nc-nd/3.0/cl","CC BY-NC-ND 3.0 CL" +"https://creativecommons.org/licenses/by-nc-sa/3.0/cl","CC BY-NC-SA 3.0 CL" +"https://creativecommons.org/licenses/by-nd/3.0/cl","CC BY-ND 3.0 CL" +"https://creativecommons.org/licenses/by-sa/3.0/cl","CC BY-SA 3.0 CL" +"https://creativecommons.org/licenses/by/3.0/cn","CC BY 3.0 CN" +"https://creativecommons.org/licenses/by-nc/3.0/cn","CC BY-NC 3.0 CN" +"https://creativecommons.org/licenses/by-nc-nd/3.0/cn","CC BY-NC-ND 3.0 CN" +"https://creativecommons.org/licenses/by-nc-sa/3.0/cn","CC BY-NC-SA 3.0 CN" +"https://creativecommons.org/licenses/by-nd/3.0/cn","CC BY-ND 3.0 CN" +"https://creativecommons.org/licenses/by-sa/3.0/cn","CC BY-SA 3.0 CN" +"https://creativecommons.org/licenses/by/3.0/cr","CC BY 3.0 CR" +"https://creativecommons.org/licenses/by-nc/3.0/cr","CC BY-NC 3.0 CR" +"https://creativecommons.org/licenses/by-nc-nd/3.0/cr","CC BY-NC-ND 3.0 CR" +"https://creativecommons.org/licenses/by-nc-sa/3.0/cr","CC BY-NC-SA 3.0 CR" +"https://creativecommons.org/licenses/by-nd/3.0/cr","CC BY-ND 3.0 CR" +"https://creativecommons.org/licenses/by-sa/3.0/cr","CC BY-SA 3.0 CR" +"https://creativecommons.org/licenses/by/3.0/cz","CC BY 3.0 CZ" +"https://creativecommons.org/licenses/by-nc/3.0/cz","CC BY-NC 3.0 CZ" +"https://creativecommons.org/licenses/by-nc-nd/3.0/cz","CC BY-NC-ND 3.0 CZ" +"https://creativecommons.org/licenses/by-nc-sa/3.0/cz","CC BY-NC-SA 3.0 CZ" +"https://creativecommons.org/licenses/by-nd/3.0/cz","CC BY-ND 3.0 CZ" +"https://creativecommons.org/licenses/by-sa/3.0/cz","CC BY-SA 3.0 CZ" +"https://creativecommons.org/licenses/by/3.0/de","CC BY 3.0 DE" +"https://creativecommons.org/licenses/by-nc/3.0/de","CC BY-NC 3.0 DE" +"https://creativecommons.org/licenses/by-nc-nd/3.0/de","CC BY-NC-ND 3.0 DE" +"https://creativecommons.org/licenses/by-nc-sa/3.0/de","CC BY-NC-SA 3.0 DE" +"https://creativecommons.org/licenses/by-nd/3.0/de","CC BY-ND 3.0 DE" +"https://creativecommons.org/licenses/by-sa/3.0/de","CC BY-SA 3.0 DE" +"https://creativecommons.org/licenses/by/3.0/ec","CC BY 3.0 EC" +"https://creativecommons.org/licenses/by-nc/3.0/ec","CC BY-NC 3.0 EC" +"https://creativecommons.org/licenses/by-nc-nd/3.0/ec","CC BY-NC-ND 3.0 EC" +"https://creativecommons.org/licenses/by-nc-sa/3.0/ec","CC BY-NC-SA 3.0 EC" +"https://creativecommons.org/licenses/by-nd/3.0/ec","CC BY-ND 3.0 EC" +"https://creativecommons.org/licenses/by-sa/3.0/ec","CC BY-SA 3.0 EC" +"https://creativecommons.org/licenses/by/3.0/ee","CC BY 3.0 EE" +"https://creativecommons.org/licenses/by-nc/3.0/ee","CC BY-NC 3.0 EE" +"https://creativecommons.org/licenses/by-nc-nd/3.0/ee","CC BY-NC-ND 3.0 EE" +"https://creativecommons.org/licenses/by-nc-sa/3.0/ee","CC BY-NC-SA 3.0 EE" +"https://creativecommons.org/licenses/by-nd/3.0/ee","CC BY-ND 3.0 EE" +"https://creativecommons.org/licenses/by-sa/3.0/ee","CC BY-SA 3.0 EE" +"https://creativecommons.org/licenses/by/3.0/eg","CC BY 3.0 EG" +"https://creativecommons.org/licenses/by-nc/3.0/eg","CC BY-NC 3.0 EG" +"https://creativecommons.org/licenses/by-nc-nd/3.0/eg","CC BY-NC-ND 3.0 EG" +"https://creativecommons.org/licenses/by-nc-sa/3.0/eg","CC BY-NC-SA 3.0 EG" +"https://creativecommons.org/licenses/by-nd/3.0/eg","CC BY-ND 3.0 EG" +"https://creativecommons.org/licenses/by-sa/3.0/eg","CC BY-SA 3.0 EG" +"https://creativecommons.org/licenses/by/3.0/es","CC BY 3.0 ES" +"https://creativecommons.org/licenses/by-nc/3.0/es","CC BY-NC 3.0 ES" +"https://creativecommons.org/licenses/by-nc-nd/3.0/es","CC BY-NC-ND 3.0 ES" +"https://creativecommons.org/licenses/by-nc-sa/3.0/es","CC BY-NC-SA 3.0 ES" +"https://creativecommons.org/licenses/by-nd/3.0/es","CC BY-ND 3.0 ES" +"https://creativecommons.org/licenses/by-sa/3.0/es","CC BY-SA 3.0 ES" +"https://creativecommons.org/licenses/by/3.0/fr","CC BY 3.0 FR" +"https://creativecommons.org/licenses/by-nc/3.0/fr","CC BY-NC 3.0 FR" +"https://creativecommons.org/licenses/by-nc-nd/3.0/fr","CC BY-NC-ND 3.0 FR" +"https://creativecommons.org/licenses/by-nc-sa/3.0/fr","CC BY-NC-SA 3.0 FR" +"https://creativecommons.org/licenses/by-nd/3.0/fr","CC BY-ND 3.0 FR" +"https://creativecommons.org/licenses/by-sa/3.0/fr","CC BY-SA 3.0 FR" +"https://creativecommons.org/licenses/by/3.0/ge","CC BY 3.0 GE" +"https://creativecommons.org/licenses/by-nc/3.0/ge","CC BY-NC 3.0 GE" +"https://creativecommons.org/licenses/by-nc-nd/3.0/ge","CC BY-NC-ND 3.0 GE" +"https://creativecommons.org/licenses/by-nc-sa/3.0/ge","CC BY-NC-SA 3.0 GE" +"https://creativecommons.org/licenses/by-nd/3.0/ge","CC BY-ND 3.0 GE" +"https://creativecommons.org/licenses/by-sa/3.0/ge","CC BY-SA 3.0 GE" +"https://creativecommons.org/licenses/by/3.0/gr","CC BY 3.0 GR" +"https://creativecommons.org/licenses/by-nc/3.0/gr","CC BY-NC 3.0 GR" +"https://creativecommons.org/licenses/by-nc-nd/3.0/gr","CC BY-NC-ND 3.0 GR" +"https://creativecommons.org/licenses/by-nc-sa/3.0/gr","CC BY-NC-SA 3.0 GR" +"https://creativecommons.org/licenses/by-nd/3.0/gr","CC BY-ND 3.0 GR" +"https://creativecommons.org/licenses/by-sa/3.0/gr","CC BY-SA 3.0 GR" +"https://creativecommons.org/licenses/by/3.0/gt","CC BY 3.0 GT" +"https://creativecommons.org/licenses/by-nc/3.0/gt","CC BY-NC 3.0 GT" +"https://creativecommons.org/licenses/by-nc-nd/3.0/gt","CC BY-NC-ND 3.0 GT" +"https://creativecommons.org/licenses/by-nc-sa/3.0/gt","CC BY-NC-SA 3.0 GT" +"https://creativecommons.org/licenses/by-nd/3.0/gt","CC BY-ND 3.0 GT" +"https://creativecommons.org/licenses/by-sa/3.0/gt","CC BY-SA 3.0 GT" +"https://creativecommons.org/licenses/by/3.0/hk","CC BY 3.0 HK" +"https://creativecommons.org/licenses/by-nc/3.0/hk","CC BY-NC 3.0 HK" +"https://creativecommons.org/licenses/by-nc-nd/3.0/hk","CC BY-NC-ND 3.0 HK" +"https://creativecommons.org/licenses/by-nc-sa/3.0/hk","CC BY-NC-SA 3.0 HK" +"https://creativecommons.org/licenses/by-nd/3.0/hk","CC BY-ND 3.0 HK" +"https://creativecommons.org/licenses/by-sa/3.0/hk","CC BY-SA 3.0 HK" +"https://creativecommons.org/licenses/by/3.0/hr","CC BY 3.0 HR" +"https://creativecommons.org/licenses/by-nc/3.0/hr","CC BY-NC 3.0 HR" +"https://creativecommons.org/licenses/by-nc-nd/3.0/hr","CC BY-NC-ND 3.0 HR" +"https://creativecommons.org/licenses/by-nc-sa/3.0/hr","CC BY-NC-SA 3.0 HR" +"https://creativecommons.org/licenses/by-nd/3.0/hr","CC BY-ND 3.0 HR" +"https://creativecommons.org/licenses/by-sa/3.0/hr","CC BY-SA 3.0 HR" +"https://creativecommons.org/licenses/by/3.0/ie","CC BY 3.0 IE" +"https://creativecommons.org/licenses/by-nc/3.0/ie","CC BY-NC 3.0 IE" +"https://creativecommons.org/licenses/by-nc-nd/3.0/ie","CC BY-NC-ND 3.0 IE" +"https://creativecommons.org/licenses/by-nc-sa/3.0/ie","CC BY-NC-SA 3.0 IE" +"https://creativecommons.org/licenses/by-nd/3.0/ie","CC BY-ND 3.0 IE" +"https://creativecommons.org/licenses/by-sa/3.0/ie","CC BY-SA 3.0 IE" +"https://creativecommons.org/licenses/by/3.0/igo","CC BY 3.0 IGO" +"https://creativecommons.org/licenses/by-nc/3.0/igo","CC BY-NC 3.0 IGO" +"https://creativecommons.org/licenses/by-nc-nd/3.0/igo","CC BY-NC-ND 3.0 IGO" +"https://creativecommons.org/licenses/by-nc-sa/3.0/igo","CC BY-NC-SA 3.0 IGO" +"https://creativecommons.org/licenses/by-nd/3.0/igo","CC BY-ND 3.0 IGO" +"https://creativecommons.org/licenses/by-sa/3.0/igo","CC BY-SA 3.0 IGO" +"https://creativecommons.org/licenses/by/3.0/it","CC BY 3.0 IT" +"https://creativecommons.org/licenses/by-nc/3.0/it","CC BY-NC 3.0 IT" +"https://creativecommons.org/licenses/by-nc-nd/3.0/it","CC BY-NC-ND 3.0 IT" +"https://creativecommons.org/licenses/by-nc-sa/3.0/it","CC BY-NC-SA 3.0 IT" +"https://creativecommons.org/licenses/by-nd/3.0/it","CC BY-ND 3.0 IT" +"https://creativecommons.org/licenses/by-sa/3.0/it","CC BY-SA 3.0 IT" +"https://creativecommons.org/licenses/by/3.0/lu","CC BY 3.0 LU" +"https://creativecommons.org/licenses/by-nc/3.0/lu","CC BY-NC 3.0 LU" +"https://creativecommons.org/licenses/by-nc-nd/3.0/lu","CC BY-NC-ND 3.0 LU" +"https://creativecommons.org/licenses/by-nc-sa/3.0/lu","CC BY-NC-SA 3.0 LU" +"https://creativecommons.org/licenses/by-nd/3.0/lu","CC BY-ND 3.0 LU" +"https://creativecommons.org/licenses/by-sa/3.0/lu","CC BY-SA 3.0 LU" +"https://creativecommons.org/licenses/by/3.0/nl","CC BY 3.0 NL" +"https://creativecommons.org/licenses/by-nc/3.0/nl","CC BY-NC 3.0 NL" +"https://creativecommons.org/licenses/by-nc-nd/3.0/nl","CC BY-NC-ND 3.0 NL" +"https://creativecommons.org/licenses/by-nc-sa/3.0/nl","CC BY-NC-SA 3.0 NL" +"https://creativecommons.org/licenses/by-nd/3.0/nl","CC BY-ND 3.0 NL" +"https://creativecommons.org/licenses/by-sa/3.0/nl","CC BY-SA 3.0 NL" +"https://creativecommons.org/licenses/by/3.0/no","CC BY 3.0 NO" +"https://creativecommons.org/licenses/by-nc/3.0/no","CC BY-NC 3.0 NO" +"https://creativecommons.org/licenses/by-nc-nd/3.0/no","CC BY-NC-ND 3.0 NO" +"https://creativecommons.org/licenses/by-nc-sa/3.0/no","CC BY-NC-SA 3.0 NO" +"https://creativecommons.org/licenses/by-nd/3.0/no","CC BY-ND 3.0 NO" +"https://creativecommons.org/licenses/by-sa/3.0/no","CC BY-SA 3.0 NO" +"https://creativecommons.org/licenses/by/3.0/nz","CC BY 3.0 NZ" +"https://creativecommons.org/licenses/by-nc/3.0/nz","CC BY-NC 3.0 NZ" +"https://creativecommons.org/licenses/by-nc-nd/3.0/nz","CC BY-NC-ND 3.0 NZ" +"https://creativecommons.org/licenses/by-nc-sa/3.0/nz","CC BY-NC-SA 3.0 NZ" +"https://creativecommons.org/licenses/by-nd/3.0/nz","CC BY-ND 3.0 NZ" +"https://creativecommons.org/licenses/by-sa/3.0/nz","CC BY-SA 3.0 NZ" +"https://creativecommons.org/licenses/by/3.0/ph","CC BY 3.0 PH" +"https://creativecommons.org/licenses/by-nc/3.0/ph","CC BY-NC 3.0 PH" +"https://creativecommons.org/licenses/by-nc-nd/3.0/ph","CC BY-NC-ND 3.0 PH" +"https://creativecommons.org/licenses/by-nc-sa/3.0/ph","CC BY-NC-SA 3.0 PH" +"https://creativecommons.org/licenses/by-nd/3.0/ph","CC BY-ND 3.0 PH" +"https://creativecommons.org/licenses/by-sa/3.0/ph","CC BY-SA 3.0 PH" +"https://creativecommons.org/licenses/by/3.0/pl","CC BY 3.0 PL" +"https://creativecommons.org/licenses/by-nc/3.0/pl","CC BY-NC 3.0 PL" +"https://creativecommons.org/licenses/by-nc-nd/3.0/pl","CC BY-NC-ND 3.0 PL" +"https://creativecommons.org/licenses/by-nc-sa/3.0/pl","CC BY-NC-SA 3.0 PL" +"https://creativecommons.org/licenses/by-nd/3.0/pl","CC BY-ND 3.0 PL" +"https://creativecommons.org/licenses/by-sa/3.0/pl","CC BY-SA 3.0 PL" +"https://creativecommons.org/licenses/by/3.0/pr","CC BY 3.0 PR" +"https://creativecommons.org/licenses/by-nc/3.0/pr","CC BY-NC 3.0 PR" +"https://creativecommons.org/licenses/by-nc-nd/3.0/pr","CC BY-NC-ND 3.0 PR" +"https://creativecommons.org/licenses/by-nc-sa/3.0/pr","CC BY-NC-SA 3.0 PR" +"https://creativecommons.org/licenses/by-nd/3.0/pr","CC BY-ND 3.0 PR" +"https://creativecommons.org/licenses/by-sa/3.0/pr","CC BY-SA 3.0 PR" +"https://creativecommons.org/licenses/by/3.0/pt","CC BY 3.0 PT" +"https://creativecommons.org/licenses/by-nc/3.0/pt","CC BY-NC 3.0 PT" +"https://creativecommons.org/licenses/by-nc-nd/3.0/pt","CC BY-NC-ND 3.0 PT" +"https://creativecommons.org/licenses/by-nc-sa/3.0/pt","CC BY-NC-SA 3.0 PT" +"https://creativecommons.org/licenses/by-nd/3.0/pt","CC BY-ND 3.0 PT" +"https://creativecommons.org/licenses/by-sa/3.0/pt","CC BY-SA 3.0 PT" +"https://creativecommons.org/licenses/by/3.0/ro","CC BY 3.0 RO" +"https://creativecommons.org/licenses/by-nc/3.0/ro","CC BY-NC 3.0 RO" +"https://creativecommons.org/licenses/by-nc-nd/3.0/ro","CC BY-NC-ND 3.0 RO" +"https://creativecommons.org/licenses/by-nc-sa/3.0/ro","CC BY-NC-SA 3.0 RO" +"https://creativecommons.org/licenses/by-nd/3.0/ro","CC BY-ND 3.0 RO" +"https://creativecommons.org/licenses/by-sa/3.0/ro","CC BY-SA 3.0 RO" +"https://creativecommons.org/licenses/by/3.0/rs","CC BY 3.0 RS" +"https://creativecommons.org/licenses/by-nc/3.0/rs","CC BY-NC 3.0 RS" +"https://creativecommons.org/licenses/by-nc-nd/3.0/rs","CC BY-NC-ND 3.0 RS" +"https://creativecommons.org/licenses/by-nc-sa/3.0/rs","CC BY-NC-SA 3.0 RS" +"https://creativecommons.org/licenses/by-nd/3.0/rs","CC BY-ND 3.0 RS" +"https://creativecommons.org/licenses/by-sa/3.0/rs","CC BY-SA 3.0 RS" +"https://creativecommons.org/licenses/by/3.0/sg","CC BY 3.0 SG" +"https://creativecommons.org/licenses/by-nc/3.0/sg","CC BY-NC 3.0 SG" +"https://creativecommons.org/licenses/by-nc-nd/3.0/sg","CC BY-NC-ND 3.0 SG" +"https://creativecommons.org/licenses/by-nc-sa/3.0/sg","CC BY-NC-SA 3.0 SG" +"https://creativecommons.org/licenses/by-nd/3.0/sg","CC BY-ND 3.0 SG" +"https://creativecommons.org/licenses/by-sa/3.0/sg","CC BY-SA 3.0 SG" +"https://creativecommons.org/licenses/by/3.0/th","CC BY 3.0 TH" +"https://creativecommons.org/licenses/by-nc/3.0/th","CC BY-NC 3.0 TH" +"https://creativecommons.org/licenses/by-nc-nd/3.0/th","CC BY-NC-ND 3.0 TH" +"https://creativecommons.org/licenses/by-nc-sa/3.0/th","CC BY-NC-SA 3.0 TH" +"https://creativecommons.org/licenses/by-nd/3.0/th","CC BY-ND 3.0 TH" +"https://creativecommons.org/licenses/by-sa/3.0/th","CC BY-SA 3.0 TH" +"https://creativecommons.org/licenses/by/3.0/tw","CC BY 3.0 TW" +"https://creativecommons.org/licenses/by-nc/3.0/tw","CC BY-NC 3.0 TW" +"https://creativecommons.org/licenses/by-nc-nd/3.0/tw","CC BY-NC-ND 3.0 TW" +"https://creativecommons.org/licenses/by-nc-sa/3.0/tw","CC BY-NC-SA 3.0 TW" +"https://creativecommons.org/licenses/by-nd/3.0/tw","CC BY-ND 3.0 TW" +"https://creativecommons.org/licenses/by-sa/3.0/tw","CC BY-SA 3.0 TW" +"https://creativecommons.org/licenses/by/3.0/ug","CC BY 3.0 UG" +"https://creativecommons.org/licenses/by-nc/3.0/ug","CC BY-NC 3.0 UG" +"https://creativecommons.org/licenses/by-nc-nd/3.0/ug","CC BY-NC-ND 3.0 UG" +"https://creativecommons.org/licenses/by-nc-sa/3.0/ug","CC BY-NC-SA 3.0 UG" +"https://creativecommons.org/licenses/by-nd/3.0/ug","CC BY-ND 3.0 UG" +"https://creativecommons.org/licenses/by-sa/3.0/ug","CC BY-SA 3.0 UG" +"https://creativecommons.org/licenses/by/3.0/us","CC BY 3.0 US" +"https://creativecommons.org/licenses/by-nc/3.0/us","CC BY-NC 3.0 US" +"https://creativecommons.org/licenses/by-nc-nd/3.0/us","CC BY-NC-ND 3.0 US" +"https://creativecommons.org/licenses/by-nc-sa/3.0/us","CC BY-NC-SA 3.0 US" +"https://creativecommons.org/licenses/by-nd/3.0/us","CC BY-ND 3.0 US" +"https://creativecommons.org/licenses/by-sa/3.0/us","CC BY-SA 3.0 US" +"https://creativecommons.org/licenses/by/3.0/ve","CC BY 3.0 VE" +"https://creativecommons.org/licenses/by-nc/3.0/ve","CC BY-NC 3.0 VE" +"https://creativecommons.org/licenses/by-nc-nd/3.0/ve","CC BY-NC-ND 3.0 VE" +"https://creativecommons.org/licenses/by-nc-sa/3.0/ve","CC BY-NC-SA 3.0 VE" +"https://creativecommons.org/licenses/by-nd/3.0/ve","CC BY-ND 3.0 VE" +"https://creativecommons.org/licenses/by-sa/3.0/ve","CC BY-SA 3.0 VE" +"https://creativecommons.org/licenses/by/3.0/vn","CC BY 3.0 VN" +"https://creativecommons.org/licenses/by-nc/3.0/vn","CC BY-NC 3.0 VN" +"https://creativecommons.org/licenses/by-nc-nd/3.0/vn","CC BY-NC-ND 3.0 VN" +"https://creativecommons.org/licenses/by-nc-sa/3.0/vn","CC BY-NC-SA 3.0 VN" +"https://creativecommons.org/licenses/by-nd/3.0/vn","CC BY-ND 3.0 VN" +"https://creativecommons.org/licenses/by-sa/3.0/vn","CC BY-SA 3.0 VN" +"https://creativecommons.org/licenses/by/3.0/za","CC BY 3.0 ZA" +"https://creativecommons.org/licenses/by-nc/3.0/za","CC BY-NC 3.0 ZA" +"https://creativecommons.org/licenses/by-nc-nd/3.0/za","CC BY-NC-ND 3.0 ZA" +"https://creativecommons.org/licenses/by-nc-sa/3.0/za","CC BY-NC-SA 3.0 ZA" +"https://creativecommons.org/licenses/by-nd/3.0/za","CC BY-ND 3.0 ZA" +"https://creativecommons.org/licenses/by-sa/3.0/za","CC BY-SA 3.0 ZA" +"https://creativecommons.org/licenses/by/2.5/ar","CC BY 2.5 AR" +"https://creativecommons.org/licenses/by-nc/2.5/ar","CC BY-NC 2.5 AR" +"https://creativecommons.org/licenses/by-nc-nd/2.5/ar","CC BY-NC-ND 2.5 AR" +"https://creativecommons.org/licenses/by-nc-sa/2.5/ar","CC BY-NC-SA 2.5 AR" +"https://creativecommons.org/licenses/by-nd/2.5/ar","CC BY-ND 2.5 AR" +"https://creativecommons.org/licenses/by-sa/2.5/ar","CC BY-SA 2.5 AR" +"https://creativecommons.org/licenses/by/2.5/au","CC BY 2.5 AU" +"https://creativecommons.org/licenses/by-nc/2.5/au","CC BY-NC 2.5 AU" +"https://creativecommons.org/licenses/by-nc-nd/2.5/au","CC BY-NC-ND 2.5 AU" +"https://creativecommons.org/licenses/by-nc-sa/2.5/au","CC BY-NC-SA 2.5 AU" +"https://creativecommons.org/licenses/by-nd/2.5/au","CC BY-ND 2.5 AU" +"https://creativecommons.org/licenses/by-sa/2.5/au","CC BY-SA 2.5 AU" +"https://creativecommons.org/licenses/by/2.5/bg","CC BY 2.5 BG" +"https://creativecommons.org/licenses/by-nc/2.5/bg","CC BY-NC 2.5 BG" +"https://creativecommons.org/licenses/by-nc-nd/2.5/bg","CC BY-NC-ND 2.5 BG" +"https://creativecommons.org/licenses/by-nc-sa/2.5/bg","CC BY-NC-SA 2.5 BG" +"https://creativecommons.org/licenses/by-nd/2.5/bg","CC BY-ND 2.5 BG" +"https://creativecommons.org/licenses/by-sa/2.5/bg","CC BY-SA 2.5 BG" +"https://creativecommons.org/licenses/by/2.5/br","CC BY 2.5 BR" +"https://creativecommons.org/licenses/by-nc/2.5/br","CC BY-NC 2.5 BR" +"https://creativecommons.org/licenses/by-nc-nd/2.5/br","CC BY-NC-ND 2.5 BR" +"https://creativecommons.org/licenses/by-nc-sa/2.5/br","CC BY-NC-SA 2.5 BR" +"https://creativecommons.org/licenses/by-nd/2.5/br","CC BY-ND 2.5 BR" +"https://creativecommons.org/licenses/by-sa/2.5/br","CC BY-SA 2.5 BR" +"https://creativecommons.org/licenses/by/2.5/ca","CC BY 2.5 CA" +"https://creativecommons.org/licenses/by-nc/2.5/ca","CC BY-NC 2.5 CA" +"https://creativecommons.org/licenses/by-nc-nd/2.5/ca","CC BY-NC-ND 2.5 CA" +"https://creativecommons.org/licenses/by-nc-sa/2.5/ca","CC BY-NC-SA 2.5 CA" +"https://creativecommons.org/licenses/by-nd/2.5/ca","CC BY-ND 2.5 CA" +"https://creativecommons.org/licenses/by-sa/2.5/ca","CC BY-SA 2.5 CA" +"https://creativecommons.org/licenses/by/2.5/ch","CC BY 2.5 CH" +"https://creativecommons.org/licenses/by-nc/2.5/ch","CC BY-NC 2.5 CH" +"https://creativecommons.org/licenses/by-nc-nd/2.5/ch","CC BY-NC-ND 2.5 CH" +"https://creativecommons.org/licenses/by-nc-sa/2.5/ch","CC BY-NC-SA 2.5 CH" +"https://creativecommons.org/licenses/by-nd/2.5/ch","CC BY-ND 2.5 CH" +"https://creativecommons.org/licenses/by-sa/2.5/ch","CC BY-SA 2.5 CH" +"https://creativecommons.org/licenses/by/2.5/cn","CC BY 2.5 CN" +"https://creativecommons.org/licenses/by-nc/2.5/cn","CC BY-NC 2.5 CN" +"https://creativecommons.org/licenses/by-nc-nd/2.5/cn","CC BY-NC-ND 2.5 CN" +"https://creativecommons.org/licenses/by-nc-sa/2.5/cn","CC BY-NC-SA 2.5 CN" +"https://creativecommons.org/licenses/by-nd/2.5/cn","CC BY-ND 2.5 CN" +"https://creativecommons.org/licenses/by-sa/2.5/cn","CC BY-SA 2.5 CN" +"https://creativecommons.org/licenses/by/2.5/co","CC BY 2.5 CO" +"https://creativecommons.org/licenses/by-nc/2.5/co","CC BY-NC 2.5 CO" +"https://creativecommons.org/licenses/by-nc-nd/2.5/co","CC BY-NC-ND 2.5 CO" +"https://creativecommons.org/licenses/by-nc-sa/2.5/co","CC BY-NC-SA 2.5 CO" +"https://creativecommons.org/licenses/by-nd/2.5/co","CC BY-ND 2.5 CO" +"https://creativecommons.org/licenses/by-sa/2.5/co","CC BY-SA 2.5 CO" +"https://creativecommons.org/licenses/by/2.5/dk","CC BY 2.5 DK" +"https://creativecommons.org/licenses/by-nc/2.5/dk","CC BY-NC 2.5 DK" +"https://creativecommons.org/licenses/by-nc-nd/2.5/dk","CC BY-NC-ND 2.5 DK" +"https://creativecommons.org/licenses/by-nc-sa/2.5/dk","CC BY-NC-SA 2.5 DK" +"https://creativecommons.org/licenses/by-nd/2.5/dk","CC BY-ND 2.5 DK" +"https://creativecommons.org/licenses/by-sa/2.5/dk","CC BY-SA 2.5 DK" +"https://creativecommons.org/licenses/by/2.5/es","CC BY 2.5 ES" +"https://creativecommons.org/licenses/by-nc/2.5/es","CC BY-NC 2.5 ES" +"https://creativecommons.org/licenses/by-nc-nd/2.5/es","CC BY-NC-ND 2.5 ES" +"https://creativecommons.org/licenses/by-nc-sa/2.5/es","CC BY-NC-SA 2.5 ES" +"https://creativecommons.org/licenses/by-nd/2.5/es","CC BY-ND 2.5 ES" +"https://creativecommons.org/licenses/by-sa/2.5/es","CC BY-SA 2.5 ES" +"https://creativecommons.org/licenses/by/2.5/hr","CC BY 2.5 HR" +"https://creativecommons.org/licenses/by-nc/2.5/hr","CC BY-NC 2.5 HR" +"https://creativecommons.org/licenses/by-nc-nd/2.5/hr","CC BY-NC-ND 2.5 HR" +"https://creativecommons.org/licenses/by-nc-sa/2.5/hr","CC BY-NC-SA 2.5 HR" +"https://creativecommons.org/licenses/by-nd/2.5/hr","CC BY-ND 2.5 HR" +"https://creativecommons.org/licenses/by-sa/2.5/hr","CC BY-SA 2.5 HR" +"https://creativecommons.org/licenses/by/2.5/hu","CC BY 2.5 HU" +"https://creativecommons.org/licenses/by-nc/2.5/hu","CC BY-NC 2.5 HU" +"https://creativecommons.org/licenses/by-nc-nd/2.5/hu","CC BY-NC-ND 2.5 HU" +"https://creativecommons.org/licenses/by-nc-sa/2.5/hu","CC BY-NC-SA 2.5 HU" +"https://creativecommons.org/licenses/by-nd/2.5/hu","CC BY-ND 2.5 HU" +"https://creativecommons.org/licenses/by-sa/2.5/hu","CC BY-SA 2.5 HU" +"https://creativecommons.org/licenses/by/2.5/il","CC BY 2.5 IL" +"https://creativecommons.org/licenses/by-nc/2.5/il","CC BY-NC 2.5 IL" +"https://creativecommons.org/licenses/by-nc-nd/2.5/il","CC BY-NC-ND 2.5 IL" +"https://creativecommons.org/licenses/by-nc-sa/2.5/il","CC BY-NC-SA 2.5 IL" +"https://creativecommons.org/licenses/by-nd/2.5/il","CC BY-ND 2.5 IL" +"https://creativecommons.org/licenses/by-sa/2.5/il","CC BY-SA 2.5 IL" +"https://creativecommons.org/licenses/by/2.5/in","CC BY 2.5 IN" +"https://creativecommons.org/licenses/by-nc/2.5/in","CC BY-NC 2.5 IN" +"https://creativecommons.org/licenses/by-nc-nd/2.5/in","CC BY-NC-ND 2.5 IN" +"https://creativecommons.org/licenses/by-nc-sa/2.5/in","CC BY-NC-SA 2.5 IN" +"https://creativecommons.org/licenses/by-nd/2.5/in","CC BY-ND 2.5 IN" +"https://creativecommons.org/licenses/by-sa/2.5/in","CC BY-SA 2.5 IN" +"https://creativecommons.org/licenses/by/2.5/it","CC BY 2.5 IT" +"https://creativecommons.org/licenses/by-nc/2.5/it","CC BY-NC 2.5 IT" +"https://creativecommons.org/licenses/by-nc-nd/2.5/it","CC BY-NC-ND 2.5 IT" +"https://creativecommons.org/licenses/by-nc-sa/2.5/it","CC BY-NC-SA 2.5 IT" +"https://creativecommons.org/licenses/by-nd/2.5/it","CC BY-ND 2.5 IT" +"https://creativecommons.org/licenses/by-sa/2.5/it","CC BY-SA 2.5 IT" +"https://creativecommons.org/licenses/by/2.5/mk","CC BY 2.5 MK" +"https://creativecommons.org/licenses/by-nc/2.5/mk","CC BY-NC 2.5 MK" +"https://creativecommons.org/licenses/by-nc-nd/2.5/mk","CC BY-NC-ND 2.5 MK" +"https://creativecommons.org/licenses/by-nc-sa/2.5/mk","CC BY-NC-SA 2.5 MK" +"https://creativecommons.org/licenses/by-nd/2.5/mk","CC BY-ND 2.5 MK" +"https://creativecommons.org/licenses/by-sa/2.5/mk","CC BY-SA 2.5 MK" +"https://creativecommons.org/licenses/by/2.5/mt","CC BY 2.5 MT" +"https://creativecommons.org/licenses/by-nc/2.5/mt","CC BY-NC 2.5 MT" +"https://creativecommons.org/licenses/by-nc-nd/2.5/mt","CC BY-NC-ND 2.5 MT" +"https://creativecommons.org/licenses/by-nc-sa/2.5/mt","CC BY-NC-SA 2.5 MT" +"https://creativecommons.org/licenses/by-nd/2.5/mt","CC BY-ND 2.5 MT" +"https://creativecommons.org/licenses/by-sa/2.5/mt","CC BY-SA 2.5 MT" +"https://creativecommons.org/licenses/by/2.5/mx","CC BY 2.5 MX" +"https://creativecommons.org/licenses/by-nc/2.5/mx","CC BY-NC 2.5 MX" +"https://creativecommons.org/licenses/by-nc-nd/2.5/mx","CC BY-NC-ND 2.5 MX" +"https://creativecommons.org/licenses/by-nc-sa/2.5/mx","CC BY-NC-SA 2.5 MX" +"https://creativecommons.org/licenses/by-nd/2.5/mx","CC BY-ND 2.5 MX" +"https://creativecommons.org/licenses/by-sa/2.5/mx","CC BY-SA 2.5 MX" +"https://creativecommons.org/licenses/by/2.5/my","CC BY 2.5 MY" +"https://creativecommons.org/licenses/by-nc/2.5/my","CC BY-NC 2.5 MY" +"https://creativecommons.org/licenses/by-nc-nd/2.5/my","CC BY-NC-ND 2.5 MY" +"https://creativecommons.org/licenses/by-nc-sa/2.5/my","CC BY-NC-SA 2.5 MY" +"https://creativecommons.org/licenses/by-nd/2.5/my","CC BY-ND 2.5 MY" +"https://creativecommons.org/licenses/by-sa/2.5/my","CC BY-SA 2.5 MY" +"https://creativecommons.org/licenses/by/2.5/nl","CC BY 2.5 NL" +"https://creativecommons.org/licenses/by-nc/2.5/nl","CC BY-NC 2.5 NL" +"https://creativecommons.org/licenses/by-nc-nd/2.5/nl","CC BY-NC-ND 2.5 NL" +"https://creativecommons.org/licenses/by-nc-sa/2.5/nl","CC BY-NC-SA 2.5 NL" +"https://creativecommons.org/licenses/by-nd/2.5/nl","CC BY-ND 2.5 NL" +"https://creativecommons.org/licenses/by-sa/2.5/nl","CC BY-SA 2.5 NL" +"https://creativecommons.org/licenses/by/2.5/pe","CC BY 2.5 PE" +"https://creativecommons.org/licenses/by-nc/2.5/pe","CC BY-NC 2.5 PE" +"https://creativecommons.org/licenses/by-nc-nd/2.5/pe","CC BY-NC-ND 2.5 PE" +"https://creativecommons.org/licenses/by-nc-sa/2.5/pe","CC BY-NC-SA 2.5 PE" +"https://creativecommons.org/licenses/by-nd/2.5/pe","CC BY-ND 2.5 PE" +"https://creativecommons.org/licenses/by-sa/2.5/pe","CC BY-SA 2.5 PE" +"https://creativecommons.org/licenses/by/2.5/pl","CC BY 2.5 PL" +"https://creativecommons.org/licenses/by-nc/2.5/pl","CC BY-NC 2.5 PL" +"https://creativecommons.org/licenses/by-nc-nd/2.5/pl","CC BY-NC-ND 2.5 PL" +"https://creativecommons.org/licenses/by-nc-sa/2.5/pl","CC BY-NC-SA 2.5 PL" +"https://creativecommons.org/licenses/by-nd/2.5/pl","CC BY-ND 2.5 PL" +"https://creativecommons.org/licenses/by-sa/2.5/pl","CC BY-SA 2.5 PL" +"https://creativecommons.org/licenses/by/2.5/pt","CC BY 2.5 PT" +"https://creativecommons.org/licenses/by-nc/2.5/pt","CC BY-NC 2.5 PT" +"https://creativecommons.org/licenses/by-nc-nd/2.5/pt","CC BY-NC-ND 2.5 PT" +"https://creativecommons.org/licenses/by-nc-sa/2.5/pt","CC BY-NC-SA 2.5 PT" +"https://creativecommons.org/licenses/by-nd/2.5/pt","CC BY-ND 2.5 PT" +"https://creativecommons.org/licenses/by-sa/2.5/pt","CC BY-SA 2.5 PT" +"https://creativecommons.org/licenses/by/2.5/scotland","CC BY 2.5 SCOTLAND" +"https://creativecommons.org/licenses/by-nc/2.5/scotland","CC BY-NC 2.5 SCOTLAND" +"https://creativecommons.org/licenses/by-nc-nd/2.5/scotland","CC BY-NC-ND 2.5 SCOTLAND" +"https://creativecommons.org/licenses/by-nc-sa/2.5/scotland","CC BY-NC-SA 2.5 SCOTLAND" +"https://creativecommons.org/licenses/by-nd/2.5/scotland","CC BY-ND 2.5 SCOTLAND" +"https://creativecommons.org/licenses/by-sa/2.5/scotland","CC BY-SA 2.5 SCOTLAND" +"https://creativecommons.org/licenses/by/2.5/se","CC BY 2.5 SE" +"https://creativecommons.org/licenses/by-nc/2.5/se","CC BY-NC 2.5 SE" +"https://creativecommons.org/licenses/by-nc-nd/2.5/se","CC BY-NC-ND 2.5 SE" +"https://creativecommons.org/licenses/by-nc-sa/2.5/se","CC BY-NC-SA 2.5 SE" +"https://creativecommons.org/licenses/by-nd/2.5/se","CC BY-ND 2.5 SE" +"https://creativecommons.org/licenses/by-sa/2.5/se","CC BY-SA 2.5 SE" +"https://creativecommons.org/licenses/by/2.5/si","CC BY 2.5 SI" +"https://creativecommons.org/licenses/by-nc/2.5/si","CC BY-NC 2.5 SI" +"https://creativecommons.org/licenses/by-nc-nd/2.5/si","CC BY-NC-ND 2.5 SI" +"https://creativecommons.org/licenses/by-nc-sa/2.5/si","CC BY-NC-SA 2.5 SI" +"https://creativecommons.org/licenses/by-nd/2.5/si","CC BY-ND 2.5 SI" +"https://creativecommons.org/licenses/by-sa/2.5/si","CC BY-SA 2.5 SI" +"https://creativecommons.org/licenses/by/2.5/tw","CC BY 2.5 TW" +"https://creativecommons.org/licenses/by-nc/2.5/tw","CC BY-NC 2.5 TW" +"https://creativecommons.org/licenses/by-nc-nd/2.5/tw","CC BY-NC-ND 2.5 TW" +"https://creativecommons.org/licenses/by-nc-sa/2.5/tw","CC BY-NC-SA 2.5 TW" +"https://creativecommons.org/licenses/by-nd/2.5/tw","CC BY-ND 2.5 TW" +"https://creativecommons.org/licenses/by-sa/2.5/tw","CC BY-SA 2.5 TW" +"https://creativecommons.org/licenses/by/2.5/za","CC BY 2.5 ZA" +"https://creativecommons.org/licenses/by-nc/2.5/za","CC BY-NC 2.5 ZA" +"https://creativecommons.org/licenses/by-nc-nd/2.5/za","CC BY-NC-ND 2.5 ZA" +"https://creativecommons.org/licenses/by-nc-sa/2.5/za","CC BY-NC-SA 2.5 ZA" +"https://creativecommons.org/licenses/by-nd/2.5/za","CC BY-ND 2.5 ZA" +"https://creativecommons.org/licenses/by-sa/2.5/za","CC BY-SA 2.5 ZA" +"https://creativecommons.org/licenses/by/2.1/au","CC BY 2.1 AU" +"https://creativecommons.org/licenses/by-nc/2.1/au","CC BY-NC 2.1 AU" +"https://creativecommons.org/licenses/by-nc-nd/2.1/au","CC BY-NC-ND 2.1 AU" +"https://creativecommons.org/licenses/by-nc-sa/2.1/au","CC BY-NC-SA 2.1 AU" +"https://creativecommons.org/licenses/by-nd/2.1/au","CC BY-ND 2.1 AU" +"https://creativecommons.org/licenses/by-sa/2.1/au","CC BY-SA 2.1 AU" +"https://creativecommons.org/licenses/by/2.1/ca","CC BY 2.1 CA" +"https://creativecommons.org/licenses/by-nc/2.1/ca","CC BY-NC 2.1 CA" +"https://creativecommons.org/licenses/by-nc-nd/2.1/ca","CC BY-NC-ND 2.1 CA" +"https://creativecommons.org/licenses/by-nc-sa/2.1/ca","CC BY-NC-SA 2.1 CA" +"https://creativecommons.org/licenses/by-nd/2.1/ca","CC BY-ND 2.1 CA" +"https://creativecommons.org/licenses/by-sa/2.1/ca","CC BY-SA 2.1 CA" +"https://creativecommons.org/licenses/by/2.1/es","CC BY 2.1 ES" +"https://creativecommons.org/licenses/by-nc/2.1/es","CC BY-NC 2.1 ES" +"https://creativecommons.org/licenses/by-nc-nd/2.1/es","CC BY-NC-ND 2.1 ES" +"https://creativecommons.org/licenses/by-nc-sa/2.1/es","CC BY-NC-SA 2.1 ES" +"https://creativecommons.org/licenses/by-nd/2.1/es","CC BY-ND 2.1 ES" +"https://creativecommons.org/licenses/by-sa/2.1/es","CC BY-SA 2.1 ES" +"https://creativecommons.org/licenses/by/2.1/jp","CC BY 2.1 JP" +"https://creativecommons.org/licenses/by-nc/2.1/jp","CC BY-NC 2.1 JP" +"https://creativecommons.org/licenses/by-nc-nd/2.1/jp","CC BY-NC-ND 2.1 JP" +"https://creativecommons.org/licenses/by-nc-sa/2.1/jp","CC BY-NC-SA 2.1 JP" +"https://creativecommons.org/licenses/by-nd/2.1/jp","CC BY-ND 2.1 JP" +"https://creativecommons.org/licenses/by-sa/2.1/jp","CC BY-SA 2.1 JP" +"https://creativecommons.org/licenses/by/2.0/at","CC BY 2.0 AT" +"https://creativecommons.org/licenses/by-nc/2.0/at","CC BY-NC 2.0 AT" +"https://creativecommons.org/licenses/by-nc-nd/2.0/at","CC BY-NC-ND 2.0 AT" +"https://creativecommons.org/licenses/by-nc-sa/2.0/at","CC BY-NC-SA 2.0 AT" +"https://creativecommons.org/licenses/by-nd/2.0/at","CC BY-ND 2.0 AT" +"https://creativecommons.org/licenses/by-sa/2.0/at","CC BY-SA 2.0 AT" +"https://creativecommons.org/licenses/by/2.0/au","CC BY 2.0 AU" +"https://creativecommons.org/licenses/by-nc/2.0/au","CC BY-NC 2.0 AU" +"https://creativecommons.org/licenses/by-nc-nd/2.0/au","CC BY-NC-ND 2.0 AU" +"https://creativecommons.org/licenses/by-nc-sa/2.0/au","CC BY-NC-SA 2.0 AU" +"https://creativecommons.org/licenses/by-nd/2.0/au","CC BY-ND 2.0 AU" +"https://creativecommons.org/licenses/by-sa/2.0/au","CC BY-SA 2.0 AU" +"https://creativecommons.org/licenses/by/2.0/be","CC BY 2.0 BE" +"https://creativecommons.org/licenses/by-nc/2.0/be","CC BY-NC 2.0 BE" +"https://creativecommons.org/licenses/by-nc-nd/2.0/be","CC BY-NC-ND 2.0 BE" +"https://creativecommons.org/licenses/by-nc-sa/2.0/be","CC BY-NC-SA 2.0 BE" +"https://creativecommons.org/licenses/by-nd/2.0/be","CC BY-ND 2.0 BE" +"https://creativecommons.org/licenses/by-sa/2.0/be","CC BY-SA 2.0 BE" +"https://creativecommons.org/licenses/by/2.0/br","CC BY 2.0 BR" +"https://creativecommons.org/licenses/by-nc/2.0/br","CC BY-NC 2.0 BR" +"https://creativecommons.org/licenses/by-nc-nd/2.0/br","CC BY-NC-ND 2.0 BR" +"https://creativecommons.org/licenses/by-nc-sa/2.0/br","CC BY-NC-SA 2.0 BR" +"https://creativecommons.org/licenses/by-nd/2.0/br","CC BY-ND 2.0 BR" +"https://creativecommons.org/licenses/by-sa/2.0/br","CC BY-SA 2.0 BR" +"https://creativecommons.org/licenses/by/2.0/ca","CC BY 2.0 CA" +"https://creativecommons.org/licenses/by-nc/2.0/ca","CC BY-NC 2.0 CA" +"https://creativecommons.org/licenses/by-nc-nd/2.0/ca","CC BY-NC-ND 2.0 CA" +"https://creativecommons.org/licenses/by-nc-sa/2.0/ca","CC BY-NC-SA 2.0 CA" +"https://creativecommons.org/licenses/by-nd/2.0/ca","CC BY-ND 2.0 CA" +"https://creativecommons.org/licenses/by-sa/2.0/ca","CC BY-SA 2.0 CA" +"https://creativecommons.org/licenses/by/2.0/cl","CC BY 2.0 CL" +"https://creativecommons.org/licenses/by-nc/2.0/cl","CC BY-NC 2.0 CL" +"https://creativecommons.org/licenses/by-nc-nd/2.0/cl","CC BY-NC-ND 2.0 CL" +"https://creativecommons.org/licenses/by-nc-sa/2.0/cl","CC BY-NC-SA 2.0 CL" +"https://creativecommons.org/licenses/by-nd/2.0/cl","CC BY-ND 2.0 CL" +"https://creativecommons.org/licenses/by-sa/2.0/cl","CC BY-SA 2.0 CL" +"https://creativecommons.org/licenses/by/2.0/de","CC BY 2.0 DE" +"https://creativecommons.org/licenses/by-nc/2.0/de","CC BY-NC 2.0 DE" +"https://creativecommons.org/licenses/by-nc-nd/2.0/de","CC BY-NC-ND 2.0 DE" +"https://creativecommons.org/licenses/by-nc-sa/2.0/de","CC BY-NC-SA 2.0 DE" +"https://creativecommons.org/licenses/by-nd/2.0/de","CC BY-ND 2.0 DE" +"https://creativecommons.org/licenses/by-sa/2.0/de","CC BY-SA 2.0 DE" +"https://creativecommons.org/licenses/by/2.0/es","CC BY 2.0 ES" +"https://creativecommons.org/licenses/by-nc/2.0/es","CC BY-NC 2.0 ES" +"https://creativecommons.org/licenses/by-nc-nd/2.0/es","CC BY-NC-ND 2.0 ES" +"https://creativecommons.org/licenses/by-nc-sa/2.0/es","CC BY-NC-SA 2.0 ES" +"https://creativecommons.org/licenses/by-nd/2.0/es","CC BY-ND 2.0 ES" +"https://creativecommons.org/licenses/by-sa/2.0/es","CC BY-SA 2.0 ES" +"https://creativecommons.org/licenses/by/2.0/fr","CC BY 2.0 FR" +"https://creativecommons.org/licenses/by-nc/2.0/fr","CC BY-NC 2.0 FR" +"https://creativecommons.org/licenses/by-nc-nd/2.0/fr","CC BY-NC-ND 2.0 FR" +"https://creativecommons.org/licenses/by-nc-sa/2.0/fr","CC BY-NC-SA 2.0 FR" +"https://creativecommons.org/licenses/by-nd/2.0/fr","CC BY-ND 2.0 FR" +"https://creativecommons.org/licenses/by-sa/2.0/fr","CC BY-SA 2.0 FR" +"https://creativecommons.org/licenses/by/2.0/hr","CC BY 2.0 HR" +"https://creativecommons.org/licenses/by-nc/2.0/hr","CC BY-NC 2.0 HR" +"https://creativecommons.org/licenses/by-nc-nd/2.0/hr","CC BY-NC-ND 2.0 HR" +"https://creativecommons.org/licenses/by-nc-sa/2.0/hr","CC BY-NC-SA 2.0 HR" +"https://creativecommons.org/licenses/by-nd/2.0/hr","CC BY-ND 2.0 HR" +"https://creativecommons.org/licenses/by-sa/2.0/hr","CC BY-SA 2.0 HR" +"https://creativecommons.org/licenses/by/2.0/it","CC BY 2.0 IT" +"https://creativecommons.org/licenses/by-nc/2.0/it","CC BY-NC 2.0 IT" +"https://creativecommons.org/licenses/by-nc-nd/2.0/it","CC BY-NC-ND 2.0 IT" +"https://creativecommons.org/licenses/by-nc-sa/2.0/it","CC BY-NC-SA 2.0 IT" +"https://creativecommons.org/licenses/by-nd/2.0/it","CC BY-ND 2.0 IT" +"https://creativecommons.org/licenses/by-sa/2.0/it","CC BY-SA 2.0 IT" +"https://creativecommons.org/licenses/by/2.0/jp","CC BY 2.0 JP" +"https://creativecommons.org/licenses/by-nc/2.0/jp","CC BY-NC 2.0 JP" +"https://creativecommons.org/licenses/by-nc-nd/2.0/jp","CC BY-NC-ND 2.0 JP" +"https://creativecommons.org/licenses/by-nc-sa/2.0/jp","CC BY-NC-SA 2.0 JP" +"https://creativecommons.org/licenses/by-nd/2.0/jp","CC BY-ND 2.0 JP" +"https://creativecommons.org/licenses/by-nd-nc/2.0/jp","CC BY-ND-NC 2.0 JP" +"https://creativecommons.org/licenses/by-sa/2.0/jp","CC BY-SA 2.0 JP" +"https://creativecommons.org/licenses/by/2.0/kr","CC BY 2.0 KR" +"https://creativecommons.org/licenses/by-nc/2.0/kr","CC BY-NC 2.0 KR" +"https://creativecommons.org/licenses/by-nc-nd/2.0/kr","CC BY-NC-ND 2.0 KR" +"https://creativecommons.org/licenses/by-nc-sa/2.0/kr","CC BY-NC-SA 2.0 KR" +"https://creativecommons.org/licenses/by-nd/2.0/kr","CC BY-ND 2.0 KR" +"https://creativecommons.org/licenses/by-sa/2.0/kr","CC BY-SA 2.0 KR" +"https://creativecommons.org/licenses/by/2.0/nl","CC BY 2.0 NL" +"https://creativecommons.org/licenses/by-nc/2.0/nl","CC BY-NC 2.0 NL" +"https://creativecommons.org/licenses/by-nc-nd/2.0/nl","CC BY-NC-ND 2.0 NL" +"https://creativecommons.org/licenses/by-nc-sa/2.0/nl","CC BY-NC-SA 2.0 NL" +"https://creativecommons.org/licenses/by-nd/2.0/nl","CC BY-ND 2.0 NL" +"https://creativecommons.org/licenses/by-sa/2.0/nl","CC BY-SA 2.0 NL" +"https://creativecommons.org/licenses/by/2.0/pl","CC BY 2.0 PL" +"https://creativecommons.org/licenses/by-nc/2.0/pl","CC BY-NC 2.0 PL" +"https://creativecommons.org/licenses/by-nc-nd/2.0/pl","CC BY-NC-ND 2.0 PL" +"https://creativecommons.org/licenses/by-nc-sa/2.0/pl","CC BY-NC-SA 2.0 PL" +"https://creativecommons.org/licenses/by-nd/2.0/pl","CC BY-ND 2.0 PL" +"https://creativecommons.org/licenses/by-sa/2.0/pl","CC BY-SA 2.0 PL" +"https://creativecommons.org/licenses/by/2.0/tw","CC BY 2.0 TW" +"https://creativecommons.org/licenses/by-nc/2.0/tw","CC BY-NC 2.0 TW" +"https://creativecommons.org/licenses/by-nc-nd/2.0/tw","CC BY-NC-ND 2.0 TW" +"https://creativecommons.org/licenses/by-nc-sa/2.0/tw","CC BY-NC-SA 2.0 TW" +"https://creativecommons.org/licenses/by-nd/2.0/tw","CC BY-ND 2.0 TW" +"https://creativecommons.org/licenses/by-sa/2.0/tw","CC BY-SA 2.0 TW" +"https://creativecommons.org/licenses/by/2.0/uk","CC BY 2.0 UK" +"https://creativecommons.org/licenses/by-nc/2.0/uk","CC BY-NC 2.0 UK" +"https://creativecommons.org/licenses/by-nc-nd/2.0/uk","CC BY-NC-ND 2.0 UK" +"https://creativecommons.org/licenses/by-nc-sa/2.0/uk","CC BY-NC-SA 2.0 UK" +"https://creativecommons.org/licenses/by-nd/2.0/uk","CC BY-ND 2.0 UK" +"https://creativecommons.org/licenses/by-sa/2.0/uk","CC BY-SA 2.0 UK" +"https://creativecommons.org/licenses/by/2.0/za","CC BY 2.0 ZA" +"https://creativecommons.org/licenses/by-nc/2.0/za","CC BY-NC 2.0 ZA" +"https://creativecommons.org/licenses/by-nc-nd/2.0/za","CC BY-NC-ND 2.0 ZA" +"https://creativecommons.org/licenses/by-nc-sa/2.0/za","CC BY-NC-SA 2.0 ZA" +"https://creativecommons.org/licenses/by-nd/2.0/za","CC BY-ND 2.0 ZA" +"https://creativecommons.org/licenses/by-sa/2.0/za","CC BY-SA 2.0 ZA" +"https://creativecommons.org/licenses/by/1.0/fi","CC BY 1.0 FI" +"https://creativecommons.org/licenses/by-nc/1.0/fi","CC BY-NC 1.0 FI" +"https://creativecommons.org/licenses/by-nc-sa/1.0/fi","CC BY-NC-SA 1.0 FI" +"https://creativecommons.org/licenses/by-nd/1.0/fi","CC BY-ND 1.0 FI" +"https://creativecommons.org/licenses/by-nd-nc/1.0/fi","CC BY-ND-NC 1.0 FI" +"https://creativecommons.org/licenses/by-sa/1.0/fi","CC BY-SA 1.0 FI" +"https://creativecommons.org/licenses/by/1.0/il","CC BY 1.0 IL" +"https://creativecommons.org/licenses/by-nc/1.0/il","CC BY-NC 1.0 IL" +"https://creativecommons.org/licenses/by-nc-sa/1.0/il","CC BY-NC-SA 1.0 IL" +"https://creativecommons.org/licenses/by-nd/1.0/il","CC BY-ND 1.0 IL" +"https://creativecommons.org/licenses/by-nd-nc/1.0/il","CC BY-ND-NC 1.0 IL" +"https://creativecommons.org/licenses/by-sa/1.0/il","CC BY-SA 1.0 IL" +"https://creativecommons.org/licenses/by/1.0/nl","CC BY 1.0 NL" +"https://creativecommons.org/licenses/by-nc/1.0/nl","CC BY-NC 1.0 NL" +"https://creativecommons.org/licenses/by-nc-sa/1.0/nl","CC BY-NC-SA 1.0 NL" +"https://creativecommons.org/licenses/by-nd/1.0/nl","CC BY-ND 1.0 NL" +"https://creativecommons.org/licenses/by-nd-nc/1.0/nl","CC BY-ND-NC 1.0 NL" +"https://creativecommons.org/licenses/by-sa/1.0/nl","CC BY-SA 1.0 NL" +"https://creativecommons.org/licenses/devnations/2.0","CC DEVNATIONS 2.0" +"https://creativecommons.org/licenses/nc/2.0","CC NC 2.0" +"https://creativecommons.org/licenses/nc-sa/2.0","CC NC-SA 2.0" +"https://creativecommons.org/licenses/nd/2.0","CC ND 2.0" +"https://creativecommons.org/licenses/nd-nc/2.0","CC ND-NC 2.0" +"https://creativecommons.org/licenses/sa/2.0","CC SA 2.0" +"https://creativecommons.org/licenses/nc/1.0","CC NC 1.0" +"https://creativecommons.org/licenses/nc-sa/1.0","CC NC-SA 1.0" +"https://creativecommons.org/licenses/nc-sampling+/1.0","CC NC-SAMPLING+ 1.0" +"https://creativecommons.org/licenses/nd/1.0","CC ND 1.0" +"https://creativecommons.org/licenses/nd-nc/1.0","CC ND-NC 1.0" +"https://creativecommons.org/licenses/sa/1.0","CC SA 1.0" +"https://creativecommons.org/licenses/sampling/1.0","CC SAMPLING 1.0" +"https://creativecommons.org/licenses/sampling+/1.0","CC SAMPLING+ 1.0" +"https://creativecommons.org/licenses/nc/2.0/jp","CC NC 2.0 JP" +"https://creativecommons.org/licenses/nc-sa/2.0/jp","CC NC-SA 2.0 JP" +"https://creativecommons.org/licenses/nd/2.0/jp","CC ND 2.0 JP" +"https://creativecommons.org/licenses/nd-nc/2.0/jp","CC ND-NC 2.0 JP" +"https://creativecommons.org/licenses/sa/2.0/jp","CC SA 2.0 JP" +"https://creativecommons.org/licenses/sampling/1.0/br","CC SAMPLING 1.0 BR" +"https://creativecommons.org/licenses/sampling+/1.0/br","CC SAMPLING+ 1.0 BR" +"https://creativecommons.org/licenses/sampling+/1.0/de","CC SAMPLING+ 1.0 DE" +"https://creativecommons.org/licenses/nc/1.0/fi","CC NC 1.0 FI" +"https://creativecommons.org/licenses/nc-sa/1.0/fi","CC NC-SA 1.0 FI" +"https://creativecommons.org/licenses/nd/1.0/fi","CC ND 1.0 FI" +"https://creativecommons.org/licenses/nd-nc/1.0/fi","CC ND-NC 1.0 FI" +"https://creativecommons.org/licenses/sa/1.0/fi","CC SA 1.0 FI" +"https://creativecommons.org/licenses/nc/1.0/nl","CC NC 1.0 NL" +"https://creativecommons.org/licenses/nc-sa/1.0/nl","CC NC-SA 1.0 NL" +"https://creativecommons.org/licenses/nd/1.0/nl","CC ND 1.0 NL" +"https://creativecommons.org/licenses/nd-nc/1.0/nl","CC ND-NC 1.0 NL" +"https://creativecommons.org/licenses/sa/1.0/nl","CC SA 1.0 NL" +"https://creativecommons.org/licenses/nc-sampling+/1.0/tw","CC NC-SAMPLING+ 1.0 TW" +"https://creativecommons.org/licenses/sampling/1.0/tw", "CC SAMPLING 1.0 TW" +"https://creativecommons.org/licenses/sampling+/1.0/tw","CC SAMPLING+ 1.0 TW" +"https://creativecommons.org/licenses/publicdomain","CC CERTIFICATION 1.0 US" diff --git a/pyproject.toml b/pyproject.toml index bf1bad8f..d092760f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,7 +17,7 @@ line_length = 79 multi_line_output = 3 no_lines_before = 'LOCALFOLDER' profile = 'black' -src_paths = ['pre-automation', 'scripts'] +src_paths = ['scripts'] # [tool.pre-commit] diff --git a/scripts/1-fetch/internetarchive_fetch.py b/scripts/1-fetch/internetarchive_fetch.py new file mode 100755 index 00000000..f70f85b5 --- /dev/null +++ b/scripts/1-fetch/internetarchive_fetch.py @@ -0,0 +1,512 @@ +#!/usr/bin/env python +""" +Fetch open content data from Internet Archive using the Python interface. +""" + +# Standard library +import argparse +import csv +import os +import re +import sys +import textwrap +import traceback +import unicodedata +from collections import Counter +from time import sleep +from urllib.parse import urlparse + +# Third-party +from babel import Locale +from internetarchive import ArchiveSession +from iso639 import Lang +from pygments import highlight +from pygments.formatters import TerminalFormatter +from pygments.lexers import PythonTracebackLexer + +# Add parent directory so shared can be imported +sys.path.append(os.path.join(os.path.dirname(__file__), "..")) + +# First-party/Local +import shared # noqa: E402 + +# Setup +LOGGER, PATHS = shared.setup(__file__) + +# CSV paths +FILE1_COUNT = os.path.join(PATHS["data_phase"], "internetarchive_1_count.csv") +FILE2_LANGUAGE = os.path.join( + PATHS["data_phase"], "internetarchive_2_count_by_language.csv" +) + +# CSV headers +HEADER1 = ["LICENSE", "COUNT"] +HEADER2 = ["LICENSE", "LANGUAGE", "COUNT"] + +QUARTER = os.path.basename(PATHS["data_quarter"]) + +ISO639_CACHE = {} + + +def parse_arguments(): + LOGGER.info("Parsing command-line options") + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--enable-save", action="store_true", help="Enable saving results" + ) + parser.add_argument( + "--enable-git", action="store_true", help="Enable git actions" + ) + args = parser.parse_args() + if not args.enable_save and args.enable_git: + parser.error("--enable-git requires --enable-save") + return args + + +def load_license_mapping(): + """Loads and normalizes the license mapping from CSV.""" + license_mapping = {} + file_path = shared.path_join( + PATHS["data"], "license_url_to_identifier_mapping.csv" + ) + with open(file_path, "r", encoding="utf-8") as file_obj: + reader = csv.DictReader(file_obj) + for row in reader: + raw_url = row["LICENSE_URL"] + label = row["LICENSE"].strip() + normalized_url = normalize_license(raw_url, license_mapping=None) + if normalized_url: + license_mapping[normalized_url] = label + return license_mapping + + +def normalize_license(licenseurl, license_mapping=None): + """Normalize licenseurl and map to standard license label.""" + if not isinstance(licenseurl, str) or not licenseurl.strip(): + return None + + # Parse and clean + parsed = urlparse( + licenseurl.strip() + .lower() + .replace("http://", "https://") + .replace("www.", "") + ) + path = parsed.path.rstrip("/") + path = re.sub(r"/(deed|legalcode)(\.[a-zA-Z_-]+)?$|[/'\"\W]+$", "", path) + + # Reconstruct normalized URL + normalized_url = f"https://{parsed.netloc}{path}" + + # Lookup mapped label + label = ( + license_mapping.get(normalized_url, "UNKNOWN") + if license_mapping + else normalized_url + ) + + return label + + +def normalize_key(s): + """Normalize string for dictionary keys: + NFKD, remove diacritics, punctuation, collapse spaces, lowercase.""" + if not s: + return "" + s = str(s) + s = unicodedata.normalize("NFKD", s) + s = "".join(ch for ch in s if not unicodedata.combining(ch)) + s = re.sub( + r"[^\w\s\+\-/]", " ", s, flags=re.UNICODE + ) # keep + / - for splits + if re.fullmatch(r"[a-zA-Z]{2,3}[-_][a-zA-Z]{2,3}", s.strip()): + s = s.replace("_", "-") + return s.strip().lower() + + +def iso639_lookup(term): + """Return a Language object or None; + cache results. + Accepts raw user input.""" + if not term: + return None + key = term.strip().lower().replace("_", "-") + if key in ISO639_CACHE: + return ISO639_CACHE[key] + + # Try direct code match + try: + result = Lang(key) + ISO639_CACHE[key] = result + return result + except Exception: + pass + + # fallback to title-case name lookup + try: + result = Lang(term.strip().title()) + if result: + ISO639_CACHE[key] = result + return result + except Exception: + pass + + return None + + +# strip common noise like "subtitles", "subtitle", +# "(English)", "english patch", "handwritten", etc. +def strip_noise(s): + # Helper to find words with flexible boundaries + def word_regex(word): + return r"(\b|(?<=[\-_]))" + re.escape(word) + r"\b" + + noise_words = [ + "subtitles?", + "subtitle", + "sub-titles", + "subbed", + "with subtitles?", + "english patch", + "handwritten", + "hand write", + "hand-written", + "hand written", + "-handwritten", + "no voice", + "no spoken word", + "no speech", + "instrumental", + "universal", + "language", + "=", + "simple", + "spoken", + "-spoken", + ] + + # Combine all noise words into one regex + combined_regex = r"|".join(word_regex(w) for w in noise_words) + + s = re.sub(combined_regex, " ", s, flags=re.I) + + # Original regex for symbols + s = re.sub(r"[()\"\']", " ", s) + return s + + +def is_multi_language(raw_language): + """Detects multi-language strings.""" + return bool( + re.search( + r",|;|\band\b|\bor\b|\bwith\b|\/|&\s+", + raw_language, + flags=re.IGNORECASE, + ) + ) + + +def normalize_language(raw_language): + if not raw_language: + return "Undetermined" + + raw = str(raw_language).strip() + + # check multi-language + if is_multi_language(raw): + return "Multiple languages" + + # strip noise and normalize + cleaned = normalize_key(strip_noise(raw)) + + # --- Try ISO639 first --- + lang_obj = iso639_lookup(raw) or iso639_lookup(cleaned) + if lang_obj and getattr(lang_obj, "name", None): + return lang_obj.name + + # Try Babel + for cand in [raw, cleaned]: + if not cand: + continue + try: + cand_locale = cand.replace("-", "_") + locale = Locale.parse(cand_locale, sep="_") + return locale.get_language_name("en") + except Exception: + pass + + # --- Try Alias Map --- + ALIAS_MAP = { + "engrish": "English", + "english_handwritten": "English", + "enlgish": "English", + "american english": "English", + "english - american": "English", + "american": "English", + "uk english": "English", + "eglish": "English", + "egligh": "English", + "english (us)": "English", + "us-en": "English", + "sgn": "Sign languages", + "anglais": "English", + "us english": "English", + "indian english": "English", + "hwbrew": "Hebrew", + "polska": "Polish", + "bosanski": "Bosnian", + "український": "Ukrainian", + "chinese sub": "Chinese", + "spain": "Spanish", + "português e espanhol": "Multiple languages", + "русский": "Russian", + "deutsch": "German", + "france": "French", + "francais": "French", + "italiano": "Italian", + "ilokano": "Ilokano", + "viẹetnamese": "Vietnamese", + "português": "Portuguese", + "pt_br": "Portuguese", + "espanol": "Spanish", + "castellano": "Spanish", + "greek": "Greek", + "mandarin": "Chinese", + "nederlands": "Dutch", + "swahili": "Swahili", + "no language (english)": "Undetermined", + "whatever we play it to be": "Undetermined", + "en_us es_es": "Multiple languages", + "english & chinese subbed": "Multiple languages", + "n/a": "Undetermined", + "none": "Undetermined", + "unknown": "Undetermined", + "no speech": "Undetermined", + "no spoken language": "Undetermined", + "multi": "Multiple Languages", + "multilanguage": "Multiple languages", + "multiple": "Multiple Languages", + "music": "Undetermined", + } + ALIAS_MAP = {normalize_key(k): v for k, v in ALIAS_MAP.items()} + + if cleaned in ALIAS_MAP: + return ALIAS_MAP[cleaned] + + return "Undetermined" + + +def query_internet_archive(args): + license_counter = Counter() + language_counter = Counter() + unmapped_licenseurl_counter = Counter() + unmapped_language_counter = Counter() + + fields = ["licenseurl", "language"] + query = "creativecommons.org" + license_mapping = load_license_mapping() + + rows = 1000000 + total_rows = 0 + total_processed = 0 + max_retries = 3 + + session = shared.get_session( + accept_header="application/json", session=ArchiveSession() + ) + while True: + # Loop until no more results are returned by the API + LOGGER.info(f"Fetching {rows} items starting at {total_rows}...") + results = None + + for attempt in range(max_retries): + try: + # Use search_items for simpler pagination management + search = session.search_items( + query, + fields=fields, + params={"rows": rows, "start": total_rows}, + request_kwargs={"timeout": 120}, + ) + + # Convert to list to iterate over + results = list(search) + total_rows += len(results) + break + + except Exception as e: + wait_time = 2**attempt + LOGGER.warning( + f"API request failed (Attempt {attempt+1}/{max_retries}). " + f"Waiting {wait_time}s.Error: {e}" + f"\n{traceback.format_exc()}" + ) + sleep(wait_time) + else: + raise shared.QuantifyingException( + f"Failed to fetch data after {max_retries} attempts.", 1 + ) + + if not results: + LOGGER.info("No more results. Ending pagination.") + break + + for result in results: + # Extract and normalize license URL + licenseurl = result.get("licenseurl", "") + if isinstance(licenseurl, list): + licenseurl = licenseurl[0] if licenseurl else "UNKNOWN" + if not licenseurl: + licenseurl = "UNKNOWN" + + normalized_url = normalize_license(licenseurl, license_mapping) + if normalized_url == "UNKNOWN": + unmapped_licenseurl_counter[licenseurl] += 1 + continue # Skip + + # Extract and normalize language + raw_language = result.get("language", "Undetermined") + if isinstance(raw_language, list): + raw_language = ( + raw_language[0] if raw_language else "Undetermined" + ) + + normalized_lang = normalize_language(raw_language) + if normalized_lang == "Undetermined": + unmapped_language_counter[raw_language] += 1 + + license_counter[(normalized_url)] += 1 + language_counter[(normalized_url, normalized_lang)] += 1 + total_processed += 1 + + LOGGER.info( + f"Processed {len(results)} new items, total: {total_processed}" + ) + LOGGER.info(f"Total items processed so far: {total_processed}") + LOGGER.info( + f"Unique licenses: {len(license_counter)}|" + f"Languages:{len(language_counter)}" + ) + + # If the results is less than the requested rows, implies the end + if len(results) < rows: + LOGGER.info( + "Fewer results returned than requested. Pagination complete." + ) + break + + LOGGER.info( + "Finished processing.\n" + "Number of unmapped licenses: " + f"{sum(unmapped_licenseurl_counter.values())}" + ) + + # Log unmapped languages once at the end + if unmapped_licenseurl_counter: + for license, count in unmapped_licenseurl_counter.items(): + LOGGER.warning(f"Unmapped llicense: {license} : {count}") + + LOGGER.info( + "\n Number of unmapped languages: " + f"{sum(unmapped_language_counter.values())}" + ) + if unmapped_language_counter: + for lang, count in unmapped_language_counter.items(): + cleaned = normalize_key(strip_noise(lang)) + LOGGER.warning( + f"Unmapped language: {lang} (cleaned: {cleaned}): {count}" + ) + + return license_counter, language_counter + + +def write_csv(file_path, header, rows): + with open(file_path, "w", encoding="utf-8", newline="\n") as file_obj: + writer = csv.writer(file_obj, dialect="unix") + writer.writerow(header) + for row in rows: + writer.writerow(row) + LOGGER.info(f"Wrote {len(rows)} rows to {file_path}") + + +def write_all(args, license_counter, language_counter): + if not args.enable_save: + return args + + os.makedirs(PATHS["data_phase"], exist_ok=True) + + # Sort license data by license name + sorted_license_rows = sorted( + [(license, count) for license, count in license_counter.items()], + key=lambda x: x[0], + ) + + # Sort language data by license then language + sorted_language_rows = sorted( + [ + (license, language, count) + for (license, language), count in language_counter.items() + ], + key=lambda x: (x[0], x[1]), + ) + + write_csv( + FILE1_COUNT, + HEADER1, + sorted_license_rows, + ) + write_csv( + FILE2_LANGUAGE, + HEADER2, + sorted_language_rows, + ) + + return args + + +def main(): + args = parse_arguments() + shared.paths_log(LOGGER, PATHS) + + license_data, language_data = query_internet_archive(args) + + if args.enable_save: + write_all(args, license_data, language_data) + + if args.enable_git: + args = shared.git_add_and_commit( + args, + PATHS["repo"], + PATHS["data_quarter"], + f"Add Internet Archive data for {QUARTER}", + ) + shared.git_push_changes(args, PATHS["repo"]) + + +if __name__ == "__main__": + try: + main() + except shared.QuantifyingException as e: + if e.exit_code == 0: + LOGGER.info(e.message) + else: + LOGGER.error(e.message) + sys.exit(e.exit_code) + except SystemExit as e: + if e.code != 0: + LOGGER.error(f"System exit with code: {e.code}") + sys.exit(e.code) + except KeyboardInterrupt: + LOGGER.info("(130) Halted via KeyboardInterrupt.") + sys.exit(130) + except Exception: + traceback_formatted = textwrap.indent( + highlight( + traceback.format_exc(), + PythonTracebackLexer(), + TerminalFormatter(), + ), + " ", + ) + LOGGER.critical(f"(1) Unhandled exception:\n{traceback_formatted}") + sys.exit(1) diff --git a/scripts/shared.py b/scripts/shared.py index c901b6d6..b2638d01 100644 --- a/scripts/shared.py +++ b/scripts/shared.py @@ -33,14 +33,23 @@ def __init__(self, message, exit_code=None): super().__init__(self.message) -def get_session(accept_header=None): - """Create a reusable HTTP session with retry logic.""" - session = Session() +# def get_session(accept_header=None): +# """Create a reusable HTTP session with retry logic.""" +# session = Session() + + +def get_session(accept_header=None, session=None): + """Create or configure a reusable HTTP session + with retry logic and headers.""" + if session is None: + session = Session() retry_strategy = Retry( total=5, backoff_factor=10, status_forcelist=STATUS_FORCELIST, + allowed_methods=["GET", "POST"], + raise_on_status=False, ) session.mount("https://", HTTPAdapter(max_retries=retry_strategy)) diff --git a/sources.md b/sources.md index 2f559bef..139bbbf7 100644 --- a/sources.md +++ b/sources.md @@ -121,6 +121,36 @@ and access towards related query data using a programmable search engine. - Data available through JSON format +## Internet Archive + +**Description:** +The Internet Archive is a nonprofit digital library offering free access to millions of digital materials including books, movies, software, music, and websites. This project uses the Internet Archive’s Session and Search API to fetch metadata of items that reference Creative Commons licenses. + +**API documentation link:** +- [InternetArchive Tools and APIs](https://archive.org/developers/index-apis.html) +- [InternetArchive: A Python Interface to archive.org](https://internetarchive.readthedocs.io/en/stable/internetarchive.html) +- [The Internet Archive Python Library](https://archive.org/developers/internetarchive/) +- [The Internet Archive Search API reference](https://archive.org/advancedsearch.php) +- [A Python interface to archive.org.](https://pypi.org/project/internetarchive/) +- [Internet Archive Python client; Session + Search Items](https://github.com/jjjake/internetarchive/tree/master/internetarchive) + +**API information:** +- No API key required +- Pagination supported via rows and start parameters +- Python access via internetarchive library (search_items, ArchiveSession) +- Query limit: None specified, but rate-limiting may apply (1000000 max at a time) +- Data available through JSON format +- Retry logic and session management implemented for reliability + +**Notes:** +- This project queries for items containing `text:creativecommons.org` in their metadata. +- The script extracts and normalizes license URLs and language codes +- In summary, it queries licenseurl and language fields for all items containing "creativecommons.org" in their metadata +- Aggregated counts are saved to CSV files for licenses and languages. +- License normalization uses a canonical mapping defined in `license_url_to_identifier_mapping.csv`. +- Language normalization using Babel and [iso-639](https://pypi.org/project/iso639-lang/) see [github information](https://github.com/jacksonllee/iso639), see also [iso-639 standards](https://www.loc.gov/standards/iso639-2/), you can also checkout [iso639-2](https://www.loc.gov/standards/iso639-2/php/English_list.php) + + ## Openverse **Description:** Openverse is a search engine for openly licensed media,