From 4e99f6ca2016dcc2ff23160b5d245ec41cf80247 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 17:09:39 +0200 Subject: [PATCH 01/52] update localized strings --- plugin.video.alfa/channels/search.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/channels/search.py b/plugin.video.alfa/channels/search.py index 0a262ad8..c2fd5e9c 100644 --- a/plugin.video.alfa/channels/search.py +++ b/plugin.video.alfa/channels/search.py @@ -160,7 +160,7 @@ def searchbycat(item): # Only in xbmc/kodi # Abre un cuadro de dialogo con las categorías en las que hacer la búsqueda - categories = ["Películas", "Series", "Anime", "Documentales", "VOS", "Latino"] + categories = [config.get_localized_string(30122), config.get_localized_string(30123), config.get_localized_string(30124), config.get_localized_string(30125), config.get_localized_string(59975), config.get_localized_string(59976)] categories_id = ["movie", "tvshow", "anime", "documentary", "vos", "latino"] list_controls = [] for i, category in enumerate(categories): @@ -416,7 +416,7 @@ def do_search(item, categories=None): percentage = int(math.ceil(index * t)) list_pendent_names = [a.getName() for a in pendent] - mensaje = "Buscando en %s" % (", ".join(list_pendent_names)) + mensaje = config.get_localized_string(70282) % (", ".join(list_pendent_names)) progreso.update(percentage, config.get_localized_string(60521) % (len(threads) - len(pendent), len(threads)), mensaje) logger.debug(mensaje) From a62e72e8be94269cb130d0d39b29288a969807b7 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 17:11:18 +0200 Subject: [PATCH 02/52] update string.po --- .../resources/language/Spanish (Argentina)/strings.po | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index 2de12a54..416c0218 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -3821,4 +3821,10 @@ msgctxt "#70280" msgid " - Torrent Links don't work." msgstr " - Los enlaces Torrent no funcionan." +msgctxt "#70281" +msgid "Do you want to show these links?" +msgstr "¿Desea mostrar estos enlaces?" +msgctxt "#70282" +msgid "Searching in %s" +msgstr "Buscando en %s" From 4449b5416e6467fff04df544221042787e81060e Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 17:12:18 +0200 Subject: [PATCH 03/52] Update strings.po --- .../resources/language/Spanish (Mexico)/strings.po | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index 2de12a54..416c0218 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -3821,4 +3821,10 @@ msgctxt "#70280" msgid " - Torrent Links don't work." msgstr " - Los enlaces Torrent no funcionan." +msgctxt "#70281" +msgid "Do you want to show these links?" +msgstr "¿Desea mostrar estos enlaces?" +msgctxt "#70282" +msgid "Searching in %s" +msgstr "Buscando en %s" From 64ba34f3ba9fd75a70d581a1e1ca1dd7276d2b2a Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 17:13:15 +0200 Subject: [PATCH 04/52] Update strings.po --- plugin.video.alfa/resources/language/Spanish/strings.po | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index 2de12a54..416c0218 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -3821,4 +3821,10 @@ msgctxt "#70280" msgid " - Torrent Links don't work." msgstr " - Los enlaces Torrent no funcionan." +msgctxt "#70281" +msgid "Do you want to show these links?" +msgstr "¿Desea mostrar estos enlaces?" +msgctxt "#70282" +msgid "Searching in %s" +msgstr "Buscando en %s" From ed24030b1c64ac122c9434aec16c882a6d13c750 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 17:16:23 +0200 Subject: [PATCH 05/52] Update strings.po --- plugin.video.alfa/resources/language/Italian/strings.po | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index e0216715..264b20c5 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -1699,7 +1699,7 @@ msgstr "Altre opzioni" msgctxt "#60421" msgid "Channels included in the global search " -msgstr "Canali inclusi nella ricerca globale " +msgstr "Canali inclusi nella ricerca globale: " msgctxt "#60422" msgid "Search " @@ -3832,5 +3832,11 @@ msgctxt "#70280" msgid " - Torrent Links don't work." msgstr " - I Link Torrent non funzionano." +msgctxt "#70281" +msgid "Do you want to show these links?" +msgstr "Vuoi vedere questi links" +msgctxt "#70282" +msgid "Searching in %s" +msgstr "Ricerca in %s" From 7efcacae5246a81916baf66b6d1aa8a37bd5a355 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 17:17:32 +0200 Subject: [PATCH 06/52] Update strings.po --- plugin.video.alfa/resources/language/English/strings.po | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index f977fbb8..6f1d8607 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -3741,6 +3741,14 @@ msgctxt "#70254" msgid "Internal Client" msgstr "" +msgctxt "#70281" +msgid "Do you want to show these links?" +msgstr "" + +msgctxt "#70282" +msgid "Searching in %s" +msgstr "" + msgctxt "#70255" msgid "Internal client - MCT" msgstr "" From b357e24a9e919bab4d94a32e5b3180c1175b10f3 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 17:19:05 +0200 Subject: [PATCH 07/52] Update localized strings --- plugin.video.alfa/channels/news.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugin.video.alfa/channels/news.py b/plugin.video.alfa/channels/news.py index ba1bea37..9085a7c0 100644 --- a/plugin.video.alfa/channels/news.py +++ b/plugin.video.alfa/channels/news.py @@ -612,14 +612,14 @@ def setting_channel(item): list_controls.append(control) - caption = "Canales incluidos en Novedades " + item.title.replace("Canales incluidos en: ", "- ").strip() + caption = config.get_localized_string(60533) + item.title.replace(config.get_localized_string(60525), "- ").strip() if config.get_setting("custom_button_value_news", item.channel): - custom_button_label = "Ninguno" + custom_button_label = config.get_localized_string(59992) else: - custom_button_label = "Todos" + custom_button_label = config.get_localized_string(59991) return platformtools.show_channel_settings(list_controls=list_controls, - caption="Canales incluidos en Novedades", + caption=config.get_localized_string(60533), callback="save_settings", item=item, custom_button={'visible': True, 'function': "cb_custom_button", From b7736ee3c3849d4deb55fb646149345891bfeb0c Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 17:20:58 +0200 Subject: [PATCH 08/52] Update localized strings --- .../resources/skins/Default/720p/InfoWindow.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugin.video.alfa/resources/skins/Default/720p/InfoWindow.xml b/plugin.video.alfa/resources/skins/Default/720p/InfoWindow.xml index 53b68f58..96fcb83f 100755 --- a/plugin.video.alfa/resources/skins/Default/720p/InfoWindow.xml +++ b/plugin.video.alfa/resources/skins/Default/720p/InfoWindow.xml @@ -27,7 +27,7 @@ black center center - + 735 @@ -303,7 +303,7 @@ Controls/KeyboardKeyNF.png center center - + 0 @@ -315,7 +315,7 @@ Controls/KeyboardKeyNF.png center center - + 0 @@ -327,7 +327,7 @@ Controls/KeyboardKeyNF.png center center - + 0 @@ -339,7 +339,7 @@ Controls/KeyboardKeyNF.png center center - + 0 @@ -356,4 +356,4 @@ - \ No newline at end of file + From ce2e7a78ee562e400ae7d7db98c6a9e6d6fc9567 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 17:28:19 +0200 Subject: [PATCH 09/52] Added localized strings --- .../platformcode/xbmc_info_window.py | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/plugin.video.alfa/platformcode/xbmc_info_window.py b/plugin.video.alfa/platformcode/xbmc_info_window.py index b217183a..b7efce30 100755 --- a/plugin.video.alfa/platformcode/xbmc_info_window.py +++ b/plugin.video.alfa/platformcode/xbmc_info_window.py @@ -196,48 +196,48 @@ class InfoWindow(xbmcgui.WindowXMLDialog): # Cargamos los datos para el formato pelicula if self.result.get("mediatype", "movie") == "movie": - self.getControl(10006).setLabel("Título:") + self.getControl(10006).setLabel(config.get_localized_string(60377)) self.getControl(10007).setLabel(self.result.get("title", "N/A")) - self.getControl(10008).setLabel("Título original:") + self.getControl(10008).setLabel(config.get_localized_string(60378)) self.getControl(10009).setLabel(self.result.get("originaltitle", "N/A")) - self.getControl(100010).setLabel("Idioma original:") + self.getControl(100010).setLabel(config.get_localized_string(60379)) self.getControl(100011).setLabel(self.result.get("language", "N/A")) - self.getControl(100012).setLabel("Puntuación:") + self.getControl(100012).setLabel(config.get_localized_string(60380)) self.getControl(100013).setLabel(self.result.get("puntuacion", "N/A")) - self.getControl(100014).setLabel("Lanzamiento:") + self.getControl(100014).setLabel(config.get_localized_string(60381)) self.getControl(100015).setLabel(self.result.get("release_date", "N/A")) - self.getControl(100016).setLabel("Géneros:") + self.getControl(100016).setLabel(config.get_localized_string(60382)) self.getControl(100017).setLabel(self.result.get("genre", "N/A")) # Cargamos los datos para el formato serie else: - self.getControl(10006).setLabel("Serie:") + self.getControl(10006).setLabel(config.get_localized_string(60383)) self.getControl(10007).setLabel(self.result.get("title", "N/A")) - self.getControl(10008).setLabel("Idioma original:") + self.getControl(10008).setLabel(config.get_localized_string(60379)) self.getControl(10009).setLabel(self.result.get("language", "N/A")) - self.getControl(100010).setLabel("Puntuación:") + self.getControl(100010).setLabel(config.get_localized_string(60380)) self.getControl(100011).setLabel(self.result.get("puntuacion", "N/A")) - self.getControl(100012).setLabel("Géneros:") + self.getControl(100012).setLabel(config.get_localized_string(60382) self.getControl(100013).setLabel(self.result.get("genre", "N/A")) if self.result.get("season"): - self.getControl(100014).setLabel("Título temporada:") + self.getControl(100014).setLabel(config.get_localized_string(60384)) self.getControl(100015).setLabel(self.result.get("temporada_nombre", "N/A")) - self.getControl(100016).setLabel("Temporada:") + self.getControl(100016).setLabel(config.get_localized_string(60385)) self.getControl(100017).setLabel(self.result.get("season", "N/A") + " de " + self.result.get("seasons", "N/A")) if self.result.get("episode"): - self.getControl(100014).setLabel("Título:") + self.getControl(100014).setLabel(config.get_localized_string(60377)) self.getControl(100015).setLabel(self.result.get("episode_title", "N/A")) - self.getControl(100018).setLabel("Episodio:") + self.getControl(100018).setLabel(config.get_localized_string(60386)) self.getControl(100019).setLabel(self.result.get("episode", "N/A") + " de " + self.result.get("episodes", "N/A")) - self.getControl(100020).setLabel("Emisión:") + self.getControl(100020).setLabel(config.get_localized_string(60387)) self.getControl(100021).setLabel(self.result.get("date", "N/A")) # Sinopsis if self.result['plot']: - self.getControl(100022).setLabel("Sinopsis:") + self.getControl(100022).setLabel(config.get_localized_string(60388)) self.getControl(100023).setText(self.result.get("plot", "N/A")) else: self.getControl(100022).setLabel("") From 62ed78c12c263203b9fe1a046c618f717f128952 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 17:43:44 +0200 Subject: [PATCH 10/52] Update downloads.json --- plugin.video.alfa/channels/downloads.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugin.video.alfa/channels/downloads.json b/plugin.video.alfa/channels/downloads.json index 1412a6d9..6ee0d432 100755 --- a/plugin.video.alfa/channels/downloads.json +++ b/plugin.video.alfa/channels/downloads.json @@ -128,7 +128,7 @@ "label": "@70238", "lvalues": [ "@70244", - "@70245" + "Reordenar" ], "default": 1, "enabled": true, @@ -145,7 +145,7 @@ "Vose, Eng, Sub, Esp, Lat" ], "default": 0, - "enabled": "eq(-1,@70245])", + "enabled": "eq(-1,'Reordenar')", "visible": true }, { @@ -159,7 +159,7 @@ "SD" ], "default": 0, - "enabled": "eq(-2,@70245])", + "enabled": "eq(-2,'Reordenar')", "visible": true }, { @@ -167,8 +167,8 @@ "type": "bool", "label": "@70242", "default": true, - "enabled": "eq(-3,@70245])", + "enabled": "eq(-3,'Reordenar')", "visible": true } ] -} \ No newline at end of file +} From 4db4452b4cf834cf9116a5a4f9de02187c44ec4a Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Thu, 12 Jul 2018 11:00:53 -0500 Subject: [PATCH 11/52] launcher: fix language --- plugin.video.alfa/platformcode/launcher.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugin.video.alfa/platformcode/launcher.py b/plugin.video.alfa/platformcode/launcher.py index 0ab22181..f69db421 100644 --- a/plugin.video.alfa/platformcode/launcher.py +++ b/plugin.video.alfa/platformcode/launcher.py @@ -302,11 +302,13 @@ def run(item=None): if canal: platformtools.dialog_ok( - config.get_localized_string(70093) + canal, - config.get_localized_string(60014), log_message) + config.get_localized_string(60087) %canal, + config.get_localized_string(60014), + log_message) else: platformtools.dialog_ok( - config.get_localized_string(59984), + config.get_localized_string(60038), + config.get_localized_string(60015), log_message) From e1a151884f2b09880779af57f4048ce427fc8145 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Thu, 12 Jul 2018 11:13:05 -0500 Subject: [PATCH 12/52] fix language --- .../resources/language/English/strings.po | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index f977fbb8..ba75591e 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -437,10 +437,6 @@ msgctxt "#59983" msgid "%.2f%% - %.2f %s of %.2f %s a %.2f %s/s (%d/%d)" msgstr "" -msgctxt "#59984" -msgid "An error has occurred in alfa, \nCheck log for more details." -msgstr "" - msgctxt "#59985" msgid "Error in the channel " msgstr "" @@ -550,11 +546,11 @@ msgid "No video to play" msgstr "" msgctxt "#60013" -msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s. If the web page is working correctly, please report the error on : https://alfa-addon.com" msgstr "" msgctxt "#60014" -msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa. To have more details, see the log file." msgstr "" msgctxt "#60015" @@ -3789,10 +3785,6 @@ msgctxt "#70266" msgid "The search for% s did not match." msgstr "" -msgctxt "#70267" -msgid "An error occurred in channel " -msgstr "" - msgctxt "#70268" msgid "This can be due to several reasons: \ n \ - The server is not available, or is not responding. \ n \ - Changes in the design of the web. \ n \ - Etc ... \ n \ Check the log to see more details of the error. " msgstr "" From 2b653dd71a73d6d3a7c9008bbd8bcd4b371a9ea0 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Thu, 12 Jul 2018 11:13:52 -0500 Subject: [PATCH 13/52] fix language --- .../resources/language/Italian/strings.po | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index e0216715..a76f365f 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -437,10 +437,6 @@ msgctxt "#59983" msgid "%.2f%% - %.2f %s of %.2f %s a %.2f %s/s (%d/%d)" msgstr "%.2f%% - %.2f %s di %.2f %s a %.2f %s/s (%d/%d)" -msgctxt "#59984" -msgid "An error has occurred in alfa, \nCheck log for more details." -msgstr "Si è verificato un errore in alfa, \nControlla il log per maggiori dettagli." - msgctxt "#59985" msgid "Error in the channel " msgstr "Errore nel canale " @@ -550,12 +546,12 @@ msgid "No video to play" msgstr "Nessun video da riprodurre" msgctxt "#60013" -msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" -msgstr "Questo sito non sembra essere disponibile, riprova più tardi, se il problema persiste verifica mediante un browser: %s.\nSe la pagina web funziona correttamente segnala l'errore su : https://alfa-addon.com/categories/alfa-addon.50/" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s. If the web page is working correctly, please report the error on : https://alfa-addon.com" +msgstr "Questo sito non sembra essere disponibile, riprova più tardi, se il problema persiste verifica mediante un browser: %s. Se la pagina web funziona correttamente segnala l'errore su : https://alfa-addon.com/categories/alfa-addon.50/" msgctxt "#60014" -msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." -msgstr "Potrebbe essere dovuto a un problema di connessione, la pagina web del canale ha cambiato la sua struttura, oppure un errore interno di alfa.\nPer avere maggiori dettagli, consulta il file di log." +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa. To have more details, see the log file." +msgstr "Potrebbe essere dovuto a un problema di connessione, la pagina web del canale ha cambiato la sua struttura, oppure un errore interno di alfa. Per avere maggiori dettagli, consulta il file di log." msgctxt "#60015" msgid "Check the log for more details on the error." @@ -3776,10 +3772,6 @@ msgctxt "#70266" msgid "The search for% s did not match." msgstr "La ricerca di %s non ha dato risultati." -msgctxt "#70267" -msgid "An error occurred in channel " -msgstr "Si è verificato un errore en nel canale " - msgctxt "#70268" msgid "This can be due to several reasons: \ n \ - The server is not available, or is not responding. \ n \ - Changes in the design of the web. \ n \ - Etc ... \ n \ Check the log to see more details of the error. " msgstr "Questo può essere dovuto a varie ragioni: \n \- Il server non è disponibile, o non sta rispondendo.\n \- Cambio nella struttura del sito web.\n \- Etc...\n \Controlla il log per avere maggiori dettagli sull'errore." From 6baeb3c2c5a072a371f91b0523e099eb57dccda4 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Thu, 12 Jul 2018 11:16:35 -0500 Subject: [PATCH 14/52] fix language --- .../language/Spanish (Argentina)/strings.po | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index 2de12a54..e5653b20 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -437,10 +437,6 @@ msgctxt "#59983" msgid "%.2f%% - %.2f %s of %.2f %s a %.2f %s/s (%d/%d)" msgstr "%.2f%% - %.2f %s de %.2f %s a %.2f %s/s (%d/%d)" -msgctxt "#59984" -msgid "An error has occurred in alfa, \nCheck log for more details." -msgstr "Se ha producido un error en alfa,\nComprueba el log para ver mas detalles del error." - msgctxt "#59985" msgid "Error in the channel " msgstr "Error en el canal " @@ -550,12 +546,12 @@ msgid "No video to play" msgstr "No hay nada que reproducir" msgctxt "#60013" -msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" -msgstr "La web de la que depende parece no estar disponible, puede volver a intentarlo,\nsi el problema persiste verifique mediante un navegador la web: %s. \nSi la web funciona correctamente informe el error en: www.alfa-addon.com" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s. If the web page is working correctly, please report the error on : https://alfa-addon.com" +msgstr "La web de la que depende parece no estar disponible, puede volver a intentarlo, si el problema persiste verifique mediante un navegador la web: %s. Si la web funciona correctamente informe el error en: www.alfa-addon.com" msgctxt "#60014" -msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." -msgstr "Puede deberse a un fallo de conexión, la web del canal\nha cambiado su estructura,o un error interno de alfa.\nPara saber más detalles, consulta el log." +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa. To have more details, see the log file." +msgstr "Puede deberse a un fallo de conexión, la web del canal ha cambiado su estructura, o un error interno de alfa. Para saber más detalles, consulta el log." msgctxt "#60015" msgid "Check the log for more details on the error." @@ -823,7 +819,7 @@ msgstr " Prioridad (Indica el orden para Auto-Reproducir)" msgctxt "#60086" msgid "It has been renamed to:" -msgstr "È Stato rinominato in:" +msgstr "Esto ha sido renombrado a:" msgctxt "#60087" msgid "Unexpected error on channel %s" @@ -3765,10 +3761,6 @@ msgctxt "#70266" msgid "The search for% s did not match." msgstr "La busqueda de %s no dio resultados." -msgctxt "#70267" -msgid "An error occurred in channel " -msgstr "Se ha producido un error en el canal " - msgctxt "#70268" msgid "This can be due to several reasons: \ n \ - The server is not available, or is not responding. \ n \ - Changes in the design of the web. \ n \ - Etc ... \ n \ Check the log to see more details of the error. " msgstr "Esto puede ser devido a varias razones: \n \- El servidor no está disponible, o no esta respondiendo.\n \- Cambios en el diseño de la web.\n \- Etc...\n \Comprueba el log para ver mas detalles del error." From fc6c56bdbd1c45d8beaaa27f7823e07a1f93ce7b Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Thu, 12 Jul 2018 11:17:06 -0500 Subject: [PATCH 15/52] fix language --- .../language/Spanish (Mexico)/strings.po | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index 2de12a54..e5653b20 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -437,10 +437,6 @@ msgctxt "#59983" msgid "%.2f%% - %.2f %s of %.2f %s a %.2f %s/s (%d/%d)" msgstr "%.2f%% - %.2f %s de %.2f %s a %.2f %s/s (%d/%d)" -msgctxt "#59984" -msgid "An error has occurred in alfa, \nCheck log for more details." -msgstr "Se ha producido un error en alfa,\nComprueba el log para ver mas detalles del error." - msgctxt "#59985" msgid "Error in the channel " msgstr "Error en el canal " @@ -550,12 +546,12 @@ msgid "No video to play" msgstr "No hay nada que reproducir" msgctxt "#60013" -msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" -msgstr "La web de la que depende parece no estar disponible, puede volver a intentarlo,\nsi el problema persiste verifique mediante un navegador la web: %s. \nSi la web funciona correctamente informe el error en: www.alfa-addon.com" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s. If the web page is working correctly, please report the error on : https://alfa-addon.com" +msgstr "La web de la que depende parece no estar disponible, puede volver a intentarlo, si el problema persiste verifique mediante un navegador la web: %s. Si la web funciona correctamente informe el error en: www.alfa-addon.com" msgctxt "#60014" -msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." -msgstr "Puede deberse a un fallo de conexión, la web del canal\nha cambiado su estructura,o un error interno de alfa.\nPara saber más detalles, consulta el log." +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa. To have more details, see the log file." +msgstr "Puede deberse a un fallo de conexión, la web del canal ha cambiado su estructura, o un error interno de alfa. Para saber más detalles, consulta el log." msgctxt "#60015" msgid "Check the log for more details on the error." @@ -823,7 +819,7 @@ msgstr " Prioridad (Indica el orden para Auto-Reproducir)" msgctxt "#60086" msgid "It has been renamed to:" -msgstr "È Stato rinominato in:" +msgstr "Esto ha sido renombrado a:" msgctxt "#60087" msgid "Unexpected error on channel %s" @@ -3765,10 +3761,6 @@ msgctxt "#70266" msgid "The search for% s did not match." msgstr "La busqueda de %s no dio resultados." -msgctxt "#70267" -msgid "An error occurred in channel " -msgstr "Se ha producido un error en el canal " - msgctxt "#70268" msgid "This can be due to several reasons: \ n \ - The server is not available, or is not responding. \ n \ - Changes in the design of the web. \ n \ - Etc ... \ n \ Check the log to see more details of the error. " msgstr "Esto puede ser devido a varias razones: \n \- El servidor no está disponible, o no esta respondiendo.\n \- Cambios en el diseño de la web.\n \- Etc...\n \Comprueba el log para ver mas detalles del error." From 57fba976f8e1fbe144025c955de1ae589f117c9d Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Thu, 12 Jul 2018 11:17:45 -0500 Subject: [PATCH 16/52] fix language --- .../resources/language/Spanish/strings.po | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index 2de12a54..e5653b20 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -437,10 +437,6 @@ msgctxt "#59983" msgid "%.2f%% - %.2f %s of %.2f %s a %.2f %s/s (%d/%d)" msgstr "%.2f%% - %.2f %s de %.2f %s a %.2f %s/s (%d/%d)" -msgctxt "#59984" -msgid "An error has occurred in alfa, \nCheck log for more details." -msgstr "Se ha producido un error en alfa,\nComprueba el log para ver mas detalles del error." - msgctxt "#59985" msgid "Error in the channel " msgstr "Error en el canal " @@ -550,12 +546,12 @@ msgid "No video to play" msgstr "No hay nada que reproducir" msgctxt "#60013" -msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s.\nIf the web page is working correctly, please report the error on : https://alfa-addon.com/categories/alfa-addon.50/" -msgstr "La web de la que depende parece no estar disponible, puede volver a intentarlo,\nsi el problema persiste verifique mediante un navegador la web: %s. \nSi la web funciona correctamente informe el error en: www.alfa-addon.com" +msgid "This website seems to be unavailable, try later, if the problem persists, check with a browser: %s. If the web page is working correctly, please report the error on : https://alfa-addon.com" +msgstr "La web de la que depende parece no estar disponible, puede volver a intentarlo, si el problema persiste verifique mediante un navegador la web: %s. Si la web funciona correctamente informe el error en: www.alfa-addon.com" msgctxt "#60014" -msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa.\nTo have more details, see the log file." -msgstr "Puede deberse a un fallo de conexión, la web del canal\nha cambiado su estructura,o un error interno de alfa.\nPara saber más detalles, consulta el log." +msgid "It may be due to a connection problem, the web page of the channel has changed its structure, or an internal error of alfa. To have more details, see the log file." +msgstr "Puede deberse a un fallo de conexión, la web del canal ha cambiado su estructura, o un error interno de alfa. Para saber más detalles, consulta el log." msgctxt "#60015" msgid "Check the log for more details on the error." @@ -823,7 +819,7 @@ msgstr " Prioridad (Indica el orden para Auto-Reproducir)" msgctxt "#60086" msgid "It has been renamed to:" -msgstr "È Stato rinominato in:" +msgstr "Esto ha sido renombrado a:" msgctxt "#60087" msgid "Unexpected error on channel %s" @@ -3765,10 +3761,6 @@ msgctxt "#70266" msgid "The search for% s did not match." msgstr "La busqueda de %s no dio resultados." -msgctxt "#70267" -msgid "An error occurred in channel " -msgstr "Se ha producido un error en el canal " - msgctxt "#70268" msgid "This can be due to several reasons: \ n \ - The server is not available, or is not responding. \ n \ - Changes in the design of the web. \ n \ - Etc ... \ n \ Check the log to see more details of the error. " msgstr "Esto puede ser devido a varias razones: \n \- El servidor no está disponible, o no esta respondiendo.\n \- Cambios en el diseño de la web.\n \- Etc...\n \Comprueba el log para ver mas detalles del error." From b1ba248e43fe7b673024fde4b1ff3b44a94f55b0 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Thu, 12 Jul 2018 18:52:44 +0200 Subject: [PATCH 17/52] Added localized strings --- plugin.video.alfa/channels/videolibrary.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin.video.alfa/channels/videolibrary.py b/plugin.video.alfa/channels/videolibrary.py index 14764ad3..a18e6784 100644 --- a/plugin.video.alfa/channels/videolibrary.py +++ b/plugin.video.alfa/channels/videolibrary.py @@ -16,10 +16,10 @@ def mainlist(item): itemlist = list() itemlist.append(Item(channel=item.channel, action="list_movies", title=config.get_localized_string(60509), - category="Videoteca de películas", + category=config.get_localized_string(70270), thumbnail=get_thumb("videolibrary_movie.png"))) itemlist.append(Item(channel=item.channel, action="list_tvshows", title=config.get_localized_string(60600), - category="Videoteca de series", + category=config.get_localized_string(70271), thumbnail=get_thumb("videolibrary_tvshow.png"))) return itemlist @@ -146,7 +146,7 @@ def list_tvshows(item): "action": "delete", "channel": "videolibrary", "multicanal": multicanal}, - {"title": "Buscar nuevos episodios ahora", + {"title": config.get_localized_string(70269), "action": "update_tvshow", "channel": "videolibrary"}] # ,{"title": "Cambiar contenido (PENDIENTE)", From 7097091e9058bdf8140576b04c5e3cb43684abd0 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Fri, 13 Jul 2018 08:53:56 -0500 Subject: [PATCH 18/52] autoplay: fix language --- plugin.video.alfa/channels/autoplay.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/channels/autoplay.py b/plugin.video.alfa/channels/autoplay.py index bb7fefd8..f8716bd5 100644 --- a/plugin.video.alfa/channels/autoplay.py +++ b/plugin.video.alfa/channels/autoplay.py @@ -516,7 +516,7 @@ def autoplay_config(item): default = num - 1 if default > len(server_list) - 1: default = 0 - set_servers = {"id": "server_%s" % num, "label": u" \u2665 Servidor Favorito %s" % num, + set_servers = {"id": "server_%s" % num, "label": u" \u2665 " +"Servidor Favorito %s" % num, "color": "0xfffcab14", "type": "list", "default": default, "enabled": "eq(-%s,true)+eq(-%s,true)" % (pos1, num), "visible": True, "lvalues": server_list} @@ -548,7 +548,7 @@ def autoplay_config(item): if default > len(quality_list) - 1: default = 0 - set_quality = {"id": "quality_%s" % num, "label": u" \u2665 Calidad Favorita %s" % num, + set_quality = {"id": "quality_%s" % num, "label": u" \u2665 " + "Calidad Favorita %s" % num, "color": "0xfff442d9", "type": "list", "default": default, "enabled": "eq(-%s,true)+eq(-%s,true)" % (pos1, num), "visible": True, "lvalues": quality_list} From 600edda4211320a865a0bd67990e1dc7320e4cbb Mon Sep 17 00:00:00 2001 From: Kingbox <37674310+lopezvg@users.noreply.github.com> Date: Fri, 13 Jul 2018 21:05:20 +0200 Subject: [PATCH 19/52] Newpct1: mejoras internas --- plugin.video.alfa/channels/newpct1.py | 5 ++++- plugin.video.alfa/lib/generictools.py | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/plugin.video.alfa/channels/newpct1.py b/plugin.video.alfa/channels/newpct1.py index 7d8cfdcd..b17651bf 100644 --- a/plugin.video.alfa/channels/newpct1.py +++ b/plugin.video.alfa/channels/newpct1.py @@ -98,7 +98,10 @@ def mainlist(item): def settingCanal(item): from platformcode import platformtools - return platformtools.show_channel_settings() + platformtools.show_channel_settings() + platformtools.itemlist_refresh() + return + def submenu(item): diff --git a/plugin.video.alfa/lib/generictools.py b/plugin.video.alfa/lib/generictools.py index 4f8ca78c..a3b85436 100644 --- a/plugin.video.alfa/lib/generictools.py +++ b/plugin.video.alfa/lib/generictools.py @@ -198,6 +198,9 @@ def post_tmdb_listado(item, itemlist): for item_local in itemlist: #Recorremos el Itenlist generado por el canal title = item_local.title #logger.debug(item_local) + + item_local.last_page = 0 + del item_local.last_page #Borramos restos de paginación if item_local.contentSeason_save: #Restauramos el num. de Temporada item_local.contentSeason = item_local.contentSeason_save @@ -710,9 +713,7 @@ def post_tmdb_findvideos(item, itemlist): title_gen = '%s: %s' % (item.category.capitalize(), title_gen) #Pintamos el pseudo-título con toda la información disponible del vídeo - item.action = "" - item.server = "" - itemlist.append(item.clone(title=title_gen)) #Título con todos los datos del vídeo + itemlist.append(item.clone(action="", server = "", title=title_gen)) #Título con todos los datos del vídeo #agregamos la opción de Añadir a Videoteca para péliculas (no series) if item.contentType == 'movie' and item.contentChannel != "videolibrary": From 16c637fc97b6fd7d36b2c919b5a53c08aff3a805 Mon Sep 17 00:00:00 2001 From: Kingbox <37674310+lopezvg@users.noreply.github.com> Date: Fri, 13 Jul 2018 21:05:58 +0200 Subject: [PATCH 20/52] =?UTF-8?q?Quasar:=20Marado=20autom=C3=A1tico=20de?= =?UTF-8?q?=20v=C3=ADdeos=20vistos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin.video.alfa/platformcode/platformtools.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugin.video.alfa/platformcode/platformtools.py b/plugin.video.alfa/platformcode/platformtools.py index eafea016..b928e2db 100644 --- a/plugin.video.alfa/platformcode/platformtools.py +++ b/plugin.video.alfa/platformcode/platformtools.py @@ -1048,6 +1048,21 @@ def play_torrent(item, xlistitem, mediaurl): if seleccion > 1: mediaurl = urllib.quote_plus(item.url) xbmc.executebuiltin("PlayMedia(" + torrent_options[seleccion][1] % mediaurl + ")") + + if "quasar" in torrent_options[seleccion][1]: #Seleccionamos que clientes torrent soportamos + if item.strm_path: #Sólo si es de Videoteca + import time + time_limit = time.time() + 150 #Marcamos el timepo máx. de buffering + while not is_playing() and time.time() < time_limit: #Esperamos mientra buffera + time.sleep(5) #Repetimos cada intervalo + logger.debug(str(time_limit)) + + if is_playing(): #Ha terminado de bufferar o ha cancelado + from platformcode import xbmc_videolibrary + xbmc_videolibrary.mark_auto_as_watched(item) #Marcamos como visto al terminar + logger.debug("Llamado el marcado") + else: + logger.debug("Video cancelado o timeout") if seleccion == 1: from platformcode import mct From 7fa4fe2b01a5b1a8b1b93f3807310e4c4387ac47 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 14 Jul 2018 16:17:49 +0200 Subject: [PATCH 21/52] Update strings.po --- .../resources/language/Spanish (Mexico)/strings.po | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index 416c0218..5fc49016 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -3828,3 +3828,7 @@ msgstr "¿Desea mostrar estos enlaces?" msgctxt "#70282" msgid "Searching in %s" msgstr "Buscando en %s" + +msgctxt "#70283" +msgid "movie" +msgstr "pelicula" From a385a39677587b4eb18c28ee5a269a56d803e2b9 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 14 Jul 2018 16:19:32 +0200 Subject: [PATCH 22/52] Update strings.po --- plugin.video.alfa/resources/language/Italian/strings.po | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index 264b20c5..aeecff3f 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -3840,3 +3840,6 @@ msgctxt "#70282" msgid "Searching in %s" msgstr "Ricerca in %s" +msgctxt "#70283" +msgid "movie" +msgstr "film" From 109f2e5962f89dd41d3fb31a3bd25fd41c70ce4b Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 14 Jul 2018 16:21:50 +0200 Subject: [PATCH 23/52] Update strings.po --- plugin.video.alfa/resources/language/Italian/strings.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index aeecff3f..d004268d 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -391,7 +391,7 @@ msgstr "Alfa Auto-configurazione" msgctxt "#59972" msgid "Search for: '%s' | Found: %d vídeos | Time: %2.f seconds" -msgstr "Ricerca di: '%s' | Trovati: %d vídeos | Tempo: %2.f secondi" +msgstr "Ricerca di: '%s' | Trovati: %d video | Tempo: %2.f secondi" msgctxt "#59973" msgid "Search Cancelled" @@ -975,7 +975,7 @@ msgstr "Nessuna informazione trovata per: %s" msgctxt "#60229" msgid "Enter the name of %s to search" -msgstr "Inserisci il nome di %s per cercare" +msgstr "Inserisci il titolo del %s per cercare" msgctxt "#60230" msgid "Title:" From 5134245b562a87749b1d32a6a64c57739e8487ec Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 14 Jul 2018 16:24:01 +0200 Subject: [PATCH 24/52] Update strings.po --- .../resources/language/English/strings.po | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index 6f1d8607..f1197f0b 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -3849,3 +3849,18 @@ msgctxt "#70279" msgid "You can try downloading the 'libtorrent' module from Kodi or installing some addon like 'Quasar' or 'Torrenter', \nwhich will appear among the options in the pop-up \nwhen it appears when clicking on a torrent link. 'Torrenter 'It's more complex but also more complete \nand it always works.'" msgstr "" +msgctxt "#70280" +msgid " - Torrent Links don't work." +msgstr "" + +msgctxt "#70281" +msgid "Do you want to show these links?" +msgstr "" + +msgctxt "#70282" +msgid "Searching in %s" +msgstr "" + +msgctxt "#70283" +msgid "movie" +msgstr "" From 2f839ec29791c8aae1127bc37c66d275916721b9 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 14 Jul 2018 16:25:36 +0200 Subject: [PATCH 25/52] Update strings.po --- .../resources/language/Spanish (Argentina)/strings.po | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index 416c0218..73bd1c80 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -3828,3 +3828,8 @@ msgstr "¿Desea mostrar estos enlaces?" msgctxt "#70282" msgid "Searching in %s" msgstr "Buscando en %s" + +msgctxt "#70283" +msgid "movie" +msgstr "pelicula" + From 8a5356e9a5efe54f31ce09c9f52d085a25da5fe2 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 14 Jul 2018 16:29:18 +0200 Subject: [PATCH 26/52] Update scraper.py --- plugin.video.alfa/core/scraper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.video.alfa/core/scraper.py b/plugin.video.alfa/core/scraper.py index 566fa683..ea229982 100755 --- a/plugin.video.alfa/core/scraper.py +++ b/plugin.video.alfa/core/scraper.py @@ -29,7 +29,7 @@ def find_and_set_infoLabels(item): # Obtener el Scraper por defecto de la configuracion segun el tipo de contenido if item.contentType == "movie": scraper_actual = ['tmdb'][config.get_setting("scraper_movies", "videolibrary")] - tipo_contenido = "película" + tipo_contenido = config.get_localized_string(70283) title = item.contentTitle # Completar lista de opciones para este tipo de contenido list_opciones_cuadro.append(scrapers_disponibles['tmdb']) From a729face6bdd2fe3b235cf3463d9b0dfcbd75193 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 14 Jul 2018 17:00:04 +0200 Subject: [PATCH 27/52] Update search.py --- plugin.video.alfa/channels/search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.video.alfa/channels/search.py b/plugin.video.alfa/channels/search.py index 0a262ad8..8de1716d 100644 --- a/plugin.video.alfa/channels/search.py +++ b/plugin.video.alfa/channels/search.py @@ -416,7 +416,7 @@ def do_search(item, categories=None): percentage = int(math.ceil(index * t)) list_pendent_names = [a.getName() for a in pendent] - mensaje = "Buscando en %s" % (", ".join(list_pendent_names)) + mensaje = config.get_localized_string(70282) % (", ".join(list_pendent_names)) progreso.update(percentage, config.get_localized_string(60521) % (len(threads) - len(pendent), len(threads)), mensaje) logger.debug(mensaje) From 78b228b657f4bd4957d1b11932502ebbe8f82feb Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 14 Jul 2018 18:57:40 +0200 Subject: [PATCH 28/52] Update download_and_play.py --- plugin.video.alfa/platformcode/download_and_play.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/platformcode/download_and_play.py b/plugin.video.alfa/platformcode/download_and_play.py index 3674eb93..750d2451 100755 --- a/plugin.video.alfa/platformcode/download_and_play.py +++ b/plugin.video.alfa/platformcode/download_and_play.py @@ -37,11 +37,11 @@ def download_and_play(url, file_name, download_path): while True: cancelled = False dialog = xbmcgui.DialogProgress() - dialog.create('Descargando...', 'Cierra esta ventana para empezar la reproducción') + dialog.create(config.get_localized_string(60200), config.get_localized_string(60312)) dialog.update(0) while not cancelled and download_thread.isAlive(): - dialog.update(download_thread.get_progress(), "Cancela esta ventana para empezar la reproducción", + dialog.update(download_thread.get_progress(), config.get_localized_string(60313), "Velocidad: " + str(int(download_thread.get_speed() / 1024)) + " KB/s " + str( download_thread.get_actual_size()) + "MB de " + str( download_thread.get_total_size()) + "MB", From de4952d4d5033950feb4a97fd5a0f0b486c956e2 Mon Sep 17 00:00:00 2001 From: thedoctor66 <37449358+thedoctor66@users.noreply.github.com> Date: Sat, 14 Jul 2018 19:00:45 +0200 Subject: [PATCH 29/52] Update downloadtools.py --- plugin.video.alfa/core/downloadtools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.video.alfa/core/downloadtools.py b/plugin.video.alfa/core/downloadtools.py index 54b0574b..f3653087 100755 --- a/plugin.video.alfa/core/downloadtools.py +++ b/plugin.video.alfa/core/downloadtools.py @@ -812,7 +812,7 @@ def downloadfileGzipped(url, pathfichero): # Crea el diálogo de progreso from platformcode import platformtools - progreso = platformtools.dialog_progress("addon", "Descargando...", url.split("|")[0], nombrefichero) + progreso = platformtools.dialog_progress("addon", config.get_localized_string(60200), url.split("|")[0], nombrefichero) # Timeout del socket a 60 segundos socket.setdefaulttimeout(10) From 376397ebdd599835b73dfbc13adc12ba45cb1646 Mon Sep 17 00:00:00 2001 From: pipcat Date: Tue, 17 Jul 2018 11:15:58 +0200 Subject: [PATCH 30/52] Correcciones powvideo y mega --- plugin.video.alfa/lib/megaserver/client.py | 17 ++++++++++++++--- plugin.video.alfa/servers/powvideo.py | 5 ----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/plugin.video.alfa/lib/megaserver/client.py b/plugin.video.alfa/lib/megaserver/client.py index 41adc3e2..09df12a9 100644 --- a/plugin.video.alfa/lib/megaserver/client.py +++ b/plugin.video.alfa/lib/megaserver/client.py @@ -4,6 +4,7 @@ import random import struct import time import urllib +import requests from threading import Thread from file import File @@ -132,9 +133,19 @@ class Client(object): raise Exception("Enlace no valido") def api_req(self, req, get=""): - seqno = random.randint(0, 0xFFFFFFFF) - url = 'https://g.api.mega.co.nz/cs?id=%d%s' % (seqno, get) - return json.loads(self.post(url, json.dumps([req])))[0] + seqno = random.randint(0, 0xFFFFFFFF) + url = 'https://g.api.mega.co.nz/cs?id=%d%s' % (seqno, get) + # ~ return json.loads(self.post(url, json.dumps([req])))[0] + + req = requests.post( + url, + params={'id': seqno}, + data=json.dumps([req]), + timeout=30) + json_resp = json.loads(req.text) + if isinstance(json_resp, int): + raise Exception("MEGA api_req error %d" % json_resp) + return json_resp[0] def base64urldecode(self,data): data += '=='[(2 - len(data) * 3) % 4:] diff --git a/plugin.video.alfa/servers/powvideo.py b/plugin.video.alfa/servers/powvideo.py index 79991591..2696c972 100755 --- a/plugin.video.alfa/servers/powvideo.py +++ b/plugin.video.alfa/servers/powvideo.py @@ -27,11 +27,6 @@ def get_video_url(page_url, premium=False, user="", password="", video_password= referer = page_url.replace('iframe', 'preview') data = httptools.downloadpage(page_url, headers={'referer': referer}).data - if data == "File was deleted": - return "El archivo no existe o ha sido borrado" - - if 'Video is processing now' in data: - return "El vídeo está siendo procesado, intentalo de nuevo mas tarde" packed = scrapertools.find_single_match(data, "") unpacked = jsunpack.unpack(packed) From 64779236dc40122160946e29dd5330d3df0d743b Mon Sep 17 00:00:00 2001 From: pipcat Date: Tue, 17 Jul 2018 16:32:23 +0200 Subject: [PATCH 31/52] Mega sin rquests --- plugin.video.alfa/lib/megaserver/client.py | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/plugin.video.alfa/lib/megaserver/client.py b/plugin.video.alfa/lib/megaserver/client.py index 09df12a9..5364edd7 100644 --- a/plugin.video.alfa/lib/megaserver/client.py +++ b/plugin.video.alfa/lib/megaserver/client.py @@ -4,7 +4,7 @@ import random import struct import time import urllib -import requests +from core import httptools from threading import Thread from file import File @@ -135,17 +135,7 @@ class Client(object): def api_req(self, req, get=""): seqno = random.randint(0, 0xFFFFFFFF) url = 'https://g.api.mega.co.nz/cs?id=%d%s' % (seqno, get) - # ~ return json.loads(self.post(url, json.dumps([req])))[0] - - req = requests.post( - url, - params={'id': seqno}, - data=json.dumps([req]), - timeout=30) - json_resp = json.loads(req.text) - if isinstance(json_resp, int): - raise Exception("MEGA api_req error %d" % json_resp) - return json_resp[0] + return json.loads(self.post(url, json.dumps([req])))[0] def base64urldecode(self,data): data += '=='[(2 - len(data) * 3) % 4:] @@ -190,6 +180,7 @@ class Client(object): return sum((self.aes_cbc_decrypt_a32(a[i:i+4], key) for i in xrange(0, len(a), 4)), ()) def post(self, url, data): + return httptools.downloadpage(url, data).data import ssl from functools import wraps def sslwrap(func): From 14271fe457bb5c119ddb0848a78f6faf27ca3bfb Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 17 Jul 2018 11:21:03 -0500 Subject: [PATCH 32/52] settings: fix language --- plugin.video.alfa/resources/settings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/resources/settings.xml b/plugin.video.alfa/resources/settings.xml index cf62b4d5..78cb1591 100644 --- a/plugin.video.alfa/resources/settings.xml +++ b/plugin.video.alfa/resources/settings.xml @@ -42,7 +42,7 @@ @@ -55,7 +55,7 @@ - Date: Tue, 17 Jul 2018 14:16:23 -0500 Subject: [PATCH 33/52] news: fix titulos canales incluidos --- plugin.video.alfa/channels/news.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.video.alfa/channels/news.py b/plugin.video.alfa/channels/news.py index ba1bea37..f2ec980b 100644 --- a/plugin.video.alfa/channels/news.py +++ b/plugin.video.alfa/channels/news.py @@ -619,7 +619,7 @@ def setting_channel(item): custom_button_label = "Todos" return platformtools.show_channel_settings(list_controls=list_controls, - caption="Canales incluidos en Novedades", + caption=caption, callback="save_settings", item=item, custom_button={'visible': True, 'function': "cb_custom_button", From 2fd080aafe3488f8582d6e4701b9cf739a7d6137 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 17 Jul 2018 15:55:32 -0500 Subject: [PATCH 34/52] HTTPAndWSServer: fix languague --- mediaserver/HTTPAndWSServer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mediaserver/HTTPAndWSServer.py b/mediaserver/HTTPAndWSServer.py index fcf28e3a..04529a28 100644 --- a/mediaserver/HTTPAndWSServer.py +++ b/mediaserver/HTTPAndWSServer.py @@ -56,7 +56,7 @@ class Handler(HTTPWebSocketsHandler): Usuario + ":" + Password): self.send_response(401) self.send_header('WWW-Authenticate', - 'Basic realm=\"Introduce el nombre de usuario y clave para acceder a alfa\"') + 'Basic realm=\"' + config.get_localized_string(70264) + '\"') self.send_header('Content-type', 'text/html; charset=utf-8') self.end_headers() self.wfile.write('¡Los datos introducidos no son correctos!') From 7ba4dbef89760968e09d18f6de0d6d92d6a38f3e Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 17 Jul 2018 16:23:40 -0500 Subject: [PATCH 35/52] strings: fix language --- .../resources/language/English/strings.po | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index ba75591e..96534de7 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -822,7 +822,7 @@ msgid " Favorite servers" msgstr "" msgctxt "#60082" -msgid " \u2665 Favorite server %s" +msgid "Favorite server %s" msgstr "" msgctxt "#60083" @@ -830,7 +830,7 @@ msgid " Preferred Qualities" msgstr "" msgctxt "#60084" -msgid " \u2665 Preferred Quality %s" +msgid "Preferred Quality %s" msgstr "" msgctxt "#60085" @@ -1145,10 +1145,6 @@ msgctxt "#60268" msgid "Animation" msgstr "" -msgctxt "#60269" -msgid "Kids" -msgstr "" - msgctxt "#60270" msgid "Comedy" msgstr "" @@ -1157,10 +1153,6 @@ msgctxt "#60271" msgid "Crime" msgstr "" -msgctxt "#60272" -msgid "Documentaries" -msgstr "" - msgctxt "#60273" msgid "Family" msgstr "" @@ -3229,10 +3221,6 @@ msgctxt "#70126" msgid "Visual Options" msgstr "" -msgctxt "#70127" -msgid "Anime" -msgstr "" - msgctxt "#70128" msgid "Infoplus visual option" msgstr "" @@ -3270,7 +3258,7 @@ msgid "Tv Show" msgstr "" msgctxt "#70137" -msgid "Movie" +msgid "Movies" msgstr "" msgctxt "#70138" @@ -3774,7 +3762,7 @@ msgid "Alfa stopped" msgstr "" msgctxt "#70264" -msgid "Basic realm=\Enter the username and password to access proteus \"" +msgid "Enter the username and password to access Alfa" msgstr "" msgctxt "#70265" @@ -3785,10 +3773,6 @@ msgctxt "#70266" msgid "The search for% s did not match." msgstr "" -msgctxt "#70268" -msgid "This can be due to several reasons: \ n \ - The server is not available, or is not responding. \ n \ - Changes in the design of the web. \ n \ - Etc ... \ n \ Check the log to see more details of the error. " -msgstr "" - msgctxt "#70269" msgid "Search new episodes now" msgstr "" From c184574bea061e2315872fc228fcf0533594186e Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 17 Jul 2018 16:25:59 -0500 Subject: [PATCH 36/52] strings: fix languague --- .../resources/language/Italian/strings.po | 31 +++++-------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/plugin.video.alfa/resources/language/Italian/strings.po b/plugin.video.alfa/resources/language/Italian/strings.po index a76f365f..37d173f7 100644 --- a/plugin.video.alfa/resources/language/Italian/strings.po +++ b/plugin.video.alfa/resources/language/Italian/strings.po @@ -806,16 +806,16 @@ msgid " Favorite servers" msgstr " Server Preferiti" msgctxt "#60082" -msgid " \u2665 Favorite server %s" -msgstr " \u2665 Server Preferito %s" +msgid "Favorite server %s" +msgstr "Server Preferito %s" msgctxt "#60083" msgid " Preferred Qualities" msgstr " Qualità Preferite" msgctxt "#60084" -msgid " \u2665 Preferred Quality %s" -msgstr " \u2665 Qualità Preferita %s" +msgid "Preferred Quality %s" +msgstr "Qualità Preferita %s" msgctxt "#60085" msgid " Priority (Indicates the order for AutoPlay)" @@ -1129,10 +1129,6 @@ msgctxt "#60268" msgid "Animation" msgstr "Animazione" -msgctxt "#60269" -msgid "Kids" -msgstr "Bambini" - msgctxt "#60270" msgid "Comedy" msgstr "Commedia" @@ -1141,10 +1137,6 @@ msgctxt "#60271" msgid "Crime" msgstr "Crimine" -msgctxt "#60272" -msgid "Documentaries" -msgstr "Documentari" - msgctxt "#60273" msgid "Family" msgstr "Famiglia" @@ -3217,10 +3209,6 @@ msgctxt "#70126" msgid "Visual Options" msgstr "Opzioni Vista" -msgctxt "#70127" -msgid "Anime" -msgstr "Anime" - msgctxt "#70128" msgid "Infoplus visual option" msgstr "Opzioni Vista Infoplus" @@ -3258,8 +3246,8 @@ msgid "Tv Show" msgstr "Serie" msgctxt "#70137" -msgid "Movie" -msgstr "Film" +msgid "Movies" +msgstr "Films" msgctxt "#70138" msgid "Low Rating" @@ -3762,7 +3750,8 @@ msgid "Alfa stopped" msgstr "Alfa Arrestato" msgctxt "#70264" -msgid "Basic realm=\Enter the ususername e password per accedere a proteus\"" +msgid "Enter the username and password to access Alfa" +msgstr "Enter the ususername e password per accedere a proteus" msgctxt "#70265" msgid "The data entered is not correct!" @@ -3772,10 +3761,6 @@ msgctxt "#70266" msgid "The search for% s did not match." msgstr "La ricerca di %s non ha dato risultati." -msgctxt "#70268" -msgid "This can be due to several reasons: \ n \ - The server is not available, or is not responding. \ n \ - Changes in the design of the web. \ n \ - Etc ... \ n \ Check the log to see more details of the error. " -msgstr "Questo può essere dovuto a varie ragioni: \n \- Il server non è disponibile, o non sta rispondendo.\n \- Cambio nella struttura del sito web.\n \- Etc...\n \Controlla il log per avere maggiori dettagli sull'errore." - msgctxt "#70269" msgid "Search new episodes now" msgstr "Cerca nuovi episodi adesso" From 350d0c35ce4aa7f0a8040075f8dcdf097229ee97 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 17 Jul 2018 16:28:46 -0500 Subject: [PATCH 37/52] strings: fix languague --- .../language/Spanish (Argentina)/strings.po | 52 ++++++------------- 1 file changed, 16 insertions(+), 36 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index e5653b20..40ef40ca 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -203,7 +203,7 @@ msgstr "Videoteca" msgctxt "#30135" msgid "added to the videolibrary" -msgstr "added to the videolibrary" +msgstr "se ha añadido a la videoteca" msgctxt "#30136" msgid "Original version" @@ -291,11 +291,11 @@ msgstr "Búsqueda por Persona" msgctxt "#30982" msgid "Search by Company" -msgstr "Búsqueda por Company" +msgstr "Búsqueda por Compañia" msgctxt "#30983" msgid "Now Playing" -msgstr "Ahora Playing" +msgstr "Ahora Reproduciendo" msgctxt "#30984" msgid "Popular" @@ -351,7 +351,7 @@ msgstr "Los más votados" msgctxt "#30997" msgid "Academy Awards" -msgstr "Academy Awards" +msgstr "Premios de la academia" msgctxt "#30998" msgid "Shortcut" @@ -359,7 +359,7 @@ msgstr "Shortcut" msgctxt "#30999" msgid "Add key to open Shortcut" -msgstr "Agregar clave para abrir el atajo" +msgstr "Añadir tecla para abrir el Shortcut" msgctxt "#50000" msgid "Sagas" @@ -802,16 +802,16 @@ msgid " Favorite servers" msgstr " Servidores favoritos" msgctxt "#60082" -msgid " \u2665 Favorite server %s" -msgstr " \u2665 Servidor Favorito %s" +msgid "Favorite server %s" +msgstr "Servidor Favorito %s" msgctxt "#60083" msgid " Preferred Qualities" msgstr " Calidades Favoritas" msgctxt "#60084" -msgid " \u2665 Preferred Quality %s" -msgstr " \u2665 Calidad Favorita %s" +msgid "Preferred Quality %s" +msgstr "Calidad Favorita %s" msgctxt "#60085" msgid " Priority (Indicates the order for AutoPlay)" @@ -1125,10 +1125,6 @@ msgctxt "#60268" msgid "Animation" msgstr "Animación" -msgctxt "#60269" -msgid "Kids" -msgstr "Niños" - msgctxt "#60270" msgid "Comedy" msgstr "Comedia" @@ -1137,10 +1133,6 @@ msgctxt "#60271" msgid "Crime" msgstr "Crimen" -msgctxt "#60272" -msgid "Documentaries" -msgstr "Documental" - msgctxt "#60273" msgid "Family" msgstr "Familiar" @@ -3127,11 +3119,11 @@ msgstr "Felicidades la videoteca de Kodi ha sido configurada correctamente." msgctxt "#70105" msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." -msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." +msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi? Se le pedirá que configure los proveedores de contenido para las películas y las series." msgctxt "#70106" msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." -msgstr "Si pulsa 'No' podra hacerlo desde 'Configuración > Preferencia > Rutas'." +msgstr "Si pulsa 'No' podrá hacerlo desde 'Configuración > Preferencias > Rutas'." msgctxt "#70107" msgid "Select scraper for Tv Shows" @@ -3213,10 +3205,6 @@ msgctxt "#70126" msgid "Visual Options" msgstr "Opciones Visuales" -msgctxt "#70127" -msgid "Anime" -msgstr "Anime" - msgctxt "#70128" msgid "Infoplus visual option" msgstr "Opción visual Infoplus" @@ -3249,13 +3237,9 @@ msgctxt "#70135" msgid "Custom Colours" msgstr "Colores Personalizados" -msgctxt "#70136" -msgid "Tv Show" -msgstr "Serie" - msgctxt "#70137" -msgid "Movie" -msgstr "Pelicula" +msgid "Movies" +msgstr "Peliculas" msgctxt "#70138" msgid "Low Rating" @@ -3267,7 +3251,7 @@ msgstr "Valoracion Media" msgctxt "#70140" msgid "High Rating" -msgstr "Valoracion Alta" +msgstr "Valoración Alta" msgctxt "#70141" msgid "Quality" @@ -3750,8 +3734,8 @@ msgid "Alfa stopped" msgstr "Alfa Detenido" msgctxt "#70264" -msgid "Basic realm=\Enter the username and password to access proteus \"" -msgstr "Basic realm=\"Introduce el nombre de usuario y clave para acceder a proteus\"" +msgid "Enter the username and password to access Alfa" +msgstr "Introduce el nombre de usuario y clave para acceder a Alfa" msgctxt "#70265" msgid "The data entered is not correct!" @@ -3761,10 +3745,6 @@ msgctxt "#70266" msgid "The search for% s did not match." msgstr "La busqueda de %s no dio resultados." -msgctxt "#70268" -msgid "This can be due to several reasons: \ n \ - The server is not available, or is not responding. \ n \ - Changes in the design of the web. \ n \ - Etc ... \ n \ Check the log to see more details of the error. " -msgstr "Esto puede ser devido a varias razones: \n \- El servidor no está disponible, o no esta respondiendo.\n \- Cambios en el diseño de la web.\n \- Etc...\n \Comprueba el log para ver mas detalles del error." - msgctxt "#70269" msgid "Search new episodes now" msgstr "Buscar nuevos episodios ahora" From 034927002751528b68bf02ed8ad42ab97c00ef50 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 17 Jul 2018 16:29:38 -0500 Subject: [PATCH 38/52] strings: fix languague --- .../language/Spanish (Mexico)/strings.po | 52 ++++++------------- 1 file changed, 16 insertions(+), 36 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index e5653b20..40ef40ca 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -203,7 +203,7 @@ msgstr "Videoteca" msgctxt "#30135" msgid "added to the videolibrary" -msgstr "added to the videolibrary" +msgstr "se ha añadido a la videoteca" msgctxt "#30136" msgid "Original version" @@ -291,11 +291,11 @@ msgstr "Búsqueda por Persona" msgctxt "#30982" msgid "Search by Company" -msgstr "Búsqueda por Company" +msgstr "Búsqueda por Compañia" msgctxt "#30983" msgid "Now Playing" -msgstr "Ahora Playing" +msgstr "Ahora Reproduciendo" msgctxt "#30984" msgid "Popular" @@ -351,7 +351,7 @@ msgstr "Los más votados" msgctxt "#30997" msgid "Academy Awards" -msgstr "Academy Awards" +msgstr "Premios de la academia" msgctxt "#30998" msgid "Shortcut" @@ -359,7 +359,7 @@ msgstr "Shortcut" msgctxt "#30999" msgid "Add key to open Shortcut" -msgstr "Agregar clave para abrir el atajo" +msgstr "Añadir tecla para abrir el Shortcut" msgctxt "#50000" msgid "Sagas" @@ -802,16 +802,16 @@ msgid " Favorite servers" msgstr " Servidores favoritos" msgctxt "#60082" -msgid " \u2665 Favorite server %s" -msgstr " \u2665 Servidor Favorito %s" +msgid "Favorite server %s" +msgstr "Servidor Favorito %s" msgctxt "#60083" msgid " Preferred Qualities" msgstr " Calidades Favoritas" msgctxt "#60084" -msgid " \u2665 Preferred Quality %s" -msgstr " \u2665 Calidad Favorita %s" +msgid "Preferred Quality %s" +msgstr "Calidad Favorita %s" msgctxt "#60085" msgid " Priority (Indicates the order for AutoPlay)" @@ -1125,10 +1125,6 @@ msgctxt "#60268" msgid "Animation" msgstr "Animación" -msgctxt "#60269" -msgid "Kids" -msgstr "Niños" - msgctxt "#60270" msgid "Comedy" msgstr "Comedia" @@ -1137,10 +1133,6 @@ msgctxt "#60271" msgid "Crime" msgstr "Crimen" -msgctxt "#60272" -msgid "Documentaries" -msgstr "Documental" - msgctxt "#60273" msgid "Family" msgstr "Familiar" @@ -3127,11 +3119,11 @@ msgstr "Felicidades la videoteca de Kodi ha sido configurada correctamente." msgctxt "#70105" msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." -msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." +msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi? Se le pedirá que configure los proveedores de contenido para las películas y las series." msgctxt "#70106" msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." -msgstr "Si pulsa 'No' podra hacerlo desde 'Configuración > Preferencia > Rutas'." +msgstr "Si pulsa 'No' podrá hacerlo desde 'Configuración > Preferencias > Rutas'." msgctxt "#70107" msgid "Select scraper for Tv Shows" @@ -3213,10 +3205,6 @@ msgctxt "#70126" msgid "Visual Options" msgstr "Opciones Visuales" -msgctxt "#70127" -msgid "Anime" -msgstr "Anime" - msgctxt "#70128" msgid "Infoplus visual option" msgstr "Opción visual Infoplus" @@ -3249,13 +3237,9 @@ msgctxt "#70135" msgid "Custom Colours" msgstr "Colores Personalizados" -msgctxt "#70136" -msgid "Tv Show" -msgstr "Serie" - msgctxt "#70137" -msgid "Movie" -msgstr "Pelicula" +msgid "Movies" +msgstr "Peliculas" msgctxt "#70138" msgid "Low Rating" @@ -3267,7 +3251,7 @@ msgstr "Valoracion Media" msgctxt "#70140" msgid "High Rating" -msgstr "Valoracion Alta" +msgstr "Valoración Alta" msgctxt "#70141" msgid "Quality" @@ -3750,8 +3734,8 @@ msgid "Alfa stopped" msgstr "Alfa Detenido" msgctxt "#70264" -msgid "Basic realm=\Enter the username and password to access proteus \"" -msgstr "Basic realm=\"Introduce el nombre de usuario y clave para acceder a proteus\"" +msgid "Enter the username and password to access Alfa" +msgstr "Introduce el nombre de usuario y clave para acceder a Alfa" msgctxt "#70265" msgid "The data entered is not correct!" @@ -3761,10 +3745,6 @@ msgctxt "#70266" msgid "The search for% s did not match." msgstr "La busqueda de %s no dio resultados." -msgctxt "#70268" -msgid "This can be due to several reasons: \ n \ - The server is not available, or is not responding. \ n \ - Changes in the design of the web. \ n \ - Etc ... \ n \ Check the log to see more details of the error. " -msgstr "Esto puede ser devido a varias razones: \n \- El servidor no está disponible, o no esta respondiendo.\n \- Cambios en el diseño de la web.\n \- Etc...\n \Comprueba el log para ver mas detalles del error." - msgctxt "#70269" msgid "Search new episodes now" msgstr "Buscar nuevos episodios ahora" From 2f6b4316ee4cd14e505b8e266f0256ffe45a024b Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 17 Jul 2018 16:30:26 -0500 Subject: [PATCH 39/52] strings: fix languague --- .../resources/language/Spanish/strings.po | 52 ++++++------------- 1 file changed, 16 insertions(+), 36 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index e5653b20..40ef40ca 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -203,7 +203,7 @@ msgstr "Videoteca" msgctxt "#30135" msgid "added to the videolibrary" -msgstr "added to the videolibrary" +msgstr "se ha añadido a la videoteca" msgctxt "#30136" msgid "Original version" @@ -291,11 +291,11 @@ msgstr "Búsqueda por Persona" msgctxt "#30982" msgid "Search by Company" -msgstr "Búsqueda por Company" +msgstr "Búsqueda por Compañia" msgctxt "#30983" msgid "Now Playing" -msgstr "Ahora Playing" +msgstr "Ahora Reproduciendo" msgctxt "#30984" msgid "Popular" @@ -351,7 +351,7 @@ msgstr "Los más votados" msgctxt "#30997" msgid "Academy Awards" -msgstr "Academy Awards" +msgstr "Premios de la academia" msgctxt "#30998" msgid "Shortcut" @@ -359,7 +359,7 @@ msgstr "Shortcut" msgctxt "#30999" msgid "Add key to open Shortcut" -msgstr "Agregar clave para abrir el atajo" +msgstr "Añadir tecla para abrir el Shortcut" msgctxt "#50000" msgid "Sagas" @@ -802,16 +802,16 @@ msgid " Favorite servers" msgstr " Servidores favoritos" msgctxt "#60082" -msgid " \u2665 Favorite server %s" -msgstr " \u2665 Servidor Favorito %s" +msgid "Favorite server %s" +msgstr "Servidor Favorito %s" msgctxt "#60083" msgid " Preferred Qualities" msgstr " Calidades Favoritas" msgctxt "#60084" -msgid " \u2665 Preferred Quality %s" -msgstr " \u2665 Calidad Favorita %s" +msgid "Preferred Quality %s" +msgstr "Calidad Favorita %s" msgctxt "#60085" msgid " Priority (Indicates the order for AutoPlay)" @@ -1125,10 +1125,6 @@ msgctxt "#60268" msgid "Animation" msgstr "Animación" -msgctxt "#60269" -msgid "Kids" -msgstr "Niños" - msgctxt "#60270" msgid "Comedy" msgstr "Comedia" @@ -1137,10 +1133,6 @@ msgctxt "#60271" msgid "Crime" msgstr "Crimen" -msgctxt "#60272" -msgid "Documentaries" -msgstr "Documental" - msgctxt "#60273" msgid "Family" msgstr "Familiar" @@ -3127,11 +3119,11 @@ msgstr "Felicidades la videoteca de Kodi ha sido configurada correctamente." msgctxt "#70105" msgid "Do you want Alfa to automatically configure the Kodi library?You will be asked to set up scrapers for movies and series." -msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi?Se le pedirá que configure los scrapers para las películas y las series." +msgstr "¿Desea que Alfa auto-configure la videoteca de Kodi? Se le pedirá que configure los proveedores de contenido para las películas y las series." msgctxt "#70106" msgid "If you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." -msgstr "Si pulsa 'No' podra hacerlo desde 'Configuración > Preferencia > Rutas'." +msgstr "Si pulsa 'No' podrá hacerlo desde 'Configuración > Preferencias > Rutas'." msgctxt "#70107" msgid "Select scraper for Tv Shows" @@ -3213,10 +3205,6 @@ msgctxt "#70126" msgid "Visual Options" msgstr "Opciones Visuales" -msgctxt "#70127" -msgid "Anime" -msgstr "Anime" - msgctxt "#70128" msgid "Infoplus visual option" msgstr "Opción visual Infoplus" @@ -3249,13 +3237,9 @@ msgctxt "#70135" msgid "Custom Colours" msgstr "Colores Personalizados" -msgctxt "#70136" -msgid "Tv Show" -msgstr "Serie" - msgctxt "#70137" -msgid "Movie" -msgstr "Pelicula" +msgid "Movies" +msgstr "Peliculas" msgctxt "#70138" msgid "Low Rating" @@ -3267,7 +3251,7 @@ msgstr "Valoracion Media" msgctxt "#70140" msgid "High Rating" -msgstr "Valoracion Alta" +msgstr "Valoración Alta" msgctxt "#70141" msgid "Quality" @@ -3750,8 +3734,8 @@ msgid "Alfa stopped" msgstr "Alfa Detenido" msgctxt "#70264" -msgid "Basic realm=\Enter the username and password to access proteus \"" -msgstr "Basic realm=\"Introduce el nombre de usuario y clave para acceder a proteus\"" +msgid "Enter the username and password to access Alfa" +msgstr "Introduce el nombre de usuario y clave para acceder a Alfa" msgctxt "#70265" msgid "The data entered is not correct!" @@ -3761,10 +3745,6 @@ msgctxt "#70266" msgid "The search for% s did not match." msgstr "La busqueda de %s no dio resultados." -msgctxt "#70268" -msgid "This can be due to several reasons: \ n \ - The server is not available, or is not responding. \ n \ - Changes in the design of the web. \ n \ - Etc ... \ n \ Check the log to see more details of the error. " -msgstr "Esto puede ser devido a varias razones: \n \- El servidor no está disponible, o no esta respondiendo.\n \- Cambios en el diseño de la web.\n \- Etc...\n \Comprueba el log para ver mas detalles del error." - msgctxt "#70269" msgid "Search new episodes now" msgstr "Buscar nuevos episodios ahora" From 9c905bf5cf9741b892f4d8ebc8a21d985a8d0846 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Tue, 17 Jul 2018 16:31:27 -0500 Subject: [PATCH 40/52] videolibrarytools: fix languague --- plugin.video.alfa/core/videolibrarytools.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.video.alfa/core/videolibrarytools.py b/plugin.video.alfa/core/videolibrarytools.py index aff99dd1..8bff09ab 100644 --- a/plugin.video.alfa/core/videolibrarytools.py +++ b/plugin.video.alfa/core/videolibrarytools.py @@ -557,7 +557,7 @@ def add_movie(item): config.get_localized_string(30135)) # 'se ha añadido a la videoteca' else: platformtools.dialog_ok(config.get_localized_string(30131), - "ERROR, la pelicula NO se ha añadido a la videoteca") + config.get_localized_string(60066)) #"ERROR, la pelicula NO se ha añadido a la videoteca") def add_tvshow(item, channel=None): From 018357c19b93996b698aa1c404d87066d5dc8c71 Mon Sep 17 00:00:00 2001 From: Intel1 Date: Tue, 17 Jul 2018 17:17:45 -0500 Subject: [PATCH 41/52] lib request:s borrado --- plugin.video.alfa/lib/requests/__init__.py | 77 - plugin.video.alfa/lib/requests/adapters.py | 437 -- plugin.video.alfa/lib/requests/api.py | 147 - plugin.video.alfa/lib/requests/auth.py | 212 - plugin.video.alfa/lib/requests/cacert.pem | 5026 ----------------- plugin.video.alfa/lib/requests/certs.py | 25 - plugin.video.alfa/lib/requests/compat.py | 62 - plugin.video.alfa/lib/requests/cookies.py | 479 -- plugin.video.alfa/lib/requests/exceptions.py | 99 - plugin.video.alfa/lib/requests/hooks.py | 45 - plugin.video.alfa/lib/requests/models.py | 859 --- .../lib/requests/packages/__init__.py | 3 - .../lib/requests/packages/chardet/__init__.py | 32 - .../lib/requests/packages/chardet/big5freq.py | 925 --- .../requests/packages/chardet/big5prober.py | 42 - .../requests/packages/chardet/chardetect.py | 80 - .../packages/chardet/chardistribution.py | 231 - .../packages/chardet/charsetgroupprober.py | 106 - .../packages/chardet/charsetprober.py | 62 - .../packages/chardet/codingstatemachine.py | 61 - .../lib/requests/packages/chardet/compat.py | 34 - .../requests/packages/chardet/constants.py | 39 - .../requests/packages/chardet/cp949prober.py | 44 - .../requests/packages/chardet/escprober.py | 86 - .../lib/requests/packages/chardet/escsm.py | 242 - .../requests/packages/chardet/eucjpprober.py | 90 - .../requests/packages/chardet/euckrfreq.py | 596 -- .../requests/packages/chardet/euckrprober.py | 42 - .../requests/packages/chardet/euctwfreq.py | 428 -- .../requests/packages/chardet/euctwprober.py | 41 - .../requests/packages/chardet/gb2312freq.py | 472 -- .../requests/packages/chardet/gb2312prober.py | 41 - .../requests/packages/chardet/hebrewprober.py | 283 - .../lib/requests/packages/chardet/jisfreq.py | 569 -- .../lib/requests/packages/chardet/jpcntx.py | 227 - .../packages/chardet/langbulgarianmodel.py | 229 - .../packages/chardet/langcyrillicmodel.py | 329 -- .../packages/chardet/langgreekmodel.py | 225 - .../packages/chardet/langhebrewmodel.py | 201 - .../packages/chardet/langhungarianmodel.py | 225 - .../packages/chardet/langthaimodel.py | 200 - .../requests/packages/chardet/latin1prober.py | 139 - .../packages/chardet/mbcharsetprober.py | 86 - .../packages/chardet/mbcsgroupprober.py | 54 - .../lib/requests/packages/chardet/mbcssm.py | 572 -- .../packages/chardet/sbcharsetprober.py | 120 - .../packages/chardet/sbcsgroupprober.py | 69 - .../requests/packages/chardet/sjisprober.py | 91 - .../packages/chardet/universaldetector.py | 170 - .../requests/packages/chardet/utf8prober.py | 76 - .../lib/requests/packages/urllib3/__init__.py | 69 - .../requests/packages/urllib3/_collections.py | 323 -- .../requests/packages/urllib3/connection.py | 264 - .../packages/urllib3/connectionpool.py | 795 --- .../packages/urllib3/contrib/__init__.py | 0 .../packages/urllib3/contrib/ntlmpool.py | 114 - .../requests/packages/urllib3/exceptions.py | 169 - .../lib/requests/packages/urllib3/fields.py | 177 - .../lib/requests/packages/urllib3/filepost.py | 93 - .../packages/urllib3/packages/__init__.py | 4 - .../packages/urllib3/packages/ordered_dict.py | 259 - .../requests/packages/urllib3/packages/six.py | 385 -- .../packages/ssl_match_hostname/__init__.py | 13 - .../ssl_match_hostname/_implementation.py | 105 - .../requests/packages/urllib3/poolmanager.py | 280 - .../lib/requests/packages/urllib3/request.py | 141 - .../lib/requests/packages/urllib3/response.py | 466 -- .../packages/urllib3/util/__init__.py | 24 - .../packages/urllib3/util/connection.py | 98 - .../requests/packages/urllib3/util/request.py | 71 - .../packages/urllib3/util/response.py | 22 - .../requests/packages/urllib3/util/retry.py | 285 - .../requests/packages/urllib3/util/ssl_.py | 280 - .../requests/packages/urllib3/util/timeout.py | 240 - .../lib/requests/packages/urllib3/util/url.py | 214 - plugin.video.alfa/lib/requests/sessions.py | 677 --- .../lib/requests/status_codes.py | 89 - plugin.video.alfa/lib/requests/structures.py | 104 - plugin.video.alfa/lib/requests/utils.py | 707 --- 79 files changed, 21498 deletions(-) delete mode 100755 plugin.video.alfa/lib/requests/__init__.py delete mode 100755 plugin.video.alfa/lib/requests/adapters.py delete mode 100755 plugin.video.alfa/lib/requests/api.py delete mode 100755 plugin.video.alfa/lib/requests/auth.py delete mode 100755 plugin.video.alfa/lib/requests/cacert.pem delete mode 100755 plugin.video.alfa/lib/requests/certs.py delete mode 100755 plugin.video.alfa/lib/requests/compat.py delete mode 100755 plugin.video.alfa/lib/requests/cookies.py delete mode 100755 plugin.video.alfa/lib/requests/exceptions.py delete mode 100755 plugin.video.alfa/lib/requests/hooks.py delete mode 100755 plugin.video.alfa/lib/requests/models.py delete mode 100755 plugin.video.alfa/lib/requests/packages/__init__.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/__init__.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/big5freq.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/big5prober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/chardetect.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/chardistribution.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/charsetgroupprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/charsetprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/codingstatemachine.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/compat.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/constants.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/cp949prober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/escprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/escsm.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/eucjpprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/euckrfreq.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/euckrprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/euctwfreq.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/euctwprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/gb2312freq.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/gb2312prober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/hebrewprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/jisfreq.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/jpcntx.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/langbulgarianmodel.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/langcyrillicmodel.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/langgreekmodel.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/langhebrewmodel.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/langhungarianmodel.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/langthaimodel.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/latin1prober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/mbcharsetprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/mbcsgroupprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/mbcssm.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/sbcharsetprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/sbcsgroupprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/sjisprober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/universaldetector.py delete mode 100755 plugin.video.alfa/lib/requests/packages/chardet/utf8prober.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/__init__.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/_collections.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/connection.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/connectionpool.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/contrib/__init__.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/contrib/ntlmpool.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/exceptions.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/fields.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/filepost.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/packages/__init__.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/packages/ordered_dict.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/packages/six.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/poolmanager.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/request.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/response.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/util/__init__.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/util/connection.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/util/request.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/util/response.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/util/retry.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/util/ssl_.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/util/timeout.py delete mode 100755 plugin.video.alfa/lib/requests/packages/urllib3/util/url.py delete mode 100755 plugin.video.alfa/lib/requests/sessions.py delete mode 100755 plugin.video.alfa/lib/requests/status_codes.py delete mode 100755 plugin.video.alfa/lib/requests/structures.py delete mode 100755 plugin.video.alfa/lib/requests/utils.py diff --git a/plugin.video.alfa/lib/requests/__init__.py b/plugin.video.alfa/lib/requests/__init__.py deleted file mode 100755 index fd1e3336..00000000 --- a/plugin.video.alfa/lib/requests/__init__.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- - -# __ -# /__) _ _ _ _ _/ _ -# / ( (- (/ (/ (- _) / _) -# / - -""" -requests HTTP library -~~~~~~~~~~~~~~~~~~~~~ - -Requests is an HTTP library, written in Python, for human beings. Basic GET -usage: - - >>> import requests - >>> r = requests.get('https://www.python.org') - >>> r.status_code - 200 - >>> 'Python is a programming language' in r.content - True - -... or POST: - - >>> payload = dict(key1='value1', key2='value2') - >>> r = requests.post('http://httpbin.org/post', data=payload) - >>> print(r.text) - { - ... - "form": { - "key2": "value2", - "key1": "value1" - }, - ... - } - -The other HTTP methods are supported - see `requests.api`. Full documentation -is at . - -:copyright: (c) 2015 by Kenneth Reitz. -:license: Apache 2.0, see LICENSE for more details. - -""" - -__title__ = 'requests' -__version__ = '2.7.0' -__build__ = 0x020700 -__author__ = 'Kenneth Reitz' -__license__ = 'Apache 2.0' -__copyright__ = 'Copyright 2015 Kenneth Reitz' - -# Attempt to enable urllib3's SNI support, if possible -try: - from .packages.urllib3.contrib import pyopenssl - pyopenssl.inject_into_urllib3() -except ImportError: - pass - -from . import utils -from .models import Request, Response, PreparedRequest -from .api import request, get, head, post, patch, put, delete, options -from .sessions import session, Session -from .status_codes import codes -from .exceptions import ( - RequestException, Timeout, URLRequired, - TooManyRedirects, HTTPError, ConnectionError -) - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - def emit(self, record): - pass - -logging.getLogger(__name__).addHandler(NullHandler()) diff --git a/plugin.video.alfa/lib/requests/adapters.py b/plugin.video.alfa/lib/requests/adapters.py deleted file mode 100755 index 4282e80d..00000000 --- a/plugin.video.alfa/lib/requests/adapters.py +++ /dev/null @@ -1,437 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.adapters -~~~~~~~~~~~~~~~~~ - -This module contains the transport adapters that Requests uses to define -and maintain connections. -""" - -import socket - -from .models import Response -from .packages.urllib3.poolmanager import PoolManager, proxy_from_url -from .packages.urllib3.response import HTTPResponse -from .packages.urllib3.util import Timeout as TimeoutSauce -from .packages.urllib3.util.retry import Retry -from .compat import urlparse, basestring -from .utils import (DEFAULT_CA_BUNDLE_PATH, get_encoding_from_headers, - prepend_scheme_if_needed, get_auth_from_url, urldefragauth) -from .structures import CaseInsensitiveDict -from .packages.urllib3.exceptions import ConnectTimeoutError -from .packages.urllib3.exceptions import HTTPError as _HTTPError -from .packages.urllib3.exceptions import MaxRetryError -from .packages.urllib3.exceptions import ProxyError as _ProxyError -from .packages.urllib3.exceptions import ProtocolError -from .packages.urllib3.exceptions import ReadTimeoutError -from .packages.urllib3.exceptions import SSLError as _SSLError -from .packages.urllib3.exceptions import ResponseError -from .cookies import extract_cookies_to_jar -from .exceptions import (ConnectionError, ConnectTimeout, ReadTimeout, SSLError, - ProxyError, RetryError) -from .auth import _basic_auth_str - -DEFAULT_POOLBLOCK = False -DEFAULT_POOLSIZE = 10 -DEFAULT_RETRIES = 0 - - -class BaseAdapter(object): - """The Base Transport Adapter""" - - def __init__(self): - super(BaseAdapter, self).__init__() - - def send(self): - raise NotImplementedError - - def close(self): - raise NotImplementedError - - -class HTTPAdapter(BaseAdapter): - """The built-in HTTP Adapter for urllib3. - - Provides a general-case interface for Requests sessions to contact HTTP and - HTTPS urls by implementing the Transport Adapter interface. This class will - usually be created by the :class:`Session ` class under the - covers. - - :param pool_connections: The number of urllib3 connection pools to cache. - :param pool_maxsize: The maximum number of connections to save in the pool. - :param int max_retries: The maximum number of retries each connection - should attempt. Note, this applies only to failed DNS lookups, socket - connections and connection timeouts, never to requests where data has - made it to the server. By default, Requests does not retry failed - connections. If you need granular control over the conditions under - which we retry a request, import urllib3's ``Retry`` class and pass - that instead. - :param pool_block: Whether the connection pool should block for connections. - - Usage:: - - >>> import requests - >>> s = requests.Session() - >>> a = requests.adapters.HTTPAdapter(max_retries=3) - >>> s.mount('http://', a) - """ - __attrs__ = ['max_retries', 'config', '_pool_connections', '_pool_maxsize', - '_pool_block'] - - def __init__(self, pool_connections=DEFAULT_POOLSIZE, - pool_maxsize=DEFAULT_POOLSIZE, max_retries=DEFAULT_RETRIES, - pool_block=DEFAULT_POOLBLOCK): - if max_retries == DEFAULT_RETRIES: - self.max_retries = Retry(0, read=False) - else: - self.max_retries = Retry.from_int(max_retries) - self.config = {} - self.proxy_manager = {} - - super(HTTPAdapter, self).__init__() - - self._pool_connections = pool_connections - self._pool_maxsize = pool_maxsize - self._pool_block = pool_block - - self.init_poolmanager(pool_connections, pool_maxsize, block=pool_block) - - def __getstate__(self): - return dict((attr, getattr(self, attr, None)) for attr in - self.__attrs__) - - def __setstate__(self, state): - # Can't handle by adding 'proxy_manager' to self.__attrs__ because - # because self.poolmanager uses a lambda function, which isn't pickleable. - self.proxy_manager = {} - self.config = {} - - for attr, value in state.items(): - setattr(self, attr, value) - - self.init_poolmanager(self._pool_connections, self._pool_maxsize, - block=self._pool_block) - - def init_poolmanager(self, connections, maxsize, block=DEFAULT_POOLBLOCK, **pool_kwargs): - """Initializes a urllib3 PoolManager. - - This method should not be called from user code, and is only - exposed for use when subclassing the - :class:`HTTPAdapter `. - - :param connections: The number of urllib3 connection pools to cache. - :param maxsize: The maximum number of connections to save in the pool. - :param block: Block when no free connections are available. - :param pool_kwargs: Extra keyword arguments used to initialize the Pool Manager. - """ - # save these values for pickling - self._pool_connections = connections - self._pool_maxsize = maxsize - self._pool_block = block - - self.poolmanager = PoolManager(num_pools=connections, maxsize=maxsize, - block=block, strict=True, **pool_kwargs) - - def proxy_manager_for(self, proxy, **proxy_kwargs): - """Return urllib3 ProxyManager for the given proxy. - - This method should not be called from user code, and is only - exposed for use when subclassing the - :class:`HTTPAdapter `. - - :param proxy: The proxy to return a urllib3 ProxyManager for. - :param proxy_kwargs: Extra keyword arguments used to configure the Proxy Manager. - :returns: ProxyManager - """ - if not proxy in self.proxy_manager: - proxy_headers = self.proxy_headers(proxy) - self.proxy_manager[proxy] = proxy_from_url( - proxy, - proxy_headers=proxy_headers, - num_pools=self._pool_connections, - maxsize=self._pool_maxsize, - block=self._pool_block, - **proxy_kwargs) - - return self.proxy_manager[proxy] - - def cert_verify(self, conn, url, verify, cert): - """Verify a SSL certificate. This method should not be called from user - code, and is only exposed for use when subclassing the - :class:`HTTPAdapter `. - - :param conn: The urllib3 connection object associated with the cert. - :param url: The requested URL. - :param verify: Whether we should actually verify the certificate. - :param cert: The SSL certificate to verify. - """ - if url.lower().startswith('https') and verify: - - cert_loc = None - - # Allow self-specified cert location. - if verify is not True: - cert_loc = verify - - if not cert_loc: - cert_loc = DEFAULT_CA_BUNDLE_PATH - - if not cert_loc: - raise Exception("Could not find a suitable SSL CA certificate bundle.") - - conn.cert_reqs = 'CERT_REQUIRED' - conn.ca_certs = cert_loc - else: - conn.cert_reqs = 'CERT_NONE' - conn.ca_certs = None - - if cert: - if not isinstance(cert, basestring): - conn.cert_file = cert[0] - conn.key_file = cert[1] - else: - conn.cert_file = cert - - def build_response(self, req, resp): - """Builds a :class:`Response ` object from a urllib3 - response. This should not be called from user code, and is only exposed - for use when subclassing the - :class:`HTTPAdapter ` - - :param req: The :class:`PreparedRequest ` used to generate the response. - :param resp: The urllib3 response object. - """ - response = Response() - - # Fallback to None if there's no status_code, for whatever reason. - response.status_code = getattr(resp, 'status', None) - - # Make headers case-insensitive. - response.headers = CaseInsensitiveDict(getattr(resp, 'headers', {})) - - # Set encoding. - response.encoding = get_encoding_from_headers(response.headers) - response.raw = resp - response.reason = response.raw.reason - - if isinstance(req.url, bytes): - response.url = req.url.decode('utf-8') - else: - response.url = req.url - - # Add new cookies from the server. - extract_cookies_to_jar(response.cookies, req, resp) - - # Give the Response some context. - response.request = req - response.connection = self - - return response - - def get_connection(self, url, proxies=None): - """Returns a urllib3 connection for the given URL. This should not be - called from user code, and is only exposed for use when subclassing the - :class:`HTTPAdapter `. - - :param url: The URL to connect to. - :param proxies: (optional) A Requests-style dictionary of proxies used on this request. - """ - proxies = proxies or {} - proxy = proxies.get(urlparse(url.lower()).scheme) - - if proxy: - proxy = prepend_scheme_if_needed(proxy, 'http') - proxy_manager = self.proxy_manager_for(proxy) - conn = proxy_manager.connection_from_url(url) - else: - # Only scheme should be lower case - parsed = urlparse(url) - url = parsed.geturl() - conn = self.poolmanager.connection_from_url(url) - - return conn - - def close(self): - """Disposes of any internal state. - - Currently, this just closes the PoolManager, which closes pooled - connections. - """ - self.poolmanager.clear() - - def request_url(self, request, proxies): - """Obtain the url to use when making the final request. - - If the message is being sent through a HTTP proxy, the full URL has to - be used. Otherwise, we should only use the path portion of the URL. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter `. - - :param request: The :class:`PreparedRequest ` being sent. - :param proxies: A dictionary of schemes to proxy URLs. - """ - proxies = proxies or {} - scheme = urlparse(request.url).scheme - proxy = proxies.get(scheme) - - if proxy and scheme != 'https': - url = urldefragauth(request.url) - else: - url = request.path_url - - return url - - def add_headers(self, request, **kwargs): - """Add any headers needed by the connection. As of v2.0 this does - nothing by default, but is left for overriding by users that subclass - the :class:`HTTPAdapter `. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter `. - - :param request: The :class:`PreparedRequest ` to add headers to. - :param kwargs: The keyword arguments from the call to send(). - """ - pass - - def proxy_headers(self, proxy): - """Returns a dictionary of the headers to add to any request sent - through a proxy. This works with urllib3 magic to ensure that they are - correctly sent to the proxy, rather than in a tunnelled request if - CONNECT is being used. - - This should not be called from user code, and is only exposed for use - when subclassing the - :class:`HTTPAdapter `. - - :param proxies: The url of the proxy being used for this request. - :param kwargs: Optional additional keyword arguments. - """ - headers = {} - username, password = get_auth_from_url(proxy) - - if username and password: - headers['Proxy-Authorization'] = _basic_auth_str(username, - password) - - return headers - - def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None): - """Sends PreparedRequest object. Returns Response object. - - :param request: The :class:`PreparedRequest ` being sent. - :param stream: (optional) Whether to stream the request content. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a (`connect timeout, read - timeout `_) tuple. - :type timeout: float or tuple - :param verify: (optional) Whether to verify SSL certificates. - :param cert: (optional) Any user-provided SSL certificate to be trusted. - :param proxies: (optional) The proxies dictionary to apply to the request. - """ - - conn = self.get_connection(request.url, proxies) - - self.cert_verify(conn, request.url, verify, cert) - url = self.request_url(request, proxies) - self.add_headers(request) - - chunked = not (request.body is None or 'Content-Length' in request.headers) - - if isinstance(timeout, tuple): - try: - connect, read = timeout - timeout = TimeoutSauce(connect=connect, read=read) - except ValueError as e: - # this may raise a string formatting error. - err = ("Invalid timeout {0}. Pass a (connect, read) " - "timeout tuple, or a single float to set " - "both timeouts to the same value".format(timeout)) - raise ValueError(err) - else: - timeout = TimeoutSauce(connect=timeout, read=timeout) - - try: - if not chunked: - resp = conn.urlopen( - method=request.method, - url=url, - body=request.body, - headers=request.headers, - redirect=False, - assert_same_host=False, - preload_content=False, - decode_content=False, - retries=self.max_retries, - timeout=timeout - ) - - # Send the request. - else: - if hasattr(conn, 'proxy_pool'): - conn = conn.proxy_pool - - low_conn = conn._get_conn(timeout=timeout) - - try: - low_conn.putrequest(request.method, - url, - skip_accept_encoding=True) - - for header, value in request.headers.items(): - low_conn.putheader(header, value) - - low_conn.endheaders() - - for i in request.body: - low_conn.send(hex(len(i))[2:].encode('utf-8')) - low_conn.send(b'\r\n') - low_conn.send(i) - low_conn.send(b'\r\n') - low_conn.send(b'0\r\n\r\n') - - r = low_conn.getresponse() - resp = HTTPResponse.from_httplib( - r, - pool=conn, - connection=low_conn, - preload_content=False, - decode_content=False - ) - except: - # If we hit any problems here, clean up the connection. - # Then, reraise so that we can handle the actual exception. - low_conn.close() - raise - else: - # All is well, return the connection to the pool. - conn._put_conn(low_conn) - - except (ProtocolError, socket.error) as err: - raise ConnectionError(err, request=request) - - except MaxRetryError as e: - if isinstance(e.reason, ConnectTimeoutError): - raise ConnectTimeout(e, request=request) - - if isinstance(e.reason, ResponseError): - raise RetryError(e, request=request) - - raise ConnectionError(e, request=request) - - except _ProxyError as e: - raise ProxyError(e) - - except (_SSLError, _HTTPError) as e: - if isinstance(e, _SSLError): - raise SSLError(e, request=request) - elif isinstance(e, ReadTimeoutError): - raise ReadTimeout(e, request=request) - else: - raise - - return self.build_response(request, resp) diff --git a/plugin.video.alfa/lib/requests/api.py b/plugin.video.alfa/lib/requests/api.py deleted file mode 100755 index 6175bcb6..00000000 --- a/plugin.video.alfa/lib/requests/api.py +++ /dev/null @@ -1,147 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.api -~~~~~~~~~~~~ - -This module implements the Requests API. - -:copyright: (c) 2012 by Kenneth Reitz. -:license: Apache2, see LICENSE for more details. - -""" - -from . import sessions - - -def request(method, url, **kwargs): - """Constructs and sends a :class:`Request `. - - :param method: method for the new :class:`Request` object. - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json data to send in the body of the :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the :class:`Request`. - :param files: (optional) Dictionary of ``'name': file-like-objects`` (or ``{'name': ('filename', fileobj)}``) for multipart encoding upload. - :param auth: (optional) Auth tuple to enable Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How long to wait for the server to send data - before giving up, as a float, or a (`connect timeout, read timeout - `_) tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Boolean. Set to True if POST/PUT/DELETE redirect following is allowed. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol to the URL of the proxy. - :param verify: (optional) if ``True``, the SSL cert will be verified. A CA_BUNDLE path can also be provided. - :param stream: (optional) if ``False``, the response content will be immediately downloaded. - :param cert: (optional) if String, path to ssl client cert file (.pem). If Tuple, ('cert', 'key') pair. - :return: :class:`Response ` object - :rtype: requests.Response - - Usage:: - - >>> import requests - >>> req = requests.request('GET', 'http://httpbin.org/get') - - """ - - session = sessions.Session() - response = session.request(method=method, url=url, **kwargs) - # By explicitly closing the session, we avoid leaving sockets open which - # can trigger a ResourceWarning in some cases, and look like a memory leak - # in others. - session.close() - return response - - -def get(url, params=None, **kwargs): - """Sends a GET request. - - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query string for the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', True) - return request('get', url, params=params, **kwargs) - - -def options(url, **kwargs): - """Sends a OPTIONS request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', True) - return request('options', url, **kwargs) - - -def head(url, **kwargs): - """Sends a HEAD request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - kwargs.setdefault('allow_redirects', False) - return request('head', url, **kwargs) - - -def post(url, data=None, json=None, **kwargs): - """Sends a POST request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json data to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - return request('post', url, data=data, json=json, **kwargs) - - -def put(url, data=None, **kwargs): - """Sends a PUT request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - return request('put', url, data=data, **kwargs) - - -def patch(url, data=None, **kwargs): - """Sends a PATCH request. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - return request('patch', url, data=data, **kwargs) - - -def delete(url, **kwargs): - """Sends a DELETE request. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - :return: :class:`Response ` object - :rtype: requests.Response - """ - - return request('delete', url, **kwargs) diff --git a/plugin.video.alfa/lib/requests/auth.py b/plugin.video.alfa/lib/requests/auth.py deleted file mode 100755 index b5dafb31..00000000 --- a/plugin.video.alfa/lib/requests/auth.py +++ /dev/null @@ -1,212 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.auth -~~~~~~~~~~~~~ - -This module contains the authentication handlers for Requests. -""" - -import os -import re -import time -import hashlib - -from base64 import b64encode - -from .compat import urlparse, str -from .cookies import extract_cookies_to_jar -from .utils import parse_dict_header, to_native_string -from .status_codes import codes - -CONTENT_TYPE_FORM_URLENCODED = 'application/x-www-form-urlencoded' -CONTENT_TYPE_MULTI_PART = 'multipart/form-data' - - -def _basic_auth_str(username, password): - """Returns a Basic Auth string.""" - - authstr = 'Basic ' + to_native_string( - b64encode(('%s:%s' % (username, password)).encode('latin1')).strip() - ) - - return authstr - - -class AuthBase(object): - """Base class that all auth implementations derive from""" - - def __call__(self, r): - raise NotImplementedError('Auth hooks must be callable.') - - -class HTTPBasicAuth(AuthBase): - """Attaches HTTP Basic Authentication to the given Request object.""" - def __init__(self, username, password): - self.username = username - self.password = password - - def __call__(self, r): - r.headers['Authorization'] = _basic_auth_str(self.username, self.password) - return r - - -class HTTPProxyAuth(HTTPBasicAuth): - """Attaches HTTP Proxy Authentication to a given Request object.""" - def __call__(self, r): - r.headers['Proxy-Authorization'] = _basic_auth_str(self.username, self.password) - return r - - -class HTTPDigestAuth(AuthBase): - """Attaches HTTP Digest Authentication to the given Request object.""" - def __init__(self, username, password): - self.username = username - self.password = password - self.last_nonce = '' - self.nonce_count = 0 - self.chal = {} - self.pos = None - self.num_401_calls = 1 - - def build_digest_header(self, method, url): - - realm = self.chal['realm'] - nonce = self.chal['nonce'] - qop = self.chal.get('qop') - algorithm = self.chal.get('algorithm') - opaque = self.chal.get('opaque') - - if algorithm is None: - _algorithm = 'MD5' - else: - _algorithm = algorithm.upper() - # lambdas assume digest modules are imported at the top level - if _algorithm == 'MD5' or _algorithm == 'MD5-SESS': - def md5_utf8(x): - if isinstance(x, str): - x = x.encode('utf-8') - return hashlib.md5(x).hexdigest() - hash_utf8 = md5_utf8 - elif _algorithm == 'SHA': - def sha_utf8(x): - if isinstance(x, str): - x = x.encode('utf-8') - return hashlib.sha1(x).hexdigest() - hash_utf8 = sha_utf8 - - KD = lambda s, d: hash_utf8("%s:%s" % (s, d)) - - if hash_utf8 is None: - return None - - # XXX not implemented yet - entdig = None - p_parsed = urlparse(url) - #: path is request-uri defined in RFC 2616 which should not be empty - path = p_parsed.path or "/" - if p_parsed.query: - path += '?' + p_parsed.query - - A1 = '%s:%s:%s' % (self.username, realm, self.password) - A2 = '%s:%s' % (method, path) - - HA1 = hash_utf8(A1) - HA2 = hash_utf8(A2) - - if nonce == self.last_nonce: - self.nonce_count += 1 - else: - self.nonce_count = 1 - ncvalue = '%08x' % self.nonce_count - s = str(self.nonce_count).encode('utf-8') - s += nonce.encode('utf-8') - s += time.ctime().encode('utf-8') - s += os.urandom(8) - - cnonce = (hashlib.sha1(s).hexdigest()[:16]) - if _algorithm == 'MD5-SESS': - HA1 = hash_utf8('%s:%s:%s' % (HA1, nonce, cnonce)) - - if qop is None: - respdig = KD(HA1, "%s:%s" % (nonce, HA2)) - elif qop == 'auth' or 'auth' in qop.split(','): - noncebit = "%s:%s:%s:%s:%s" % ( - nonce, ncvalue, cnonce, 'auth', HA2 - ) - respdig = KD(HA1, noncebit) - else: - # XXX handle auth-int. - return None - - self.last_nonce = nonce - - # XXX should the partial digests be encoded too? - base = 'username="%s", realm="%s", nonce="%s", uri="%s", ' \ - 'response="%s"' % (self.username, realm, nonce, path, respdig) - if opaque: - base += ', opaque="%s"' % opaque - if algorithm: - base += ', algorithm="%s"' % algorithm - if entdig: - base += ', digest="%s"' % entdig - if qop: - base += ', qop="auth", nc=%s, cnonce="%s"' % (ncvalue, cnonce) - - return 'Digest %s' % (base) - - def handle_redirect(self, r, **kwargs): - """Reset num_401_calls counter on redirects.""" - if r.is_redirect: - self.num_401_calls = 1 - - def handle_401(self, r, **kwargs): - """Takes the given response and tries digest-auth, if needed.""" - - if self.pos is not None: - # Rewind the file position indicator of the body to where - # it was to resend the request. - r.request.body.seek(self.pos) - num_401_calls = getattr(self, 'num_401_calls', 1) - s_auth = r.headers.get('www-authenticate', '') - - if 'digest' in s_auth.lower() and num_401_calls < 2: - - self.num_401_calls += 1 - pat = re.compile(r'digest ', flags=re.IGNORECASE) - self.chal = parse_dict_header(pat.sub('', s_auth, count=1)) - - # Consume content and release the original connection - # to allow our new request to reuse the same one. - r.content - r.raw.release_conn() - prep = r.request.copy() - extract_cookies_to_jar(prep._cookies, r.request, r.raw) - prep.prepare_cookies(prep._cookies) - - prep.headers['Authorization'] = self.build_digest_header( - prep.method, prep.url) - _r = r.connection.send(prep, **kwargs) - _r.history.append(r) - _r.request = prep - - return _r - - self.num_401_calls = 1 - return r - - def __call__(self, r): - # If we have a saved nonce, skip the 401 - if self.last_nonce: - r.headers['Authorization'] = self.build_digest_header(r.method, r.url) - try: - self.pos = r.body.tell() - except AttributeError: - # In the case of HTTPDigestAuth being reused and the body of - # the previous request was a file-like object, pos has the - # file position of the previous body. Ensure it's set to - # None. - self.pos = None - r.register_hook('response', self.handle_401) - r.register_hook('response', self.handle_redirect) - return r diff --git a/plugin.video.alfa/lib/requests/cacert.pem b/plugin.video.alfa/lib/requests/cacert.pem deleted file mode 100755 index 2522a7f9..00000000 --- a/plugin.video.alfa/lib/requests/cacert.pem +++ /dev/null @@ -1,5026 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -# Issuer: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc. -# Subject: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc. -# Label: "GTE CyberTrust Global Root" -# Serial: 421 -# MD5 Fingerprint: ca:3d:d3:68:f1:03:5c:d0:32:fa:b8:2b:59:e8:5a:db -# SHA1 Fingerprint: 97:81:79:50:d8:1c:96:70:cc:34:d8:09:cf:79:44:31:36:7e:f4:74 -# SHA256 Fingerprint: a5:31:25:18:8d:21:10:aa:96:4b:02:c7:b7:c6:da:32:03:17:08:94:e5:fb:71:ff:fb:66:67:d5:e6:81:0a:36 ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - -# Issuer: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division -# Subject: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division -# Label: "Thawte Server CA" -# Serial: 1 -# MD5 Fingerprint: c5:70:c4:a2:ed:53:78:0c:c8:10:53:81:64:cb:d0:1d -# SHA1 Fingerprint: 23:e5:94:94:51:95:f2:41:48:03:b4:d5:64:d2:a3:a3:f5:d8:8b:8c -# SHA256 Fingerprint: b4:41:0b:73:e2:e6:ea:ca:47:fb:c4:2f:8f:a4:01:8a:f4:38:1d:c5:4c:fa:a8:44:50:46:1e:ed:09:45:4d:e9 ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - -# Issuer: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division -# Subject: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division -# Label: "Thawte Premium Server CA" -# Serial: 1 -# MD5 Fingerprint: 06:9f:69:79:16:66:90:02:1b:8c:8c:a2:c3:07:6f:3a -# SHA1 Fingerprint: 62:7f:8d:78:27:65:63:99:d2:7d:7f:90:44:c9:fe:b3:f3:3e:fa:9a -# SHA256 Fingerprint: ab:70:36:36:5c:71:54:aa:29:c2:c2:9f:5d:41:91:16:3b:16:2a:22:25:01:13:57:d5:6d:07:ff:a7:bc:1f:72 ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - -# Issuer: O=Equifax OU=Equifax Secure Certificate Authority -# Subject: O=Equifax OU=Equifax Secure Certificate Authority -# Label: "Equifax Secure CA" -# Serial: 903804111 -# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4 -# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a -# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78 ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- - -# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority -# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority -# Label: "Verisign Class 3 Public Primary Certification Authority" -# Serial: 149843929435818692848040365716851702463 -# MD5 Fingerprint: 10:fc:63:5d:f6:26:3e:0d:f3:25:be:5f:79:cd:67:67 -# SHA1 Fingerprint: 74:2c:31:92:e6:07:e4:24:eb:45:49:54:2b:e1:bb:c5:3e:61:74:e2 -# SHA256 Fingerprint: e7:68:56:34:ef:ac:f6:9a:ce:93:9a:6b:25:5b:7b:4f:ab:ef:42:93:5b:50:a2:65:ac:b5:cb:60:27:e4:4e:70 ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do -lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc -AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k ------END CERTIFICATE----- - -# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network -# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network -# Label: "Verisign Class 3 Public Primary Certification Authority - G2" -# Serial: 167285380242319648451154478808036881606 -# MD5 Fingerprint: a2:33:9b:4c:74:78:73:d4:6c:e7:c1:f3:8d:cb:5c:e9 -# SHA1 Fingerprint: 85:37:1c:a6:e5:50:14:3d:ce:28:03:47:1b:de:3a:09:e8:f8:77:0f -# SHA256 Fingerprint: 83:ce:3c:12:29:68:8a:59:3d:48:5f:81:97:3c:0f:91:95:43:1e:da:37:cc:5e:36:43:0e:79:c7:a8:88:63:8b ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Label: "GlobalSign Root CA - R2" -# Serial: 4835703278459682885658125 -# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 -# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe -# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority -# Label: "ValiCert Class 1 VA" -# Serial: 1 -# MD5 Fingerprint: 65:58:ab:15:ad:57:6c:1e:a8:a7:b5:69:ac:bf:ff:eb -# SHA1 Fingerprint: e5:df:74:3c:b6:01:c4:9b:98:43:dc:ab:8c:e8:6a:81:10:9f:e4:8e -# SHA256 Fingerprint: f4:c1:49:55:1a:30:13:a3:5b:c7:bf:fe:17:a7:f3:44:9b:c1:ab:5b:5a:0a:e7:4b:06:c2:3b:90:00:4c:01:04 ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority -# Label: "ValiCert Class 2 VA" -# Serial: 1 -# MD5 Fingerprint: a9:23:75:9b:ba:49:36:6e:31:c2:db:f2:e7:66:ba:87 -# SHA1 Fingerprint: 31:7a:2a:d0:7f:2b:33:5e:f5:a1:c3:4e:4b:57:e8:b7:d8:f1:fc:a6 -# SHA256 Fingerprint: 58:d0:17:27:9c:d4:dc:63:ab:dd:b1:96:a6:c9:90:6c:30:c4:e0:87:83:ea:e8:c1:60:99:54:d6:93:55:59:6b ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority -# Label: "RSA Root Certificate 1" -# Serial: 1 -# MD5 Fingerprint: a2:6f:53:b7:ee:40:db:4a:68:e7:fa:18:d9:10:4b:72 -# SHA1 Fingerprint: 69:bd:8c:f4:9c:d3:00:fb:59:2e:17:93:ca:55:6a:f3:ec:aa:35:fb -# SHA256 Fingerprint: bc:23:f9:8a:31:3c:b9:2d:e3:bb:fc:3a:5a:9f:44:61:ac:39:49:4c:4a:e1:5a:9e:9d:f1:31:e9:9b:73:01:9a ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 3 Public Primary Certification Authority - G3" -# Serial: 206684696279472310254277870180966723415 -# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 -# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 -# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 4 Public Primary Certification Authority - G3" -# Serial: 314531972711909413743075096039378935511 -# MD5 Fingerprint: db:c8:f2:27:2e:b1:ea:6a:29:23:5d:fe:56:3e:33:df -# SHA1 Fingerprint: c8:ec:8c:87:92:69:cb:4b:ab:39:e9:8d:7e:57:67:f3:14:95:73:9d -# SHA256 Fingerprint: e3:89:36:0d:0f:db:ae:b3:d2:50:58:4b:47:30:31:4e:22:2f:39:c1:56:a0:20:14:4e:8d:96:05:61:79:15:06 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Secure Server CA" -# Serial: 927650371 -# MD5 Fingerprint: df:f2:80:73:cc:f1:e6:61:73:fc:f5:42:e9:c5:7c:ee -# SHA1 Fingerprint: 99:a6:9b:e6:1a:fe:88:6b:4d:2b:82:00:7c:b8:54:fc:31:7e:15:39 -# SHA256 Fingerprint: 62:f2:40:27:8c:56:4c:4d:d8:bf:7d:9d:4f:6f:36:6e:a8:94:d2:2f:5f:34:d9:89:a9:83:ac:ec:2f:ff:ed:50 ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946069240 -# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 -# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 -# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 -MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub -j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo -U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b -u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ -bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er -fF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc. -# Subject: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc. -# Label: "Equifax Secure Global eBusiness CA" -# Serial: 1 -# MD5 Fingerprint: 8f:5d:77:06:27:c4:98:3c:5b:93:78:e7:d7:7d:9b:cc -# SHA1 Fingerprint: 7e:78:4a:10:1c:82:65:cc:2d:e1:f1:6d:47:b4:40:ca:d9:0a:19:45 -# SHA256 Fingerprint: 5f:0b:62:ea:b5:e3:53:ea:65:21:65:16:58:fb:b6:53:59:f4:43:28:0a:4a:fb:d1:04:d7:7d:10:f9:f0:4c:07 ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - -# Issuer: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc. -# Subject: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc. -# Label: "Equifax Secure eBusiness CA 1" -# Serial: 4 -# MD5 Fingerprint: 64:9c:ef:2e:44:fc:c6:8f:52:07:d0:51:73:8f:cb:3d -# SHA1 Fingerprint: da:40:18:8b:91:89:a3:ed:ee:ae:da:97:fe:2f:9d:f5:b7:d1:8a:41 -# SHA256 Fingerprint: cf:56:ff:46:a4:a1:86:10:9d:d9:65:84:b5:ee:b5:8a:51:0c:42:75:b0:e5:f9:4f:40:bb:ae:86:5e:19:f6:73 ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Low-Value Services Root" -# Serial: 1 -# MD5 Fingerprint: 1e:42:95:02:33:92:6b:b9:5f:c0:7f:da:d6:b2:4b:fc -# SHA1 Fingerprint: cc:ab:0e:a0:4c:23:01:d6:69:7b:dd:37:9f:cd:12:eb:24:e3:94:9d -# SHA256 Fingerprint: 8c:72:09:27:9a:c0:4e:27:5e:16:d0:7f:d3:b7:75:e8:01:54:b5:96:80:46:e3:1f:52:dd:25:76:63:24:e9:a7 ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Label: "AddTrust External Root" -# Serial: 1 -# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f -# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 -# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Public Services Root" -# Serial: 1 -# MD5 Fingerprint: c1:62:3e:23:c5:82:73:9c:03:59:4b:2b:e9:77:49:7f -# SHA1 Fingerprint: 2a:b6:28:48:5e:78:fb:f3:ad:9e:79:10:dd:6b:df:99:72:2c:96:e5 -# SHA256 Fingerprint: 07:91:ca:07:49:b2:07:82:aa:d3:c7:d7:bd:0c:df:c9:48:58:35:84:3e:b2:d7:99:60:09:ce:43:ab:6c:69:27 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Qualified Certificates Root" -# Serial: 1 -# MD5 Fingerprint: 27:ec:39:47:cd:da:5a:af:e2:9a:01:65:21:a9:4c:bb -# SHA1 Fingerprint: 4d:23:78:ec:91:95:39:b5:00:7f:75:8f:03:3b:21:1e:c5:4d:8b:cf -# SHA256 Fingerprint: 80:95:21:08:05:db:4b:bc:35:5e:44:28:d8:fd:6e:c2:cd:e3:ab:5f:b9:7a:99:42:98:8e:b8:f4:dc:d0:60:16 ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no -xqE= ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: O=RSA Security Inc OU=RSA Security 2048 V3 -# Subject: O=RSA Security Inc OU=RSA Security 2048 V3 -# Label: "RSA Security 2048 v3" -# Serial: 13297492616345471454730593562152402946 -# MD5 Fingerprint: 77:0d:19:b1:21:fd:00:42:9c:3e:0c:a5:dd:0b:02:8e -# SHA1 Fingerprint: 25:01:90:19:cf:fb:d9:99:1c:b7:68:25:74:8d:94:5f:30:93:95:42 -# SHA256 Fingerprint: af:8b:67:62:a1:e5:28:22:81:61:a9:5d:5c:55:9e:e2:66:27:8f:75:d7:9e:83:01:89:a5:03:50:6a:bd:6b:4c ------BEGIN CERTIFICATE----- -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6 -MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp -dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX -BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy -MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp -eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg -/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl -wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh -AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2 -PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu -AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR -MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc -HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/ -Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+ -f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO -rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch -6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3 -7CAFYd4= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. -# Label: "GeoTrust Global CA" -# Serial: 144470 -# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 -# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 -# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Global CA 2" -# Serial: 1 -# MD5 Fingerprint: 0e:40:a7:6c:de:03:5d:8f:d1:0f:e4:d1:8d:f9:6c:a9 -# SHA1 Fingerprint: a9:e9:78:08:14:37:58:88:f2:05:19:b0:6d:2b:0d:2b:60:16:90:7d -# SHA256 Fingerprint: ca:2d:82:a0:86:77:07:2f:8a:b6:76:4f:f0:35:67:6c:fe:3e:5e:32:5e:01:21:72:df:3f:92:09:6d:b7:9b:85 ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs -IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg -R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A -PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 -Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL -TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL -5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 -S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe -2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap -EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td -EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv -/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN -A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 -abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF -I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz -4iIprn2DQKi6bA== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Label: "GeoTrust Universal CA" -# Serial: 1 -# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 -# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 -# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Universal CA 2" -# Serial: 1 -# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 -# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 -# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -# Issuer: CN=America Online Root Certification Authority 1 O=America Online Inc. -# Subject: CN=America Online Root Certification Authority 1 O=America Online Inc. -# Label: "America Online Root Certification Authority 1" -# Serial: 1 -# MD5 Fingerprint: 14:f1:08:ad:9d:fa:64:e2:89:e7:1c:cf:a8:ad:7d:5e -# SHA1 Fingerprint: 39:21:c1:15:c1:5d:0e:ca:5c:cb:5b:c4:f0:7d:21:d8:05:0b:56:6a -# SHA256 Fingerprint: 77:40:73:12:c6:3a:15:3d:5b:c0:0b:4e:51:75:9c:df:da:c2:37:dc:2a:33:b6:79:46:e9:8e:9b:fa:68:0a:e3 ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk -hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym -1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW -OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb -2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko -O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU -AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF -Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb -LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir -oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C -MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- - -# Issuer: CN=America Online Root Certification Authority 2 O=America Online Inc. -# Subject: CN=America Online Root Certification Authority 2 O=America Online Inc. -# Label: "America Online Root Certification Authority 2" -# Serial: 1 -# MD5 Fingerprint: d6:ed:3c:ca:e2:66:0f:af:10:43:0d:77:9b:04:09:bf -# SHA1 Fingerprint: 85:b5:ff:67:9b:0c:79:96:1f:c8:6e:44:22:00:46:13:db:17:92:84 -# SHA256 Fingerprint: 7d:3b:46:5a:60:14:e5:26:c0:af:fc:ee:21:27:d2:31:17:27:ad:81:1c:26:84:2d:00:6a:f3:73:06:cc:80:bd ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC -206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci -KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 -JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 -BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e -Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B -PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 -Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq -Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ -o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 -+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj -FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn -xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 -LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc -obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 -CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe -IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA -DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F -AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX -Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb -AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl -Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw -RY8mkaKO/qk= ------END CERTIFICATE----- - -# Issuer: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association -# Subject: CN=Visa eCommerce Root O=VISA OU=Visa International Service Association -# Label: "Visa eCommerce Root" -# Serial: 25952180776285836048024890241505565794 -# MD5 Fingerprint: fc:11:b8:d8:08:93:30:00:6d:23:f9:7e:eb:52:1e:02 -# SHA1 Fingerprint: 70:17:9b:86:8c:00:a4:fa:60:91:52:22:3f:9f:3e:32:bd:e0:05:62 -# SHA256 Fingerprint: 69:fa:c9:bd:55:fb:0a:c7:8d:53:bb:ee:5c:f1:d5:97:98:9f:d0:aa:ab:20:a2:51:51:bd:f1:73:3e:e7:d1:22 ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr -MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl -cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw -CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h -dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l -cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h -2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E -lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV -ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq -299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t -vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL -dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF -AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR -zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 -LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd -7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw -++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -# Issuer: CN=Certum CA O=Unizeto Sp. z o.o. -# Subject: CN=Certum CA O=Unizeto Sp. z o.o. -# Label: "Certum Root CA" -# Serial: 65568 -# MD5 Fingerprint: 2c:8f:9f:66:1d:18:90:b1:47:26:9d:8e:86:82:8c:a9 -# SHA1 Fingerprint: 62:52:dc:40:f7:11:43:a2:2f:de:9e:f7:34:8e:06:42:51:b1:81:18 -# SHA256 Fingerprint: d8:e0:fe:bc:1d:b2:e3:8d:00:94:0f:37:d2:7d:41:34:4d:99:3e:73:4b:99:d5:65:6d:97:78:d4:d8:14:36:24 ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM -MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD -QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E -jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo -ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI -ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu -Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg -AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 -HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA -uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa -TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg -xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q -CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x -O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs -6GAqm4VKQPNriiTsBhYscw== ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=Secure Certificate Services O=Comodo CA Limited -# Subject: CN=Secure Certificate Services O=Comodo CA Limited -# Label: "Comodo Secure Services root" -# Serial: 1 -# MD5 Fingerprint: d3:d9:bd:ae:9f:ac:67:24:b3:c8:1b:52:e1:b9:a9:bd -# SHA1 Fingerprint: 4a:65:d5:f4:1d:ef:39:b8:b8:90:4a:4a:d3:64:81:33:cf:c7:a1:d1 -# SHA256 Fingerprint: bd:81:ce:3b:4f:65:91:d1:1a:67:b5:fc:7a:47:fd:ef:25:52:1b:f9:aa:4e:18:b9:e3:df:2e:34:a7:80:3b:e8 ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= ------END CERTIFICATE----- - -# Issuer: CN=Trusted Certificate Services O=Comodo CA Limited -# Subject: CN=Trusted Certificate Services O=Comodo CA Limited -# Label: "Comodo Trusted Services root" -# Serial: 1 -# MD5 Fingerprint: 91:1b:3f:6e:cd:9e:ab:ee:07:fe:1f:71:d2:b3:61:27 -# SHA1 Fingerprint: e1:9f:e3:0e:8b:84:60:9e:80:9b:17:0d:72:a8:c5:ba:6e:14:09:bd -# SHA256 Fingerprint: 3f:06:e5:56:81:d4:96:f5:be:16:9e:b5:38:9f:9f:2b:8f:f6:1e:17:08:df:68:81:72:48:49:cd:5d:27:cb:69 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority -# Subject: CN=QuoVadis Root Certification Authority O=QuoVadis Limited OU=Root Certification Authority -# Label: "QuoVadis Root CA" -# Serial: 985026699 -# MD5 Fingerprint: 27:de:36:fe:72:b7:00:03:00:9d:f4:f0:1e:6c:04:24 -# SHA1 Fingerprint: de:3f:40:bd:50:93:d3:9b:6c:60:f6:da:bc:07:62:01:00:89:76:c9 -# SHA256 Fingerprint: a4:5e:de:3b:bb:f0:9c:8a:e1:5c:72:ef:c0:72:68:d6:93:a2:1c:99:6f:d5:1e:67:ca:07:94:60:fd:6d:88:73 ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz -MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw -IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR -dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp -li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D -rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ -WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug -F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU -xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC -Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv -dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw -ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl -IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh -c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy -ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI -KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T -KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq -y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p -dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD -VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL -MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk -fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 -7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R -cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y -mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW -xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK -SnQ2+Q== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust.net OU=Security Communication RootCA1 -# Subject: O=SECOM Trust.net OU=Security Communication RootCA1 -# Label: "Security Communication Root CA" -# Serial: 0 -# MD5 Fingerprint: f1:bc:63:6a:54:e0:b5:27:f5:cd:e7:1a:e3:4d:6e:4a -# SHA1 Fingerprint: 36:b1:2b:49:f9:81:9e:d7:4c:9e:bc:38:0f:c6:56:8f:5d:ac:b2:f7 -# SHA256 Fingerprint: e7:5e:72:ed:9f:56:0e:ec:6e:b4:80:00:73:a4:3f:c3:ad:19:19:5a:39:22:82:01:78:95:97:4a:99:02:6b:6c ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY -MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t -dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 -WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD -VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 -9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ -DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 -Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N -QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ -xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G -A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG -kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr -Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 -Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU -JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot -RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== ------END CERTIFICATE----- - -# Issuer: CN=Sonera Class2 CA O=Sonera -# Subject: CN=Sonera Class2 CA O=Sonera -# Label: "Sonera Class 2 Root CA" -# Serial: 29 -# MD5 Fingerprint: a3:ec:75:0f:2e:88:df:fa:48:01:4e:0b:5c:48:6f:fb -# SHA1 Fingerprint: 37:f7:6d:e6:07:7c:90:c5:b1:3e:93:1a:b7:41:10:b4:f2:e4:9a:27 -# SHA256 Fingerprint: 79:08:b4:03:14:c1:38:10:0b:51:8d:07:35:80:7f:fb:fc:f8:51:8a:00:95:33:71:05:ba:38:6b:15:3d:d9:27 ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP -MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx -MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV -BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o -Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt -5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s -3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej -vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu -8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw -DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG -MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil -zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ -3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD -FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 -Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 -ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden Root CA O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden Root CA O=Staat der Nederlanden -# Label: "Staat der Nederlanden Root CA" -# Serial: 10000010 -# MD5 Fingerprint: 60:84:7c:5a:ce:db:0c:d4:cb:a7:e9:fe:02:c6:a9:c0 -# SHA1 Fingerprint: 10:1d:fa:3f:d5:0b:cb:bb:9b:b5:60:0c:19:55:a4:1a:f4:73:3a:04 -# SHA256 Fingerprint: d4:1d:82:9e:8c:16:59:82:2a:f9:3f:ce:62:bf:fc:de:26:4f:c8:4e:8b:95:0c:5f:f2:75:d0:52:35:46:95:a3 ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO -TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy -MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk -ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn -ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71 -9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO -hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U -tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o -BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh -SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww -OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv -cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA -7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k -/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm -eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6 -u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy -7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR -iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== ------END CERTIFICATE----- - -# Issuer: O=TDC Internet OU=TDC Internet Root CA -# Subject: O=TDC Internet OU=TDC Internet Root CA -# Label: "TDC Internet Root CA" -# Serial: 986490188 -# MD5 Fingerprint: 91:f4:03:55:20:a1:f8:63:2c:62:de:ac:fb:61:1c:8e -# SHA1 Fingerprint: 21:fc:bd:8e:7f:6c:af:05:1b:d1:b3:43:ec:a8:e7:61:47:f2:0f:8a -# SHA256 Fingerprint: 48:98:c6:88:8c:0c:ff:b0:d3:e3:1a:ca:8a:37:d4:e3:51:5f:f7:46:d0:26:35:d8:66:46:cf:a0:a3:18:5a:e7 ------BEGIN CERTIFICATE----- -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE -SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg -Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV -BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl -cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA -vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu -Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a -0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1 -4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN -eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD -R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG -A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu -dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME -Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3 -WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw -HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ -KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO -Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX -wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89 -9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0 -jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38 -aQNiuJkFBT1reBK9sG9l ------END CERTIFICATE----- - -# Issuer: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com -# Subject: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com -# Label: "UTN DATACorp SGC Root CA" -# Serial: 91374294542884689855167577680241077609 -# MD5 Fingerprint: b3:a5:3e:77:21:6d:ac:4a:c0:c9:fb:d5:41:3d:ca:06 -# SHA1 Fingerprint: 58:11:9f:0e:12:82:87:ea:50:fd:d9:87:45:6f:4f:78:dc:fa:d6:d4 -# SHA256 Fingerprint: 85:fb:2f:91:dd:12:27:5a:01:45:b6:36:53:4f:84:02:4a:d6:8b:69:b8:ee:88:68:4f:f7:11:37:58:05:b3:48 ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 -mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - -# Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com -# Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com -# Label: "UTN USERFirst Hardware Root CA" -# Serial: 91374294542884704022267039221184531197 -# MD5 Fingerprint: 4c:56:41:e5:0d:bb:2b:e8:ca:a3:ed:18:08:ad:43:39 -# SHA1 Fingerprint: 04:83:ed:33:99:ac:36:08:05:87:22:ed:bc:5e:46:00:e3:be:f9:d7 -# SHA256 Fingerprint: 6e:a5:47:41:d0:04:66:7e:ed:1b:48:16:63:4a:a3:a7:9e:6e:4b:96:95:0f:82:79:da:fc:8d:9b:d8:81:21:37 ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== ------END CERTIFICATE----- - -# Issuer: CN=Chambers of Commerce Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org -# Subject: CN=Chambers of Commerce Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org -# Label: "Camerfirma Chambers of Commerce Root" -# Serial: 0 -# MD5 Fingerprint: b0:01:ee:14:d9:af:29:18:94:76:8e:f1:69:33:2a:84 -# SHA1 Fingerprint: 6e:3a:55:a4:19:0c:19:5c:93:84:3c:c0:db:72:2e:31:30:61:f0:b1 -# SHA256 Fingerprint: 0c:25:8a:12:a5:67:4a:ef:25:f2:8b:a7:dc:fa:ec:ee:a3:48:e5:41:e6:f5:cc:4e:e6:3b:71:b3:61:60:6a:c3 ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg -b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa -MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB -ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw -IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B -AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb -unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d -BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq -7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 -0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX -roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG -A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j -aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p -26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA -BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud -EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN -BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB -AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd -p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi -1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc -XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 -eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu -tGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- - -# Issuer: CN=Global Chambersign Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org -# Subject: CN=Global Chambersign Root O=AC Camerfirma SA CIF A82743287 OU=http://www.chambersign.org -# Label: "Camerfirma Global Chambersign Root" -# Serial: 0 -# MD5 Fingerprint: c5:e6:7b:bf:06:d0:4f:43:ed:c4:7a:65:8a:fb:6b:19 -# SHA1 Fingerprint: 33:9b:6b:14:50:24:9b:55:7a:01:87:72:84:d9:e0:2f:c3:d2:d8:e9 -# SHA256 Fingerprint: ef:3c:b4:17:fc:8e:bf:6f:97:87:6c:9e:4e:ce:39:de:1e:a5:fe:64:91:41:d1:02:8b:7d:11:c0:b2:29:8c:ed ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn -MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL -ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo -YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9 -MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy -NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G -A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA -A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0 -Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s -QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV -eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795 -B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh -z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T -AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i -ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w -TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH -MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD -VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE -VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B -AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM -bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi -ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG -VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c -ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/ -AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- - -# Issuer: CN=NetLock Kozjegyzoi (Class A) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok -# Subject: CN=NetLock Kozjegyzoi (Class A) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok -# Label: "NetLock Notary (Class A) Root" -# Serial: 259 -# MD5 Fingerprint: 86:38:6d:5e:49:63:6c:85:5c:db:6d:dc:94:b7:d0:f7 -# SHA1 Fingerprint: ac:ed:5f:65:53:fd:25:ce:01:5f:1f:7a:48:3b:6a:74:9f:61:78:c6 -# SHA256 Fingerprint: 7f:12:cd:5f:7e:5e:29:0e:c7:d8:51:79:d5:b7:2c:20:a5:be:75:08:ff:db:5b:f8:1a:b9:68:4a:7f:c9:f6:67 ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV -MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe -TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0 -dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0 -N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC -dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu -MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL -b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD -zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi -3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8 -WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY -Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi -NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC -ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4 -QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0 -YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz -aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm -ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg -ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs -amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv -IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3 -Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6 -ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1 -YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg -dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs -b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G -CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO -xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP -0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ -QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk -f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK -8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI ------END CERTIFICATE----- - -# Issuer: CN=NetLock Uzleti (Class B) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok -# Subject: CN=NetLock Uzleti (Class B) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok -# Label: "NetLock Business (Class B) Root" -# Serial: 105 -# MD5 Fingerprint: 39:16:aa:b9:6a:41:e1:14:69:df:9e:6c:3b:72:dc:b6 -# SHA1 Fingerprint: 87:9f:4b:ee:05:df:98:58:3b:e3:60:d6:33:e7:0d:3f:fe:98:71:af -# SHA256 Fingerprint: 39:df:7b:68:2b:7b:93:8f:84:71:54:81:cc:de:8d:60:d8:f2:2e:c5:98:87:7d:0a:aa:c1:2b:59:18:2b:03:12 ------BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD -EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05 -OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G -A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh -Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l -dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG -SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK -gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX -iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc -Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E -BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G -SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu -b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh -bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv -Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln -aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0 -IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph -biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo -ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP -UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj -YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA -bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06 -sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa -n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS -NitjrFgBazMpUIaD8QFI ------END CERTIFICATE----- - -# Issuer: CN=NetLock Expressz (Class C) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok -# Subject: CN=NetLock Expressz (Class C) Tanusitvanykiado O=NetLock Halozatbiztonsagi Kft. OU=Tanusitvanykiadok -# Label: "NetLock Express (Class C) Root" -# Serial: 104 -# MD5 Fingerprint: 4f:eb:f1:f0:70:c2:80:63:5d:58:9f:da:12:3c:a9:c4 -# SHA1 Fingerprint: e3:92:51:2f:0a:cf:f5:05:df:f6:de:06:7f:75:37:e1:65:ea:57:4b -# SHA256 Fingerprint: 0b:5e:ed:4e:84:64:03:cf:55:e0:65:84:84:40:ed:2a:82:75:8b:f5:b9:aa:1f:25:3d:46:13:cf:a0:80:ff:3f ------BEGIN CERTIFICATE----- -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx -ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0 -b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD -EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X -DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw -DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u -c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr -TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN -BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA -OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC -2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW -RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P -AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW -ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0 -YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz -b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO -ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB -IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs -b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s -YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg -a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g -SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0 -aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg -YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg -Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY -ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g -pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4 -Fp1hBWeAyNDYpQcCNJgEjTME1A== ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Label: "StartCom Certification Authority" -# Serial: 1 -# MD5 Fingerprint: 22:4d:8f:8a:fc:f7:35:c2:bb:57:34:90:7b:8b:22:16 -# SHA1 Fingerprint: 3e:2b:f7:f2:03:1b:96:f3:8c:e6:c4:d8:a8:5d:3e:2d:58:47:6a:0f -# SHA256 Fingerprint: c7:66:a9:be:f2:d4:07:1c:86:3a:31:aa:49:20:e8:13:b2:d1:98:60:8c:b7:b7:cf:e2:11:43:b8:36:df:09:ea ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j -ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js -LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM -BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy -dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh -cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh -YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg -dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp -bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ -YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT -TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ -9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 -jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW -FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz -ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 -ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L -EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu -L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC -O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V -um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh -NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= ------END CERTIFICATE----- - -# Issuer: O=Government Root Certification Authority -# Subject: O=Government Root Certification Authority -# Label: "Taiwan GRCA" -# Serial: 42023070807708724159991140556527066870 -# MD5 Fingerprint: 37:85:44:53:32:45:1f:20:f0:f3:95:e1:25:c4:43:4e -# SHA1 Fingerprint: f4:8b:11:bf:de:ab:be:94:54:20:71:e6:41:de:6b:be:88:2b:40:b9 -# SHA256 Fingerprint: 76:00:29:5e:ef:e8:5b:9e:1f:d6:24:db:76:06:2a:aa:ae:59:81:8a:54:d2:77:4c:d4:c0:b2:c0:11:31:e1:b3 ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/ -MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow -PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR -IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q -gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy -yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts -F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2 -jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx -ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC -VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK -YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH -EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN -Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud -DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE -MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK -UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf -qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK -ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE -JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7 -hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1 -EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm -nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX -udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz -ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe -LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl -pYYsfPQS ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Firmaprofesional Root CA" -# Serial: 1 -# MD5 Fingerprint: 11:92:79:40:3c:b1:83:40:e5:ab:66:4a:67:92:80:df -# SHA1 Fingerprint: a9:62:8f:4b:98:a9:1b:48:35:ba:d2:c1:46:32:86:bb:66:64:6a:8c -# SHA256 Fingerprint: c1:cf:0b:52:09:64:35:e3:f1:b7:1d:aa:ec:45:5a:23:11:c8:40:4f:55:83:a9:e2:13:c6:9d:85:7d:94:33:05 ------BEGIN CERTIFICATE----- -MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx -IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1 -dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w -HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx -IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1 -dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u -Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY -rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z -hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay -BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL -iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb -AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv -bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0 -MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E -FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n -VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq -u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m -hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl -ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp -QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5 -quGnM/b9Sh/22WA= ------END CERTIFICATE----- - -# Issuer: CN=Swisscom Root CA 1 O=Swisscom OU=Digital Certificate Services -# Subject: CN=Swisscom Root CA 1 O=Swisscom OU=Digital Certificate Services -# Label: "Swisscom Root CA 1" -# Serial: 122348795730808398873664200247279986742 -# MD5 Fingerprint: f8:38:7c:77:88:df:2c:16:68:2e:c2:e2:52:4b:b8:f9 -# SHA1 Fingerprint: 5f:3a:fc:0a:8b:64:f6:86:67:34:74:df:7e:a9:a2:fe:f9:fa:7a:51 -# SHA256 Fingerprint: 21:db:20:12:36:60:bb:2e:d4:18:20:5d:a1:1e:e7:a8:5a:65:e2:bc:6e:55:b5:af:7e:78:99:c8:a2:66:d9:2e ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk -MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 -YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg -Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT -AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp -Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9 -m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih -FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/ -TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F -EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco -kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu -HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF -vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo -19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC -L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW -bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX -JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw -FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j -BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc -K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf -ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik -Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB -sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e -3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR -ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip -mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH -b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf -rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms -hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y -zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6 -MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=Class 2 Primary CA O=Certplus -# Subject: CN=Class 2 Primary CA O=Certplus -# Label: "Certplus Class 2 Primary CA" -# Serial: 177770208045934040241468760488327595043 -# MD5 Fingerprint: 88:2c:8c:52:b8:a2:3c:f3:f7:bb:03:ea:ae:ac:42:0b -# SHA1 Fingerprint: 74:20:74:41:72:9c:dd:92:ec:79:31:d8:23:10:8d:c2:81:92:e2:bb -# SHA256 Fingerprint: 0f:99:3c:8a:ef:97:ba:af:56:87:14:0e:d5:9a:d1:82:1b:b4:af:ac:f0:aa:9a:58:b5:d5:7a:33:8a:3a:fb:cb ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw -PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz -cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 -MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz -IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ -ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR -VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL -kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd -EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas -H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 -HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud -DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 -QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu -Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ -AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 -yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR -FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA -ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB -kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co. -# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co. -# Label: "DST Root CA X3" -# Serial: 91299735575339953335919266965803778155 -# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5 -# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13 -# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39 ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ -MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT -DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow -PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD -Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O -rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq -OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b -xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw -7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD -aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG -SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 -ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr -AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz -R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 -JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo -Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -# Issuer: CN=DST ACES CA X6 O=Digital Signature Trust OU=DST ACES -# Subject: CN=DST ACES CA X6 O=Digital Signature Trust OU=DST ACES -# Label: "DST ACES CA X6" -# Serial: 17771143917277623872238992636097467865 -# MD5 Fingerprint: 21:d8:4c:82:2b:99:09:33:a2:eb:14:24:8d:8e:5f:e8 -# SHA1 Fingerprint: 40:54:da:6f:1c:3f:40:74:ac:ed:0f:ec:cd:db:79:d1:53:fb:90:1d -# SHA256 Fingerprint: 76:7c:95:5a:76:41:2c:89:af:68:8e:90:a1:c7:0f:55:6c:fd:6b:60:25:db:ea:10:41:6d:7e:b6:83:1f:8c:40 ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx -ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w -MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD -VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx -FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu -ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7 -gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH -fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a -ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT -ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF -MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk -c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto -dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt -aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI -hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk -QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/ -h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR -rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2 -9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis= ------END CERTIFICATE----- - -# Issuer: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=(c) 2005 TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. -# Subject: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=(c) 2005 TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. -# Label: "TURKTRUST Certificate Services Provider Root 1" -# Serial: 1 -# MD5 Fingerprint: f1:6a:22:18:c9:cd:df:ce:82:1d:1d:b7:78:5c:a9:a5 -# SHA1 Fingerprint: 79:98:a3:08:e1:4d:65:85:e6:c2:1e:15:3a:71:9f:ba:5a:d3:4a:d9 -# SHA256 Fingerprint: 44:04:e3:3b:5e:14:0d:cf:99:80:51:fd:fc:80:28:c7:c8:16:15:c5:ee:73:7b:11:1b:58:82:33:a9:b5:35:a0 ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg -MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8 -dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz -MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy -dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD -VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg -xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu -xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7 -XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k -heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J -YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C -urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1 -JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51 -b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV -9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7 -kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh -fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA -aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS -RGQDJereW26fyfJOrN3H ------END CERTIFICATE----- - -# Issuer: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005 -# Subject: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Kasım 2005 -# Label: "TURKTRUST Certificate Services Provider Root 2" -# Serial: 1 -# MD5 Fingerprint: 37:a5:6e:d4:b1:25:84:97:b7:fd:56:15:7a:f9:a2:00 -# SHA1 Fingerprint: b4:35:d4:e1:11:9d:1c:66:90:a7:49:eb:b3:94:bd:63:7b:a7:82:b7 -# SHA256 Fingerprint: c4:70:cf:54:7e:23:02:b9:77:fb:29:dd:71:a8:9a:7b:6c:1f:60:77:7b:03:29:f5:60:17:f3:28:bf:4f:6b:e6 ------BEGIN CERTIFICATE----- -MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS -S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg -SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3 -WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv -bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU -UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw -bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe -LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef -J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh -R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ -Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX -JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p -zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S -Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq -ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 -Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz -gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH -uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS -y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI= ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Label: "SwissSign Silver CA - G2" -# Serial: 5700383053117599563 -# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 -# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb -# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Label: "GeoTrust Primary Certification Authority" -# Serial: 32798226551256963324313806436981982369 -# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf -# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 -# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA" -# Serial: 69529181992039203566298953787712940909 -# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 -# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 -# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" -# Serial: 33037644167568058970164719475676101450 -# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c -# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 -# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Label: "Network Solutions Certificate Authority" -# Serial: 116697915152937497490437556386812487904 -# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e -# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce -# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -# Issuer: CN=WellsSecure Public Root Certificate Authority O=Wells Fargo WellsSecure OU=Wells Fargo Bank NA -# Subject: CN=WellsSecure Public Root Certificate Authority O=Wells Fargo WellsSecure OU=Wells Fargo Bank NA -# Label: "WellsSecure Public Root Certificate Authority" -# Serial: 1 -# MD5 Fingerprint: 15:ac:a5:c2:92:2d:79:bc:e8:7f:cb:67:ed:02:cf:36 -# SHA1 Fingerprint: e7:b4:f6:9d:61:ec:90:69:db:7e:90:a7:40:1a:3c:f4:7d:4f:e8:ee -# SHA256 Fingerprint: a7:12:72:ae:aa:a3:cf:e8:72:7f:7f:b3:9f:0f:b3:d1:e5:42:6e:90:60:b0:6e:e6:f1:3e:9a:3c:58:33:cd:43 ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx -IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs -cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v -dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0 -MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl -bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD -DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r -WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU -Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs -HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj -z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf -SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl -AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG -KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P -AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j -BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC -VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX -ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB -ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd -/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB -A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn -k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9 -iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv -2G0xffX8oRAHh84vWdw+WNs= ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=IGC/A O=PM/SGDN OU=DCSSI -# Subject: CN=IGC/A O=PM/SGDN OU=DCSSI -# Label: "IGC/A" -# Serial: 245102874772 -# MD5 Fingerprint: 0c:7f:dd:6a:f4:2a:b9:c8:9b:bd:20:7e:a9:db:5c:37 -# SHA1 Fingerprint: 60:d6:89:74:b5:c2:65:9e:8a:0f:c1:88:7c:88:d2:46:69:1b:18:2c -# SHA256 Fingerprint: b9:be:a7:86:0a:96:2e:a3:61:1d:ab:97:ab:6d:a3:e2:1c:10:68:b9:7d:55:57:5e:d0:e1:12:79:c1:1c:89:32 ------BEGIN CERTIFICATE----- -MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT -AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ -TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG -9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw -MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM -BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO -MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2 -LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI -s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2 -xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4 -u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b -F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx -Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd -PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV -HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx -NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF -AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ -L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY -YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg -Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a -NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R -0982gaEbeC9xs/FZTEYYKKuF0mBWWg== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication EV RootCA1 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication EV RootCA1 -# Label: "Security Communication EV RootCA1" -# Serial: 0 -# MD5 Fingerprint: 22:2d:a6:01:ea:7c:0a:f7:f0:6c:56:43:3f:77:76:d3 -# SHA1 Fingerprint: fe:b8:c4:32:dc:f9:76:9a:ce:ae:3d:d8:90:8f:fd:28:86:65:64:7d -# SHA256 Fingerprint: a2:2d:ba:68:1e:97:37:6e:2d:39:7d:72:8a:ae:3a:9b:62:96:b9:fd:ba:60:bc:2e:11:f6:47:f2:c6:75:fb:37 ------BEGIN CERTIFICATE----- -MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz -MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N -IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11 -bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE -RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO -zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5 -bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF -MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1 -VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC -OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G -CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW -tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ -q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb -EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+ -Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O -VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GA CA O=WISeKey OU=Copyright (c) 2005/OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GA CA" -# Serial: 86718877871133159090080555911823548314 -# MD5 Fingerprint: bc:6c:51:33:a7:e9:d3:66:63:54:15:72:1b:21:92:93 -# SHA1 Fingerprint: 59:22:a1:e1:5a:ea:16:35:21:f8:98:39:6a:46:46:b0:44:1b:0f:a9 -# SHA256 Fingerprint: 41:c9:23:86:6a:b4:ca:d6:b7:ad:57:80:81:58:2e:02:07:97:a6:cb:df:4f:ff:78:ce:83:96:b3:89:37:d7:f5 ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB -ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly -aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w -NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G -A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX -SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR -VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 -w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF -mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg -4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 -4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw -EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx -SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 -ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 -vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi -Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ -/L7fCg0= ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA O=Microsec Ltd. OU=e-Szigno CA -# Subject: CN=Microsec e-Szigno Root CA O=Microsec Ltd. OU=e-Szigno CA -# Label: "Microsec e-Szigno Root CA" -# Serial: 272122594155480254301341951808045322001 -# MD5 Fingerprint: f0:96:b6:2f:c5:10:d5:67:8e:83:25:32:e8:5e:2e:e5 -# SHA1 Fingerprint: 23:88:c9:d3:71:cc:9e:96:3d:ff:7d:3c:a7:ce:fc:d6:25:ec:19:0d -# SHA256 Fingerprint: 32:7a:3d:76:1a:ba:de:a0:34:eb:99:84:06:27:5c:b1:a4:77:6e:fd:ae:2f:df:6d:01:68:ea:1c:4f:55:67:d0 ------BEGIN CERTIFICATE----- -MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAw -cjELMAkGA1UEBhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNy -b3NlYyBMdGQuMRQwEgYDVQQLEwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9z -ZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0MDYxMjI4NDRaFw0xNzA0MDYxMjI4 -NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEWMBQGA1UEChMN -TWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMTGU1p -Y3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2u -uO/TEdyB5s87lozWbxXGd36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+ -LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/NoqdNAoI/gqyFxuEPkEeZlApxcpMqyabA -vjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjcQR/Ji3HWVBTji1R4P770 -Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJPqW+jqpx -62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcB -AQRbMFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3Aw -LQYIKwYBBQUHMAKGIWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAP -BgNVHRMBAf8EBTADAQH/MIIBcwYDVR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIB -AQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3LmUtc3ppZ25vLmh1L1NaU1ov -MIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0AdAB2AOEAbgB5 -ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn -AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABT -AHoAbwBsAGcA4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABh -ACAAcwB6AGUAcgBpAG4AdAAgAGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABo -AHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMAegBpAGcAbgBvAC4AaAB1AC8AUwBa -AFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6Ly93d3cuZS1zemln -bm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NOPU1p -Y3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxP -PU1pY3Jvc2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZv -Y2F0aW9uTGlzdDtiaW5hcnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuB -EGluZm9AZS1zemlnbm8uaHWkdzB1MSMwIQYDVQQDDBpNaWNyb3NlYyBlLVN6aWdu -w7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhTWjEWMBQGA1UEChMNTWlj -cm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhVMIGsBgNV -HSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJI -VTERMA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDAS -BgNVBAsTC2UtU3ppZ25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBS -b290IENBghEAzLjnv04pGv2i3GalHCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS -8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMTnGZjWS7KXHAM/IO8VbH0jgds -ZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FEaGAHQzAxQmHl -7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a -86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfR -hUZLphK3dehKyVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/ -MPMMNz7UwiiAc7EBt51alhQBS6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: CN=AC Raíz Certicámara S.A. O=Sociedad Cameral de Certificación Digital - Certicámara S.A. -# Subject: CN=AC Raíz Certicámara S.A. O=Sociedad Cameral de Certificación Digital - Certicámara S.A. -# Label: "AC Ra\xC3\xADz Certic\xC3\xA1mara S.A." -# Serial: 38908203973182606954752843738508300 -# MD5 Fingerprint: 93:2a:3e:f6:fd:23:69:0d:71:20:d4:2b:47:99:2b:a6 -# SHA1 Fingerprint: cb:a1:c5:f8:b0:e3:5e:b8:b9:45:12:d3:f9:34:a2:e9:06:10:d3:36 -# SHA256 Fingerprint: a6:c5:1e:0d:a5:ca:0a:93:09:d2:e4:c0:e4:0c:2a:f9:10:7a:ae:82:03:85:7f:e1:98:e3:e7:69:e3:43:08:5c ------BEGIN CERTIFICATE----- -MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsx -CzAJBgNVBAYTAkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRp -ZmljYWNpw7NuIERpZ2l0YWwgLSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwa -QUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4wHhcNMDYxMTI3MjA0NjI5WhcNMzAw -NDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+U29jaWVkYWQgQ2Ft -ZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJhIFMu -QS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkq -hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeG -qentLhM0R7LQcNzJPNCNyu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzL -fDe3fezTf3MZsGqy2IiKLUV0qPezuMDU2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQ -Y5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU34ojC2I+GdV75LaeHM/J4 -Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP2yYe68yQ -54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+b -MMCm8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48j -ilSH5L887uvDdUhfHjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++Ej -YfDIJss2yKHzMI+ko6Kh3VOz3vCaMh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/zt -A/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK5lw1omdMEWux+IBkAC1vImHF -rEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1bczwmPS9KvqfJ -pxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCB -lTCBkgYEVR0gADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFy -YS5jb20vZHBjLzBaBggrBgEFBQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW50 -7WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2UgcHVlZGVuIGVuY29udHJhciBlbiBs -YSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEfAygPU3zmpFmps4p6 -xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuXEpBc -unvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/ -Jre7Ir5v/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dp -ezy4ydV/NgIlqmjCMRW3MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42 -gzmRkBDI8ck1fj+404HGIGQatlDCIaR43NAvO2STdPCWkPHv+wlaNECW8DYSwaN0 -jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wkeZBWN7PGKX6jD/EpOe9+ -XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f/RWmnkJD -W2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/ -RL5hRqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35r -MDOhYil/SrnhLecUIw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxk -BYn8eNZcLCZDqQ== ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA -# Subject: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA -# Label: "TC TrustCenter Class 2 CA II" -# Serial: 941389028203453866782103406992443 -# MD5 Fingerprint: ce:78:33:5c:59:78:01:6e:18:ea:b9:36:a0:b9:2e:23 -# SHA1 Fingerprint: ae:50:83:ed:7c:f4:5c:bc:8f:61:c6:21:fe:68:5d:79:42:21:15:6e -# SHA256 Fingerprint: e6:b8:f8:76:64:85:f8:07:ae:7f:8d:ac:16:70:46:1f:07:c0:a1:3e:ef:3a:1f:f7:17:53:8d:7a:ba:d3:91:b4 ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf -tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg -uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J -XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK -8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 -5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 -kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS -GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt -ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 -au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV -hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI -dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA -# Subject: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA -# Label: "TC TrustCenter Class 3 CA II" -# Serial: 1506523511417715638772220530020799 -# MD5 Fingerprint: 56:5f:aa:80:61:12:17:f6:67:21:e6:2b:6d:61:56:8e -# SHA1 Fingerprint: 80:25:ef:f4:6e:70:c8:d4:72:24:65:84:fe:40:3b:8a:8d:6a:db:f5 -# SHA256 Fingerprint: 8d:a0:84:fc:f9:9c:e0:77:22:f8:9b:32:05:93:98:06:fa:5c:b8:11:e1:c8:13:f6:a1:08:c7:d3:36:b3:40:8e ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW -Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q -Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 -1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq -ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 -Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX -XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN -irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 -TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 -g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB -95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj -S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Subject: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Label: "TC TrustCenter Universal CA I" -# Serial: 601024842042189035295619584734726 -# MD5 Fingerprint: 45:e1:a5:72:c5:a9:36:64:40:9e:f5:e4:58:84:67:8c -# SHA1 Fingerprint: 6b:2f:34:ad:89:58:be:62:fd:b0:6b:5c:ce:bb:9d:d9:4f:4e:39:f3 -# SHA256 Fingerprint: eb:f3:c0:2a:87:89:b1:fb:7d:51:19:95:d6:63:b7:29:06:d9:13:ce:0d:5e:10:56:8a:8a:77:e2:58:61:67:e7 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx -MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg -R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD -VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR -JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T -fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu -jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z -wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ -fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD -VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G -CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 -7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn -8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs -ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ -2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- - -# Issuer: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center -# Subject: CN=Deutsche Telekom Root CA 2 O=Deutsche Telekom AG OU=T-TeleSec Trust Center -# Label: "Deutsche Telekom Root CA 2" -# Serial: 38 -# MD5 Fingerprint: 74:01:4a:91:b1:08:c4:58:ce:47:cd:f0:dd:11:53:08 -# SHA1 Fingerprint: 85:a4:08:c0:9c:19:3e:5d:51:58:7d:cd:d6:13:30:fd:8c:de:37:bf -# SHA256 Fingerprint: b6:19:1a:50:d0:c3:97:7f:7d:a9:9b:cd:aa:c8:6a:22:7d:ae:b9:67:9e:c7:0b:a3:b0:c9:d9:22:71:c1:70:d3 ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc -MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj -IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB -IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE -RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl -U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 -IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU -ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC -QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr -rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S -NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc -QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH -txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP -BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp -tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa -IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl -6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ -xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -# Issuer: CN=ComSign Secured CA O=ComSign -# Subject: CN=ComSign Secured CA O=ComSign -# Label: "ComSign Secured CA" -# Serial: 264725503855295744117309814499492384489 -# MD5 Fingerprint: 40:01:25:06:8d:21:43:6a:0e:43:00:9c:e7:43:f3:d5 -# SHA1 Fingerprint: f9:cd:0e:2c:da:76:24:c1:8f:bd:f0:f0:ab:b6:45:b8:f7:fe:d5:7a -# SHA256 Fingerprint: 50:79:41:c7:44:60:a0:b4:70:86:22:0d:4e:99:32:57:2a:b5:d1:b5:bb:cb:89:80:ab:1c:b1:76:51:a8:44:d2 ------BEGIN CERTIFICATE----- -MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw -PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu -MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx -GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL -MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf -HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh -gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW -v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue -Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr -9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt -6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7 -MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl -Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58 -ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq -hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p -iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC -dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL -kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL -hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz -OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== ------END CERTIFICATE----- - -# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc -# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc -# Label: "Cybertrust Global Root" -# Serial: 4835703278459682877484360 -# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 -# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 -# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: CN=TÜBİTAK UEKAE Kök Sertifika Hizmet Sağlayıcısı - Sürüm 3 O=Türkiye Bilimsel ve Teknolojik Araştırma Kurumu - TÜBİTAK OU=Ulusal Elektronik ve Kriptoloji Araştırma Enstitüsü - UEKAE/Kamu Sertifikasyon Merkezi -# Subject: CN=TÜBİTAK UEKAE Kök Sertifika Hizmet Sağlayıcısı - Sürüm 3 O=Türkiye Bilimsel ve Teknolojik Araştırma Kurumu - TÜBİTAK OU=Ulusal Elektronik ve Kriptoloji Araştırma Enstitüsü - UEKAE/Kamu Sertifikasyon Merkezi -# Label: "T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3" -# Serial: 17 -# MD5 Fingerprint: ed:41:f5:8c:50:c5:2b:9c:73:e6:ee:6c:eb:c2:a8:26 -# SHA1 Fingerprint: 1b:4b:39:61:26:27:6b:64:91:a2:68:6d:d7:02:43:21:2d:1f:1d:96 -# SHA256 Fingerprint: e4:c7:34:30:d7:a5:b5:09:25:df:43:37:0a:0d:21:6e:9a:79:b9:d6:db:83:73:a0:c6:9e:b1:cc:31:c7:c5:2a ------BEGIN CERTIFICATE----- -MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS -MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp -bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw -VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy -YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy -dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2 -ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe -Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx -GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls -aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU -QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh -xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0 -aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr -IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h -gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK -O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO -fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw -lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL -hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID -AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP -NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t -wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM -7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh -gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n -oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs -yZyQ2uypQjyttgI= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 CA 1 O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 CA 1 O=Buypass AS-983163327 -# Label: "Buypass Class 2 CA 1" -# Serial: 1 -# MD5 Fingerprint: b8:08:9a:f0:03:cc:1b:0d:c8:6c:0b:76:a1:75:64:23 -# SHA1 Fingerprint: a0:a1:ab:90:c9:fc:84:7b:3b:12:61:e8:97:7d:5f:d3:22:61:d3:cc -# SHA256 Fingerprint: 0f:4e:9c:dd:26:4b:02:55:50:d1:70:80:63:40:21:4f:e9:44:34:c9:b0:2f:69:7e:c7:10:fc:5f:ea:fb:5e:38 ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg -Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL -MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD -VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0 -ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX -l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB -HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B -5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3 -WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD -AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP -gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+ -DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu -BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs -h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk -LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 CA 1 O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 CA 1 O=Buypass AS-983163327 -# Label: "Buypass Class 3 CA 1" -# Serial: 2 -# MD5 Fingerprint: df:3c:73:59:81:e7:39:50:81:04:4c:34:a2:cb:b3:7b -# SHA1 Fingerprint: 61:57:3a:11:df:0e:d8:7e:d5:92:65:22:ea:d0:56:d7:44:b3:23:71 -# SHA256 Fingerprint: b7:b1:2b:17:1f:82:1d:aa:99:0c:d0:fe:50:87:b1:28:44:8b:a8:e5:18:4f:84:c5:1e:02:b5:c8:fb:96:2b:24 ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg -Q2xhc3MgMyBDQSAxMB4XDTA1MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzEL -MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD -VQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKxifZg -isRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//z -NIqeKNc0n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI -+MkcVyzwPX6UvCWThOiaAJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2R -hzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+ -mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0PAQH/BAQD -AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFP -Bdy7pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27s -EzNxZy5p+qksP2bAEllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2 -mSlf56oBzKwzqBwKu5HEA6BvtjT5htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yC -e/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQjel/wroQk5PMr+4okoyeYZdow -dXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 ------END CERTIFICATE----- - -# Issuer: CN=EBG Elektronik Sertifika Hizmet Sağlayıcısı O=EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. -# Subject: CN=EBG Elektronik Sertifika Hizmet Sağlayıcısı O=EBG Bilişim Teknolojileri ve Hizmetleri A.Ş. -# Label: "EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1" -# Serial: 5525761995591021570 -# MD5 Fingerprint: 2c:20:26:9d:cb:1a:4a:00:85:b5:b7:5a:ae:c2:01:37 -# SHA1 Fingerprint: 8c:96:ba:eb:dd:2b:07:07:48:ee:30:32:66:a0:f3:98:6e:7c:ae:58 -# SHA256 Fingerprint: 35:ae:5b:dd:d8:f7:ae:63:5c:ff:ba:56:82:a8:f0:0b:95:f4:84:62:c7:10:8e:e9:a0:e5:29:2b:07:4a:af:b2 ------BEGIN CERTIFICATE----- -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 -QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=CNNIC ROOT O=CNNIC -# Subject: CN=CNNIC ROOT O=CNNIC -# Label: "CNNIC ROOT" -# Serial: 1228079105 -# MD5 Fingerprint: 21:bc:82:ab:49:c4:13:3b:4b:b2:2b:5c:6b:90:9c:19 -# SHA1 Fingerprint: 8b:af:4c:9b:1d:f0:2a:92:f7:da:12:8e:b9:1b:ac:f4:98:60:4b:6f -# SHA256 Fingerprint: e2:83:93:77:3d:a8:45:a6:79:f2:08:0c:c7:fb:44:a3:b7:a1:c3:79:2c:b7:eb:77:29:fd:cb:6a:8d:99:ae:a7 ------BEGIN CERTIFICATE----- -MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJD -TjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2 -MDcwOTE0WhcNMjcwNDE2MDcwOTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMF -Q05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzDo+/hn7E7SIX1mlwh -IhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tizVHa6 -dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZO -V/kbZKKTVrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrC -GHn2emU1z5DrvTOTn1OrczvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gN -v7Sg2Ca+I19zN38m5pIEo3/PIKe38zrKy5nLAgMBAAGjczBxMBEGCWCGSAGG+EIB -AQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscCwQ7vptU7ETAPBgNVHRMB -Af8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991SlgrHAsEO -76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnK -OOK5Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvH -ugDnuL8BV8F3RTIMO/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7Hgvi -yJA/qIYM/PmLXoXLT1tLYhFHxUV8BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fL -buXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2G8kS1sHNzYDzAgE8yGnLRUhj -2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5mmxE= ------END CERTIFICATE----- - -# Issuer: O=Japanese Government OU=ApplicationCA -# Subject: O=Japanese Government OU=ApplicationCA -# Label: "ApplicationCA - Japanese Government" -# Serial: 49 -# MD5 Fingerprint: 7e:23:4e:5b:a7:a5:b4:25:e9:00:07:74:11:62:ae:d6 -# SHA1 Fingerprint: 7f:8a:b0:cf:d0:51:87:6a:66:f3:36:0f:47:c8:8d:8c:d3:35:fc:74 -# SHA256 Fingerprint: 2d:47:43:7d:e1:79:51:21:5a:12:f3:c5:8e:51:c7:29:a5:80:26:ef:1f:cc:0a:5f:b3:d9:dc:01:2f:60:0d:19 ------BEGIN CERTIFICATE----- -MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc -MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp -b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT -AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs -aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H -j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K -f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55 -IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw -FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht -QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm -/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ -k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ -MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC -seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ -hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+ -eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U -DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj -B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL -rosot4LKGAfmt1t06SAZf7IbiVQ= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G3" -# Serial: 28809105769928564313984085209975885599 -# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 -# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd -# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB -mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT -MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 -BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz -+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm -hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn -5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W -JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL -DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC -huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB -AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB -zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN -kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH -SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G -spki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G2" -# Serial: 71758320672825410020661621085256472406 -# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f -# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 -# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G3" -# Serial: 127614157056681299805556476275995414779 -# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 -# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 -# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB -rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV -BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa -Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl -LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u -MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm -gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 -YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf -b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 -9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S -zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk -OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA -2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW -oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c -KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM -m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu -MdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G2" -# Serial: 80682863203381065782177908751794619243 -# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a -# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 -# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL -MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj -KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 -MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw -NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV -BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL -So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal -tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG -CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT -qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz -rD6ogRLQy7rQkgu2npaqBA+K ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Universal Root Certification Authority" -# Serial: 85209574734084581917763752644031726877 -# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 -# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 -# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB -vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W -ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 -IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y -IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh -bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF -9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH -H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H -LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN -/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT -rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw -WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs -exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 -sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ -seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz -4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ -BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR -lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 -7M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" -# Serial: 63143484348153506665311985501458640051 -# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 -# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a -# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) Főtanúsítvány O=NetLock Kft. OU=Tanúsítványkiadók (Certification Services) -# Label: "NetLock Arany (Class Gold) Főtanúsítvány" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden -# Subject: CN=Staat der Nederlanden Root CA - G2 O=Staat der Nederlanden -# Label: "Staat der Nederlanden Root CA - G2" -# Serial: 10000012 -# MD5 Fingerprint: 7c:a5:0f:f8:5b:9a:7d:6d:30:ae:54:5a:e3:42:a2:8a -# SHA1 Fingerprint: 59:af:82:79:91:86:c7:b4:75:07:cb:cf:03:57:46:eb:04:dd:b7:16 -# SHA256 Fingerprint: 66:8c:83:94:7d:a6:3b:72:4b:ec:e1:74:3c:31:a0:e6:ae:d0:db:8e:c5:b3:1b:e3:77:bb:78:4f:91:b6:71:6f ------BEGIN CERTIFICATE----- -MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO -TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh -dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX -DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl -ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv -b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 -qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp -uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU -Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE -pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp -5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M -UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN -GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy -5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv -6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK -eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 -B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ -BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov -L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV -HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG -SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS -CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen -5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 -IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK -gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL -+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL -vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm -bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk -N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC -Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z -ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== ------END CERTIFICATE----- - -# Issuer: CN=CA Disig O=Disig a.s. -# Subject: CN=CA Disig O=Disig a.s. -# Label: "CA Disig" -# Serial: 1 -# MD5 Fingerprint: 3f:45:96:39:e2:50:87:f7:bb:fe:98:0c:3c:20:98:e6 -# SHA1 Fingerprint: 2a:c8:d5:8b:57:ce:bf:2f:49:af:f2:fc:76:8f:51:14:62:90:7a:41 -# SHA256 Fingerprint: 92:bf:51:19:ab:ec:ca:d0:b1:33:2d:c4:e1:d0:5f:ba:75:b5:67:90:44:ee:0c:a2:6e:93:1f:74:4f:2f:33:cf ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzET -MBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UE -AxMIQ0EgRGlzaWcwHhcNMDYwMzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQsw -CQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcg -YS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgmGErE -Nx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnX -mjxUizkDPw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYD -XcDtab86wYqg6I7ZuUUohwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhW -S8+2rT+MitcE5eN4TPWGqvWP+j1scaMtymfraHtuM6kMgiioTGohQBUgDCZbg8Kp -FhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8wgfwwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0PAQH/BAQD -AgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cu -ZGlzaWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5z -ay9jYS9jcmwvY2FfZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2sv -Y2EvY3JsL2NhX2Rpc2lnLmNybDAaBgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEw -DQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59tWDYcPQuBDRIrRhCA/ec8J9B6 -yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3mkkp7M5+cTxq -EEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ -CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeB -EicTXxChds6KezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFN -PGO+I++MzVpQuGhU+QqZMxEA4Z7CRneC9VkGjCFMhwnN5ag= ------END CERTIFICATE----- - -# Issuer: CN=Juur-SK O=AS Sertifitseerimiskeskus -# Subject: CN=Juur-SK O=AS Sertifitseerimiskeskus -# Label: "Juur-SK" -# Serial: 999181308 -# MD5 Fingerprint: aa:8e:5d:d9:f8:db:0a:58:b7:8d:26:87:6c:82:35:55 -# SHA1 Fingerprint: 40:9d:4b:d9:17:b5:5c:27:b6:9b:64:cb:98:22:44:0d:cd:09:b8:89 -# SHA256 Fingerprint: ec:c3:e9:c3:40:75:03:be:e0:91:aa:95:2f:41:34:8f:f8:8b:aa:86:3b:22:64:be:fa:c8:07:90:15:74:e9:39 ------BEGIN CERTIFICATE----- -MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN -AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp -dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw -MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw -CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ -MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB -SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz -ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH -LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP -PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL -2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w -ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC -MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk -AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0 -AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz -AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz -AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f -BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE -FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY -P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi -CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g -kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95 -HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS -na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q -qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z -TbvGRNs2yyqcjg== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 1 O=Hongkong Post -# Label: "Hongkong Post Root CA 1" -# Serial: 1000 -# MD5 Fingerprint: a8:0d:6f:39:78:b9:43:6d:77:42:6d:98:5a:cc:23:ca -# SHA1 Fingerprint: d6:da:a8:20:8d:09:d2:15:4d:24:b5:2f:cb:34:6e:b2:58:b2:8a:58 -# SHA256 Fingerprint: f9:e6:7d:33:6c:51:00:2a:c0:54:c6:32:02:2d:66:dd:a2:e7:e3:ff:f1:0a:d0:61:ed:31:d8:bb:b4:10:cf:b2 ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx -FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg -Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG -A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr -b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ -jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn -PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh -ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 -nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h -q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED -MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC -mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 -7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB -oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs -EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO -fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi -AmvZWg== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Subject: CN=SecureSign RootCA11 O=Japan Certification Services, Inc. -# Label: "SecureSign RootCA11" -# Serial: 1 -# MD5 Fingerprint: b7:52:74:e2:92:b4:80:93:f2:75:e4:cc:d7:f2:ea:26 -# SHA1 Fingerprint: 3b:c4:9f:48:f8:f3:73:a0:9c:1e:bd:f8:5b:b1:c3:65:c7:d8:11:b3 -# SHA256 Fingerprint: bf:0f:ee:fb:9e:3a:58:1a:d5:f9:e9:db:75:89:98:57:43:d2:61:08:5c:4d:31:4f:6f:5d:72:59:aa:42:16:12 ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr -MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG -A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0 -MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp -Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD -QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz -i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8 -h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV -MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9 -UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni -8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC -h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD -VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB -AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm -KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ -X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr -QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5 -pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN -QSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -# Issuer: CN=ACEDICOM Root O=EDICOM OU=PKI -# Subject: CN=ACEDICOM Root O=EDICOM OU=PKI -# Label: "ACEDICOM Root" -# Serial: 7029493972724711941 -# MD5 Fingerprint: 42:81:a0:e2:1c:e3:55:10:de:55:89:42:65:96:22:e6 -# SHA1 Fingerprint: e0:b4:32:2e:b2:f6:a5:68:b6:54:53:84:48:18:4a:50:36:87:43:84 -# SHA256 Fingerprint: 03:95:0f:b4:9a:53:1f:3e:19:91:94:23:98:df:a9:e0:ea:32:d7:ba:1c:dd:9b:c8:5d:b5:7e:d9:40:0b:43:4a ------BEGIN CERTIFICATE----- -MIIFtTCCA52gAwIBAgIIYY3HhjsBggUwDQYJKoZIhvcNAQEFBQAwRDEWMBQGA1UE -AwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZFRElDT00x -CzAJBgNVBAYTAkVTMB4XDTA4MDQxODE2MjQyMloXDTI4MDQxMzE2MjQyMlowRDEW -MBQGA1UEAwwNQUNFRElDT00gUm9vdDEMMAoGA1UECwwDUEtJMQ8wDQYDVQQKDAZF -RElDT00xCzAJBgNVBAYTAkVTMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC -AgEA/5KV4WgGdrQsyFhIyv2AVClVYyT/kGWbEHV7w2rbYgIB8hiGtXxaOLHkWLn7 -09gtn70yN78sFW2+tfQh0hOR2QetAQXW8713zl9CgQr5auODAKgrLlUTY4HKRxx7 -XBZXehuDYAQ6PmXDzQHe3qTWDLqO3tkE7hdWIpuPY/1NFgu3e3eM+SW10W2ZEi5P -Grjm6gSSrj0RuVFCPYewMYWveVqc/udOXpJPQ/yrOq2lEiZmueIM15jO1FillUAK -t0SdE3QrwqXrIhWYENiLxQSfHY9g5QYbm8+5eaA9oiM/Qj9r+hwDezCNzmzAv+Yb -X79nuIQZ1RXve8uQNjFiybwCq0Zfm/4aaJQ0PZCOrfbkHQl/Sog4P75n/TSW9R28 -MHTLOO7VbKvU/PQAtwBbhTIWdjPp2KOZnQUAqhbm84F9b32qhm2tFXTTxKJxqvQU -fecyuB+81fFOvW8XAjnXDpVCOscAPukmYxHqC9FK/xidstd7LzrZlvvoHpKuE1XI -2Sf23EgbsCTBheN3nZqk8wwRHQ3ItBTutYJXCb8gWH8vIiPYcMt5bMlL8qkqyPyH -K9caUPgn6C9D4zq92Fdx/c6mUlv53U3t5fZvie27k5x2IXXwkkwp9y+cAS7+UEae -ZAwUswdbxcJzbPEHXEUkFDWug/FqTYl6+rPYLWbwNof1K1MCAwEAAaOBqjCBpzAP -BgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKaz4SsrSbbXc6GqlPUB53NlTKxQ -MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUprPhKytJttdzoaqU9QHnc2VMrFAw -RAYDVR0gBD0wOzA5BgRVHSAAMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly9hY2VkaWNv -bS5lZGljb21ncm91cC5jb20vZG9jMA0GCSqGSIb3DQEBBQUAA4ICAQDOLAtSUWIm -fQwng4/F9tqgaHtPkl7qpHMyEVNEskTLnewPeUKzEKbHDZ3Ltvo/Onzqv4hTGzz3 -gvoFNTPhNahXwOf9jU8/kzJPeGYDdwdY6ZXIfj7QeQCM8htRM5u8lOk6e25SLTKe -I6RF+7YuE7CLGLHdztUdp0J/Vb77W7tH1PwkzQSulgUV1qzOMPPKC8W64iLgpq0i -5ALudBF/TP94HTXa5gI06xgSYXcGCRZj6hitoocf8seACQl1ThCojz2GuHURwCRi -ipZ7SkXp7FnFvmuD5uHorLUwHv4FB4D54SMNUI8FmP8sX+g7tq3PgbUhh8oIKiMn -MCArz+2UW6yyetLHKKGKC5tNSixthT8Jcjxn4tncB7rrZXtaAWPWkFtPF2Y9fwsZ -o5NjEFIqnxQWWOLcpfShFosOkYuByptZ+thrkQdlVV9SH686+5DdaaVbnG0OLLb6 -zqylfDJKZ0DcMDQj3dcEI2bw/FWAp/tmGYI1Z2JwOV5vx+qQQEQIHriy1tvuWacN -GHk0vFQYXlPKNFHtRQrmjseCNj6nOGOpMCwXEGCSn1WHElkQwg9naRHMTh5+Spqt -r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK -Z05phkOTOPu220+DkdRgfks+KzgHVZhepA== ------END CERTIFICATE----- - -# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority -# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority -# Label: "Verisign Class 3 Public Primary Certification Authority" -# Serial: 80507572722862485515306429940691309246 -# MD5 Fingerprint: ef:5a:f1:33:ef:f1:cd:bb:51:02:ee:12:14:4b:96:c4 -# SHA1 Fingerprint: a1:db:63:93:91:6f:17:e4:18:55:09:40:04:15:c7:02:40:b0:ae:6b -# SHA256 Fingerprint: a4:b6:b3:99:6f:c2:f3:06:b3:fd:86:81:bd:63:41:3d:8c:50:09:cc:4f:a3:29:c2:cc:f0:e2:fa:1b:14:03:05 ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz -cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 -MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV -BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN -ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE -BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is -I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G -CSqGSIb3DQEBBQUAA4GBABByUqkFFBkyCEHwxWsKzH4PIRnN5GfcX6kb5sroc50i -2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWXbj9T/UWZYB2oK0z5XqcJ -2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/D/xwzoiQ ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi O=Elektronik Bilgi Guvenligi A.S. -# Subject: CN=e-Guven Kok Elektronik Sertifika Hizmet Saglayicisi O=Elektronik Bilgi Guvenligi A.S. -# Label: "E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi" -# Serial: 91184789765598910059173000485363494069 -# MD5 Fingerprint: 3d:41:29:cb:1e:aa:11:74:cd:5d:b0:62:af:b0:43:5b -# SHA1 Fingerprint: dd:e1:d2:a9:01:80:2e:1d:87:5e:84:b3:80:7e:4b:b1:fd:99:41:34 -# SHA256 Fingerprint: e6:09:07:84:65:a4:19:78:0c:b6:ac:4c:1c:0b:fb:46:53:d9:d9:cc:6e:b3:94:6e:b7:f3:d6:99:97:ba:d5:98 ------BEGIN CERTIFICATE----- -MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1 -MQswCQYDVQQGEwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxp -Z2kgQS5TLjE8MDoGA1UEAxMzZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZp -a2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3MDEwNDExMzI0OFoXDTE3MDEwNDEx -MzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0cm9uaWsgQmlsZ2kg -R3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9uaWsg -U2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdU -MZTe1RK6UxYC6lhj71vY8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlT -L/jDj/6z/P2douNffb7tC+Bg62nsM+3YjfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H -5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAIJjjcJRFHLfO6IxClv7wC -90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk9Ok0oSy1 -c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoE -VtstxNulMA0GCSqGSIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLP -qk/CaOv/gKlR6D1id4k9CnU58W5dF4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S -/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwqD2fK/A+JYZ1lpTzlvBNbCNvj -/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4Vwpm+Vganf2X -KWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq -fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 6047274297262753887 -# MD5 Fingerprint: 73:3a:74:7a:ec:bb:a3:96:a6:c2:e4:e2:c8:9b:c0:c3 -# SHA1 Fingerprint: ae:c5:fb:3f:c8:e1:bf:c4:e5:4f:03:07:5a:9a:e8:00:b7:f7:b6:fa -# SHA256 Fingerprint: 04:04:80:28:bf:1f:28:64:d4:8f:9a:d4:d8:32:94:36:6a:82:88:56:55:3f:3b:14:30:3f:90:14:7f:5d:40:ef ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy -MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD -VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv -ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl -AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF -661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 -am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 -ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 -PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS -3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k -SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF -3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM -ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g -StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz -Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB -jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -# Issuer: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. -# Subject: CN=Chambers of Commerce Root - 2008 O=AC Camerfirma S.A. -# Label: "Chambers of Commerce Root - 2008" -# Serial: 11806822484801597146 -# MD5 Fingerprint: 5e:80:9e:84:5a:0e:65:0b:17:02:f3:55:18:2a:3e:d7 -# SHA1 Fingerprint: 78:6a:74:ac:76:ab:14:7f:9c:6a:30:50:ba:9e:a8:7e:fe:9a:ce:3c -# SHA256 Fingerprint: 06:3e:4a:fa:c4:91:df:d3:32:f3:08:9b:85:42:e9:46:17:d8:93:d7:fe:94:4e:10:a7:93:7e:e2:9d:96:93:c0 ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz -IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz -MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj -dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw -EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp -MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 -28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq -VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q -DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR -5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL -ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a -Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl -UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s -+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 -Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx -hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV -HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 -+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN -YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t -L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy -ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt -IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV -HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w -DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW -PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF -5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 -glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH -FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 -pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD -xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG -tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq -jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De -fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ -d0jQ ------END CERTIFICATE----- - -# Issuer: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. -# Subject: CN=Global Chambersign Root - 2008 O=AC Camerfirma S.A. -# Label: "Global Chambersign Root - 2008" -# Serial: 14541511773111788494 -# MD5 Fingerprint: 9e:80:ff:78:01:0c:2e:c1:36:bd:fe:96:90:6e:08:f3 -# SHA1 Fingerprint: 4a:bd:ee:ec:95:0d:35:9c:89:ae:c7:52:a1:2c:5b:29:f6:d6:aa:0c -# SHA256 Fingerprint: 13:63:35:43:93:34:a7:69:80:16:a0:d3:24:de:72:28:4e:07:9d:7b:52:20:bb:8f:bd:74:78:16:ee:be:ba:ca ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD -VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 -IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 -MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx -MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy -cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG -A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl -BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI -hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed -KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 -G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 -zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 -ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG -HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 -Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V -yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e -beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r -6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog -zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW -BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr -ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp -ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk -cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt -YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC -CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow -KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI -hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ -UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz -X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x -fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz -a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd -Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd -SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O -AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso -M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge -v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=Certinomis - Autorité Racine O=Certinomis OU=0002 433998903 -# Subject: CN=Certinomis - Autorité Racine O=Certinomis OU=0002 433998903 -# Label: "Certinomis - Autorité Racine" -# Serial: 1 -# MD5 Fingerprint: 7f:30:78:8c:03:e3:ca:c9:0a:e2:c9:ea:1e:aa:55:1a -# SHA1 Fingerprint: 2e:14:da:ec:28:f0:fa:1e:8e:38:9a:4e:ab:eb:26:c0:0a:d3:83:c3 -# SHA256 Fingerprint: fc:bf:e2:88:62:06:f7:2b:27:59:3c:8b:07:02:97:e1:2d:76:9e:d1:0e:d7:93:07:05:a8:09:8e:ff:c1:4d:17 ------BEGIN CERTIFICATE----- -MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET -MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk -BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4 -Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl -cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0 -aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY -F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N -8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe -rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K -/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu -7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC -28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6 -lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E -nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB -0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09 -5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj -WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN -jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ -KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s -ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM -OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q -619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn -2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj -o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v -nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG -5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq -pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb -dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0 -BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5 ------END CERTIFICATE----- - -# Issuer: CN=Root CA Generalitat Valenciana O=Generalitat Valenciana OU=PKIGVA -# Subject: CN=Root CA Generalitat Valenciana O=Generalitat Valenciana OU=PKIGVA -# Label: "Root CA Generalitat Valenciana" -# Serial: 994436456 -# MD5 Fingerprint: 2c:8c:17:5e:b1:54:ab:93:17:b5:36:5a:db:d1:c6:f2 -# SHA1 Fingerprint: a0:73:e5:c5:bd:43:61:0d:86:4c:21:13:0a:85:58:57:cc:9c:ea:46 -# SHA256 Fingerprint: 8c:4e:df:d0:43:48:f3:22:96:9e:7e:29:a4:cd:4d:ca:00:46:55:06:1c:16:e1:b0:76:42:2e:f3:42:ad:63:0e ------BEGIN CERTIFICATE----- -MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJF -UzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJ -R1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcN -MDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3WjBoMQswCQYDVQQGEwJFUzEfMB0G -A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScw -JQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+ -WmmmO3I2F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKj -SgbwJ/BXufjpTjJ3Cj9BZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGl -u6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQD0EbtFpKd71ng+CT516nDOeB0/RSrFOy -A8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXteJajCq+TA81yc477OMUxk -Hl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMBAAGjggM7 -MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBr -aS5ndmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIIC -IwYKKwYBBAG/VQIBADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8A -cgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIA -YQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIAYQBsAGkAdABhAHQAIABWAGEA -bABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQByAGEAYwBpAPMA -bgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA -aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMA -aQBvAG4AYQBtAGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQA -ZQAgAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEA -YwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBuAHQAcgBhACAAZQBuACAAbABhACAA -ZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAAOgAvAC8AdwB3AHcA -LgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0dHA6 -Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+y -eAT8MIGVBgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQsw -CQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0G -A1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVu -Y2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRhTvW1yEICKrNcda3Fbcrn -lD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdzCkj+IHLt -b8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg -9J63NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XF -ducTZnV+ZfsBn5OHiJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmC -IoaZM3Fa6hlXPZHNqcCjbgcTpsnt+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= ------END CERTIFICATE----- - -# Issuer: CN=A-Trust-nQual-03 O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH OU=A-Trust-nQual-03 -# Subject: CN=A-Trust-nQual-03 O=A-Trust Ges. f. Sicherheitssysteme im elektr. Datenverkehr GmbH OU=A-Trust-nQual-03 -# Label: "A-Trust-nQual-03" -# Serial: 93214 -# MD5 Fingerprint: 49:63:ae:27:f4:d5:95:3d:d8:db:24:86:b8:9c:07:53 -# SHA1 Fingerprint: d3:c0:63:f2:19:ed:07:3e:34:ad:5d:75:0b:32:76:29:ff:d5:9a:f2 -# SHA256 Fingerprint: 79:3c:bf:45:59:b9:fd:e3:8a:b2:2d:f1:68:69:f6:98:81:ae:14:c4:b0:13:9a:c7:88:a7:8a:1a:fc:ca:02:fb ------BEGIN CERTIFICATE----- -MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJB -VDFIMEYGA1UECgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBp -bSBlbGVrdHIuIERhdGVudmVya2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5R -dWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5RdWFsLTAzMB4XDTA1MDgxNzIyMDAw -MFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgwRgYDVQQKDD9BLVRy -dXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0ZW52 -ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMM -EEEtVHJ1c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCtPWFuA/OQO8BBC4SAzewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUj -lUC5B3ilJfYKvUWG6Nm9wASOhURh73+nyfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZ -znF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPESU7l0+m0iKsMrmKS1GWH -2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4iHQF63n1 -k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs -2e3Vcuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYD -VR0OBAoECERqlWdVeRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC -AQEAVdRU0VlIXLOThaq/Yy/kgM40ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fG -KOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmrsQd7TZjTXLDR8KdCoLXEjq/+ -8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZdJXDRZslo+S4R -FGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS -mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmE -DNuxUCAKGkq6ahq97BvIxYSazQ== ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2011 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2011" -# Serial: 0 -# MD5 Fingerprint: 73:9f:4c:4b:73:5b:79:e9:fa:ba:1c:ef:6e:cb:d5:c9 -# SHA1 Fingerprint: fe:45:65:9b:79:03:5b:98:a1:61:b5:51:2e:ac:da:58:09:48:22:4d -# SHA256 Fingerprint: bc:10:4f:15:a4:8b:e7:09:dc:a5:42:a7:e1:d4:b9:df:6f:05:45:27:e8:02:ea:a9:2d:59:54:44:25:8a:fe:71 ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix -RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p -YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw -NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK -EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl -cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz -dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ -fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns -bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD -75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP -FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV -HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp -5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu -b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA -A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p -6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 -dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys -Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI -l7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: O=Trustis Limited OU=Trustis FPS Root CA -# Subject: O=Trustis Limited OU=Trustis FPS Root CA -# Label: "Trustis FPS Root CA" -# Serial: 36053640375399034304724988975563710553 -# MD5 Fingerprint: 30:c9:e7:1e:6b:e6:14:eb:65:b2:16:69:20:31:67:4d -# SHA1 Fingerprint: 3b:c0:38:0b:33:c3:f6:a6:0c:86:15:22:93:d9:df:f5:4b:81:c0:04 -# SHA256 Fingerprint: c1:b4:82:99:ab:a5:20:8f:e9:63:0a:ce:55:ca:68:a0:3e:da:5a:51:9c:88:02:a0:d3:a6:73:be:8f:8e:55:7d ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL -ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx -MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc -MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ -AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH -iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj -vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA -0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB -OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ -BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E -FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 -GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW -zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 -1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE -f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F -jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN -ZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Label: "StartCom Certification Authority" -# Serial: 45 -# MD5 Fingerprint: c9:3b:0d:84:41:fc:a4:76:79:23:08:57:de:10:19:16 -# SHA1 Fingerprint: a3:f1:33:3f:e2:42:bf:cf:c5:d1:4e:8f:39:42:98:40:68:10:d1:a0 -# SHA256 Fingerprint: e1:78:90:ee:09:a3:fb:f4:f4:8b:9c:41:4a:17:d6:37:b7:a5:06:47:e9:bc:75:23:22:72:7f:cc:17:42:a9:11 ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul -F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC -ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w -ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk -aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0 -YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg -c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 -d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG -CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF -wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS -Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst -0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc -pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl -CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF -P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK -1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm -KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ -8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm -fyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority G2 O=StartCom Ltd. -# Subject: CN=StartCom Certification Authority G2 O=StartCom Ltd. -# Label: "StartCom Certification Authority G2" -# Serial: 59 -# MD5 Fingerprint: 78:4b:fb:9e:64:82:0a:d3:b8:4c:62:f3:64:f2:90:64 -# SHA1 Fingerprint: 31:f1:fd:68:22:63:20:ee:c6:3b:3f:9d:ea:4a:3e:53:7c:7c:39:17 -# SHA256 Fingerprint: c7:ba:65:67:de:93:a7:98:ae:1f:aa:79:1e:71:2d:37:8f:ae:1f:93:c4:39:7f:ea:44:1b:b7:cb:e6:fd:59:95 ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1 -OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG -A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ -JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD -vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo -D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ -Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW -RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK -HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN -nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM -0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i -UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9 -Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg -TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL -BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX -UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl -6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK -9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ -HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI -wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY -XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l -IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo -hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr -so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus -# Subject: CN=EE Certification Centre Root CA O=AS Sertifitseerimiskeskus -# Label: "EE Certification Centre Root CA" -# Serial: 112324828676200291871926431888494945866 -# MD5 Fingerprint: 43:5e:88:d4:7d:1a:4a:7e:fd:84:2e:52:eb:01:d4:6f -# SHA1 Fingerprint: c9:a8:b9:e7:55:80:5e:58:e3:53:77:a7:25:eb:af:c3:7b:27:cc:d7 -# SHA256 Fingerprint: 3e:84:ba:43:42:90:85:16:e7:75:73:c0:99:2f:09:79:ca:08:4e:46:85:68:1f:f1:95:cc:ba:8a:22:9b:8a:76 ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 -MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 -czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG -CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy -MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl -ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS -b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy -euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO -bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw -WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d -MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE -1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ -zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB -BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF -BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV -v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG -E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW -iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v -GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= ------END CERTIFICATE----- - -# Issuer: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Aralık 2007 -# Subject: CN=TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı O=TÜRKTRUST Bilgi İletişim ve Bilişim Güvenliği Hizmetleri A.Ş. (c) Aralık 2007 -# Label: "TURKTRUST Certificate Services Provider Root 2007" -# Serial: 1 -# MD5 Fingerprint: 2b:70:20:56:86:82:a0:18:c8:07:53:12:28:70:21:72 -# SHA1 Fingerprint: f1:7f:6f:b6:31:dc:99:e3:a3:c8:7f:fe:1c:f1:81:10:88:d9:60:33 -# SHA256 Fingerprint: 97:8c:d9:66:f2:fa:a0:7b:a7:aa:95:00:d9:c0:2e:9d:77:f2:cd:ad:a6:ad:6b:a7:4a:f4:b9:1c:66:59:3c:50 ------BEGIN CERTIFICATE----- -MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc -UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx -c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS -S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg -SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx -OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry -b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC -VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE -sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F -ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY -KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG -+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG -HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P -IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M -733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk -Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G -CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW -AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I -aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5 -mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa -XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ -qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9 ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Raiz del Estado Venezolano O=Sistema Nacional de Certificacion Electronica OU=Superintendencia de Servicios de Certificacion Electronica -# Subject: CN=PSCProcert O=Sistema Nacional de Certificacion Electronica OU=Proveedor de Certificados PROCERT -# Label: "PSCProcert" -# Serial: 11 -# MD5 Fingerprint: e6:24:e9:12:01:ae:0c:de:8e:85:c4:ce:a3:12:dd:ec -# SHA1 Fingerprint: 70:c1:8d:74:b4:28:81:0a:e4:fd:a5:75:d7:01:9f:99:b0:3d:50:74 -# SHA256 Fingerprint: 3c:fc:3c:14:d1:f6:84:ff:17:e3:8c:43:ca:44:0c:00:b9:67:ec:93:3e:8b:fe:06:4c:a1:d7:2c:90:f2:ad:b0 ------BEGIN CERTIFICATE----- -MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1 -dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9s -YW5vMQswCQYDVQQGEwJWRTEQMA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlz -dHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0 -aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBlcmludGVuZGVuY2lh -IGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUwIwYJ -KoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEw -MFoXDTIwMTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHBy -b2NlcnQubmV0LnZlMQ8wDQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGEx -KjAoBgNVBAsTIVByb3ZlZWRvciBkZSBDZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQG -A1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9u -aWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIwDQYJKoZI -hvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo9 -7BVCwfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74 -BCXfgI8Qhd19L3uA3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38G -ieU89RLAu9MLmV+QfI4tL3czkkohRqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9 -JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmOEO8GqQKJ/+MMbpfg353bIdD0 -PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG20qCZyFSTXai2 -0b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH -0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/ -6mnbVSKVUyqUtd+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1m -v6JpIzi4mWCZDlZTOpx+FIywBm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7 -K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvpr2uKGcfLFFb14dq12fy/czja+eev -bqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/AgEBMDcGA1UdEgQw -MC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAzNi0w -MB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFD -gBStuyIdxuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0 -b3JpZGFkIGRlIENlcnRpZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xh -bm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQHEwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0 -cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5hY2lvbmFsIGRlIENlcnRp -ZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5kZW5jaWEg -ZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkq -hkiG9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQD -AgEGME0GA1UdEQRGMESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0w -MDAwMDKgGwYFYIZeAgKgEgwQUklGLUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEag -RKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9sY3IvQ0VSVElGSUNBRE8t -UkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNyYWl6LnN1c2Nl -cnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v -Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsG -AQUFBwIBFh5odHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcN -AQELBQADggIBACtZ6yKZu4SqT96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS -1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmNg7+mvTV+LFwxNG9s2/NkAZiqlCxB -3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4quxtxj7mkoP3Yldmv -Wb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1n8Gh -HVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHm -pHmJWhSnFFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXz -sOfIt+FTvZLm8wyWuevo5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bE -qCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq3TNWOByyrYDT13K9mmyZY+gAu0F2Bbdb -mRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5poLWccret9W6aAjtmcz9 -opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3YeMLEYC/H -YvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km ------END CERTIFICATE----- - -# Issuer: CN=China Internet Network Information Center EV Certificates Root O=China Internet Network Information Center -# Subject: CN=China Internet Network Information Center EV Certificates Root O=China Internet Network Information Center -# Label: "China Internet Network Information Center EV Certificates Root" -# Serial: 1218379777 -# MD5 Fingerprint: 55:5d:63:00:97:bd:6a:97:f5:67:ab:4b:fb:6e:63:15 -# SHA1 Fingerprint: 4f:99:aa:93:fb:2b:d1:37:26:a1:99:4a:ce:7f:f0:05:f2:93:5d:1e -# SHA256 Fingerprint: 1c:01:c6:f4:db:b2:fe:fc:22:55:8b:2b:ca:32:56:3f:49:84:4a:cf:c3:2b:7b:e4:b0:ff:59:9f:9e:8c:7a:f7 ------BEGIN CERTIFICATE----- -MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC -Q04xMjAwBgNVBAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24g -Q2VudGVyMUcwRQYDVQQDDD5DaGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0 -aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMgUm9vdDAeFw0xMDA4MzEwNzExMjVa -Fw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAGA1UECgwpQ2hpbmEg -SW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMMPkNo -aW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRp -ZmljYXRlcyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z -7r07eKpkQ0H1UN+U8i6yjUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA// -DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV98YPjUesWgbdYavi7NifFy2cyjw1l1Vx -zUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2HklY0bBoQCxfVWhyXWIQ8 -hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23KzhmBsUs -4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54u -gQEC7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oY -NJKiyoOCWTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E -FgQUfHJLOcfA22KlT5uqGDSSosqDglkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3 -j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd50XPFtQO3WKwMVC/GVhMPMdoG -52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM7+czV0I664zB -echNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws -ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrI -zo9uoV1/A3U05K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATy -wy39FCqQmbkHzJ8= ------END CERTIFICATE----- - -# Issuer: CN=Swisscom Root CA 2 O=Swisscom OU=Digital Certificate Services -# Subject: CN=Swisscom Root CA 2 O=Swisscom OU=Digital Certificate Services -# Label: "Swisscom Root CA 2" -# Serial: 40698052477090394928831521023204026294 -# MD5 Fingerprint: 5b:04:69:ec:a5:83:94:63:18:a7:86:d0:e4:f2:6e:19 -# SHA1 Fingerprint: 77:47:4f:c6:30:e4:0f:4c:47:64:3f:84:ba:b8:c6:95:4a:8a:41:ec -# SHA256 Fingerprint: f0:9b:12:2c:71:14:f4:a0:9b:d4:ea:4f:4a:99:d5:58:b4:6e:4c:25:cd:81:14:0d:29:c0:56:13:91:4c:38:41 ------BEGIN CERTIFICATE----- -MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBk -MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 -YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg -Q0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2MjUwNzM4MTRaMGQxCzAJBgNVBAYT -AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp -Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvEr -jw0DzpPMLgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r -0rk0X2s682Q2zsKwzxNoysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f -2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJwDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVP -ACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpHWrumnf2U5NGKpV+GY3aF -y6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1aSgJA/MTA -tukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL -6yxSNLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0 -uPoTXGiTOmekl9AbmbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrAL -acywlKinh/LTSlDcX3KwFnUey7QYYpqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velh -k6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3qPyZ7iVNTA6z00yPhOgpD/0Q -VAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw -FDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O -BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqh -b97iEoHF8TwuMA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4R -fbgZPnm3qKhyN2abGu2sEzsOv2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv -/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ82YqZh6NM4OKb3xuqFp1mrjX2lhI -REeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLzo9v/tdhZsnPdTSpx -srpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcsa0vv -aGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciAT -woCqISxxOQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99n -Bjx8Oto0QuFmtEYE3saWmA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5W -t6NlUe07qxS/TFED6F+KBZvuim6c779o+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N -8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TCrvJcwhbtkj6EPnNgiLx2 -9CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX5OfNeOI5 -wSsSnqaeG8XmDtkx2Q== ------END CERTIFICATE----- - -# Issuer: CN=Swisscom Root EV CA 2 O=Swisscom OU=Digital Certificate Services -# Subject: CN=Swisscom Root EV CA 2 O=Swisscom OU=Digital Certificate Services -# Label: "Swisscom Root EV CA 2" -# Serial: 322973295377129385374608406479535262296 -# MD5 Fingerprint: 7b:30:34:9f:dd:0a:4b:6b:35:ca:31:51:28:5d:ae:ec -# SHA1 Fingerprint: e7:a1:90:29:d3:d5:52:dc:0d:0f:c6:92:d3:ea:88:0d:15:2e:1a:6b -# SHA256 Fingerprint: d9:5f:ea:3c:a4:ee:dc:e7:4c:d7:6e:75:fc:6d:1f:f6:2c:44:1f:0f:a8:bc:77:f0:34:b1:9e:5d:b2:58:01:5d ------BEGIN CERTIFICATE----- -MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAw -ZzELMAkGA1UEBhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdp -dGFsIENlcnRpZmljYXRlIFNlcnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290 -IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcNMzEwNjI1MDg0NTA4WjBnMQswCQYD -VQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2Vy -dGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYgQ0Eg -MjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7Bx -UglgRCgzo3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD -1ycfMQ4jFrclyxy0uYAyXhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPH -oCE2G3pXKSinLr9xJZDzRINpUKTk4RtiGZQJo/PDvO/0vezbE53PnUgJUmfANykR -HvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8LiqG12W0OfvrSdsyaGOx9/ -5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaHZa0zKcQv -idm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHL -OdAGalNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaC -NYGu+HuB5ur+rPQam3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f -46Fq9mDU5zXNysRojddxyNMkM3OxbPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCB -UWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDixzgHcgplwLa7JSnaFp6LNYth -7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/BAQDAgGGMB0G -A1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED -MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWB -bj2ITY1x0kbBbkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6x -XCX5145v9Ydkn+0UjrgEjihLj6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98T -PLr+flaYC/NUn81ETm484T4VvwYmneTwkLbUwp4wLh/vx3rEUMfqe9pQy3omywC0 -Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7XwgiG/W9mR4U9s70 -WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH59yL -Gn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm -7JFe3VE/23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4S -nr8PyQUQ3nqjsTzyP6WqJ3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VN -vBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyAHmBR3NdUIR7KYndP+tiPsys6DXhyyWhB -WkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/giuMod89a2GQ+fYWVq6nTI -fI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuWl8PVP3wb -I+2ksx0WckNLIOFZfsLorSa/ovc= ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R1 O=Disig a.s. -# Subject: CN=CA Disig Root R1 O=Disig a.s. -# Label: "CA Disig Root R1" -# Serial: 14052245610670616104 -# MD5 Fingerprint: be:ec:11:93:9a:f5:69:21:bc:d7:c1:c0:67:89:cc:2a -# SHA1 Fingerprint: 8e:1c:74:f8:a6:20:b9:e5:8a:f4:61:fa:ec:2b:47:56:51:1a:52:c6 -# SHA256 Fingerprint: f9:6f:23:f4:c3:e7:9c:07:7a:46:98:8d:5a:f5:90:06:76:a0:f0:39:cb:64:5d:d1:75:49:b2:16:c8:24:40:ce ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQy -MDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjEw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy3QRk -D2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/o -OI7bm+V8u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3A -fQ+lekLZWnDZv6fXARz2m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJe -IgpFy4QxTaz+29FHuvlglzmxZcfe+5nkCiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8n -oc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTaYVKvJrT1cU/J19IG32PK -/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6vpmumwKj -rckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD -3AjLLhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE -7cderVC6xkGbrPAXZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkC -yC2fg69naQanMVXVz0tv/wQFx1isXxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLd -qvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ04IwDQYJKoZI -hvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR -xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaA -SfX8MPWbTx9BLxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXo -HqJPYNcHKfyyo6SdbhWSVhlMCrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpB -emOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5GfbVSUZP/3oNn6z4eGBrxEWi1CXYBmC -AMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85YmLLW1AL14FABZyb -7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKSds+x -DzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvk -F7mGnjixlAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqF -a3qdnom2piiZk4hA9z7NUaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsT -Q6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJa7+h89n07eLw4+1knj0vllJPgFOL ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- diff --git a/plugin.video.alfa/lib/requests/certs.py b/plugin.video.alfa/lib/requests/certs.py deleted file mode 100755 index 073fde41..00000000 --- a/plugin.video.alfa/lib/requests/certs.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- - -""" -certs.py -~~~~~~~~ - -This module returns the preferred default CA certificate bundle. - -If you are packaging Requests, e.g., for a Linux distribution or a managed -environment, you can change the definition of where() to return a separately -packaged CA bundle. -""" -import os.path - -try: - from certifi import where -except ImportError: - def where(): - """Return the preferred certificate bundle.""" - # vendored bundle inside Requests - return os.path.join(os.path.dirname(__file__), 'cacert.pem') - -if __name__ == '__main__': - print(where()) diff --git a/plugin.video.alfa/lib/requests/compat.py b/plugin.video.alfa/lib/requests/compat.py deleted file mode 100755 index 96c13bfb..00000000 --- a/plugin.video.alfa/lib/requests/compat.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -pythoncompat -""" - -from .packages import chardet - -import sys - -# ------- -# Pythons -# ------- - -# Syntax sugar. -_ver = sys.version_info - -#: Python 2.x? -is_py2 = (_ver[0] == 2) - -#: Python 3.x? -is_py3 = (_ver[0] == 3) - -try: - import simplejson as json -except (ImportError, SyntaxError): - # simplejson does not support Python 3.2, it throws a SyntaxError - # because of u'...' Unicode literals. - import json - -# --------- -# Specifics -# --------- - -if is_py2: - from urllib import quote, unquote, quote_plus, unquote_plus, urlencode, getproxies, proxy_bypass - from urlparse import urlparse, urlunparse, urljoin, urlsplit, urldefrag - from urllib2 import parse_http_list - import cookielib - from Cookie import Morsel - from StringIO import StringIO - from .packages.urllib3.packages.ordered_dict import OrderedDict - - builtin_str = str - bytes = str - str = unicode - basestring = basestring - numeric_types = (int, long, float) - -elif is_py3: - from urllib.parse import urlparse, urlunparse, urljoin, urlsplit, urlencode, quote, unquote, quote_plus, unquote_plus, urldefrag - from urllib.request import parse_http_list, getproxies, proxy_bypass - from http import cookiejar as cookielib - from http.cookies import Morsel - from io import StringIO - from collections import OrderedDict - - builtin_str = str - str = str - bytes = bytes - basestring = (str, bytes) - numeric_types = (int, float) diff --git a/plugin.video.alfa/lib/requests/cookies.py b/plugin.video.alfa/lib/requests/cookies.py deleted file mode 100755 index 6de4ae97..00000000 --- a/plugin.video.alfa/lib/requests/cookies.py +++ /dev/null @@ -1,479 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -Compatibility code to be able to use `cookielib.CookieJar` with requests. - -requests.utils imports from here, so be careful with imports. -""" - -import copy -import time -import collections -from .compat import cookielib, urlparse, urlunparse, Morsel - -try: - import threading - # grr, pyflakes: this fixes "redefinition of unused 'threading'" - threading -except ImportError: - import dummy_threading as threading - - -class MockRequest(object): - """Wraps a `requests.Request` to mimic a `urllib2.Request`. - - The code in `cookielib.CookieJar` expects this interface in order to correctly - manage cookie policies, i.e., determine whether a cookie can be set, given the - domains of the request and the cookie. - - The original request object is read-only. The client is responsible for collecting - the new headers via `get_new_headers()` and interpreting them appropriately. You - probably want `get_cookie_header`, defined below. - """ - - def __init__(self, request): - self._r = request - self._new_headers = {} - self.type = urlparse(self._r.url).scheme - - def get_type(self): - return self.type - - def get_host(self): - return urlparse(self._r.url).netloc - - def get_origin_req_host(self): - return self.get_host() - - def get_full_url(self): - # Only return the response's URL if the user hadn't set the Host - # header - if not self._r.headers.get('Host'): - return self._r.url - # If they did set it, retrieve it and reconstruct the expected domain - host = self._r.headers['Host'] - parsed = urlparse(self._r.url) - # Reconstruct the URL as we expect it - return urlunparse([ - parsed.scheme, host, parsed.path, parsed.params, parsed.query, - parsed.fragment - ]) - - def is_unverifiable(self): - return True - - def has_header(self, name): - return name in self._r.headers or name in self._new_headers - - def get_header(self, name, default=None): - return self._r.headers.get(name, self._new_headers.get(name, default)) - - def add_header(self, key, val): - """cookielib has no legitimate use for this method; add it back if you find one.""" - raise NotImplementedError("Cookie headers should be added with add_unredirected_header()") - - def add_unredirected_header(self, name, value): - self._new_headers[name] = value - - def get_new_headers(self): - return self._new_headers - - @property - def unverifiable(self): - return self.is_unverifiable() - - @property - def origin_req_host(self): - return self.get_origin_req_host() - - @property - def host(self): - return self.get_host() - - -class MockResponse(object): - """Wraps a `httplib.HTTPMessage` to mimic a `urllib.addinfourl`. - - ...what? Basically, expose the parsed HTTP headers from the server response - the way `cookielib` expects to see them. - """ - - def __init__(self, headers): - """Make a MockResponse for `cookielib` to read. - - :param headers: a httplib.HTTPMessage or analogous carrying the headers - """ - self._headers = headers - - def info(self): - return self._headers - - def getheaders(self, name): - self._headers.getheaders(name) - - -def extract_cookies_to_jar(jar, request, response): - """Extract the cookies from the response into a CookieJar. - - :param jar: cookielib.CookieJar (not necessarily a RequestsCookieJar) - :param request: our own requests.Request object - :param response: urllib3.HTTPResponse object - """ - if not (hasattr(response, '_original_response') and - response._original_response): - return - # the _original_response field is the wrapped httplib.HTTPResponse object, - req = MockRequest(request) - # pull out the HTTPMessage with the headers and put it in the mock: - res = MockResponse(response._original_response.msg) - jar.extract_cookies(res, req) - - -def get_cookie_header(jar, request): - """Produce an appropriate Cookie header string to be sent with `request`, or None.""" - r = MockRequest(request) - jar.add_cookie_header(r) - return r.get_new_headers().get('Cookie') - - -def remove_cookie_by_name(cookiejar, name, domain=None, path=None): - """Unsets a cookie by name, by default over all domains and paths. - - Wraps CookieJar.clear(), is O(n). - """ - clearables = [] - for cookie in cookiejar: - if cookie.name == name: - if domain is None or domain == cookie.domain: - if path is None or path == cookie.path: - clearables.append((cookie.domain, cookie.path, cookie.name)) - - for domain, path, name in clearables: - cookiejar.clear(domain, path, name) - - -class CookieConflictError(RuntimeError): - """There are two cookies that meet the criteria specified in the cookie jar. - Use .get and .set and include domain and path args in order to be more specific.""" - - -class RequestsCookieJar(cookielib.CookieJar, collections.MutableMapping): - """Compatibility class; is a cookielib.CookieJar, but exposes a dict - interface. - - This is the CookieJar we create by default for requests and sessions that - don't specify one, since some clients may expect response.cookies and - session.cookies to support dict operations. - - Requests does not use the dict interface internally; it's just for - compatibility with external client code. All requests code should work - out of the box with externally provided instances of ``CookieJar``, e.g. - ``LWPCookieJar`` and ``FileCookieJar``. - - Unlike a regular CookieJar, this class is pickleable. - - .. warning:: dictionary operations that are normally O(1) may be O(n). - """ - def get(self, name, default=None, domain=None, path=None): - """Dict-like get() that also supports optional domain and path args in - order to resolve naming collisions from using one cookie jar over - multiple domains. - - .. warning:: operation is O(n), not O(1).""" - try: - return self._find_no_duplicates(name, domain, path) - except KeyError: - return default - - def set(self, name, value, **kwargs): - """Dict-like set() that also supports optional domain and path args in - order to resolve naming collisions from using one cookie jar over - multiple domains.""" - # support client code that unsets cookies by assignment of a None value: - if value is None: - remove_cookie_by_name(self, name, domain=kwargs.get('domain'), path=kwargs.get('path')) - return - - if isinstance(value, Morsel): - c = morsel_to_cookie(value) - else: - c = create_cookie(name, value, **kwargs) - self.set_cookie(c) - return c - - def iterkeys(self): - """Dict-like iterkeys() that returns an iterator of names of cookies - from the jar. See itervalues() and iteritems().""" - for cookie in iter(self): - yield cookie.name - - def keys(self): - """Dict-like keys() that returns a list of names of cookies from the - jar. See values() and items().""" - return list(self.iterkeys()) - - def itervalues(self): - """Dict-like itervalues() that returns an iterator of values of cookies - from the jar. See iterkeys() and iteritems().""" - for cookie in iter(self): - yield cookie.value - - def values(self): - """Dict-like values() that returns a list of values of cookies from the - jar. See keys() and items().""" - return list(self.itervalues()) - - def iteritems(self): - """Dict-like iteritems() that returns an iterator of name-value tuples - from the jar. See iterkeys() and itervalues().""" - for cookie in iter(self): - yield cookie.name, cookie.value - - def items(self): - """Dict-like items() that returns a list of name-value tuples from the - jar. See keys() and values(). Allows client-code to call - ``dict(RequestsCookieJar)`` and get a vanilla python dict of key value - pairs.""" - return list(self.iteritems()) - - def list_domains(self): - """Utility method to list all the domains in the jar.""" - domains = [] - for cookie in iter(self): - if cookie.domain not in domains: - domains.append(cookie.domain) - return domains - - def list_paths(self): - """Utility method to list all the paths in the jar.""" - paths = [] - for cookie in iter(self): - if cookie.path not in paths: - paths.append(cookie.path) - return paths - - def multiple_domains(self): - """Returns True if there are multiple domains in the jar. - Returns False otherwise.""" - domains = [] - for cookie in iter(self): - if cookie.domain is not None and cookie.domain in domains: - return True - domains.append(cookie.domain) - return False # there is only one domain in jar - - def get_dict(self, domain=None, path=None): - """Takes as an argument an optional domain and path and returns a plain - old Python dict of name-value pairs of cookies that meet the - requirements.""" - dictionary = {} - for cookie in iter(self): - if (domain is None or cookie.domain == domain) and (path is None - or cookie.path == path): - dictionary[cookie.name] = cookie.value - return dictionary - - def __getitem__(self, name): - """Dict-like __getitem__() for compatibility with client code. Throws - exception if there are more than one cookie with name. In that case, - use the more explicit get() method instead. - - .. warning:: operation is O(n), not O(1).""" - - return self._find_no_duplicates(name) - - def __setitem__(self, name, value): - """Dict-like __setitem__ for compatibility with client code. Throws - exception if there is already a cookie of that name in the jar. In that - case, use the more explicit set() method instead.""" - - self.set(name, value) - - def __delitem__(self, name): - """Deletes a cookie given a name. Wraps ``cookielib.CookieJar``'s - ``remove_cookie_by_name()``.""" - remove_cookie_by_name(self, name) - - def set_cookie(self, cookie, *args, **kwargs): - if hasattr(cookie.value, 'startswith') and cookie.value.startswith('"') and cookie.value.endswith('"'): - cookie.value = cookie.value.replace('\\"', '') - return super(RequestsCookieJar, self).set_cookie(cookie, *args, **kwargs) - - def update(self, other): - """Updates this jar with cookies from another CookieJar or dict-like""" - if isinstance(other, cookielib.CookieJar): - for cookie in other: - self.set_cookie(copy.copy(cookie)) - else: - super(RequestsCookieJar, self).update(other) - - def _find(self, name, domain=None, path=None): - """Requests uses this method internally to get cookie values. Takes as - args name and optional domain and path. Returns a cookie.value. If - there are conflicting cookies, _find arbitrarily chooses one. See - _find_no_duplicates if you want an exception thrown if there are - conflicting cookies.""" - for cookie in iter(self): - if cookie.name == name: - if domain is None or cookie.domain == domain: - if path is None or cookie.path == path: - return cookie.value - - raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path)) - - def _find_no_duplicates(self, name, domain=None, path=None): - """Both ``__get_item__`` and ``get`` call this function: it's never - used elsewhere in Requests. Takes as args name and optional domain and - path. Returns a cookie.value. Throws KeyError if cookie is not found - and CookieConflictError if there are multiple cookies that match name - and optionally domain and path.""" - toReturn = None - for cookie in iter(self): - if cookie.name == name: - if domain is None or cookie.domain == domain: - if path is None or cookie.path == path: - if toReturn is not None: # if there are multiple cookies that meet passed in criteria - raise CookieConflictError('There are multiple cookies with name, %r' % (name)) - toReturn = cookie.value # we will eventually return this as long as no cookie conflict - - if toReturn: - return toReturn - raise KeyError('name=%r, domain=%r, path=%r' % (name, domain, path)) - - def __getstate__(self): - """Unlike a normal CookieJar, this class is pickleable.""" - state = self.__dict__.copy() - # remove the unpickleable RLock object - state.pop('_cookies_lock') - return state - - def __setstate__(self, state): - """Unlike a normal CookieJar, this class is pickleable.""" - self.__dict__.update(state) - if '_cookies_lock' not in self.__dict__: - self._cookies_lock = threading.RLock() - - def copy(self): - """Return a copy of this RequestsCookieJar.""" - new_cj = RequestsCookieJar() - new_cj.update(self) - return new_cj - - -def _copy_cookie_jar(jar): - if jar is None: - return None - - if hasattr(jar, 'copy'): - # We're dealing with an instane of RequestsCookieJar - return jar.copy() - # We're dealing with a generic CookieJar instance - new_jar = copy.copy(jar) - new_jar.clear() - for cookie in jar: - new_jar.set_cookie(copy.copy(cookie)) - return new_jar - - -def create_cookie(name, value, **kwargs): - """Make a cookie from underspecified parameters. - - By default, the pair of `name` and `value` will be set for the domain '' - and sent on every request (this is sometimes called a "supercookie"). - """ - result = dict( - version=0, - name=name, - value=value, - port=None, - domain='', - path='/', - secure=False, - expires=None, - discard=True, - comment=None, - comment_url=None, - rest={'HttpOnly': None}, - rfc2109=False,) - - badargs = set(kwargs) - set(result) - if badargs: - err = 'create_cookie() got unexpected keyword arguments: %s' - raise TypeError(err % list(badargs)) - - result.update(kwargs) - result['port_specified'] = bool(result['port']) - result['domain_specified'] = bool(result['domain']) - result['domain_initial_dot'] = result['domain'].startswith('.') - result['path_specified'] = bool(result['path']) - - return cookielib.Cookie(**result) - - -def morsel_to_cookie(morsel): - """Convert a Morsel object into a Cookie containing the one k/v pair.""" - - expires = None - if morsel['max-age']: - expires = time.time() + morsel['max-age'] - elif morsel['expires']: - time_template = '%a, %d-%b-%Y %H:%M:%S GMT' - expires = time.mktime( - time.strptime(morsel['expires'], time_template)) - time.timezone - return create_cookie( - comment=morsel['comment'], - comment_url=bool(morsel['comment']), - discard=False, - domain=morsel['domain'], - expires=expires, - name=morsel.key, - path=morsel['path'], - port=None, - rest={'HttpOnly': morsel['httponly']}, - rfc2109=False, - secure=bool(morsel['secure']), - value=morsel.value, - version=morsel['version'] or 0, - ) - - -def cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True): - """Returns a CookieJar from a key/value dictionary. - - :param cookie_dict: Dict of key/values to insert into CookieJar. - :param cookiejar: (optional) A cookiejar to add the cookies to. - :param overwrite: (optional) If False, will not replace cookies - already in the jar with new ones. - """ - if cookiejar is None: - cookiejar = RequestsCookieJar() - - if cookie_dict is not None: - names_from_jar = [cookie.name for cookie in cookiejar] - for name in cookie_dict: - if overwrite or (name not in names_from_jar): - cookiejar.set_cookie(create_cookie(name, cookie_dict[name])) - - return cookiejar - - -def merge_cookies(cookiejar, cookies): - """Add cookies to cookiejar and returns a merged CookieJar. - - :param cookiejar: CookieJar object to add the cookies to. - :param cookies: Dictionary or CookieJar object to be added. - """ - if not isinstance(cookiejar, cookielib.CookieJar): - raise ValueError('You can only merge into CookieJar') - - if isinstance(cookies, dict): - cookiejar = cookiejar_from_dict( - cookies, cookiejar=cookiejar, overwrite=False) - elif isinstance(cookies, cookielib.CookieJar): - try: - cookiejar.update(cookies) - except AttributeError: - for cookie_in_jar in cookies: - cookiejar.set_cookie(cookie_in_jar) - - return cookiejar diff --git a/plugin.video.alfa/lib/requests/exceptions.py b/plugin.video.alfa/lib/requests/exceptions.py deleted file mode 100755 index 1b963990..00000000 --- a/plugin.video.alfa/lib/requests/exceptions.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.exceptions -~~~~~~~~~~~~~~~~~~~ - -This module contains the set of Requests' exceptions. - -""" -from .packages.urllib3.exceptions import HTTPError as BaseHTTPError - - -class RequestException(IOError): - """There was an ambiguous exception that occurred while handling your - request.""" - - def __init__(self, *args, **kwargs): - """ - Initialize RequestException with `request` and `response` objects. - """ - response = kwargs.pop('response', None) - self.response = response - self.request = kwargs.pop('request', None) - if (response is not None and not self.request and - hasattr(response, 'request')): - self.request = self.response.request - super(RequestException, self).__init__(*args, **kwargs) - - -class HTTPError(RequestException): - """An HTTP error occurred.""" - - -class ConnectionError(RequestException): - """A Connection error occurred.""" - - -class ProxyError(ConnectionError): - """A proxy error occurred.""" - - -class SSLError(ConnectionError): - """An SSL error occurred.""" - - -class Timeout(RequestException): - """The request timed out. - - Catching this error will catch both - :exc:`~requests.exceptions.ConnectTimeout` and - :exc:`~requests.exceptions.ReadTimeout` errors. - """ - - -class ConnectTimeout(ConnectionError, Timeout): - """The request timed out while trying to connect to the remote server. - - Requests that produced this error are safe to retry. - """ - - -class ReadTimeout(Timeout): - """The server did not send any data in the allotted amount of time.""" - - -class URLRequired(RequestException): - """A valid URL is required to make a request.""" - - -class TooManyRedirects(RequestException): - """Too many redirects.""" - - -class MissingSchema(RequestException, ValueError): - """The URL schema (e.g. http or https) is missing.""" - - -class InvalidSchema(RequestException, ValueError): - """See defaults.py for valid schemas.""" - - -class InvalidURL(RequestException, ValueError): - """ The URL provided was somehow invalid. """ - - -class ChunkedEncodingError(RequestException): - """The server declared chunked encoding but sent an invalid chunk.""" - - -class ContentDecodingError(RequestException, BaseHTTPError): - """Failed to decode response content""" - - -class StreamConsumedError(RequestException, TypeError): - """The content for this response was already consumed""" - - -class RetryError(RequestException): - """Custom retries logic failed""" diff --git a/plugin.video.alfa/lib/requests/hooks.py b/plugin.video.alfa/lib/requests/hooks.py deleted file mode 100755 index c7339629..00000000 --- a/plugin.video.alfa/lib/requests/hooks.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.hooks -~~~~~~~~~~~~~~ - -This module provides the capabilities for the Requests hooks system. - -Available hooks: - -``response``: - The response generated from a Request. - -""" - - -HOOKS = ['response'] - - -def default_hooks(): - hooks = {} - for event in HOOKS: - hooks[event] = [] - return hooks - -# TODO: response is the only one - - -def dispatch_hook(key, hooks, hook_data, **kwargs): - """Dispatches a hook dictionary on a given piece of data.""" - - hooks = hooks or dict() - - if key in hooks: - hooks = hooks.get(key) - - if hasattr(hooks, '__call__'): - hooks = [hooks] - - for hook in hooks: - _hook_data = hook(hook_data, **kwargs) - if _hook_data is not None: - hook_data = _hook_data - - return hook_data diff --git a/plugin.video.alfa/lib/requests/models.py b/plugin.video.alfa/lib/requests/models.py deleted file mode 100755 index c37d7116..00000000 --- a/plugin.video.alfa/lib/requests/models.py +++ /dev/null @@ -1,859 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.models -~~~~~~~~~~~~~~~ - -This module contains the primary objects that power Requests. -""" - -import collections -import datetime - -from io import BytesIO, UnsupportedOperation -from .hooks import default_hooks -from .structures import CaseInsensitiveDict - -from .auth import HTTPBasicAuth -from .cookies import cookiejar_from_dict, get_cookie_header, _copy_cookie_jar -from .packages.urllib3.fields import RequestField -from .packages.urllib3.filepost import encode_multipart_formdata -from .packages.urllib3.util import parse_url -from .packages.urllib3.exceptions import ( - DecodeError, ReadTimeoutError, ProtocolError, LocationParseError) -from .exceptions import ( - HTTPError, MissingSchema, InvalidURL, ChunkedEncodingError, - ContentDecodingError, ConnectionError, StreamConsumedError) -from .utils import ( - guess_filename, get_auth_from_url, requote_uri, - stream_decode_response_unicode, to_key_val_list, parse_header_links, - iter_slices, guess_json_utf, super_len, to_native_string) -from .compat import ( - cookielib, urlunparse, urlsplit, urlencode, str, bytes, StringIO, - is_py2, chardet, json, builtin_str, basestring) -from .status_codes import codes - -#: The set of HTTP status codes that indicate an automatically -#: processable redirect. -REDIRECT_STATI = ( - codes.moved, # 301 - codes.found, # 302 - codes.other, # 303 - codes.temporary_redirect, # 307 - codes.permanent_redirect, # 308 -) -DEFAULT_REDIRECT_LIMIT = 30 -CONTENT_CHUNK_SIZE = 10 * 1024 -ITER_CHUNK_SIZE = 512 - -json_dumps = json.dumps - - -class RequestEncodingMixin(object): - @property - def path_url(self): - """Build the path URL to use.""" - - url = [] - - p = urlsplit(self.url) - - path = p.path - if not path: - path = '/' - - url.append(path) - - query = p.query - if query: - url.append('?') - url.append(query) - - return ''.join(url) - - @staticmethod - def _encode_params(data): - """Encode parameters in a piece of data. - - Will successfully encode parameters when passed as a dict or a list of - 2-tuples. Order is retained if data is a list of 2-tuples but arbitrary - if parameters are supplied as a dict. - """ - - if isinstance(data, (str, bytes)): - return data - elif hasattr(data, 'read'): - return data - elif hasattr(data, '__iter__'): - result = [] - for k, vs in to_key_val_list(data): - if isinstance(vs, basestring) or not hasattr(vs, '__iter__'): - vs = [vs] - for v in vs: - if v is not None: - result.append( - (k.encode('utf-8') if isinstance(k, str) else k, - v.encode('utf-8') if isinstance(v, str) else v)) - return urlencode(result, doseq=True) - else: - return data - - @staticmethod - def _encode_files(files, data): - """Build the body for a multipart/form-data request. - - Will successfully encode files when passed as a dict or a list of - 2-tuples. Order is retained if data is a list of 2-tuples but arbitrary - if parameters are supplied as a dict. - - """ - if (not files): - raise ValueError("Files must be provided.") - elif isinstance(data, basestring): - raise ValueError("Data must not be a string.") - - new_fields = [] - fields = to_key_val_list(data or {}) - files = to_key_val_list(files or {}) - - for field, val in fields: - if isinstance(val, basestring) or not hasattr(val, '__iter__'): - val = [val] - for v in val: - if v is not None: - # Don't call str() on bytestrings: in Py3 it all goes wrong. - if not isinstance(v, bytes): - v = str(v) - - new_fields.append( - (field.decode('utf-8') if isinstance(field, bytes) else field, - v.encode('utf-8') if isinstance(v, str) else v)) - - for (k, v) in files: - # support for explicit filename - ft = None - fh = None - if isinstance(v, (tuple, list)): - if len(v) == 2: - fn, fp = v - elif len(v) == 3: - fn, fp, ft = v - else: - fn, fp, ft, fh = v - else: - fn = guess_filename(v) or k - fp = v - - if isinstance(fp, (str, bytes, bytearray)): - fdata = fp - else: - fdata = fp.read() - - rf = RequestField(name=k, data=fdata, - filename=fn, headers=fh) - rf.make_multipart(content_type=ft) - new_fields.append(rf) - - body, content_type = encode_multipart_formdata(new_fields) - - return body, content_type - - -class RequestHooksMixin(object): - def register_hook(self, event, hook): - """Properly register a hook.""" - - if event not in self.hooks: - raise ValueError('Unsupported event specified, with event name "%s"' % (event)) - - if isinstance(hook, collections.Callable): - self.hooks[event].append(hook) - elif hasattr(hook, '__iter__'): - self.hooks[event].extend(h for h in hook if isinstance(h, collections.Callable)) - - def deregister_hook(self, event, hook): - """Deregister a previously registered hook. - Returns True if the hook existed, False if not. - """ - - try: - self.hooks[event].remove(hook) - return True - except ValueError: - return False - - -class Request(RequestHooksMixin): - """A user-created :class:`Request ` object. - - Used to prepare a :class:`PreparedRequest `, which is sent to the server. - - :param method: HTTP method to use. - :param url: URL to send. - :param headers: dictionary of headers to send. - :param files: dictionary of {filename: fileobject} files to multipart upload. - :param data: the body to attach to the request. If a dictionary is provided, form-encoding will take place. - :param json: json for the body to attach to the request (if data is not specified). - :param params: dictionary of URL parameters to append to the URL. - :param auth: Auth handler or (user, pass) tuple. - :param cookies: dictionary or CookieJar of cookies to attach to this request. - :param hooks: dictionary of callback hooks, for internal usage. - - Usage:: - - >>> import requests - >>> req = requests.Request('GET', 'http://httpbin.org/get') - >>> req.prepare() - - - """ - def __init__(self, - method=None, - url=None, - headers=None, - files=None, - data=None, - params=None, - auth=None, - cookies=None, - hooks=None, - json=None): - - # Default empty dicts for dict params. - data = [] if data is None else data - files = [] if files is None else files - headers = {} if headers is None else headers - params = {} if params is None else params - hooks = {} if hooks is None else hooks - - self.hooks = default_hooks() - for (k, v) in list(hooks.items()): - self.register_hook(event=k, hook=v) - - self.method = method - self.url = url - self.headers = headers - self.files = files - self.data = data - self.json = json - self.params = params - self.auth = auth - self.cookies = cookies - - def __repr__(self): - return '' % (self.method) - - def prepare(self): - """Constructs a :class:`PreparedRequest ` for transmission and returns it.""" - p = PreparedRequest() - p.prepare( - method=self.method, - url=self.url, - headers=self.headers, - files=self.files, - data=self.data, - json=self.json, - params=self.params, - auth=self.auth, - cookies=self.cookies, - hooks=self.hooks, - ) - return p - - -class PreparedRequest(RequestEncodingMixin, RequestHooksMixin): - """The fully mutable :class:`PreparedRequest ` object, - containing the exact bytes that will be sent to the server. - - Generated from either a :class:`Request ` object or manually. - - Usage:: - - >>> import requests - >>> req = requests.Request('GET', 'http://httpbin.org/get') - >>> r = req.prepare() - - - >>> s = requests.Session() - >>> s.send(r) - - - """ - - def __init__(self): - #: HTTP verb to send to the server. - self.method = None - #: HTTP URL to send the request to. - self.url = None - #: dictionary of HTTP headers. - self.headers = None - # The `CookieJar` used to create the Cookie header will be stored here - # after prepare_cookies is called - self._cookies = None - #: request body to send to the server. - self.body = None - #: dictionary of callback hooks, for internal usage. - self.hooks = default_hooks() - - def prepare(self, method=None, url=None, headers=None, files=None, - data=None, params=None, auth=None, cookies=None, hooks=None, - json=None): - """Prepares the entire request with the given parameters.""" - - self.prepare_method(method) - self.prepare_url(url, params) - self.prepare_headers(headers) - self.prepare_cookies(cookies) - self.prepare_body(data, files, json) - self.prepare_auth(auth, url) - # Note that prepare_auth must be last to enable authentication schemes - # such as OAuth to work on a fully prepared request. - - # This MUST go after prepare_auth. Authenticators could add a hook - self.prepare_hooks(hooks) - - def __repr__(self): - return '' % (self.method) - - def copy(self): - p = PreparedRequest() - p.method = self.method - p.url = self.url - p.headers = self.headers.copy() if self.headers is not None else None - p._cookies = _copy_cookie_jar(self._cookies) - p.body = self.body - p.hooks = self.hooks - return p - - def prepare_method(self, method): - """Prepares the given HTTP method.""" - self.method = method - if self.method is not None: - self.method = self.method.upper() - - def prepare_url(self, url, params): - """Prepares the given HTTP URL.""" - #: Accept objects that have string representations. - #: We're unable to blindy call unicode/str functions - #: as this will include the bytestring indicator (b'') - #: on python 3.x. - #: https://github.com/kennethreitz/requests/pull/2238 - if isinstance(url, bytes): - url = url.decode('utf8') - else: - url = unicode(url) if is_py2 else str(url) - - # Don't do any URL preparation for non-HTTP schemes like `mailto`, - # `data` etc to work around exceptions from `url_parse`, which - # handles RFC 3986 only. - if ':' in url and not url.lower().startswith('http'): - self.url = url - return - - # Support for unicode domain names and paths. - try: - scheme, auth, host, port, path, query, fragment = parse_url(url) - except LocationParseError as e: - raise InvalidURL(*e.args) - - if not scheme: - raise MissingSchema("Invalid URL {0!r}: No schema supplied. " - "Perhaps you meant http://{0}?".format( - to_native_string(url, 'utf8'))) - - if not host: - raise InvalidURL("Invalid URL %r: No host supplied" % url) - - # Only want to apply IDNA to the hostname - try: - host = host.encode('idna').decode('utf-8') - except UnicodeError: - raise InvalidURL('URL has an invalid label.') - - # Carefully reconstruct the network location - netloc = auth or '' - if netloc: - netloc += '@' - netloc += host - if port: - netloc += ':' + str(port) - - # Bare domains aren't valid URLs. - if not path: - path = '/' - - if is_py2: - if isinstance(scheme, str): - scheme = scheme.encode('utf-8') - if isinstance(netloc, str): - netloc = netloc.encode('utf-8') - if isinstance(path, str): - path = path.encode('utf-8') - if isinstance(query, str): - query = query.encode('utf-8') - if isinstance(fragment, str): - fragment = fragment.encode('utf-8') - - enc_params = self._encode_params(params) - if enc_params: - if query: - query = '%s&%s' % (query, enc_params) - else: - query = enc_params - - url = requote_uri(urlunparse([scheme, netloc, path, None, query, fragment])) - self.url = url - - def prepare_headers(self, headers): - """Prepares the given HTTP headers.""" - - if headers: - self.headers = CaseInsensitiveDict((to_native_string(name), value) for name, value in headers.items()) - else: - self.headers = CaseInsensitiveDict() - - def prepare_body(self, data, files, json=None): - """Prepares the given HTTP body data.""" - - # Check if file, fo, generator, iterator. - # If not, run through normal process. - - # Nottin' on you. - body = None - content_type = None - length = None - - if json is not None: - content_type = 'application/json' - body = json_dumps(json) - - is_stream = all([ - hasattr(data, '__iter__'), - not isinstance(data, (basestring, list, tuple, dict)) - ]) - - try: - length = super_len(data) - except (TypeError, AttributeError, UnsupportedOperation): - length = None - - if is_stream: - body = data - - if files: - raise NotImplementedError('Streamed bodies and files are mutually exclusive.') - - if length is not None: - self.headers['Content-Length'] = builtin_str(length) - else: - self.headers['Transfer-Encoding'] = 'chunked' - else: - # Multi-part file uploads. - if files: - (body, content_type) = self._encode_files(files, data) - else: - if data and json is None: - body = self._encode_params(data) - if isinstance(data, basestring) or hasattr(data, 'read'): - content_type = None - else: - content_type = 'application/x-www-form-urlencoded' - - self.prepare_content_length(body) - - # Add content-type if it wasn't explicitly provided. - if content_type and ('content-type' not in self.headers): - self.headers['Content-Type'] = content_type - - self.body = body - - def prepare_content_length(self, body): - if hasattr(body, 'seek') and hasattr(body, 'tell'): - body.seek(0, 2) - self.headers['Content-Length'] = builtin_str(body.tell()) - body.seek(0, 0) - elif body is not None: - l = super_len(body) - if l: - self.headers['Content-Length'] = builtin_str(l) - elif (self.method not in ('GET', 'HEAD')) and (self.headers.get('Content-Length') is None): - self.headers['Content-Length'] = '0' - - def prepare_auth(self, auth, url=''): - """Prepares the given HTTP auth data.""" - - # If no Auth is explicitly provided, extract it from the URL first. - if auth is None: - url_auth = get_auth_from_url(self.url) - auth = url_auth if any(url_auth) else None - - if auth: - if isinstance(auth, tuple) and len(auth) == 2: - # special-case basic HTTP auth - auth = HTTPBasicAuth(*auth) - - # Allow auth to make its changes. - r = auth(self) - - # Update self to reflect the auth changes. - self.__dict__.update(r.__dict__) - - # Recompute Content-Length - self.prepare_content_length(self.body) - - def prepare_cookies(self, cookies): - """Prepares the given HTTP cookie data. - - This function eventually generates a ``Cookie`` header from the - given cookies using cookielib. Due to cookielib's design, the header - will not be regenerated if it already exists, meaning this function - can only be called once for the life of the - :class:`PreparedRequest ` object. Any subsequent calls - to ``prepare_cookies`` will have no actual effect, unless the "Cookie" - header is removed beforehand.""" - - if isinstance(cookies, cookielib.CookieJar): - self._cookies = cookies - else: - self._cookies = cookiejar_from_dict(cookies) - - cookie_header = get_cookie_header(self._cookies, self) - if cookie_header is not None: - self.headers['Cookie'] = cookie_header - - def prepare_hooks(self, hooks): - """Prepares the given hooks.""" - # hooks can be passed as None to the prepare method and to this - # method. To prevent iterating over None, simply use an empty list - # if hooks is False-y - hooks = hooks or [] - for event in hooks: - self.register_hook(event, hooks[event]) - - -class Response(object): - """The :class:`Response ` object, which contains a - server's response to an HTTP request. - """ - - __attrs__ = [ - '_content', - 'status_code', - 'headers', - 'url', - 'history', - 'encoding', - 'reason', - 'cookies', - 'elapsed', - 'request', - ] - - def __init__(self): - super(Response, self).__init__() - - self._content = False - self._content_consumed = False - - #: Integer Code of responded HTTP Status, e.g. 404 or 200. - self.status_code = None - - #: Case-insensitive Dictionary of Response Headers. - #: For example, ``headers['content-encoding']`` will return the - #: value of a ``'Content-Encoding'`` response header. - self.headers = CaseInsensitiveDict() - - #: File-like object representation of response (for advanced usage). - #: Use of ``raw`` requires that ``stream=True`` be set on the request. - # This requirement does not apply for use internally to Requests. - self.raw = None - - #: Final URL location of Response. - self.url = None - - #: Encoding to decode with when accessing r.text. - self.encoding = None - - #: A list of :class:`Response ` objects from - #: the history of the Request. Any redirect responses will end - #: up here. The list is sorted from the oldest to the most recent request. - self.history = [] - - #: Textual reason of responded HTTP Status, e.g. "Not Found" or "OK". - self.reason = None - - #: A CookieJar of Cookies the server sent back. - self.cookies = cookiejar_from_dict({}) - - #: The amount of time elapsed between sending the request - #: and the arrival of the response (as a timedelta). - #: This property specifically measures the time taken between sending - #: the first byte of the request and finishing parsing the headers. It - #: is therefore unaffected by consuming the response content or the - #: value of the ``stream`` keyword argument. - self.elapsed = datetime.timedelta(0) - - #: The :class:`PreparedRequest ` object to which this - #: is a response. - self.request = None - - def __getstate__(self): - # Consume everything; accessing the content attribute makes - # sure the content has been fully read. - if not self._content_consumed: - self.content - - return dict( - (attr, getattr(self, attr, None)) - for attr in self.__attrs__ - ) - - def __setstate__(self, state): - for name, value in state.items(): - setattr(self, name, value) - - # pickled objects do not have .raw - setattr(self, '_content_consumed', True) - setattr(self, 'raw', None) - - def __repr__(self): - return '' % (self.status_code) - - def __bool__(self): - """Returns true if :attr:`status_code` is 'OK'.""" - return self.ok - - def __nonzero__(self): - """Returns true if :attr:`status_code` is 'OK'.""" - return self.ok - - def __iter__(self): - """Allows you to use a response as an iterator.""" - return self.iter_content(128) - - @property - def ok(self): - try: - self.raise_for_status() - except HTTPError: - return False - return True - - @property - def is_redirect(self): - """True if this Response is a well-formed HTTP redirect that could have - been processed automatically (by :meth:`Session.resolve_redirects`). - """ - return ('location' in self.headers and self.status_code in REDIRECT_STATI) - - @property - def is_permanent_redirect(self): - """True if this Response one of the permanant versions of redirect""" - return ('location' in self.headers and self.status_code in (codes.moved_permanently, codes.permanent_redirect)) - - @property - def apparent_encoding(self): - """The apparent encoding, provided by the chardet library""" - return chardet.detect(self.content)['encoding'] - - def iter_content(self, chunk_size=1, decode_unicode=False): - """Iterates over the response data. When stream=True is set on the - request, this avoids reading the content at once into memory for - large responses. The chunk size is the number of bytes it should - read into memory. This is not necessarily the length of each item - returned as decoding can take place. - - If decode_unicode is True, content will be decoded using the best - available encoding based on the response. - """ - def generate(): - try: - # Special case for urllib3. - try: - for chunk in self.raw.stream(chunk_size, decode_content=True): - yield chunk - except ProtocolError as e: - raise ChunkedEncodingError(e) - except DecodeError as e: - raise ContentDecodingError(e) - except ReadTimeoutError as e: - raise ConnectionError(e) - except AttributeError: - # Standard file-like object. - while True: - chunk = self.raw.read(chunk_size) - if not chunk: - break - yield chunk - - self._content_consumed = True - - if self._content_consumed and isinstance(self._content, bool): - raise StreamConsumedError() - # simulate reading small chunks of the content - reused_chunks = iter_slices(self._content, chunk_size) - - stream_chunks = generate() - - chunks = reused_chunks if self._content_consumed else stream_chunks - - if decode_unicode: - chunks = stream_decode_response_unicode(chunks, self) - - return chunks - - def iter_lines(self, chunk_size=ITER_CHUNK_SIZE, decode_unicode=None, delimiter=None): - """Iterates over the response data, one line at a time. When - stream=True is set on the request, this avoids reading the - content at once into memory for large responses. - - .. note:: This method is not reentrant safe. - """ - - pending = None - - for chunk in self.iter_content(chunk_size=chunk_size, decode_unicode=decode_unicode): - - if pending is not None: - chunk = pending + chunk - - if delimiter: - lines = chunk.split(delimiter) - else: - lines = chunk.splitlines() - - if lines and lines[-1] and chunk and lines[-1][-1] == chunk[-1]: - pending = lines.pop() - else: - pending = None - - for line in lines: - yield line - - if pending is not None: - yield pending - - @property - def content(self): - """Content of the response, in bytes.""" - - if self._content is False: - # Read the contents. - try: - if self._content_consumed: - raise RuntimeError( - 'The content for this response was already consumed') - - if self.status_code == 0: - self._content = None - else: - self._content = bytes().join(self.iter_content(CONTENT_CHUNK_SIZE)) or bytes() - - except AttributeError: - self._content = None - - self._content_consumed = True - # don't need to release the connection; that's been handled by urllib3 - # since we exhausted the data. - return self._content - - @property - def text(self): - """Content of the response, in unicode. - - If Response.encoding is None, encoding will be guessed using - ``chardet``. - - The encoding of the response content is determined based solely on HTTP - headers, following RFC 2616 to the letter. If you can take advantage of - non-HTTP knowledge to make a better guess at the encoding, you should - set ``r.encoding`` appropriately before accessing this property. - """ - - # Try charset from content-type - content = None - encoding = self.encoding - - if not self.content: - return str('') - - # Fallback to auto-detected encoding. - if self.encoding is None: - encoding = self.apparent_encoding - - # Decode unicode from given encoding. - try: - content = str(self.content, encoding, errors='replace') - except (LookupError, TypeError): - # A LookupError is raised if the encoding was not found which could - # indicate a misspelling or similar mistake. - # - # A TypeError can be raised if encoding is None - # - # So we try blindly encoding. - content = str(self.content, errors='replace') - - return content - - def json(self, **kwargs): - """Returns the json-encoded content of a response, if any. - - :param \*\*kwargs: Optional arguments that ``json.loads`` takes. - """ - - if not self.encoding and len(self.content) > 3: - # No encoding set. JSON RFC 4627 section 3 states we should expect - # UTF-8, -16 or -32. Detect which one to use; If the detection or - # decoding fails, fall back to `self.text` (using chardet to make - # a best guess). - encoding = guess_json_utf(self.content) - if encoding is not None: - try: - return json.loads(self.content.decode(encoding), **kwargs) - except UnicodeDecodeError: - # Wrong UTF codec detected; usually because it's not UTF-8 - # but some other 8-bit codec. This is an RFC violation, - # and the server didn't bother to tell us what codec *was* - # used. - pass - return json.loads(self.text, **kwargs) - - @property - def links(self): - """Returns the parsed header links of the response, if any.""" - - header = self.headers.get('link') - - # l = MultiDict() - l = {} - - if header: - links = parse_header_links(header) - - for link in links: - key = link.get('rel') or link.get('url') - l[key] = link - - return l - - def raise_for_status(self): - """Raises stored :class:`HTTPError`, if one occurred.""" - - http_error_msg = '' - - if 400 <= self.status_code < 500: - http_error_msg = '%s Client Error: %s' % (self.status_code, self.reason) - - elif 500 <= self.status_code < 600: - http_error_msg = '%s Server Error: %s' % (self.status_code, self.reason) - - if http_error_msg: - raise HTTPError(http_error_msg, response=self) - - def close(self): - """Releases the connection back to the pool. Once this method has been - called the underlying ``raw`` object must not be accessed again. - - *Note: Should not normally need to be called explicitly.* - """ - return self.raw.release_conn() diff --git a/plugin.video.alfa/lib/requests/packages/__init__.py b/plugin.video.alfa/lib/requests/packages/__init__.py deleted file mode 100755 index 7b44ed59..00000000 --- a/plugin.video.alfa/lib/requests/packages/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from __future__ import absolute_import - -from . import urllib3 diff --git a/plugin.video.alfa/lib/requests/packages/chardet/__init__.py b/plugin.video.alfa/lib/requests/packages/chardet/__init__.py deleted file mode 100755 index bb1e962b..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/__init__.py +++ /dev/null @@ -1,32 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -__version__ = "2.3.0" -from sys import version_info - - -def detect(aBuf): - if ((version_info < (3, 0) and isinstance(aBuf, unicode)) or - (version_info >= (3, 0) and not isinstance(aBuf, bytes))): - raise ValueError('Expected a bytes object, not a unicode object') - - from . import universaldetector - u = universaldetector.UniversalDetector() - u.reset() - u.feed(aBuf) - u.close() - return u.result diff --git a/plugin.video.alfa/lib/requests/packages/chardet/big5freq.py b/plugin.video.alfa/lib/requests/packages/chardet/big5freq.py deleted file mode 100755 index 82b5a9bf..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/big5freq.py +++ /dev/null @@ -1,925 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Big5 frequency table -# by Taiwan's Mandarin Promotion Council -# -# -# 128 --> 0.42261 -# 256 --> 0.57851 -# 512 --> 0.74851 -# 1024 --> 0.89384 -# 2048 --> 0.97583 -# -# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 -# Random Distribution Ration = 512/(5401-512)=0.105 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - -BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 - -#Char to FreqOrder table -BIG5_TABLE_SIZE = 5376 - -Big5CharToFreqOrder = ( - 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 -3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 -1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 - 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 -3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 -4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 -5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 - 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 - 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 - 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 -2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 -1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 -3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 - 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 -3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 -2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 - 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 -3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 -1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 -5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 - 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 -5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 -1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 - 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 - 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 -3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 -3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 - 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 -2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 -2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 - 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 - 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 -3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 -1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 -1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 -1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 -2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 - 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 -4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 -1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 -5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 -2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 - 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 - 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 - 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 - 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 -5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 - 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 -1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 - 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 - 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 -5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 -1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 - 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 -3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 -4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 -3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 - 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 - 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 -1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 -4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 -3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 -3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 -2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 -5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 -3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 -5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 -1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 -2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 -1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 - 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 -1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 -4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 -3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 - 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 - 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 - 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 -2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 -5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 -1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 -2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 -1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 -1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 -5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 -5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 -5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 -3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 -4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 -4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 -2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 -5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 -3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 - 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 -5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 -5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 -1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 -2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 -3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 -4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 -5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 -3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 -4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 -1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 -1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 -4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 -1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 - 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 -1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 -1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 -3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 - 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 -5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 -2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 -1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 -1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 -5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 - 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 -4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 - 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 -2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 - 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 -1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 -1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 - 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 -4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 -4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 -1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 -3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 -5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 -5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 -1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 -2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 -1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 -3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 -2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 -3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 -2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 -4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 -4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 -3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 - 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 -3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 - 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 -3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 -4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 -3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 -1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 -5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 - 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 -5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 -1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 - 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 -4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 -4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 - 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 -2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 -2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 -3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 -1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 -4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 -2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 -1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 -1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 -2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 -3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 -1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 -5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 -1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 -4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 -1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 - 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 -1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 -4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 -4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 -2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 -1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 -4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 - 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 -5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 -2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 -3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 -4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 - 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 -5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 -5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 -1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 -4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 -4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 -2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 -3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 -3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 -2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 -1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 -4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 -3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 -3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 -2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 -4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 -5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 -3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 -2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 -3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 -1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 -2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 -3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 -4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 -2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 -2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 -5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 -1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 -2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 -1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 -3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 -4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 -2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 -3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 -3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 -2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 -4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 -2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 -3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 -4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 -5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 -3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 - 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 -1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 -4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 -1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 -4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 -5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 - 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 -5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 -5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 -2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 -3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 -2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 -2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 - 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 -1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 -4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 -3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 -3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 - 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 -2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 - 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 -2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 -4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 -1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 -4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 -1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 -3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 - 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 -3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 -5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 -5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 -3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 -3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 -1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 -2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 -5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 -1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 -1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 -3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 - 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 -1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 -4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 -5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 -2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 -3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 - 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 -1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 -2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 -2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 -5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 -5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 -5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 -2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 -2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 -1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 -4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 -3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 -3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 -4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 -4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 -2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 -2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 -5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 -4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 -5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 -4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 - 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 - 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 -1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 -3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 -4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 -1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 -5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 -2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 -2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 -3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 -5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 -1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 -3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 -5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 -1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 -5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 -2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 -3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 -2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 -3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 -3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 -3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 -4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 - 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 -2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 -4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 -3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 -5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 -1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 -5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 - 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 -1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 - 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 -4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 -1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 -4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 -1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 - 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 -3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 -4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 -5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 - 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 -3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 - 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 -2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 #last 512 -#Everything below is of no interest for detection purpose -2522,1613,4812,5799,3345,3945,2523,5800,4162,5801,1637,4163,2471,4813,3946,5802, # 5392 -2500,3034,3800,5803,5804,2195,4814,5805,2163,5806,5807,5808,5809,5810,5811,5812, # 5408 -5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828, # 5424 -5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844, # 5440 -5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860, # 5456 -5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876, # 5472 -5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892, # 5488 -5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908, # 5504 -5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924, # 5520 -5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940, # 5536 -5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956, # 5552 -5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972, # 5568 -5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988, # 5584 -5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004, # 5600 -6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020, # 5616 -6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036, # 5632 -6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052, # 5648 -6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068, # 5664 -6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084, # 5680 -6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100, # 5696 -6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116, # 5712 -6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132, # 5728 -6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148, # 5744 -6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164, # 5760 -6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180, # 5776 -6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196, # 5792 -6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212, # 5808 -6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,3670,6224,6225,6226,6227, # 5824 -6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243, # 5840 -6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259, # 5856 -6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275, # 5872 -6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,4815,6286,6287,6288,6289,6290, # 5888 -6291,6292,4816,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305, # 5904 -6306,6307,6308,6309,6310,6311,4817,4818,6312,6313,6314,6315,6316,6317,6318,4819, # 5920 -6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334, # 5936 -6335,6336,6337,4820,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349, # 5952 -6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365, # 5968 -6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381, # 5984 -6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397, # 6000 -6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,3441,6411,6412, # 6016 -6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,4440,6426,6427, # 6032 -6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443, # 6048 -6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,4821,6455,6456,6457,6458, # 6064 -6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474, # 6080 -6475,6476,6477,3947,3948,6478,6479,6480,6481,3272,4441,6482,6483,6484,6485,4442, # 6096 -6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,4822,6497,6498,6499,6500, # 6112 -6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516, # 6128 -6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532, # 6144 -6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548, # 6160 -6549,6550,6551,6552,6553,6554,6555,6556,2784,6557,4823,6558,6559,6560,6561,6562, # 6176 -6563,6564,6565,6566,6567,6568,6569,3949,6570,6571,6572,4824,6573,6574,6575,6576, # 6192 -6577,6578,6579,6580,6581,6582,6583,4825,6584,6585,6586,3950,2785,6587,6588,6589, # 6208 -6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605, # 6224 -6606,6607,6608,6609,6610,6611,6612,4826,6613,6614,6615,4827,6616,6617,6618,6619, # 6240 -6620,6621,6622,6623,6624,6625,4164,6626,6627,6628,6629,6630,6631,6632,6633,6634, # 6256 -3547,6635,4828,6636,6637,6638,6639,6640,6641,6642,3951,2984,6643,6644,6645,6646, # 6272 -6647,6648,6649,4165,6650,4829,6651,6652,4830,6653,6654,6655,6656,6657,6658,6659, # 6288 -6660,6661,6662,4831,6663,6664,6665,6666,6667,6668,6669,6670,6671,4166,6672,4832, # 6304 -3952,6673,6674,6675,6676,4833,6677,6678,6679,4167,6680,6681,6682,3198,6683,6684, # 6320 -6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,4834,6698,6699, # 6336 -6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715, # 6352 -6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731, # 6368 -6732,6733,6734,4443,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,4444, # 6384 -6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761, # 6400 -6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777, # 6416 -6778,6779,6780,6781,4168,6782,6783,3442,6784,6785,6786,6787,6788,6789,6790,6791, # 6432 -4169,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806, # 6448 -6807,6808,6809,6810,6811,4835,6812,6813,6814,4445,6815,6816,4446,6817,6818,6819, # 6464 -6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835, # 6480 -3548,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,4836,6847,6848,6849, # 6496 -6850,6851,6852,6853,6854,3953,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864, # 6512 -6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,3199,6878,6879, # 6528 -6880,6881,6882,4447,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894, # 6544 -6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,4170,6905,6906,6907,6908,6909, # 6560 -6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925, # 6576 -6926,6927,4837,6928,6929,6930,6931,6932,6933,6934,6935,6936,3346,6937,6938,4838, # 6592 -6939,6940,6941,4448,6942,6943,6944,6945,6946,4449,6947,6948,6949,6950,6951,6952, # 6608 -6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968, # 6624 -6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984, # 6640 -6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,3671,6995,6996,6997,6998,4839, # 6656 -6999,7000,7001,7002,3549,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013, # 6672 -7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029, # 6688 -7030,4840,7031,7032,7033,7034,7035,7036,7037,7038,4841,7039,7040,7041,7042,7043, # 6704 -7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059, # 6720 -7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,2985,7071,7072,7073,7074, # 6736 -7075,7076,7077,7078,7079,7080,4842,7081,7082,7083,7084,7085,7086,7087,7088,7089, # 6752 -7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105, # 6768 -7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,4450,7119,7120, # 6784 -7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136, # 6800 -7137,7138,7139,7140,7141,7142,7143,4843,7144,7145,7146,7147,7148,7149,7150,7151, # 6816 -7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167, # 6832 -7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183, # 6848 -7184,7185,7186,7187,7188,4171,4172,7189,7190,7191,7192,7193,7194,7195,7196,7197, # 6864 -7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213, # 6880 -7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229, # 6896 -7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245, # 6912 -7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261, # 6928 -7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277, # 6944 -7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293, # 6960 -7294,7295,7296,4844,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308, # 6976 -7309,7310,7311,7312,7313,7314,7315,7316,4451,7317,7318,7319,7320,7321,7322,7323, # 6992 -7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339, # 7008 -7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,4173,7354, # 7024 -7355,4845,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369, # 7040 -7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385, # 7056 -7386,7387,7388,4846,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400, # 7072 -7401,7402,7403,7404,7405,3672,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415, # 7088 -7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431, # 7104 -7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447, # 7120 -7448,7449,7450,7451,7452,7453,4452,7454,3200,7455,7456,7457,7458,7459,7460,7461, # 7136 -7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,4847,7475,7476, # 7152 -7477,3133,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491, # 7168 -7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,3347,7503,7504,7505,7506, # 7184 -7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,4848, # 7200 -7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537, # 7216 -7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,3801,4849,7550,7551, # 7232 -7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, # 7248 -7568,7569,3035,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582, # 7264 -7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598, # 7280 -7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614, # 7296 -7615,7616,4850,7617,7618,3802,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628, # 7312 -7629,7630,7631,7632,4851,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643, # 7328 -7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659, # 7344 -7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,4453,7671,7672,7673,7674, # 7360 -7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690, # 7376 -7691,7692,7693,7694,7695,7696,7697,3443,7698,7699,7700,7701,7702,4454,7703,7704, # 7392 -7705,7706,7707,7708,7709,7710,7711,7712,7713,2472,7714,7715,7716,7717,7718,7719, # 7408 -7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,3954,7732,7733,7734, # 7424 -7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750, # 7440 -3134,7751,7752,4852,7753,7754,7755,4853,7756,7757,7758,7759,7760,4174,7761,7762, # 7456 -7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778, # 7472 -7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794, # 7488 -7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,4854,7806,7807,7808,7809, # 7504 -7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825, # 7520 -4855,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7536 -7841,7842,7843,7844,7845,7846,7847,3955,7848,7849,7850,7851,7852,7853,7854,7855, # 7552 -7856,7857,7858,7859,7860,3444,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870, # 7568 -7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886, # 7584 -7887,7888,7889,7890,7891,4175,7892,7893,7894,7895,7896,4856,4857,7897,7898,7899, # 7600 -7900,2598,7901,7902,7903,7904,7905,7906,7907,7908,4455,7909,7910,7911,7912,7913, # 7616 -7914,3201,7915,7916,7917,7918,7919,7920,7921,4858,7922,7923,7924,7925,7926,7927, # 7632 -7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943, # 7648 -7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959, # 7664 -7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975, # 7680 -7976,7977,7978,7979,7980,7981,4859,7982,7983,7984,7985,7986,7987,7988,7989,7990, # 7696 -7991,7992,7993,7994,7995,7996,4860,7997,7998,7999,8000,8001,8002,8003,8004,8005, # 7712 -8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,4176,8017,8018,8019,8020, # 7728 -8021,8022,8023,4861,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035, # 7744 -8036,4862,4456,8037,8038,8039,8040,4863,8041,8042,8043,8044,8045,8046,8047,8048, # 7760 -8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064, # 7776 -8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080, # 7792 -8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096, # 7808 -8097,8098,8099,4864,4177,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110, # 7824 -8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,4178,8121,8122,8123,8124,8125, # 7840 -8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141, # 7856 -8142,8143,8144,8145,4865,4866,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155, # 7872 -8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,4179,8166,8167,8168,8169,8170, # 7888 -8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,4457,8182,8183,8184,8185, # 7904 -8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201, # 7920 -8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217, # 7936 -8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233, # 7952 -8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249, # 7968 -8250,8251,8252,8253,8254,8255,8256,3445,8257,8258,8259,8260,8261,8262,4458,8263, # 7984 -8264,8265,8266,8267,8268,8269,8270,8271,8272,4459,8273,8274,8275,8276,3550,8277, # 8000 -8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,4460,8290,8291,8292, # 8016 -8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,4867, # 8032 -8308,8309,8310,8311,8312,3551,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322, # 8048 -8323,8324,8325,8326,4868,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337, # 8064 -8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353, # 8080 -8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,4869,4461,8364,8365,8366,8367, # 8096 -8368,8369,8370,4870,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382, # 8112 -8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398, # 8128 -8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,4871,8411,8412,8413, # 8144 -8414,8415,8416,8417,8418,8419,8420,8421,8422,4462,8423,8424,8425,8426,8427,8428, # 8160 -8429,8430,8431,8432,8433,2986,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443, # 8176 -8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459, # 8192 -8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475, # 8208 -8476,8477,8478,4180,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490, # 8224 -8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506, # 8240 -8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522, # 8256 -8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538, # 8272 -8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554, # 8288 -8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,4872,8565,8566,8567,8568,8569, # 8304 -8570,8571,8572,8573,4873,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584, # 8320 -8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600, # 8336 -8601,8602,8603,8604,8605,3803,8606,8607,8608,8609,8610,8611,8612,8613,4874,3804, # 8352 -8614,8615,8616,8617,8618,8619,8620,8621,3956,8622,8623,8624,8625,8626,8627,8628, # 8368 -8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,2865,8639,8640,8641,8642,8643, # 8384 -8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,4463,8657,8658, # 8400 -8659,4875,4876,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672, # 8416 -8673,8674,8675,8676,8677,8678,8679,8680,8681,4464,8682,8683,8684,8685,8686,8687, # 8432 -8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, # 8448 -8704,8705,8706,8707,8708,8709,2261,8710,8711,8712,8713,8714,8715,8716,8717,8718, # 8464 -8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,4181, # 8480 -8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749, # 8496 -8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,4877,8764, # 8512 -8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780, # 8528 -8781,8782,8783,8784,8785,8786,8787,8788,4878,8789,4879,8790,8791,8792,4880,8793, # 8544 -8794,8795,8796,8797,8798,8799,8800,8801,4881,8802,8803,8804,8805,8806,8807,8808, # 8560 -8809,8810,8811,8812,8813,8814,8815,3957,8816,8817,8818,8819,8820,8821,8822,8823, # 8576 -8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839, # 8592 -8840,8841,8842,8843,8844,8845,8846,8847,4882,8848,8849,8850,8851,8852,8853,8854, # 8608 -8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870, # 8624 -8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,3202,8885, # 8640 -8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901, # 8656 -8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917, # 8672 -8918,8919,8920,8921,8922,8923,8924,4465,8925,8926,8927,8928,8929,8930,8931,8932, # 8688 -4883,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,2214,8944,8945,8946, # 8704 -8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962, # 8720 -8963,8964,8965,4884,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977, # 8736 -8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,4885, # 8752 -8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008, # 8768 -9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,4182,9022,9023, # 8784 -9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039, # 8800 -9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055, # 8816 -9056,9057,9058,9059,9060,9061,9062,9063,4886,9064,9065,9066,9067,9068,9069,4887, # 8832 -9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085, # 8848 -9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101, # 8864 -9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117, # 8880 -9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133, # 8896 -9134,9135,9136,9137,9138,9139,9140,9141,3958,9142,9143,9144,9145,9146,9147,9148, # 8912 -9149,9150,9151,4888,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163, # 8928 -9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,4889,9176,9177,9178, # 8944 -9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194, # 8960 -9195,9196,9197,9198,9199,9200,9201,9202,9203,4890,9204,9205,9206,9207,9208,9209, # 8976 -9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,4466,9223,9224, # 8992 -9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240, # 9008 -9241,9242,9243,9244,9245,4891,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255, # 9024 -9256,9257,4892,9258,9259,9260,9261,4893,4894,9262,9263,9264,9265,9266,9267,9268, # 9040 -9269,9270,9271,9272,9273,4467,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283, # 9056 -9284,9285,3673,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298, # 9072 -9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314, # 9088 -9315,9316,9317,9318,9319,9320,9321,9322,4895,9323,9324,9325,9326,9327,9328,9329, # 9104 -9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345, # 9120 -9346,9347,4468,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360, # 9136 -9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,4896,9374,4469, # 9152 -9375,9376,9377,9378,9379,4897,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389, # 9168 -9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405, # 9184 -9406,4470,9407,2751,9408,9409,3674,3552,9410,9411,9412,9413,9414,9415,9416,9417, # 9200 -9418,9419,9420,9421,4898,9422,9423,9424,9425,9426,9427,9428,9429,3959,9430,9431, # 9216 -9432,9433,9434,9435,9436,4471,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446, # 9232 -9447,9448,9449,9450,3348,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461, # 9248 -9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,4899,9473,9474,9475,9476, # 9264 -9477,4900,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,3349,9489,9490, # 9280 -9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506, # 9296 -9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,4901,9521, # 9312 -9522,9523,9524,9525,9526,4902,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536, # 9328 -9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552, # 9344 -9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568, # 9360 -9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584, # 9376 -3805,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599, # 9392 -9600,9601,9602,4903,9603,9604,9605,9606,9607,4904,9608,9609,9610,9611,9612,9613, # 9408 -9614,4905,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628, # 9424 -9629,9630,9631,9632,4906,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643, # 9440 -4907,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658, # 9456 -9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,4183,9673, # 9472 -9674,9675,9676,9677,4908,9678,9679,9680,9681,4909,9682,9683,9684,9685,9686,9687, # 9488 -9688,9689,9690,4910,9691,9692,9693,3675,9694,9695,9696,2945,9697,9698,9699,9700, # 9504 -9701,9702,9703,9704,9705,4911,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715, # 9520 -9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731, # 9536 -9732,9733,9734,9735,4912,9736,9737,9738,9739,9740,4913,9741,9742,9743,9744,9745, # 9552 -9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,4914,9759,9760, # 9568 -9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776, # 9584 -9777,9778,9779,9780,9781,9782,4915,9783,9784,9785,9786,9787,9788,9789,9790,9791, # 9600 -9792,9793,4916,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806, # 9616 -9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822, # 9632 -9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838, # 9648 -9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854, # 9664 -9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,4917,9869, # 9680 -9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885, # 9696 -9886,9887,9888,9889,9890,9891,9892,4472,9893,9894,9895,9896,9897,3806,9898,9899, # 9712 -9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,4918, # 9728 -9915,9916,9917,4919,9918,9919,9920,9921,4184,9922,9923,9924,9925,9926,9927,9928, # 9744 -9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944, # 9760 -9945,9946,4920,9947,9948,9949,9950,9951,9952,9953,9954,9955,4185,9956,9957,9958, # 9776 -9959,9960,9961,9962,9963,9964,9965,4921,9966,9967,9968,4473,9969,9970,9971,9972, # 9792 -9973,9974,9975,9976,9977,4474,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987, # 9808 -9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003, # 9824 -10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019, # 9840 -10020,10021,4922,10022,4923,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033, # 9856 -10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,4924, # 9872 -10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064, # 9888 -10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080, # 9904 -10081,10082,10083,10084,10085,10086,10087,4475,10088,10089,10090,10091,10092,10093,10094,10095, # 9920 -10096,10097,4476,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110, # 9936 -10111,2174,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125, # 9952 -10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,3807, # 9968 -4186,4925,10141,10142,10143,10144,10145,10146,10147,4477,4187,10148,10149,10150,10151,10152, # 9984 -10153,4188,10154,10155,10156,10157,10158,10159,10160,10161,4926,10162,10163,10164,10165,10166, #10000 -10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182, #10016 -10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,3203,10193,10194,10195,10196,10197, #10032 -10198,10199,10200,4478,10201,10202,10203,10204,4479,10205,10206,10207,10208,10209,10210,10211, #10048 -10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227, #10064 -10228,10229,10230,10231,10232,10233,10234,4927,10235,10236,10237,10238,10239,10240,10241,10242, #10080 -10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258, #10096 -10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,4480, #10112 -4928,4929,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287, #10128 -10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303, #10144 -10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319, #10160 -10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,4930, #10176 -10335,10336,10337,10338,10339,10340,10341,10342,4931,10343,10344,10345,10346,10347,10348,10349, #10192 -10350,10351,10352,10353,10354,10355,3088,10356,2786,10357,10358,10359,10360,4189,10361,10362, #10208 -10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,4932,10376,10377, #10224 -10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,4933, #10240 -10393,10394,10395,4934,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407, #10256 -10408,10409,10410,10411,10412,3446,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422, #10272 -10423,4935,10424,10425,10426,10427,10428,10429,10430,4936,10431,10432,10433,10434,10435,10436, #10288 -10437,10438,10439,10440,10441,10442,10443,4937,10444,10445,10446,10447,4481,10448,10449,10450, #10304 -10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466, #10320 -10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482, #10336 -10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498, #10352 -10499,10500,10501,10502,10503,10504,10505,4938,10506,10507,10508,10509,10510,2552,10511,10512, #10368 -10513,10514,10515,10516,3447,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527, #10384 -10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543, #10400 -4482,10544,4939,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557, #10416 -10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,3676,4483,10568,10569,10570,10571, #10432 -10572,3448,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586, #10448 -10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602, #10464 -10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618, #10480 -10619,10620,10621,10622,10623,10624,10625,10626,10627,4484,10628,10629,10630,10631,10632,4940, #10496 -10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648, #10512 -10649,10650,10651,10652,10653,10654,10655,10656,4941,10657,10658,10659,2599,10660,10661,10662, #10528 -10663,10664,10665,10666,3089,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677, #10544 -10678,10679,10680,4942,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692, #10560 -10693,10694,10695,10696,10697,4485,10698,10699,10700,10701,10702,10703,10704,4943,10705,3677, #10576 -10706,10707,10708,10709,10710,10711,10712,4944,10713,10714,10715,10716,10717,10718,10719,10720, #10592 -10721,10722,10723,10724,10725,10726,10727,10728,4945,10729,10730,10731,10732,10733,10734,10735, #10608 -10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751, #10624 -10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,4946,10762,10763,10764,10765,10766, #10640 -10767,4947,4948,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780, #10656 -10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796, #10672 -10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812, #10688 -10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828, #10704 -10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844, #10720 -10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860, #10736 -10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876, #10752 -10877,10878,4486,10879,10880,10881,10882,10883,10884,10885,4949,10886,10887,10888,10889,10890, #10768 -10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906, #10784 -10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,4487,10920,10921, #10800 -10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,4950,10933,10934,10935,10936, #10816 -10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,4488,10950,10951, #10832 -10952,10953,10954,10955,10956,10957,10958,10959,4190,10960,10961,10962,10963,10964,10965,10966, #10848 -10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982, #10864 -10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998, #10880 -10999,11000,11001,11002,11003,11004,11005,11006,3960,11007,11008,11009,11010,11011,11012,11013, #10896 -11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029, #10912 -11030,11031,11032,4951,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044, #10928 -11045,11046,11047,4489,11048,11049,11050,11051,4952,11052,11053,11054,11055,11056,11057,11058, #10944 -4953,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,4954,11072, #10960 -11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088, #10976 -11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104, #10992 -11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,3808,11116,11117,11118,11119, #11008 -11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,4955, #11024 -11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150, #11040 -11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,4956,11162,11163,11164,11165, #11056 -11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,4957, #11072 -11181,11182,11183,11184,11185,11186,4958,11187,11188,11189,11190,11191,11192,11193,11194,11195, #11088 -11196,11197,11198,11199,11200,3678,11201,11202,11203,11204,11205,11206,4191,11207,11208,11209, #11104 -11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225, #11120 -11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241, #11136 -11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,4959,11252,11253,11254,11255,11256, #11152 -11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272, #11168 -11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288, #11184 -11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304, #11200 -11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,3679,11315,11316,11317,11318,4490, #11216 -11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334, #11232 -11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,4960,11348,11349, #11248 -11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365, #11264 -11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,3961,4961,11378,11379, #11280 -11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395, #11296 -11396,11397,4192,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410, #11312 -11411,4962,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425, #11328 -11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441, #11344 -11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457, #11360 -11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,4963,11470,11471,4491, #11376 -11472,11473,11474,11475,4964,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486, #11392 -11487,11488,11489,11490,11491,11492,4965,11493,11494,11495,11496,11497,11498,11499,11500,11501, #11408 -11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517, #11424 -11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,3962,11530,11531,11532, #11440 -11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548, #11456 -11549,11550,11551,11552,11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564, #11472 -4193,4194,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578, #11488 -11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,4966,4195,11592, #11504 -11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,3090,11605,11606,11607, #11520 -11608,11609,11610,4967,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622, #11536 -11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638, #11552 -11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654, #11568 -11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670, #11584 -11671,11672,11673,11674,4968,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685, #11600 -11686,11687,11688,11689,11690,11691,11692,11693,3809,11694,11695,11696,11697,11698,11699,11700, #11616 -11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716, #11632 -11717,11718,3553,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,4969, #11648 -11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,4492,11741,11742,11743,11744,11745, #11664 -11746,11747,11748,11749,11750,11751,11752,4970,11753,11754,11755,11756,11757,11758,11759,11760, #11680 -11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776, #11696 -11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,4971,11791, #11712 -11792,11793,11794,11795,11796,11797,4972,11798,11799,11800,11801,11802,11803,11804,11805,11806, #11728 -11807,11808,11809,11810,4973,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821, #11744 -11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,3680,3810,11835, #11760 -11836,4974,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850, #11776 -11851,11852,11853,11854,11855,11856,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866, #11792 -11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882, #11808 -11883,11884,4493,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897, #11824 -11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913, #11840 -11914,11915,4975,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928, #11856 -11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944, #11872 -11945,11946,11947,11948,11949,4976,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959, #11888 -11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975, #11904 -11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,4196,11988,11989,11990, #11920 -11991,11992,4977,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005, #11936 -12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021, #11952 -12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037, #11968 -12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053, #11984 -12054,12055,12056,12057,12058,12059,12060,12061,4978,12062,12063,12064,12065,12066,12067,12068, #12000 -12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084, #12016 -12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100, #12032 -12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116, #12048 -12117,12118,12119,12120,12121,12122,12123,4979,12124,12125,12126,12127,12128,4197,12129,12130, #12064 -12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146, #12080 -12147,12148,12149,12150,12151,12152,12153,12154,4980,12155,12156,12157,12158,12159,12160,4494, #12096 -12161,12162,12163,12164,3811,12165,12166,12167,12168,12169,4495,12170,12171,4496,12172,12173, #12112 -12174,12175,12176,3812,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188, #12128 -12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204, #12144 -12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220, #12160 -12221,4981,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235, #12176 -4982,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,4983,12246,12247,12248,12249, #12192 -4984,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264, #12208 -4985,12265,4497,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278, #12224 -12279,12280,12281,12282,12283,12284,12285,12286,12287,4986,12288,12289,12290,12291,12292,12293, #12240 -12294,12295,12296,2473,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308, #12256 -12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,3963,12320,12321,12322,12323, #12272 -12324,12325,12326,12327,12328,12329,12330,12331,12332,4987,12333,12334,12335,12336,12337,12338, #12288 -12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354, #12304 -12355,12356,12357,12358,12359,3964,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369, #12320 -12370,3965,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384, #12336 -12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400, #12352 -12401,12402,12403,12404,12405,12406,12407,12408,4988,12409,12410,12411,12412,12413,12414,12415, #12368 -12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431, #12384 -12432,12433,12434,12435,12436,12437,12438,3554,12439,12440,12441,12442,12443,12444,12445,12446, #12400 -12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462, #12416 -12463,12464,4989,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477, #12432 -12478,12479,12480,4990,12481,12482,12483,12484,12485,12486,12487,12488,12489,4498,12490,12491, #12448 -12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507, #12464 -12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523, #12480 -12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539, #12496 -12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,4991,12552,12553,12554, #12512 -12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570, #12528 -12571,12572,12573,12574,12575,12576,12577,12578,3036,12579,12580,12581,12582,12583,3966,12584, #12544 -12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600, #12560 -12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616, #12576 -12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632, #12592 -12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,4499,12647, #12608 -12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663, #12624 -12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679, #12640 -12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695, #12656 -12696,12697,12698,4992,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710, #12672 -12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726, #12688 -12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742, #12704 -12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758, #12720 -12759,12760,12761,12762,12763,12764,12765,12766,12767,12768,12769,12770,12771,12772,12773,12774, #12736 -12775,12776,12777,12778,4993,2175,12779,12780,12781,12782,12783,12784,12785,12786,4500,12787, #12752 -12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803, #12768 -12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819, #12784 -12820,12821,12822,12823,12824,12825,12826,4198,3967,12827,12828,12829,12830,12831,12832,12833, #12800 -12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849, #12816 -12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,4199,12862,12863,12864, #12832 -12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880, #12848 -12881,12882,12883,12884,12885,12886,12887,4501,12888,12889,12890,12891,12892,12893,12894,12895, #12864 -12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911, #12880 -12912,4994,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926, #12896 -12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942, #12912 -12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,1772,12957, #12928 -12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973, #12944 -12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989, #12960 -12990,12991,12992,12993,12994,12995,12996,12997,4502,12998,4503,12999,13000,13001,13002,13003, #12976 -4504,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018, #12992 -13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,3449,13030,13031,13032,13033, #13008 -13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049, #13024 -13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065, #13040 -13066,13067,13068,13069,13070,13071,13072,13073,13074,13075,13076,13077,13078,13079,13080,13081, #13056 -13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097, #13072 -13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113, #13088 -13114,13115,13116,13117,13118,3968,13119,4995,13120,13121,13122,13123,13124,13125,13126,13127, #13104 -4505,13128,13129,13130,13131,13132,13133,13134,4996,4506,13135,13136,13137,13138,13139,4997, #13120 -13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155, #13136 -13156,13157,13158,13159,4998,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170, #13152 -13171,13172,13173,13174,13175,13176,4999,13177,13178,13179,13180,13181,13182,13183,13184,13185, #13168 -13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201, #13184 -13202,13203,13204,13205,13206,5000,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216, #13200 -13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,4200,5001,13228,13229,13230, #13216 -13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,3969,13241,13242,13243,13244,3970, #13232 -13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260, #13248 -13261,13262,13263,13264,13265,13266,13267,13268,3450,13269,13270,13271,13272,13273,13274,13275, #13264 -13276,5002,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290, #13280 -13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,3813,13303,13304,13305, #13296 -13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321, #13312 -13322,13323,13324,13325,13326,13327,13328,4507,13329,13330,13331,13332,13333,13334,13335,13336, #13328 -13337,13338,13339,13340,13341,5003,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351, #13344 -13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367, #13360 -5004,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382, #13376 -13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398, #13392 -13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414, #13408 -13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430, #13424 -13431,13432,4508,13433,13434,13435,4201,13436,13437,13438,13439,13440,13441,13442,13443,13444, #13440 -13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,5005,13458,13459, #13456 -13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,4509,13471,13472,13473,13474, #13472 -13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490, #13488 -13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506, #13504 -13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522, #13520 -13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538, #13536 -13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554, #13552 -13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570, #13568 -13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586, #13584 -13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602, #13600 -13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618, #13616 -13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634, #13632 -13635,13636,13637,13638,13639,13640,13641,13642,5006,13643,13644,13645,13646,13647,13648,13649, #13648 -13650,13651,5007,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664, #13664 -13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680, #13680 -13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696, #13696 -13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712, #13712 -13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728, #13728 -13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744, #13744 -13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760, #13760 -13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,3273,13775, #13776 -13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791, #13792 -13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807, #13808 -13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823, #13824 -13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839, #13840 -13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855, #13856 -13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871, #13872 -13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887, #13888 -13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903, #13904 -13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919, #13920 -13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935, #13936 -13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951, #13952 -13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967, #13968 -13968,13969,13970,13971,13972) #13973 - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/big5prober.py b/plugin.video.alfa/lib/requests/packages/chardet/big5prober.py deleted file mode 100755 index 7382f7c5..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/big5prober.py +++ /dev/null @@ -1,42 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import Big5DistributionAnalysis -from .mbcssm import Big5SMModel - - -class Big5Prober(MultiByteCharSetProber): - def __init__(self): - MultiByteCharSetProber.__init__(self) - self._mCodingSM = CodingStateMachine(Big5SMModel) - self._mDistributionAnalyzer = Big5DistributionAnalysis() - self.reset() - - def get_charset_name(self): - return "Big5" diff --git a/plugin.video.alfa/lib/requests/packages/chardet/chardetect.py b/plugin.video.alfa/lib/requests/packages/chardet/chardetect.py deleted file mode 100755 index 59cafa26..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/chardetect.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python -""" -Script which takes one or more file paths and reports on their detected -encodings - -Example:: - - % chardetect somefile someotherfile - somefile: windows-1252 with confidence 0.5 - someotherfile: ascii with confidence 1.0 - -If no paths are provided, it takes its input from stdin. - -""" - -from __future__ import absolute_import, print_function, unicode_literals - -import argparse -import sys -from io import open - -from chardet import __version__ -from chardet.universaldetector import UniversalDetector - - -def description_of(lines, name='stdin'): - """ - Return a string describing the probable encoding of a file or - list of strings. - - :param lines: The lines to get the encoding of. - :type lines: Iterable of bytes - :param name: Name of file or collection of lines - :type name: str - """ - u = UniversalDetector() - for line in lines: - u.feed(line) - u.close() - result = u.result - if result['encoding']: - return '{0}: {1} with confidence {2}'.format(name, result['encoding'], - result['confidence']) - else: - return '{0}: no result'.format(name) - - -def main(argv=None): - ''' - Handles command line arguments and gets things started. - - :param argv: List of arguments, as if specified on the command-line. - If None, ``sys.argv[1:]`` is used instead. - :type argv: list of str - ''' - # Get command line arguments - parser = argparse.ArgumentParser( - description="Takes one or more file paths and reports their detected \ - encodings", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, - conflict_handler='resolve') - parser.add_argument('input', - help='File whose encoding we would like to determine.', - type=argparse.FileType('rb'), nargs='*', - default=[sys.stdin]) - parser.add_argument('--version', action='version', - version='%(prog)s {0}'.format(__version__)) - args = parser.parse_args(argv) - - for f in args.input: - if f.isatty(): - print("You are running chardetect interactively. Press " + - "CTRL-D twice at the start of a blank line to signal the " + - "end of your input. If you want help, run chardetect " + - "--help\n", file=sys.stderr) - print(description_of(f, f.name)) - - -if __name__ == '__main__': - main() diff --git a/plugin.video.alfa/lib/requests/packages/chardet/chardistribution.py b/plugin.video.alfa/lib/requests/packages/chardet/chardistribution.py deleted file mode 100755 index dfd3355e..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/chardistribution.py +++ /dev/null @@ -1,231 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .euctwfreq import (EUCTWCharToFreqOrder, EUCTW_TABLE_SIZE, - EUCTW_TYPICAL_DISTRIBUTION_RATIO) -from .euckrfreq import (EUCKRCharToFreqOrder, EUCKR_TABLE_SIZE, - EUCKR_TYPICAL_DISTRIBUTION_RATIO) -from .gb2312freq import (GB2312CharToFreqOrder, GB2312_TABLE_SIZE, - GB2312_TYPICAL_DISTRIBUTION_RATIO) -from .big5freq import (Big5CharToFreqOrder, BIG5_TABLE_SIZE, - BIG5_TYPICAL_DISTRIBUTION_RATIO) -from .jisfreq import (JISCharToFreqOrder, JIS_TABLE_SIZE, - JIS_TYPICAL_DISTRIBUTION_RATIO) -from .compat import wrap_ord - -ENOUGH_DATA_THRESHOLD = 1024 -SURE_YES = 0.99 -SURE_NO = 0.01 -MINIMUM_DATA_THRESHOLD = 3 - - -class CharDistributionAnalysis: - def __init__(self): - # Mapping table to get frequency order from char order (get from - # GetOrder()) - self._mCharToFreqOrder = None - self._mTableSize = None # Size of above table - # This is a constant value which varies from language to language, - # used in calculating confidence. See - # http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html - # for further detail. - self._mTypicalDistributionRatio = None - self.reset() - - def reset(self): - """reset analyser, clear any state""" - # If this flag is set to True, detection is done and conclusion has - # been made - self._mDone = False - self._mTotalChars = 0 # Total characters encountered - # The number of characters whose frequency order is less than 512 - self._mFreqChars = 0 - - def feed(self, aBuf, aCharLen): - """feed a character with known length""" - if aCharLen == 2: - # we only care about 2-bytes character in our distribution analysis - order = self.get_order(aBuf) - else: - order = -1 - if order >= 0: - self._mTotalChars += 1 - # order is valid - if order < self._mTableSize: - if 512 > self._mCharToFreqOrder[order]: - self._mFreqChars += 1 - - def get_confidence(self): - """return confidence based on existing data""" - # if we didn't receive any character in our consideration range, - # return negative answer - if self._mTotalChars <= 0 or self._mFreqChars <= MINIMUM_DATA_THRESHOLD: - return SURE_NO - - if self._mTotalChars != self._mFreqChars: - r = (self._mFreqChars / ((self._mTotalChars - self._mFreqChars) - * self._mTypicalDistributionRatio)) - if r < SURE_YES: - return r - - # normalize confidence (we don't want to be 100% sure) - return SURE_YES - - def got_enough_data(self): - # It is not necessary to receive all data to draw conclusion. - # For charset detection, certain amount of data is enough - return self._mTotalChars > ENOUGH_DATA_THRESHOLD - - def get_order(self, aBuf): - # We do not handle characters based on the original encoding string, - # but convert this encoding string to a number, here called order. - # This allows multiple encodings of a language to share one frequency - # table. - return -1 - - -class EUCTWDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - CharDistributionAnalysis.__init__(self) - self._mCharToFreqOrder = EUCTWCharToFreqOrder - self._mTableSize = EUCTW_TABLE_SIZE - self._mTypicalDistributionRatio = EUCTW_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, aBuf): - # for euc-TW encoding, we are interested - # first byte range: 0xc4 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char = wrap_ord(aBuf[0]) - if first_char >= 0xC4: - return 94 * (first_char - 0xC4) + wrap_ord(aBuf[1]) - 0xA1 - else: - return -1 - - -class EUCKRDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - CharDistributionAnalysis.__init__(self) - self._mCharToFreqOrder = EUCKRCharToFreqOrder - self._mTableSize = EUCKR_TABLE_SIZE - self._mTypicalDistributionRatio = EUCKR_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, aBuf): - # for euc-KR encoding, we are interested - # first byte range: 0xb0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char = wrap_ord(aBuf[0]) - if first_char >= 0xB0: - return 94 * (first_char - 0xB0) + wrap_ord(aBuf[1]) - 0xA1 - else: - return -1 - - -class GB2312DistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - CharDistributionAnalysis.__init__(self) - self._mCharToFreqOrder = GB2312CharToFreqOrder - self._mTableSize = GB2312_TABLE_SIZE - self._mTypicalDistributionRatio = GB2312_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, aBuf): - # for GB2312 encoding, we are interested - # first byte range: 0xb0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char, second_char = wrap_ord(aBuf[0]), wrap_ord(aBuf[1]) - if (first_char >= 0xB0) and (second_char >= 0xA1): - return 94 * (first_char - 0xB0) + second_char - 0xA1 - else: - return -1 - - -class Big5DistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - CharDistributionAnalysis.__init__(self) - self._mCharToFreqOrder = Big5CharToFreqOrder - self._mTableSize = BIG5_TABLE_SIZE - self._mTypicalDistributionRatio = BIG5_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, aBuf): - # for big5 encoding, we are interested - # first byte range: 0xa4 -- 0xfe - # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe - # no validation needed here. State machine has done that - first_char, second_char = wrap_ord(aBuf[0]), wrap_ord(aBuf[1]) - if first_char >= 0xA4: - if second_char >= 0xA1: - return 157 * (first_char - 0xA4) + second_char - 0xA1 + 63 - else: - return 157 * (first_char - 0xA4) + second_char - 0x40 - else: - return -1 - - -class SJISDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - CharDistributionAnalysis.__init__(self) - self._mCharToFreqOrder = JISCharToFreqOrder - self._mTableSize = JIS_TABLE_SIZE - self._mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, aBuf): - # for sjis encoding, we are interested - # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe - # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe - # no validation needed here. State machine has done that - first_char, second_char = wrap_ord(aBuf[0]), wrap_ord(aBuf[1]) - if (first_char >= 0x81) and (first_char <= 0x9F): - order = 188 * (first_char - 0x81) - elif (first_char >= 0xE0) and (first_char <= 0xEF): - order = 188 * (first_char - 0xE0 + 31) - else: - return -1 - order = order + second_char - 0x40 - if second_char > 0x7F: - order = -1 - return order - - -class EUCJPDistributionAnalysis(CharDistributionAnalysis): - def __init__(self): - CharDistributionAnalysis.__init__(self) - self._mCharToFreqOrder = JISCharToFreqOrder - self._mTableSize = JIS_TABLE_SIZE - self._mTypicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO - - def get_order(self, aBuf): - # for euc-JP encoding, we are interested - # first byte range: 0xa0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - char = wrap_ord(aBuf[0]) - if char >= 0xA0: - return 94 * (char - 0xA1) + wrap_ord(aBuf[1]) - 0xa1 - else: - return -1 diff --git a/plugin.video.alfa/lib/requests/packages/chardet/charsetgroupprober.py b/plugin.video.alfa/lib/requests/packages/chardet/charsetgroupprober.py deleted file mode 100755 index 29596547..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/charsetgroupprober.py +++ /dev/null @@ -1,106 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from . import constants -import sys -from .charsetprober import CharSetProber - - -class CharSetGroupProber(CharSetProber): - def __init__(self): - CharSetProber.__init__(self) - self._mActiveNum = 0 - self._mProbers = [] - self._mBestGuessProber = None - - def reset(self): - CharSetProber.reset(self) - self._mActiveNum = 0 - for prober in self._mProbers: - if prober: - prober.reset() - prober.active = True - self._mActiveNum += 1 - self._mBestGuessProber = None - - def get_charset_name(self): - if not self._mBestGuessProber: - self.get_confidence() - if not self._mBestGuessProber: - return None -# self._mBestGuessProber = self._mProbers[0] - return self._mBestGuessProber.get_charset_name() - - def feed(self, aBuf): - for prober in self._mProbers: - if not prober: - continue - if not prober.active: - continue - st = prober.feed(aBuf) - if not st: - continue - if st == constants.eFoundIt: - self._mBestGuessProber = prober - return self.get_state() - elif st == constants.eNotMe: - prober.active = False - self._mActiveNum -= 1 - if self._mActiveNum <= 0: - self._mState = constants.eNotMe - return self.get_state() - return self.get_state() - - def get_confidence(self): - st = self.get_state() - if st == constants.eFoundIt: - return 0.99 - elif st == constants.eNotMe: - return 0.01 - bestConf = 0.0 - self._mBestGuessProber = None - for prober in self._mProbers: - if not prober: - continue - if not prober.active: - if constants._debug: - sys.stderr.write(prober.get_charset_name() - + ' not active\n') - continue - cf = prober.get_confidence() - if constants._debug: - sys.stderr.write('%s confidence = %s\n' % - (prober.get_charset_name(), cf)) - if bestConf < cf: - bestConf = cf - self._mBestGuessProber = prober - if not self._mBestGuessProber: - return 0.0 - return bestConf -# else: -# self._mBestGuessProber = self._mProbers[0] -# return self._mBestGuessProber.get_confidence() diff --git a/plugin.video.alfa/lib/requests/packages/chardet/charsetprober.py b/plugin.video.alfa/lib/requests/packages/chardet/charsetprober.py deleted file mode 100755 index e0a114b0..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/charsetprober.py +++ /dev/null @@ -1,62 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from . import constants -import re - - -class CharSetProber: - def __init__(self): - pass - - def reset(self): - self._mState = constants.eDetecting - - def get_charset_name(self): - return None - - def feed(self, aBuf): - pass - - def get_state(self): - return self._mState - - def get_confidence(self): - return 0.0 - - def filter_high_bit_only(self, aBuf): - aBuf = re.sub(b'([\x00-\x7F])+', b' ', aBuf) - return aBuf - - def filter_without_english_letters(self, aBuf): - aBuf = re.sub(b'([A-Za-z])+', b' ', aBuf) - return aBuf - - def filter_with_english_letters(self, aBuf): - # TODO - return aBuf diff --git a/plugin.video.alfa/lib/requests/packages/chardet/codingstatemachine.py b/plugin.video.alfa/lib/requests/packages/chardet/codingstatemachine.py deleted file mode 100755 index 1bda9ff1..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/codingstatemachine.py +++ /dev/null @@ -1,61 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .constants import eStart -from .compat import wrap_ord - - -class CodingStateMachine: - def __init__(self, sm): - self._mModel = sm - self._mCurrentBytePos = 0 - self._mCurrentCharLen = 0 - self.reset() - - def reset(self): - self._mCurrentState = eStart - - def next_state(self, c): - # for each byte we get its class - # if it is first byte, we also get byte length - # PY3K: aBuf is a byte stream, so c is an int, not a byte - byteCls = self._mModel['classTable'][wrap_ord(c)] - if self._mCurrentState == eStart: - self._mCurrentBytePos = 0 - self._mCurrentCharLen = self._mModel['charLenTable'][byteCls] - # from byte's class and stateTable, we get its next state - curr_state = (self._mCurrentState * self._mModel['classFactor'] - + byteCls) - self._mCurrentState = self._mModel['stateTable'][curr_state] - self._mCurrentBytePos += 1 - return self._mCurrentState - - def get_current_charlen(self): - return self._mCurrentCharLen - - def get_coding_state_machine(self): - return self._mModel['name'] diff --git a/plugin.video.alfa/lib/requests/packages/chardet/compat.py b/plugin.video.alfa/lib/requests/packages/chardet/compat.py deleted file mode 100755 index 81cbcd80..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/compat.py +++ /dev/null @@ -1,34 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# Contributor(s): -# Ian Cordasco - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import sys - - -if sys.version_info < (3, 0): - base_str = (str, unicode) -else: - base_str = (bytes, str) - - -def wrap_ord(a): - if sys.version_info < (3, 0) and isinstance(a, base_str): - return ord(a) - else: - return a diff --git a/plugin.video.alfa/lib/requests/packages/chardet/constants.py b/plugin.video.alfa/lib/requests/packages/chardet/constants.py deleted file mode 100755 index a3d27de2..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/constants.py +++ /dev/null @@ -1,39 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -_debug = 0 - -eDetecting = 0 -eFoundIt = 1 -eNotMe = 2 - -eStart = 0 -eError = 1 -eItsMe = 2 - -SHORTCUT_THRESHOLD = 0.95 diff --git a/plugin.video.alfa/lib/requests/packages/chardet/cp949prober.py b/plugin.video.alfa/lib/requests/packages/chardet/cp949prober.py deleted file mode 100755 index 543501fe..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/cp949prober.py +++ /dev/null @@ -1,44 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCKRDistributionAnalysis -from .mbcssm import CP949SMModel - - -class CP949Prober(MultiByteCharSetProber): - def __init__(self): - MultiByteCharSetProber.__init__(self) - self._mCodingSM = CodingStateMachine(CP949SMModel) - # NOTE: CP949 is a superset of EUC-KR, so the distribution should be - # not different. - self._mDistributionAnalyzer = EUCKRDistributionAnalysis() - self.reset() - - def get_charset_name(self): - return "CP949" diff --git a/plugin.video.alfa/lib/requests/packages/chardet/escprober.py b/plugin.video.alfa/lib/requests/packages/chardet/escprober.py deleted file mode 100755 index 0063935c..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/escprober.py +++ /dev/null @@ -1,86 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from . import constants -from .escsm import (HZSMModel, ISO2022CNSMModel, ISO2022JPSMModel, - ISO2022KRSMModel) -from .charsetprober import CharSetProber -from .codingstatemachine import CodingStateMachine -from .compat import wrap_ord - - -class EscCharSetProber(CharSetProber): - def __init__(self): - CharSetProber.__init__(self) - self._mCodingSM = [ - CodingStateMachine(HZSMModel), - CodingStateMachine(ISO2022CNSMModel), - CodingStateMachine(ISO2022JPSMModel), - CodingStateMachine(ISO2022KRSMModel) - ] - self.reset() - - def reset(self): - CharSetProber.reset(self) - for codingSM in self._mCodingSM: - if not codingSM: - continue - codingSM.active = True - codingSM.reset() - self._mActiveSM = len(self._mCodingSM) - self._mDetectedCharset = None - - def get_charset_name(self): - return self._mDetectedCharset - - def get_confidence(self): - if self._mDetectedCharset: - return 0.99 - else: - return 0.00 - - def feed(self, aBuf): - for c in aBuf: - # PY3K: aBuf is a byte array, so c is an int, not a byte - for codingSM in self._mCodingSM: - if not codingSM: - continue - if not codingSM.active: - continue - codingState = codingSM.next_state(wrap_ord(c)) - if codingState == constants.eError: - codingSM.active = False - self._mActiveSM -= 1 - if self._mActiveSM <= 0: - self._mState = constants.eNotMe - return self.get_state() - elif codingState == constants.eItsMe: - self._mState = constants.eFoundIt - self._mDetectedCharset = codingSM.get_coding_state_machine() # nopep8 - return self.get_state() - - return self.get_state() diff --git a/plugin.video.alfa/lib/requests/packages/chardet/escsm.py b/plugin.video.alfa/lib/requests/packages/chardet/escsm.py deleted file mode 100755 index 1cf3aa6d..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/escsm.py +++ /dev/null @@ -1,242 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .constants import eStart, eError, eItsMe - -HZ_cls = ( -1,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,0,0,0,0, # 20 - 27 -0,0,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,0,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,4,0,5,2,0, # 78 - 7f -1,1,1,1,1,1,1,1, # 80 - 87 -1,1,1,1,1,1,1,1, # 88 - 8f -1,1,1,1,1,1,1,1, # 90 - 97 -1,1,1,1,1,1,1,1, # 98 - 9f -1,1,1,1,1,1,1,1, # a0 - a7 -1,1,1,1,1,1,1,1, # a8 - af -1,1,1,1,1,1,1,1, # b0 - b7 -1,1,1,1,1,1,1,1, # b8 - bf -1,1,1,1,1,1,1,1, # c0 - c7 -1,1,1,1,1,1,1,1, # c8 - cf -1,1,1,1,1,1,1,1, # d0 - d7 -1,1,1,1,1,1,1,1, # d8 - df -1,1,1,1,1,1,1,1, # e0 - e7 -1,1,1,1,1,1,1,1, # e8 - ef -1,1,1,1,1,1,1,1, # f0 - f7 -1,1,1,1,1,1,1,1, # f8 - ff -) - -HZ_st = ( -eStart,eError, 3,eStart,eStart,eStart,eError,eError,# 00-07 -eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 08-0f -eItsMe,eItsMe,eError,eError,eStart,eStart, 4,eError,# 10-17 - 5,eError, 6,eError, 5, 5, 4,eError,# 18-1f - 4,eError, 4, 4, 4,eError, 4,eError,# 20-27 - 4,eItsMe,eStart,eStart,eStart,eStart,eStart,eStart,# 28-2f -) - -HZCharLenTable = (0, 0, 0, 0, 0, 0) - -HZSMModel = {'classTable': HZ_cls, - 'classFactor': 6, - 'stateTable': HZ_st, - 'charLenTable': HZCharLenTable, - 'name': "HZ-GB-2312"} - -ISO2022CN_cls = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,0,0,0,0, # 20 - 27 -0,3,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,4,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022CN_st = ( -eStart, 3,eError,eStart,eStart,eStart,eStart,eStart,# 00-07 -eStart,eError,eError,eError,eError,eError,eError,eError,# 08-0f -eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,# 10-17 -eItsMe,eItsMe,eItsMe,eError,eError,eError, 4,eError,# 18-1f -eError,eError,eError,eItsMe,eError,eError,eError,eError,# 20-27 - 5, 6,eError,eError,eError,eError,eError,eError,# 28-2f -eError,eError,eError,eItsMe,eError,eError,eError,eError,# 30-37 -eError,eError,eError,eError,eError,eItsMe,eError,eStart,# 38-3f -) - -ISO2022CNCharLenTable = (0, 0, 0, 0, 0, 0, 0, 0, 0) - -ISO2022CNSMModel = {'classTable': ISO2022CN_cls, - 'classFactor': 9, - 'stateTable': ISO2022CN_st, - 'charLenTable': ISO2022CNCharLenTable, - 'name': "ISO-2022-CN"} - -ISO2022JP_cls = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,2,2, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,7,0,0,0, # 20 - 27 -3,0,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -6,0,4,0,8,0,0,0, # 40 - 47 -0,9,5,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022JP_st = ( -eStart, 3,eError,eStart,eStart,eStart,eStart,eStart,# 00-07 -eStart,eStart,eError,eError,eError,eError,eError,eError,# 08-0f -eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 10-17 -eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,# 18-1f -eError, 5,eError,eError,eError, 4,eError,eError,# 20-27 -eError,eError,eError, 6,eItsMe,eError,eItsMe,eError,# 28-2f -eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,# 30-37 -eError,eError,eError,eItsMe,eError,eError,eError,eError,# 38-3f -eError,eError,eError,eError,eItsMe,eError,eStart,eStart,# 40-47 -) - -ISO2022JPCharLenTable = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0) - -ISO2022JPSMModel = {'classTable': ISO2022JP_cls, - 'classFactor': 10, - 'stateTable': ISO2022JP_st, - 'charLenTable': ISO2022JPCharLenTable, - 'name': "ISO-2022-JP"} - -ISO2022KR_cls = ( -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,3,0,0,0, # 20 - 27 -0,4,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,5,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -) - -ISO2022KR_st = ( -eStart, 3,eError,eStart,eStart,eStart,eError,eError,# 00-07 -eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,# 08-0f -eItsMe,eItsMe,eError,eError,eError, 4,eError,eError,# 10-17 -eError,eError,eError,eError, 5,eError,eError,eError,# 18-1f -eError,eError,eError,eItsMe,eStart,eStart,eStart,eStart,# 20-27 -) - -ISO2022KRCharLenTable = (0, 0, 0, 0, 0, 0) - -ISO2022KRSMModel = {'classTable': ISO2022KR_cls, - 'classFactor': 6, - 'stateTable': ISO2022KR_st, - 'charLenTable': ISO2022KRCharLenTable, - 'name': "ISO-2022-KR"} - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/eucjpprober.py b/plugin.video.alfa/lib/requests/packages/chardet/eucjpprober.py deleted file mode 100755 index d70cfbbb..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/eucjpprober.py +++ /dev/null @@ -1,90 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import sys -from . import constants -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCJPDistributionAnalysis -from .jpcntx import EUCJPContextAnalysis -from .mbcssm import EUCJPSMModel - - -class EUCJPProber(MultiByteCharSetProber): - def __init__(self): - MultiByteCharSetProber.__init__(self) - self._mCodingSM = CodingStateMachine(EUCJPSMModel) - self._mDistributionAnalyzer = EUCJPDistributionAnalysis() - self._mContextAnalyzer = EUCJPContextAnalysis() - self.reset() - - def reset(self): - MultiByteCharSetProber.reset(self) - self._mContextAnalyzer.reset() - - def get_charset_name(self): - return "EUC-JP" - - def feed(self, aBuf): - aLen = len(aBuf) - for i in range(0, aLen): - # PY3K: aBuf is a byte array, so aBuf[i] is an int, not a byte - codingState = self._mCodingSM.next_state(aBuf[i]) - if codingState == constants.eError: - if constants._debug: - sys.stderr.write(self.get_charset_name() - + ' prober hit error at byte ' + str(i) - + '\n') - self._mState = constants.eNotMe - break - elif codingState == constants.eItsMe: - self._mState = constants.eFoundIt - break - elif codingState == constants.eStart: - charLen = self._mCodingSM.get_current_charlen() - if i == 0: - self._mLastChar[1] = aBuf[0] - self._mContextAnalyzer.feed(self._mLastChar, charLen) - self._mDistributionAnalyzer.feed(self._mLastChar, charLen) - else: - self._mContextAnalyzer.feed(aBuf[i - 1:i + 1], charLen) - self._mDistributionAnalyzer.feed(aBuf[i - 1:i + 1], - charLen) - - self._mLastChar[0] = aBuf[aLen - 1] - - if self.get_state() == constants.eDetecting: - if (self._mContextAnalyzer.got_enough_data() and - (self.get_confidence() > constants.SHORTCUT_THRESHOLD)): - self._mState = constants.eFoundIt - - return self.get_state() - - def get_confidence(self): - contxtCf = self._mContextAnalyzer.get_confidence() - distribCf = self._mDistributionAnalyzer.get_confidence() - return max(contxtCf, distribCf) diff --git a/plugin.video.alfa/lib/requests/packages/chardet/euckrfreq.py b/plugin.video.alfa/lib/requests/packages/chardet/euckrfreq.py deleted file mode 100755 index c99fa996..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/euckrfreq.py +++ /dev/null @@ -1,596 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Sampling from about 20M text materials include literature and computer technology - -# 128 --> 0.79 -# 256 --> 0.92 -# 512 --> 0.986 -# 1024 --> 0.99944 -# 2048 --> 0.99999 -# -# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 -# Random Distribution Ration = 512 / (2350-512) = 0.279. -# -# Typical Distribution Ratio - -EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 - -EUCKR_TABLE_SIZE = 2352 - -# Char to FreqOrder table , -EUCKRCharToFreqOrder = ( \ - 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, -1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, -1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, - 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, - 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, - 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, -1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, - 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, - 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, -1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, -1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, -1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, -1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, -1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, - 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, -1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, -1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, -1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, -1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, - 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, -1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, - 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, - 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, -1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, - 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, -1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, - 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, - 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, -1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, -1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, -1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, -1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, - 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, -1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, - 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, - 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, -1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, -1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, -1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, -1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, -1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, -1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, - 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, - 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, - 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, -1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, - 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, -1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, - 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, - 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, -2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, - 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, - 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, -2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, -2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, -2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, - 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, - 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, -2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, - 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, -1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, -2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, -1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, -2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, -2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, -1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, - 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, -2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, -2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, - 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, - 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, -2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, -1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, -2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, -2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, -2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, -2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, -2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, -2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, -1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, -2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, -2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, -2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, -2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, -2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, -1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, -1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, -2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, -1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, -2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, -1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, - 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, -2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, - 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, -2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, - 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, -2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, -2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, - 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, -2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, -1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, - 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, -1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, -2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, -1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, -2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, - 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, -2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, -1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, -2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, -1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, -2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, -1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, - 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, -2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, -2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, - 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, - 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, -1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, -1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, - 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, -2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, -2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, - 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, - 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, - 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, -2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, - 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, - 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, -2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, -2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, - 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, -2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, -1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, - 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, -2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, -2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, -2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, - 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, - 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, - 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, -2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, -2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, -2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, -1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, -2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, - 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 -#Everything below is of no interest for detection purpose -2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658, -2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674, -2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690, -2691,2692,2693,2694,2695,2696,2697,2698,2699,1542, 880,2700,2701,2702,2703,2704, -2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720, -2721,2722,2723,2724,2725,1543,2726,2727,2728,2729,2730,2731,2732,1544,2733,2734, -2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750, -2751,2752,2753,2754,1545,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765, -2766,1546,2767,1547,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779, -2780,2781,2782,2783,2784,2785,2786,1548,2787,2788,2789,1109,2790,2791,2792,2793, -2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809, -2810,2811,2812,1329,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824, -2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840, -2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856, -1549,2857,2858,2859,2860,1550,2861,2862,1551,2863,2864,2865,2866,2867,2868,2869, -2870,2871,2872,2873,2874,1110,1330,2875,2876,2877,2878,2879,2880,2881,2882,2883, -2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899, -2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915, -2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,1331, -2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,1552,2944,2945, -2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961, -2962,2963,2964,1252,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976, -2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992, -2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008, -3009,3010,3011,3012,1553,3013,3014,3015,3016,3017,1554,3018,1332,3019,3020,3021, -3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037, -3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,1555,3051,3052, -3053,1556,1557,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066, -3067,1558,3068,3069,3070,3071,3072,3073,3074,3075,3076,1559,3077,3078,3079,3080, -3081,3082,3083,1253,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095, -3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,1152,3109,3110, -3111,3112,3113,1560,3114,3115,3116,3117,1111,3118,3119,3120,3121,3122,3123,3124, -3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140, -3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156, -3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172, -3173,3174,3175,3176,1333,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187, -3188,3189,1561,3190,3191,1334,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201, -3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217, -3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233, -3234,1562,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248, -3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264, -3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,1563,3278,3279, -3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295, -3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311, -3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327, -3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343, -3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359, -3360,3361,3362,3363,3364,1335,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374, -3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,1336,3388,3389, -3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405, -3406,3407,3408,3409,3410,3411,3412,3413,3414,1337,3415,3416,3417,3418,3419,1338, -3420,3421,3422,1564,1565,3423,3424,3425,3426,3427,3428,3429,3430,3431,1254,3432, -3433,3434,1339,3435,3436,3437,3438,3439,1566,3440,3441,3442,3443,3444,3445,3446, -3447,3448,3449,3450,3451,3452,3453,3454,1255,3455,3456,3457,3458,3459,1567,1191, -3460,1568,1569,3461,3462,3463,1570,3464,3465,3466,3467,3468,1571,3469,3470,3471, -3472,3473,1572,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486, -1340,3487,3488,3489,3490,3491,3492,1021,3493,3494,3495,3496,3497,3498,1573,3499, -1341,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,1342,3512,3513, -3514,3515,3516,1574,1343,3517,3518,3519,1575,3520,1576,3521,3522,3523,3524,3525, -3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541, -3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557, -3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573, -3574,3575,3576,3577,3578,3579,3580,1577,3581,3582,1578,3583,3584,3585,3586,3587, -3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603, -3604,1579,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618, -3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,1580,3630,3631,1581,3632, -3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648, -3649,3650,3651,3652,3653,3654,3655,3656,1582,3657,3658,3659,3660,3661,3662,3663, -3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679, -3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695, -3696,3697,3698,3699,3700,1192,3701,3702,3703,3704,1256,3705,3706,3707,3708,1583, -1257,3709,3710,3711,3712,3713,3714,3715,3716,1584,3717,3718,3719,3720,3721,3722, -3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738, -3739,3740,3741,3742,3743,3744,3745,1344,3746,3747,3748,3749,3750,3751,3752,3753, -3754,3755,3756,1585,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,1586,3767, -3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,1345,3779,3780,3781,3782, -3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,1346,1587,3796, -3797,1588,3798,3799,3800,3801,3802,3803,3804,3805,3806,1347,3807,3808,3809,3810, -3811,1589,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,1590,3822,3823,1591, -1348,3824,3825,3826,3827,3828,3829,3830,1592,3831,3832,1593,3833,3834,3835,3836, -3837,3838,3839,3840,3841,3842,3843,3844,1349,3845,3846,3847,3848,3849,3850,3851, -3852,3853,3854,3855,3856,3857,3858,1594,3859,3860,3861,3862,3863,3864,3865,3866, -3867,3868,3869,1595,3870,3871,3872,3873,1596,3874,3875,3876,3877,3878,3879,3880, -3881,3882,3883,3884,3885,3886,1597,3887,3888,3889,3890,3891,3892,3893,3894,3895, -1598,3896,3897,3898,1599,1600,3899,1350,3900,1351,3901,3902,1352,3903,3904,3905, -3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921, -3922,3923,3924,1258,3925,3926,3927,3928,3929,3930,3931,1193,3932,1601,3933,3934, -3935,3936,3937,3938,3939,3940,3941,3942,3943,1602,3944,3945,3946,3947,3948,1603, -3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964, -3965,1604,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,1353,3978, -3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,1354,3992,3993, -3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009, -4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,1355,4024, -4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040, -1605,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055, -4056,4057,4058,4059,4060,1606,4061,4062,4063,4064,1607,4065,4066,4067,4068,4069, -4070,4071,4072,4073,4074,4075,4076,1194,4077,4078,1608,4079,4080,4081,4082,4083, -4084,4085,4086,4087,1609,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098, -4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,1259,4109,4110,4111,4112,4113, -4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,1195,4125,4126,4127,1610, -4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,1356,4138,4139,4140,4141,4142, -4143,4144,1611,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157, -4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173, -4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189, -4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205, -4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,1612,4220, -4221,4222,4223,4224,4225,4226,4227,1357,4228,1613,4229,4230,4231,4232,4233,4234, -4235,4236,4237,4238,4239,4240,4241,4242,4243,1614,4244,4245,4246,4247,4248,4249, -4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265, -4266,4267,4268,4269,4270,1196,1358,4271,4272,4273,4274,4275,4276,4277,4278,4279, -4280,4281,4282,4283,4284,4285,4286,4287,1615,4288,4289,4290,4291,4292,4293,4294, -4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310, -4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326, -4327,4328,4329,4330,4331,4332,4333,4334,1616,4335,4336,4337,4338,4339,4340,4341, -4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357, -4358,4359,4360,1617,4361,4362,4363,4364,4365,1618,4366,4367,4368,4369,4370,4371, -4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387, -4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403, -4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,1619,4417,4418, -4419,4420,4421,4422,4423,4424,4425,1112,4426,4427,4428,4429,4430,1620,4431,4432, -4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,1260,1261,4443,4444,4445,4446, -4447,4448,4449,4450,4451,4452,4453,4454,4455,1359,4456,4457,4458,4459,4460,4461, -4462,4463,4464,4465,1621,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476, -4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,1055,4490,4491, -4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507, -4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,1622,4519,4520,4521,1623, -4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,1360,4536, -4537,4538,4539,4540,4541,4542,4543, 975,4544,4545,4546,4547,4548,4549,4550,4551, -4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567, -4568,4569,4570,4571,1624,4572,4573,4574,4575,4576,1625,4577,4578,4579,4580,4581, -4582,4583,4584,1626,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,1627, -4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611, -4612,4613,4614,4615,1628,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626, -4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642, -4643,4644,4645,4646,4647,4648,4649,1361,4650,4651,4652,4653,4654,4655,4656,4657, -4658,4659,4660,4661,1362,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672, -4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,1629,4683,4684,4685,4686,4687, -1630,4688,4689,4690,4691,1153,4692,4693,4694,1113,4695,4696,4697,4698,4699,4700, -4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,1197,4712,4713,4714,4715, -4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731, -4732,4733,4734,4735,1631,4736,1632,4737,4738,4739,4740,4741,4742,4743,4744,1633, -4745,4746,4747,4748,4749,1262,4750,4751,4752,4753,4754,1363,4755,4756,4757,4758, -4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,1634,4769,4770,4771,4772,4773, -4774,4775,4776,4777,4778,1635,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788, -4789,1636,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803, -4804,4805,4806,1637,4807,4808,4809,1638,4810,4811,4812,4813,4814,4815,4816,4817, -4818,1639,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832, -4833,1077,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847, -4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863, -4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879, -4880,4881,4882,4883,1640,4884,4885,1641,4886,4887,4888,4889,4890,4891,4892,4893, -4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909, -4910,4911,1642,4912,4913,4914,1364,4915,4916,4917,4918,4919,4920,4921,4922,4923, -4924,4925,4926,4927,4928,4929,4930,4931,1643,4932,4933,4934,4935,4936,4937,4938, -4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954, -4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970, -4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,1644,4981,4982,4983,4984,1645, -4985,4986,1646,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999, -5000,5001,5002,5003,5004,5005,1647,5006,1648,5007,5008,5009,5010,5011,5012,1078, -5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028, -1365,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,1649,5040,5041,5042, -5043,5044,5045,1366,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,1650,5056, -5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072, -5073,5074,5075,5076,5077,1651,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087, -5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103, -5104,5105,5106,5107,5108,5109,5110,1652,5111,5112,5113,5114,5115,5116,5117,5118, -1367,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,1653,5130,5131,5132, -5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148, -5149,1368,5150,1654,5151,1369,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161, -5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177, -5178,1370,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192, -5193,5194,5195,5196,5197,5198,1655,5199,5200,5201,5202,1656,5203,5204,5205,5206, -1371,5207,1372,5208,5209,5210,5211,1373,5212,5213,1374,5214,5215,5216,5217,5218, -5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234, -5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,1657,5248,5249, -5250,5251,1658,1263,5252,5253,5254,5255,5256,1375,5257,5258,5259,5260,5261,5262, -5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278, -5279,5280,5281,5282,5283,1659,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293, -5294,5295,5296,5297,5298,5299,5300,1660,5301,5302,5303,5304,5305,5306,5307,5308, -5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,1376,5322,5323, -5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,1198,5334,5335,5336,5337,5338, -5339,5340,5341,5342,5343,1661,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353, -5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369, -5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385, -5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,1264,5399,5400, -5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,1662,5413,5414,5415, -5416,1663,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430, -5431,5432,5433,5434,5435,5436,5437,5438,1664,5439,5440,5441,5442,5443,5444,5445, -5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461, -5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477, -5478,1154,5479,5480,5481,5482,5483,5484,5485,1665,5486,5487,5488,5489,5490,5491, -5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507, -5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523, -5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539, -5540,5541,5542,5543,5544,5545,5546,5547,5548,1377,5549,5550,5551,5552,5553,5554, -5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570, -1114,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585, -5586,5587,5588,5589,5590,5591,5592,1378,5593,5594,5595,5596,5597,5598,5599,5600, -5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,1379,5615, -5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631, -5632,5633,5634,1380,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646, -5647,5648,5649,1381,1056,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660, -1666,5661,5662,5663,5664,5665,5666,5667,5668,1667,5669,1668,5670,5671,5672,5673, -5674,5675,5676,5677,5678,1155,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688, -5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,1669,5699,5700,5701,5702,5703, -5704,5705,1670,5706,5707,5708,5709,5710,1671,5711,5712,5713,5714,1382,5715,5716, -5717,5718,5719,5720,5721,5722,5723,5724,5725,1672,5726,5727,1673,1674,5728,5729, -5730,5731,5732,5733,5734,5735,5736,1675,5737,5738,5739,5740,5741,5742,5743,5744, -1676,5745,5746,5747,5748,5749,5750,5751,1383,5752,5753,5754,5755,5756,5757,5758, -5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,1677,5769,5770,5771,5772,5773, -1678,5774,5775,5776, 998,5777,5778,5779,5780,5781,5782,5783,5784,5785,1384,5786, -5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,1679,5801, -5802,5803,1115,1116,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815, -5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831, -5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847, -5848,5849,5850,5851,5852,5853,5854,5855,1680,5856,5857,5858,5859,5860,5861,5862, -5863,5864,1681,5865,5866,5867,1682,5868,5869,5870,5871,5872,5873,5874,5875,5876, -5877,5878,5879,1683,5880,1684,5881,5882,5883,5884,1685,5885,5886,5887,5888,5889, -5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905, -5906,5907,1686,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, -5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,1687, -5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951, -5952,1688,1689,5953,1199,5954,5955,5956,5957,5958,5959,5960,5961,1690,5962,5963, -5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979, -5980,5981,1385,5982,1386,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993, -5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009, -6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025, -6026,6027,1265,6028,6029,1691,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039, -6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055, -6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071, -6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,1692,6085,6086, -6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102, -6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118, -6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,1693,6132,6133, -6134,6135,6136,1694,6137,6138,6139,6140,6141,1695,6142,6143,6144,6145,6146,6147, -6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163, -6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179, -6180,6181,6182,6183,6184,6185,1696,6186,6187,6188,6189,6190,6191,6192,6193,6194, -6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210, -6211,6212,6213,6214,6215,6216,6217,6218,6219,1697,6220,6221,6222,6223,6224,6225, -6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241, -6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,1698,6254,6255,6256, -6257,6258,6259,6260,6261,6262,6263,1200,6264,6265,6266,6267,6268,6269,6270,6271, #1024 -6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287, -6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,1699, -6303,6304,1700,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317, -6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333, -6334,6335,6336,6337,6338,6339,1701,6340,6341,6342,6343,6344,1387,6345,6346,6347, -6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363, -6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379, -6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395, -6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411, -6412,6413,1702,6414,6415,6416,6417,6418,6419,6420,6421,6422,1703,6423,6424,6425, -6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,1704,6439,6440, -6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456, -6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472, -6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488, -6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,1266, -6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519, -6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535, -6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551, -1705,1706,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565, -6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581, -6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597, -6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613, -6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629, -6630,6631,6632,6633,6634,6635,6636,6637,1388,6638,6639,6640,6641,6642,6643,6644, -1707,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659, -6660,6661,6662,6663,1708,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674, -1201,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689, -6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705, -6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721, -6722,6723,6724,6725,1389,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736, -1390,1709,6737,6738,6739,6740,6741,6742,1710,6743,6744,6745,6746,1391,6747,6748, -6749,6750,6751,6752,6753,6754,6755,6756,6757,1392,6758,6759,6760,6761,6762,6763, -6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779, -6780,1202,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794, -6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,1711, -6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825, -6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,1393,6837,6838,6839,6840, -6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856, -6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872, -6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888, -6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,1712,6903, -6904,6905,6906,6907,6908,6909,6910,1713,6911,6912,6913,6914,6915,6916,6917,6918, -6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934, -6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950, -6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966, -6967,6968,6969,6970,6971,6972,6973,6974,1714,6975,6976,6977,6978,6979,6980,6981, -6982,6983,6984,6985,6986,6987,6988,1394,6989,6990,6991,6992,6993,6994,6995,6996, -6997,6998,6999,7000,1715,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011, -7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027, -7028,1716,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042, -7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058, -7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074, -7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090, -7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106, -7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122, -7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138, -7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154, -7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170, -7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186, -7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202, -7203,7204,7205,7206,7207,1395,7208,7209,7210,7211,7212,7213,1717,7214,7215,7216, -7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232, -7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248, -7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264, -7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280, -7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296, -7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312, -7313,1718,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327, -7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343, -7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359, -7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375, -7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391, -7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407, -7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423, -7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439, -7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455, -7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471, -7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487, -7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503, -7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519, -7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535, -7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551, -7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, -7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583, -7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599, -7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615, -7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631, -7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647, -7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663, -7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679, -7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695, -7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711, -7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727, -7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743, -7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759, -7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775, -7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791, -7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807, -7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823, -7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839, -7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855, -7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871, -7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887, -7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903, -7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919, -7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, -7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, -7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, -7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, -7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, -8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, -8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, -8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, -8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, -8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, -8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, -8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, -8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, -8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, -8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, -8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, -8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, -8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, -8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, -8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, -8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, -8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271, -8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287, -8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303, -8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319, -8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335, -8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351, -8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367, -8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383, -8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399, -8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415, -8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431, -8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447, -8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463, -8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479, -8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495, -8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511, -8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527, -8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543, -8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559, -8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575, -8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591, -8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607, -8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623, -8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639, -8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655, -8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671, -8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687, -8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, -8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719, -8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735, -8736,8737,8738,8739,8740,8741) - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/euckrprober.py b/plugin.video.alfa/lib/requests/packages/chardet/euckrprober.py deleted file mode 100755 index def3e429..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/euckrprober.py +++ /dev/null @@ -1,42 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCKRDistributionAnalysis -from .mbcssm import EUCKRSMModel - - -class EUCKRProber(MultiByteCharSetProber): - def __init__(self): - MultiByteCharSetProber.__init__(self) - self._mCodingSM = CodingStateMachine(EUCKRSMModel) - self._mDistributionAnalyzer = EUCKRDistributionAnalysis() - self.reset() - - def get_charset_name(self): - return "EUC-KR" diff --git a/plugin.video.alfa/lib/requests/packages/chardet/euctwfreq.py b/plugin.video.alfa/lib/requests/packages/chardet/euctwfreq.py deleted file mode 100755 index b43ac783..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/euctwfreq.py +++ /dev/null @@ -1,428 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# EUCTW frequency table -# Converted from big5 work -# by Taiwan's Mandarin Promotion Council -# - -# 128 --> 0.42261 -# 256 --> 0.57851 -# 512 --> 0.74851 -# 1024 --> 0.89384 -# 2048 --> 0.97583 -# -# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 -# Random Distribution Ration = 512/(5401-512)=0.105 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - -EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 - -# Char to FreqOrder table , -EUCTW_TABLE_SIZE = 8102 - -EUCTWCharToFreqOrder = ( - 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742 -3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758 -1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774 - 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790 -3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806 -4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822 -7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838 - 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854 - 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870 - 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886 -2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902 -1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918 -3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934 - 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966 -3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982 -2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998 - 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014 -3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030 -1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046 -7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062 - 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078 -7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094 -1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110 - 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126 - 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142 -3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158 -3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174 - 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190 -2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206 -2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222 - 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238 - 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254 -3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270 -1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286 -1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302 -1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318 -2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334 - 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350 -4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366 -1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382 -7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398 -2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414 - 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430 - 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446 - 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462 - 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478 -7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494 - 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510 -1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526 - 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542 - 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558 -7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574 -1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590 - 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606 -3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622 -4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638 -3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654 - 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670 - 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686 -1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702 -4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718 -3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734 -3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750 -2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766 -7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782 -3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798 -7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814 -1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830 -2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846 -1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862 - 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878 -1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894 -4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910 -3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926 - 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942 - 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958 - 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974 -2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990 -7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006 -1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022 -2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038 -1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054 -1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070 -7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086 -7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102 -7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118 -3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134 -4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150 -1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166 -7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182 -2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198 -7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214 -3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230 -3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246 -7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262 -2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278 -7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294 - 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310 -4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326 -2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342 -7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358 -3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374 -2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390 -2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406 - 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422 -2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438 -1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454 -1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470 -2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486 -1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502 -7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518 -7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534 -2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550 -4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566 -1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582 -7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598 - 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614 -4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630 - 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646 -2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662 - 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678 -1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694 -1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710 - 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726 -3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742 -3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758 -1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774 -3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790 -7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806 -7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822 -1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838 -2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854 -1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870 -3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886 -2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902 -3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918 -2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934 -4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950 -4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966 -3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982 - 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998 -3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014 - 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030 -3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046 -3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062 -3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078 -1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094 -7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110 - 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126 -7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142 -1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158 - 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174 -4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190 -3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206 - 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222 -2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238 -2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254 -3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270 -1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286 -4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302 -2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318 -1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334 -1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350 -2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366 -3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382 -1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398 -7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414 -1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430 -4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446 -1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462 - 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478 -1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494 -3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510 -3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526 -2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542 -1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558 -4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574 - 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590 -7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606 -2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622 -3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638 -4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654 - 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670 -7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686 -7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702 -1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718 -4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734 -3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750 -2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766 -3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782 -3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798 -2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814 -1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830 -4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846 -3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862 -3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878 -2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894 -4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910 -7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926 -3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942 -2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958 -3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974 -1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990 -2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006 -3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022 -4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038 -2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054 -2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070 -7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086 -1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102 -2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118 -1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134 -3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150 -4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166 -2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182 -3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198 -3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214 -2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230 -4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246 -2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262 -3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278 -4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294 -7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310 -3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326 - 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342 -1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358 -4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374 -1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390 -4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406 -7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422 - 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438 -7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454 -2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470 -1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486 -1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502 -3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518 - 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534 - 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550 - 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566 -3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582 -2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598 - 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614 -7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630 -1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646 -3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662 -7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678 -1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694 -7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710 -4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726 -1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742 -2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758 -2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774 -4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790 - 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806 - 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822 -3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838 -3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854 -1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870 -2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886 -7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902 -1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918 -1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934 -3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950 - 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966 -1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982 -4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998 -7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014 -2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030 -3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046 - 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062 -1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078 -2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094 -2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110 -7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126 -7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142 -7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158 -2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174 -2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190 -1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206 -4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222 -3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238 -3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254 -4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270 -4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286 -2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302 -2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318 -7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334 -4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350 -7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366 -2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382 -1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398 -3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414 -4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430 -2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446 - 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462 -2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478 -1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494 -2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510 -2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526 -4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542 -7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558 -1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574 -3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590 -7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606 -1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622 -8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638 -2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654 -8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670 -2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686 -2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702 -8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718 -8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734 -8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750 - 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766 -8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782 -4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798 -3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814 -8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830 -1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846 -8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862 - 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878 -1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894 - 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910 -4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926 -1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942 -4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958 -1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974 - 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990 -3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006 -4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022 -8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038 - 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054 -3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070 - 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086 -2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102 -#Everything below is of no interest for detection purpose -2515,1613,4582,8119,3312,3866,2516,8120,4058,8121,1637,4059,2466,4583,3867,8122, # 8118 -2493,3016,3734,8123,8124,2192,8125,8126,2162,8127,8128,8129,8130,8131,8132,8133, # 8134 -8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149, # 8150 -8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165, # 8166 -8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181, # 8182 -8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197, # 8198 -8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213, # 8214 -8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229, # 8230 -8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245, # 8246 -8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261, # 8262 -8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277, # 8278 -8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293, # 8294 -8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309, # 8310 -8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325, # 8326 -8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341, # 8342 -8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357, # 8358 -8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373, # 8374 -8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389, # 8390 -8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405, # 8406 -8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421, # 8422 -8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437, # 8438 -8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453, # 8454 -8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469, # 8470 -8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485, # 8486 -8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501, # 8502 -8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517, # 8518 -8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533, # 8534 -8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549, # 8550 -8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565, # 8566 -8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581, # 8582 -8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597, # 8598 -8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613, # 8614 -8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629, # 8630 -8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645, # 8646 -8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661, # 8662 -8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677, # 8678 -8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693, # 8694 -8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709, # 8710 -8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725, # 8726 -8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741) # 8742 - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/euctwprober.py b/plugin.video.alfa/lib/requests/packages/chardet/euctwprober.py deleted file mode 100755 index e601adfd..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/euctwprober.py +++ /dev/null @@ -1,41 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import EUCTWDistributionAnalysis -from .mbcssm import EUCTWSMModel - -class EUCTWProber(MultiByteCharSetProber): - def __init__(self): - MultiByteCharSetProber.__init__(self) - self._mCodingSM = CodingStateMachine(EUCTWSMModel) - self._mDistributionAnalyzer = EUCTWDistributionAnalysis() - self.reset() - - def get_charset_name(self): - return "EUC-TW" diff --git a/plugin.video.alfa/lib/requests/packages/chardet/gb2312freq.py b/plugin.video.alfa/lib/requests/packages/chardet/gb2312freq.py deleted file mode 100755 index 1a7ecc07..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/gb2312freq.py +++ /dev/null @@ -1,472 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# GB2312 most frequently used character table -# -# Char to FreqOrder table , from hz6763 - -# 512 --> 0.79 -- 0.79 -# 1024 --> 0.92 -- 0.13 -# 2048 --> 0.98 -- 0.06 -# 6768 --> 1.00 -- 0.02 -# -# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 -# Random Distribution Ration = 512 / (3755 - 512) = 0.157 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR - -GB2312_TYPICAL_DISTRIBUTION_RATIO = 0.9 - -GB2312_TABLE_SIZE = 3760 - -GB2312CharToFreqOrder = ( -1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, -2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, -2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, - 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, -1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, -1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, - 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, -1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, -2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, -3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, - 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, -1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, - 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, -2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, - 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, -2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, -1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, -3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, - 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, -1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, - 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, -2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, -1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, -3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, -1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, -2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, -1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, - 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, -3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, -3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, - 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, -3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, - 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, -1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, -3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, -2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, -1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, - 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, -1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, -4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, - 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, -3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, -3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, - 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, -1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, -2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, -1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, -1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, - 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, -3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, -3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, -4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, - 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, -3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, -1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, -1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, -4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, - 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, - 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, -3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, -1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, - 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, -1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, -2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, - 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, - 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, - 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, -3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, -4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, -3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, - 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, -2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, -2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, -2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, - 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, -2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, - 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, - 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, - 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, -3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, -2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, -2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, -1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, - 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, -2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, - 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, - 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, -1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, -1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, - 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, - 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, -1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, -2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, -3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, -2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, -2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, -2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, -3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, -1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, -1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, -2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, -1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, -3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, -1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, -1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, -3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, - 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, -2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, -1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, -4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, -1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, -1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, -3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, -1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, - 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, - 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, -1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, - 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, -1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, -1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, - 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, -3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, -4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, -3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, -2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, -2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, -1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, -3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, -2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, -1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, -1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, - 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, -2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, -2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, -3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, -4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, -3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, - 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, -3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, -2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, -1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, - 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, - 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, -3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, -4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, -2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, -1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, -1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, - 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, -1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, -3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, - 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, - 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, -1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, - 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, -1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, - 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, -2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, - 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, -2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, -2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, -1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, -1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, -2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, - 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, -1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, -1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, -2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, -2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, -3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, -1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, -4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, - 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, - 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, -3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, -1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, - 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, -3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, -1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, -4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, -1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, -2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, -1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, - 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, -1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, -3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, - 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, -2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, - 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, -1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, -1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, -1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, -3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, -2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, -3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, -3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, -3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, - 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, -2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, - 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, -2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, - 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, -1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, - 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, - 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, -1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, -3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, -3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, -1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, -1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, -3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, -2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, -2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, -1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, -3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, - 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, -4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, -1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, -2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, -3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, -3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, -1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, - 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, - 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, -2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, - 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, -1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, - 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, -1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, -1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, -1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, -1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, -1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, - 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, - 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, # last 512 -#Everything below is of no interest for detection purpose -5508,6484,3900,3414,3974,4441,4024,3537,4037,5628,5099,3633,6485,3148,6486,3636, -5509,3257,5510,5973,5445,5872,4941,4403,3174,4627,5873,6276,2286,4230,5446,5874, -5122,6102,6103,4162,5447,5123,5323,4849,6277,3980,3851,5066,4246,5774,5067,6278, -3001,2807,5695,3346,5775,5974,5158,5448,6487,5975,5976,5776,3598,6279,5696,4806, -4211,4154,6280,6488,6489,6490,6281,4212,5037,3374,4171,6491,4562,4807,4722,4827, -5977,6104,4532,4079,5159,5324,5160,4404,3858,5359,5875,3975,4288,4610,3486,4512, -5325,3893,5360,6282,6283,5560,2522,4231,5978,5186,5449,2569,3878,6284,5401,3578, -4415,6285,4656,5124,5979,2506,4247,4449,3219,3417,4334,4969,4329,6492,4576,4828, -4172,4416,4829,5402,6286,3927,3852,5361,4369,4830,4477,4867,5876,4173,6493,6105, -4657,6287,6106,5877,5450,6494,4155,4868,5451,3700,5629,4384,6288,6289,5878,3189, -4881,6107,6290,6495,4513,6496,4692,4515,4723,5100,3356,6497,6291,3810,4080,5561, -3570,4430,5980,6498,4355,5697,6499,4724,6108,6109,3764,4050,5038,5879,4093,3226, -6292,5068,5217,4693,3342,5630,3504,4831,4377,4466,4309,5698,4431,5777,6293,5778, -4272,3706,6110,5326,3752,4676,5327,4273,5403,4767,5631,6500,5699,5880,3475,5039, -6294,5562,5125,4348,4301,4482,4068,5126,4593,5700,3380,3462,5981,5563,3824,5404, -4970,5511,3825,4738,6295,6501,5452,4516,6111,5881,5564,6502,6296,5982,6503,4213, -4163,3454,6504,6112,4009,4450,6113,4658,6297,6114,3035,6505,6115,3995,4904,4739, -4563,4942,4110,5040,3661,3928,5362,3674,6506,5292,3612,4791,5565,4149,5983,5328, -5259,5021,4725,4577,4564,4517,4364,6298,5405,4578,5260,4594,4156,4157,5453,3592, -3491,6507,5127,5512,4709,4922,5984,5701,4726,4289,6508,4015,6116,5128,4628,3424, -4241,5779,6299,4905,6509,6510,5454,5702,5780,6300,4365,4923,3971,6511,5161,3270, -3158,5985,4100, 867,5129,5703,6117,5363,3695,3301,5513,4467,6118,6512,5455,4232, -4242,4629,6513,3959,4478,6514,5514,5329,5986,4850,5162,5566,3846,4694,6119,5456, -4869,5781,3779,6301,5704,5987,5515,4710,6302,5882,6120,4392,5364,5705,6515,6121, -6516,6517,3736,5988,5457,5989,4695,2457,5883,4551,5782,6303,6304,6305,5130,4971, -6122,5163,6123,4870,3263,5365,3150,4871,6518,6306,5783,5069,5706,3513,3498,4409, -5330,5632,5366,5458,5459,3991,5990,4502,3324,5991,5784,3696,4518,5633,4119,6519, -4630,5634,4417,5707,4832,5992,3418,6124,5993,5567,4768,5218,6520,4595,3458,5367, -6125,5635,6126,4202,6521,4740,4924,6307,3981,4069,4385,6308,3883,2675,4051,3834, -4302,4483,5568,5994,4972,4101,5368,6309,5164,5884,3922,6127,6522,6523,5261,5460, -5187,4164,5219,3538,5516,4111,3524,5995,6310,6311,5369,3181,3386,2484,5188,3464, -5569,3627,5708,6524,5406,5165,4677,4492,6312,4872,4851,5885,4468,5996,6313,5709, -5710,6128,2470,5886,6314,5293,4882,5785,3325,5461,5101,6129,5711,5786,6525,4906, -6526,6527,4418,5887,5712,4808,2907,3701,5713,5888,6528,3765,5636,5331,6529,6530, -3593,5889,3637,4943,3692,5714,5787,4925,6315,6130,5462,4405,6131,6132,6316,5262, -6531,6532,5715,3859,5716,5070,4696,5102,3929,5788,3987,4792,5997,6533,6534,3920, -4809,5000,5998,6535,2974,5370,6317,5189,5263,5717,3826,6536,3953,5001,4883,3190, -5463,5890,4973,5999,4741,6133,6134,3607,5570,6000,4711,3362,3630,4552,5041,6318, -6001,2950,2953,5637,4646,5371,4944,6002,2044,4120,3429,6319,6537,5103,4833,6538, -6539,4884,4647,3884,6003,6004,4758,3835,5220,5789,4565,5407,6540,6135,5294,4697, -4852,6320,6321,3206,4907,6541,6322,4945,6542,6136,6543,6323,6005,4631,3519,6544, -5891,6545,5464,3784,5221,6546,5571,4659,6547,6324,6137,5190,6548,3853,6549,4016, -4834,3954,6138,5332,3827,4017,3210,3546,4469,5408,5718,3505,4648,5790,5131,5638, -5791,5465,4727,4318,6325,6326,5792,4553,4010,4698,3439,4974,3638,4335,3085,6006, -5104,5042,5166,5892,5572,6327,4356,4519,5222,5573,5333,5793,5043,6550,5639,5071, -4503,6328,6139,6551,6140,3914,3901,5372,6007,5640,4728,4793,3976,3836,4885,6552, -4127,6553,4451,4102,5002,6554,3686,5105,6555,5191,5072,5295,4611,5794,5296,6556, -5893,5264,5894,4975,5466,5265,4699,4976,4370,4056,3492,5044,4886,6557,5795,4432, -4769,4357,5467,3940,4660,4290,6141,4484,4770,4661,3992,6329,4025,4662,5022,4632, -4835,4070,5297,4663,4596,5574,5132,5409,5895,6142,4504,5192,4664,5796,5896,3885, -5575,5797,5023,4810,5798,3732,5223,4712,5298,4084,5334,5468,6143,4052,4053,4336, -4977,4794,6558,5335,4908,5576,5224,4233,5024,4128,5469,5225,4873,6008,5045,4729, -4742,4633,3675,4597,6559,5897,5133,5577,5003,5641,5719,6330,6560,3017,2382,3854, -4406,4811,6331,4393,3964,4946,6561,2420,3722,6562,4926,4378,3247,1736,4442,6332, -5134,6333,5226,3996,2918,5470,4319,4003,4598,4743,4744,4485,3785,3902,5167,5004, -5373,4394,5898,6144,4874,1793,3997,6334,4085,4214,5106,5642,4909,5799,6009,4419, -4189,3330,5899,4165,4420,5299,5720,5227,3347,6145,4081,6335,2876,3930,6146,3293, -3786,3910,3998,5900,5300,5578,2840,6563,5901,5579,6147,3531,5374,6564,6565,5580, -4759,5375,6566,6148,3559,5643,6336,6010,5517,6337,6338,5721,5902,3873,6011,6339, -6567,5518,3868,3649,5722,6568,4771,4947,6569,6149,4812,6570,2853,5471,6340,6341, -5644,4795,6342,6012,5723,6343,5724,6013,4349,6344,3160,6150,5193,4599,4514,4493, -5168,4320,6345,4927,3666,4745,5169,5903,5005,4928,6346,5725,6014,4730,4203,5046, -4948,3395,5170,6015,4150,6016,5726,5519,6347,5047,3550,6151,6348,4197,4310,5904, -6571,5581,2965,6152,4978,3960,4291,5135,6572,5301,5727,4129,4026,5905,4853,5728, -5472,6153,6349,4533,2700,4505,5336,4678,3583,5073,2994,4486,3043,4554,5520,6350, -6017,5800,4487,6351,3931,4103,5376,6352,4011,4321,4311,4190,5136,6018,3988,3233, -4350,5906,5645,4198,6573,5107,3432,4191,3435,5582,6574,4139,5410,6353,5411,3944, -5583,5074,3198,6575,6354,4358,6576,5302,4600,5584,5194,5412,6577,6578,5585,5413, -5303,4248,5414,3879,4433,6579,4479,5025,4854,5415,6355,4760,4772,3683,2978,4700, -3797,4452,3965,3932,3721,4910,5801,6580,5195,3551,5907,3221,3471,3029,6019,3999, -5908,5909,5266,5267,3444,3023,3828,3170,4796,5646,4979,4259,6356,5647,5337,3694, -6357,5648,5338,4520,4322,5802,3031,3759,4071,6020,5586,4836,4386,5048,6581,3571, -4679,4174,4949,6154,4813,3787,3402,3822,3958,3215,3552,5268,4387,3933,4950,4359, -6021,5910,5075,3579,6358,4234,4566,5521,6359,3613,5049,6022,5911,3375,3702,3178, -4911,5339,4521,6582,6583,4395,3087,3811,5377,6023,6360,6155,4027,5171,5649,4421, -4249,2804,6584,2270,6585,4000,4235,3045,6156,5137,5729,4140,4312,3886,6361,4330, -6157,4215,6158,3500,3676,4929,4331,3713,4930,5912,4265,3776,3368,5587,4470,4855, -3038,4980,3631,6159,6160,4132,4680,6161,6362,3923,4379,5588,4255,6586,4121,6587, -6363,4649,6364,3288,4773,4774,6162,6024,6365,3543,6588,4274,3107,3737,5050,5803, -4797,4522,5589,5051,5730,3714,4887,5378,4001,4523,6163,5026,5522,4701,4175,2791, -3760,6589,5473,4224,4133,3847,4814,4815,4775,3259,5416,6590,2738,6164,6025,5304, -3733,5076,5650,4816,5590,6591,6165,6592,3934,5269,6593,3396,5340,6594,5804,3445, -3602,4042,4488,5731,5732,3525,5591,4601,5196,6166,6026,5172,3642,4612,3202,4506, -4798,6366,3818,5108,4303,5138,5139,4776,3332,4304,2915,3415,4434,5077,5109,4856, -2879,5305,4817,6595,5913,3104,3144,3903,4634,5341,3133,5110,5651,5805,6167,4057, -5592,2945,4371,5593,6596,3474,4182,6367,6597,6168,4507,4279,6598,2822,6599,4777, -4713,5594,3829,6169,3887,5417,6170,3653,5474,6368,4216,2971,5228,3790,4579,6369, -5733,6600,6601,4951,4746,4555,6602,5418,5475,6027,3400,4665,5806,6171,4799,6028, -5052,6172,3343,4800,4747,5006,6370,4556,4217,5476,4396,5229,5379,5477,3839,5914, -5652,5807,4714,3068,4635,5808,6173,5342,4192,5078,5419,5523,5734,6174,4557,6175, -4602,6371,6176,6603,5809,6372,5735,4260,3869,5111,5230,6029,5112,6177,3126,4681, -5524,5915,2706,3563,4748,3130,6178,4018,5525,6604,6605,5478,4012,4837,6606,4534, -4193,5810,4857,3615,5479,6030,4082,3697,3539,4086,5270,3662,4508,4931,5916,4912, -5811,5027,3888,6607,4397,3527,3302,3798,2775,2921,2637,3966,4122,4388,4028,4054, -1633,4858,5079,3024,5007,3982,3412,5736,6608,3426,3236,5595,3030,6179,3427,3336, -3279,3110,6373,3874,3039,5080,5917,5140,4489,3119,6374,5812,3405,4494,6031,4666, -4141,6180,4166,6032,5813,4981,6609,5081,4422,4982,4112,3915,5653,3296,3983,6375, -4266,4410,5654,6610,6181,3436,5082,6611,5380,6033,3819,5596,4535,5231,5306,5113, -6612,4952,5918,4275,3113,6613,6376,6182,6183,5814,3073,4731,4838,5008,3831,6614, -4888,3090,3848,4280,5526,5232,3014,5655,5009,5737,5420,5527,6615,5815,5343,5173, -5381,4818,6616,3151,4953,6617,5738,2796,3204,4360,2989,4281,5739,5174,5421,5197, -3132,5141,3849,5142,5528,5083,3799,3904,4839,5480,2880,4495,3448,6377,6184,5271, -5919,3771,3193,6034,6035,5920,5010,6036,5597,6037,6378,6038,3106,5422,6618,5423, -5424,4142,6619,4889,5084,4890,4313,5740,6620,3437,5175,5307,5816,4199,5198,5529, -5817,5199,5656,4913,5028,5344,3850,6185,2955,5272,5011,5818,4567,4580,5029,5921, -3616,5233,6621,6622,6186,4176,6039,6379,6380,3352,5200,5273,2908,5598,5234,3837, -5308,6623,6624,5819,4496,4323,5309,5201,6625,6626,4983,3194,3838,4167,5530,5922, -5274,6381,6382,3860,3861,5599,3333,4292,4509,6383,3553,5481,5820,5531,4778,6187, -3955,3956,4324,4389,4218,3945,4325,3397,2681,5923,4779,5085,4019,5482,4891,5382, -5383,6040,4682,3425,5275,4094,6627,5310,3015,5483,5657,4398,5924,3168,4819,6628, -5925,6629,5532,4932,4613,6041,6630,4636,6384,4780,4204,5658,4423,5821,3989,4683, -5822,6385,4954,6631,5345,6188,5425,5012,5384,3894,6386,4490,4104,6632,5741,5053, -6633,5823,5926,5659,5660,5927,6634,5235,5742,5824,4840,4933,4820,6387,4859,5928, -4955,6388,4143,3584,5825,5346,5013,6635,5661,6389,5014,5484,5743,4337,5176,5662, -6390,2836,6391,3268,6392,6636,6042,5236,6637,4158,6638,5744,5663,4471,5347,3663, -4123,5143,4293,3895,6639,6640,5311,5929,5826,3800,6189,6393,6190,5664,5348,3554, -3594,4749,4603,6641,5385,4801,6043,5827,4183,6642,5312,5426,4761,6394,5665,6191, -4715,2669,6643,6644,5533,3185,5427,5086,5930,5931,5386,6192,6044,6645,4781,4013, -5745,4282,4435,5534,4390,4267,6045,5746,4984,6046,2743,6193,3501,4087,5485,5932, -5428,4184,4095,5747,4061,5054,3058,3862,5933,5600,6646,5144,3618,6395,3131,5055, -5313,6396,4650,4956,3855,6194,3896,5202,4985,4029,4225,6195,6647,5828,5486,5829, -3589,3002,6648,6397,4782,5276,6649,6196,6650,4105,3803,4043,5237,5830,6398,4096, -3643,6399,3528,6651,4453,3315,4637,6652,3984,6197,5535,3182,3339,6653,3096,2660, -6400,6654,3449,5934,4250,4236,6047,6401,5831,6655,5487,3753,4062,5832,6198,6199, -6656,3766,6657,3403,4667,6048,6658,4338,2897,5833,3880,2797,3780,4326,6659,5748, -5015,6660,5387,4351,5601,4411,6661,3654,4424,5935,4339,4072,5277,4568,5536,6402, -6662,5238,6663,5349,5203,6200,5204,6201,5145,4536,5016,5056,4762,5834,4399,4957, -6202,6403,5666,5749,6664,4340,6665,5936,5177,5667,6666,6667,3459,4668,6404,6668, -6669,4543,6203,6670,4276,6405,4480,5537,6671,4614,5205,5668,6672,3348,2193,4763, -6406,6204,5937,5602,4177,5669,3419,6673,4020,6205,4443,4569,5388,3715,3639,6407, -6049,4058,6206,6674,5938,4544,6050,4185,4294,4841,4651,4615,5488,6207,6408,6051, -5178,3241,3509,5835,6208,4958,5836,4341,5489,5278,6209,2823,5538,5350,5206,5429, -6675,4638,4875,4073,3516,4684,4914,4860,5939,5603,5389,6052,5057,3237,5490,3791, -6676,6409,6677,4821,4915,4106,5351,5058,4243,5539,4244,5604,4842,4916,5239,3028, -3716,5837,5114,5605,5390,5940,5430,6210,4332,6678,5540,4732,3667,3840,6053,4305, -3408,5670,5541,6410,2744,5240,5750,6679,3234,5606,6680,5607,5671,3608,4283,4159, -4400,5352,4783,6681,6411,6682,4491,4802,6211,6412,5941,6413,6414,5542,5751,6683, -4669,3734,5942,6684,6415,5943,5059,3328,4670,4144,4268,6685,6686,6687,6688,4372, -3603,6689,5944,5491,4373,3440,6416,5543,4784,4822,5608,3792,4616,5838,5672,3514, -5391,6417,4892,6690,4639,6691,6054,5673,5839,6055,6692,6056,5392,6212,4038,5544, -5674,4497,6057,6693,5840,4284,5675,4021,4545,5609,6418,4454,6419,6213,4113,4472, -5314,3738,5087,5279,4074,5610,4959,4063,3179,4750,6058,6420,6214,3476,4498,4716, -5431,4960,4685,6215,5241,6694,6421,6216,6695,5841,5945,6422,3748,5946,5179,3905, -5752,5545,5947,4374,6217,4455,6423,4412,6218,4803,5353,6696,3832,5280,6219,4327, -4702,6220,6221,6059,4652,5432,6424,3749,4751,6425,5753,4986,5393,4917,5948,5030, -5754,4861,4733,6426,4703,6697,6222,4671,5949,4546,4961,5180,6223,5031,3316,5281, -6698,4862,4295,4934,5207,3644,6427,5842,5950,6428,6429,4570,5843,5282,6430,6224, -5088,3239,6060,6699,5844,5755,6061,6431,2701,5546,6432,5115,5676,4039,3993,3327, -4752,4425,5315,6433,3941,6434,5677,4617,4604,3074,4581,6225,5433,6435,6226,6062, -4823,5756,5116,6227,3717,5678,4717,5845,6436,5679,5846,6063,5847,6064,3977,3354, -6437,3863,5117,6228,5547,5394,4499,4524,6229,4605,6230,4306,4500,6700,5951,6065, -3693,5952,5089,4366,4918,6701,6231,5548,6232,6702,6438,4704,5434,6703,6704,5953, -4168,6705,5680,3420,6706,5242,4407,6066,3812,5757,5090,5954,4672,4525,3481,5681, -4618,5395,5354,5316,5955,6439,4962,6707,4526,6440,3465,4673,6067,6441,5682,6708, -5435,5492,5758,5683,4619,4571,4674,4804,4893,4686,5493,4753,6233,6068,4269,6442, -6234,5032,4705,5146,5243,5208,5848,6235,6443,4963,5033,4640,4226,6236,5849,3387, -6444,6445,4436,4437,5850,4843,5494,4785,4894,6709,4361,6710,5091,5956,3331,6237, -4987,5549,6069,6711,4342,3517,4473,5317,6070,6712,6071,4706,6446,5017,5355,6713, -6714,4988,5436,6447,4734,5759,6715,4735,4547,4456,4754,6448,5851,6449,6450,3547, -5852,5318,6451,6452,5092,4205,6716,6238,4620,4219,5611,6239,6072,4481,5760,5957, -5958,4059,6240,6453,4227,4537,6241,5761,4030,4186,5244,5209,3761,4457,4876,3337, -5495,5181,6242,5959,5319,5612,5684,5853,3493,5854,6073,4169,5613,5147,4895,6074, -5210,6717,5182,6718,3830,6243,2798,3841,6075,6244,5855,5614,3604,4606,5496,5685, -5118,5356,6719,6454,5960,5357,5961,6720,4145,3935,4621,5119,5962,4261,6721,6455, -4786,5963,4375,4582,6245,6246,6247,6076,5437,4877,5856,3376,4380,6248,4160,6722, -5148,6456,5211,6457,6723,4718,6458,6724,6249,5358,4044,3297,6459,6250,5857,5615, -5497,5245,6460,5498,6725,6251,6252,5550,3793,5499,2959,5396,6461,6462,4572,5093, -5500,5964,3806,4146,6463,4426,5762,5858,6077,6253,4755,3967,4220,5965,6254,4989, -5501,6464,4352,6726,6078,4764,2290,5246,3906,5438,5283,3767,4964,2861,5763,5094, -6255,6256,4622,5616,5859,5860,4707,6727,4285,4708,4824,5617,6257,5551,4787,5212, -4965,4935,4687,6465,6728,6466,5686,6079,3494,4413,2995,5247,5966,5618,6729,5967, -5764,5765,5687,5502,6730,6731,6080,5397,6467,4990,6258,6732,4538,5060,5619,6733, -4719,5688,5439,5018,5149,5284,5503,6734,6081,4607,6259,5120,3645,5861,4583,6260, -4584,4675,5620,4098,5440,6261,4863,2379,3306,4585,5552,5689,4586,5285,6735,4864, -6736,5286,6082,6737,4623,3010,4788,4381,4558,5621,4587,4896,3698,3161,5248,4353, -4045,6262,3754,5183,4588,6738,6263,6739,6740,5622,3936,6741,6468,6742,6264,5095, -6469,4991,5968,6743,4992,6744,6083,4897,6745,4256,5766,4307,3108,3968,4444,5287, -3889,4343,6084,4510,6085,4559,6086,4898,5969,6746,5623,5061,4919,5249,5250,5504, -5441,6265,5320,4878,3242,5862,5251,3428,6087,6747,4237,5624,5442,6266,5553,4539, -6748,2585,3533,5398,4262,6088,5150,4736,4438,6089,6267,5505,4966,6749,6268,6750, -6269,5288,5554,3650,6090,6091,4624,6092,5690,6751,5863,4270,5691,4277,5555,5864, -6752,5692,4720,4865,6470,5151,4688,4825,6753,3094,6754,6471,3235,4653,6755,5213, -5399,6756,3201,4589,5865,4967,6472,5866,6473,5019,3016,6757,5321,4756,3957,4573, -6093,4993,5767,4721,6474,6758,5625,6759,4458,6475,6270,6760,5556,4994,5214,5252, -6271,3875,5768,6094,5034,5506,4376,5769,6761,2120,6476,5253,5770,6762,5771,5970, -3990,5971,5557,5558,5772,6477,6095,2787,4641,5972,5121,6096,6097,6272,6763,3703, -5867,5507,6273,4206,6274,4789,6098,6764,3619,3646,3833,3804,2394,3788,4936,3978, -4866,4899,6099,6100,5559,6478,6765,3599,5868,6101,5869,5870,6275,6766,4527,6767) - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/gb2312prober.py b/plugin.video.alfa/lib/requests/packages/chardet/gb2312prober.py deleted file mode 100755 index 643fe251..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/gb2312prober.py +++ /dev/null @@ -1,41 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import GB2312DistributionAnalysis -from .mbcssm import GB2312SMModel - -class GB2312Prober(MultiByteCharSetProber): - def __init__(self): - MultiByteCharSetProber.__init__(self) - self._mCodingSM = CodingStateMachine(GB2312SMModel) - self._mDistributionAnalyzer = GB2312DistributionAnalysis() - self.reset() - - def get_charset_name(self): - return "GB2312" diff --git a/plugin.video.alfa/lib/requests/packages/chardet/hebrewprober.py b/plugin.video.alfa/lib/requests/packages/chardet/hebrewprober.py deleted file mode 100755 index 90d171f3..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/hebrewprober.py +++ /dev/null @@ -1,283 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Shy Shalom -# Portions created by the Initial Developer are Copyright (C) 2005 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .constants import eNotMe, eDetecting -from .compat import wrap_ord - -# This prober doesn't actually recognize a language or a charset. -# It is a helper prober for the use of the Hebrew model probers - -### General ideas of the Hebrew charset recognition ### -# -# Four main charsets exist in Hebrew: -# "ISO-8859-8" - Visual Hebrew -# "windows-1255" - Logical Hebrew -# "ISO-8859-8-I" - Logical Hebrew -# "x-mac-hebrew" - ?? Logical Hebrew ?? -# -# Both "ISO" charsets use a completely identical set of code points, whereas -# "windows-1255" and "x-mac-hebrew" are two different proper supersets of -# these code points. windows-1255 defines additional characters in the range -# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific -# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. -# x-mac-hebrew defines similar additional code points but with a different -# mapping. -# -# As far as an average Hebrew text with no diacritics is concerned, all four -# charsets are identical with respect to code points. Meaning that for the -# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters -# (including final letters). -# -# The dominant difference between these charsets is their directionality. -# "Visual" directionality means that the text is ordered as if the renderer is -# not aware of a BIDI rendering algorithm. The renderer sees the text and -# draws it from left to right. The text itself when ordered naturally is read -# backwards. A buffer of Visual Hebrew generally looks like so: -# "[last word of first line spelled backwards] [whole line ordered backwards -# and spelled backwards] [first word of first line spelled backwards] -# [end of line] [last word of second line] ... etc' " -# adding punctuation marks, numbers and English text to visual text is -# naturally also "visual" and from left to right. -# -# "Logical" directionality means the text is ordered "naturally" according to -# the order it is read. It is the responsibility of the renderer to display -# the text from right to left. A BIDI algorithm is used to place general -# punctuation marks, numbers and English text in the text. -# -# Texts in x-mac-hebrew are almost impossible to find on the Internet. From -# what little evidence I could find, it seems that its general directionality -# is Logical. -# -# To sum up all of the above, the Hebrew probing mechanism knows about two -# charsets: -# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are -# backwards while line order is natural. For charset recognition purposes -# the line order is unimportant (In fact, for this implementation, even -# word order is unimportant). -# Logical Hebrew - "windows-1255" - normal, naturally ordered text. -# -# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be -# specifically identified. -# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew -# that contain special punctuation marks or diacritics is displayed with -# some unconverted characters showing as question marks. This problem might -# be corrected using another model prober for x-mac-hebrew. Due to the fact -# that x-mac-hebrew texts are so rare, writing another model prober isn't -# worth the effort and performance hit. -# -#### The Prober #### -# -# The prober is divided between two SBCharSetProbers and a HebrewProber, -# all of which are managed, created, fed data, inquired and deleted by the -# SBCSGroupProber. The two SBCharSetProbers identify that the text is in -# fact some kind of Hebrew, Logical or Visual. The final decision about which -# one is it is made by the HebrewProber by combining final-letter scores -# with the scores of the two SBCharSetProbers to produce a final answer. -# -# The SBCSGroupProber is responsible for stripping the original text of HTML -# tags, English characters, numbers, low-ASCII punctuation characters, spaces -# and new lines. It reduces any sequence of such characters to a single space. -# The buffer fed to each prober in the SBCS group prober is pure text in -# high-ASCII. -# The two SBCharSetProbers (model probers) share the same language model: -# Win1255Model. -# The first SBCharSetProber uses the model normally as any other -# SBCharSetProber does, to recognize windows-1255, upon which this model was -# built. The second SBCharSetProber is told to make the pair-of-letter -# lookup in the language model backwards. This in practice exactly simulates -# a visual Hebrew model using the windows-1255 logical Hebrew model. -# -# The HebrewProber is not using any language model. All it does is look for -# final-letter evidence suggesting the text is either logical Hebrew or visual -# Hebrew. Disjointed from the model probers, the results of the HebrewProber -# alone are meaningless. HebrewProber always returns 0.00 as confidence -# since it never identifies a charset by itself. Instead, the pointer to the -# HebrewProber is passed to the model probers as a helper "Name Prober". -# When the Group prober receives a positive identification from any prober, -# it asks for the name of the charset identified. If the prober queried is a -# Hebrew model prober, the model prober forwards the call to the -# HebrewProber to make the final decision. In the HebrewProber, the -# decision is made according to the final-letters scores maintained and Both -# model probers scores. The answer is returned in the form of the name of the -# charset identified, either "windows-1255" or "ISO-8859-8". - -# windows-1255 / ISO-8859-8 code points of interest -FINAL_KAF = 0xea -NORMAL_KAF = 0xeb -FINAL_MEM = 0xed -NORMAL_MEM = 0xee -FINAL_NUN = 0xef -NORMAL_NUN = 0xf0 -FINAL_PE = 0xf3 -NORMAL_PE = 0xf4 -FINAL_TSADI = 0xf5 -NORMAL_TSADI = 0xf6 - -# Minimum Visual vs Logical final letter score difference. -# If the difference is below this, don't rely solely on the final letter score -# distance. -MIN_FINAL_CHAR_DISTANCE = 5 - -# Minimum Visual vs Logical model score difference. -# If the difference is below this, don't rely at all on the model score -# distance. -MIN_MODEL_DISTANCE = 0.01 - -VISUAL_HEBREW_NAME = "ISO-8859-8" -LOGICAL_HEBREW_NAME = "windows-1255" - - -class HebrewProber(CharSetProber): - def __init__(self): - CharSetProber.__init__(self) - self._mLogicalProber = None - self._mVisualProber = None - self.reset() - - def reset(self): - self._mFinalCharLogicalScore = 0 - self._mFinalCharVisualScore = 0 - # The two last characters seen in the previous buffer, - # mPrev and mBeforePrev are initialized to space in order to simulate - # a word delimiter at the beginning of the data - self._mPrev = ' ' - self._mBeforePrev = ' ' - # These probers are owned by the group prober. - - def set_model_probers(self, logicalProber, visualProber): - self._mLogicalProber = logicalProber - self._mVisualProber = visualProber - - def is_final(self, c): - return wrap_ord(c) in [FINAL_KAF, FINAL_MEM, FINAL_NUN, FINAL_PE, - FINAL_TSADI] - - def is_non_final(self, c): - # The normal Tsadi is not a good Non-Final letter due to words like - # 'lechotet' (to chat) containing an apostrophe after the tsadi. This - # apostrophe is converted to a space in FilterWithoutEnglishLetters - # causing the Non-Final tsadi to appear at an end of a word even - # though this is not the case in the original text. - # The letters Pe and Kaf rarely display a related behavior of not being - # a good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' - # for example legally end with a Non-Final Pe or Kaf. However, the - # benefit of these letters as Non-Final letters outweighs the damage - # since these words are quite rare. - return wrap_ord(c) in [NORMAL_KAF, NORMAL_MEM, NORMAL_NUN, NORMAL_PE] - - def feed(self, aBuf): - # Final letter analysis for logical-visual decision. - # Look for evidence that the received buffer is either logical Hebrew - # or visual Hebrew. - # The following cases are checked: - # 1) A word longer than 1 letter, ending with a final letter. This is - # an indication that the text is laid out "naturally" since the - # final letter really appears at the end. +1 for logical score. - # 2) A word longer than 1 letter, ending with a Non-Final letter. In - # normal Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, - # should not end with the Non-Final form of that letter. Exceptions - # to this rule are mentioned above in isNonFinal(). This is an - # indication that the text is laid out backwards. +1 for visual - # score - # 3) A word longer than 1 letter, starting with a final letter. Final - # letters should not appear at the beginning of a word. This is an - # indication that the text is laid out backwards. +1 for visual - # score. - # - # The visual score and logical score are accumulated throughout the - # text and are finally checked against each other in GetCharSetName(). - # No checking for final letters in the middle of words is done since - # that case is not an indication for either Logical or Visual text. - # - # We automatically filter out all 7-bit characters (replace them with - # spaces) so the word boundary detection works properly. [MAP] - - if self.get_state() == eNotMe: - # Both model probers say it's not them. No reason to continue. - return eNotMe - - aBuf = self.filter_high_bit_only(aBuf) - - for cur in aBuf: - if cur == ' ': - # We stand on a space - a word just ended - if self._mBeforePrev != ' ': - # next-to-last char was not a space so self._mPrev is not a - # 1 letter word - if self.is_final(self._mPrev): - # case (1) [-2:not space][-1:final letter][cur:space] - self._mFinalCharLogicalScore += 1 - elif self.is_non_final(self._mPrev): - # case (2) [-2:not space][-1:Non-Final letter][ - # cur:space] - self._mFinalCharVisualScore += 1 - else: - # Not standing on a space - if ((self._mBeforePrev == ' ') and - (self.is_final(self._mPrev)) and (cur != ' ')): - # case (3) [-2:space][-1:final letter][cur:not space] - self._mFinalCharVisualScore += 1 - self._mBeforePrev = self._mPrev - self._mPrev = cur - - # Forever detecting, till the end or until both model probers return - # eNotMe (handled above) - return eDetecting - - def get_charset_name(self): - # Make the decision: is it Logical or Visual? - # If the final letter score distance is dominant enough, rely on it. - finalsub = self._mFinalCharLogicalScore - self._mFinalCharVisualScore - if finalsub >= MIN_FINAL_CHAR_DISTANCE: - return LOGICAL_HEBREW_NAME - if finalsub <= -MIN_FINAL_CHAR_DISTANCE: - return VISUAL_HEBREW_NAME - - # It's not dominant enough, try to rely on the model scores instead. - modelsub = (self._mLogicalProber.get_confidence() - - self._mVisualProber.get_confidence()) - if modelsub > MIN_MODEL_DISTANCE: - return LOGICAL_HEBREW_NAME - if modelsub < -MIN_MODEL_DISTANCE: - return VISUAL_HEBREW_NAME - - # Still no good, back to final letter distance, maybe it'll save the - # day. - if finalsub < 0.0: - return VISUAL_HEBREW_NAME - - # (finalsub > 0 - Logical) or (don't know what to do) default to - # Logical. - return LOGICAL_HEBREW_NAME - - def get_state(self): - # Remain active as long as any of the model probers are active. - if (self._mLogicalProber.get_state() == eNotMe) and \ - (self._mVisualProber.get_state() == eNotMe): - return eNotMe - return eDetecting diff --git a/plugin.video.alfa/lib/requests/packages/chardet/jisfreq.py b/plugin.video.alfa/lib/requests/packages/chardet/jisfreq.py deleted file mode 100755 index dd6ffa5e..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/jisfreq.py +++ /dev/null @@ -1,569 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Sampling from about 20M text materials include literature and computer technology -# -# Japanese frequency table, applied to both S-JIS and EUC-JP -# They are sorted in order. - -# 128 --> 0.77094 -# 256 --> 0.85710 -# 512 --> 0.92635 -# 1024 --> 0.97130 -# 2048 --> 0.99431 -# -# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 -# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 -# -# Typical Distribution Ratio, 25% of IDR - -JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 - -# Char to FreqOrder table , -JIS_TABLE_SIZE = 4368 - -JISCharToFreqOrder = ( - 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 -3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 -1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 -2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 -2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 -5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 -1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 -5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 -5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 -5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 -5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 -5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 -5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 -1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 -1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 -1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 -2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 -3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 -3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 - 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 - 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 -1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 - 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 -5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 - 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 - 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 - 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 - 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 - 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 -5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 -5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 -5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 -4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 -5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 -5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 -5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 -5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 -5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 -5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 -5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 -5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 -5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 -3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 -5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 -5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 -5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 -5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 -5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 -5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 -5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 -5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 -5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 -5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 -5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 -5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 -5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 -5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 -5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 -5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 -5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 -5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 -5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 -5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 -5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 -5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 -5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 -5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 -5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 -5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 -5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 -5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 -5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 -5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 -5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 -5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 -5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 -5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 -5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 -5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 -5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 -5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 -6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 -6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 -6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 -6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 -6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 -6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 -6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 -6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 -4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 - 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 - 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 -1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 -1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 - 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 -3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 -3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 - 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 -3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 -3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 - 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 -2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 - 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 -3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 -1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 - 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 -1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 - 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 -2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 -2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 -2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 -2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 -1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 -1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 -1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 -1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 -2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 -1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 -2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 -1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 -1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 -1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 -1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 -1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 -1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 - 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 - 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 -1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 -2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 -2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 -2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 -3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 -3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 - 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 -3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 -1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 - 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 -2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 -1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 - 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 -3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 -4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 -2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 -1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 -2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 -1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 - 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 - 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 -1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 -2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 -2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 -2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 -3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 -1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 -2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 - 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 - 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 - 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 -1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 -2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 - 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 -1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 -1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 - 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 -1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 -1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 -1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 - 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 -2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 - 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 -2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 -3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 -2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 -1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 -6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 -1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 -2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 -1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 - 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 - 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 -3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 -3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 -1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 -1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 -1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 -1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 - 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 - 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 -2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 - 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 -3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 -2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 - 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 -1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 -2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 - 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 -1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 - 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 -4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 -2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 -1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 - 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 -1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 -2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 - 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 -6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 -1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 -1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 -2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 -3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 - 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 -3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 -1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 - 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 -1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 - 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 -3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 - 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 -2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 - 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 -4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 -2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 -1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 -1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 -1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 - 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 -1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 -3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 -1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 -3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 - 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 - 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 - 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 -2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 -1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 - 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 -1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 - 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 -1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 - 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 - 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 - 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 -1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 -1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 -2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 -4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 - 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 -1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 - 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 -1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 -3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 -1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 -2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 -2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 -1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 -1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 -2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 - 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 -2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 -1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 -1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 -1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 -1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 -3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 -2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 -2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 - 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 -3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 -3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 -1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 -2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 -1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 -2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 -#Everything below is of no interest for detection purpose -2138,2122,3730,2888,1995,1820,1044,6190,6191,6192,6193,6194,6195,6196,6197,6198, # 4384 -6199,6200,6201,6202,6203,6204,6205,4670,6206,6207,6208,6209,6210,6211,6212,6213, # 4400 -6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229, # 4416 -6230,6231,6232,6233,6234,6235,6236,6237,3187,6238,6239,3969,6240,6241,6242,6243, # 4432 -6244,4671,6245,6246,4672,6247,6248,4133,6249,6250,4364,6251,2923,2556,2613,4673, # 4448 -4365,3970,6252,6253,6254,6255,4674,6256,6257,6258,2768,2353,4366,4675,4676,3188, # 4464 -4367,3463,6259,4134,4677,4678,6260,2267,6261,3842,3332,4368,3543,6262,6263,6264, # 4480 -3013,1954,1928,4135,4679,6265,6266,2478,3091,6267,4680,4369,6268,6269,1699,6270, # 4496 -3544,4136,4681,6271,4137,6272,4370,2804,6273,6274,2593,3971,3972,4682,6275,2236, # 4512 -4683,6276,6277,4684,6278,6279,4138,3973,4685,6280,6281,3258,6282,6283,6284,6285, # 4528 -3974,4686,2841,3975,6286,6287,3545,6288,6289,4139,4687,4140,6290,4141,6291,4142, # 4544 -6292,6293,3333,6294,6295,6296,4371,6297,3399,6298,6299,4372,3976,6300,6301,6302, # 4560 -4373,6303,6304,3843,3731,6305,4688,4374,6306,6307,3259,2294,6308,3732,2530,4143, # 4576 -6309,4689,6310,6311,6312,3048,6313,6314,4690,3733,2237,6315,6316,2282,3334,6317, # 4592 -6318,3844,6319,6320,4691,6321,3400,4692,6322,4693,6323,3049,6324,4375,6325,3977, # 4608 -6326,6327,6328,3546,6329,4694,3335,6330,4695,4696,6331,6332,6333,6334,4376,3978, # 4624 -6335,4697,3979,4144,6336,3980,4698,6337,6338,6339,6340,6341,4699,4700,4701,6342, # 4640 -6343,4702,6344,6345,4703,6346,6347,4704,6348,4705,4706,3135,6349,4707,6350,4708, # 4656 -6351,4377,6352,4709,3734,4145,6353,2506,4710,3189,6354,3050,4711,3981,6355,3547, # 4672 -3014,4146,4378,3735,2651,3845,3260,3136,2224,1986,6356,3401,6357,4712,2594,3627, # 4688 -3137,2573,3736,3982,4713,3628,4714,4715,2682,3629,4716,6358,3630,4379,3631,6359, # 4704 -6360,6361,3983,6362,6363,6364,6365,4147,3846,4717,6366,6367,3737,2842,6368,4718, # 4720 -2628,6369,3261,6370,2386,6371,6372,3738,3984,4719,3464,4720,3402,6373,2924,3336, # 4736 -4148,2866,6374,2805,3262,4380,2704,2069,2531,3138,2806,2984,6375,2769,6376,4721, # 4752 -4722,3403,6377,6378,3548,6379,6380,2705,3092,1979,4149,2629,3337,2889,6381,3338, # 4768 -4150,2557,3339,4381,6382,3190,3263,3739,6383,4151,4723,4152,2558,2574,3404,3191, # 4784 -6384,6385,4153,6386,4724,4382,6387,6388,4383,6389,6390,4154,6391,4725,3985,6392, # 4800 -3847,4155,6393,6394,6395,6396,6397,3465,6398,4384,6399,6400,6401,6402,6403,6404, # 4816 -4156,6405,6406,6407,6408,2123,6409,6410,2326,3192,4726,6411,6412,6413,6414,4385, # 4832 -4157,6415,6416,4158,6417,3093,3848,6418,3986,6419,6420,3849,6421,6422,6423,4159, # 4848 -6424,6425,4160,6426,3740,6427,6428,6429,6430,3987,6431,4727,6432,2238,6433,6434, # 4864 -4386,3988,6435,6436,3632,6437,6438,2843,6439,6440,6441,6442,3633,6443,2958,6444, # 4880 -6445,3466,6446,2364,4387,3850,6447,4388,2959,3340,6448,3851,6449,4728,6450,6451, # 4896 -3264,4729,6452,3193,6453,4389,4390,2706,3341,4730,6454,3139,6455,3194,6456,3051, # 4912 -2124,3852,1602,4391,4161,3853,1158,3854,4162,3989,4392,3990,4731,4732,4393,2040, # 4928 -4163,4394,3265,6457,2807,3467,3855,6458,6459,6460,3991,3468,4733,4734,6461,3140, # 4944 -2960,6462,4735,6463,6464,6465,6466,4736,4737,4738,4739,6467,6468,4164,2403,3856, # 4960 -6469,6470,2770,2844,6471,4740,6472,6473,6474,6475,6476,6477,6478,3195,6479,4741, # 4976 -4395,6480,2867,6481,4742,2808,6482,2493,4165,6483,6484,6485,6486,2295,4743,6487, # 4992 -6488,6489,3634,6490,6491,6492,6493,6494,6495,6496,2985,4744,6497,6498,4745,6499, # 5008 -6500,2925,3141,4166,6501,6502,4746,6503,6504,4747,6505,6506,6507,2890,6508,6509, # 5024 -6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,3469,4167,6520,6521,6522,4748, # 5040 -4396,3741,4397,4749,4398,3342,2125,4750,6523,4751,4752,4753,3052,6524,2961,4168, # 5056 -6525,4754,6526,4755,4399,2926,4169,6527,3857,6528,4400,4170,6529,4171,6530,6531, # 5072 -2595,6532,6533,6534,6535,3635,6536,6537,6538,6539,6540,6541,6542,4756,6543,6544, # 5088 -6545,6546,6547,6548,4401,6549,6550,6551,6552,4402,3405,4757,4403,6553,6554,6555, # 5104 -4172,3742,6556,6557,6558,3992,3636,6559,6560,3053,2726,6561,3549,4173,3054,4404, # 5120 -6562,6563,3993,4405,3266,3550,2809,4406,6564,6565,6566,4758,4759,6567,3743,6568, # 5136 -4760,3744,4761,3470,6569,6570,6571,4407,6572,3745,4174,6573,4175,2810,4176,3196, # 5152 -4762,6574,4177,6575,6576,2494,2891,3551,6577,6578,3471,6579,4408,6580,3015,3197, # 5168 -6581,3343,2532,3994,3858,6582,3094,3406,4409,6583,2892,4178,4763,4410,3016,4411, # 5184 -6584,3995,3142,3017,2683,6585,4179,6586,6587,4764,4412,6588,6589,4413,6590,2986, # 5200 -6591,2962,3552,6592,2963,3472,6593,6594,4180,4765,6595,6596,2225,3267,4414,6597, # 5216 -3407,3637,4766,6598,6599,3198,6600,4415,6601,3859,3199,6602,3473,4767,2811,4416, # 5232 -1856,3268,3200,2575,3996,3997,3201,4417,6603,3095,2927,6604,3143,6605,2268,6606, # 5248 -3998,3860,3096,2771,6607,6608,3638,2495,4768,6609,3861,6610,3269,2745,4769,4181, # 5264 -3553,6611,2845,3270,6612,6613,6614,3862,6615,6616,4770,4771,6617,3474,3999,4418, # 5280 -4419,6618,3639,3344,6619,4772,4182,6620,2126,6621,6622,6623,4420,4773,6624,3018, # 5296 -6625,4774,3554,6626,4183,2025,3746,6627,4184,2707,6628,4421,4422,3097,1775,4185, # 5312 -3555,6629,6630,2868,6631,6632,4423,6633,6634,4424,2414,2533,2928,6635,4186,2387, # 5328 -6636,4775,6637,4187,6638,1891,4425,3202,3203,6639,6640,4776,6641,3345,6642,6643, # 5344 -3640,6644,3475,3346,3641,4000,6645,3144,6646,3098,2812,4188,3642,3204,6647,3863, # 5360 -3476,6648,3864,6649,4426,4001,6650,6651,6652,2576,6653,4189,4777,6654,6655,6656, # 5376 -2846,6657,3477,3205,4002,6658,4003,6659,3347,2252,6660,6661,6662,4778,6663,6664, # 5392 -6665,6666,6667,6668,6669,4779,4780,2048,6670,3478,3099,6671,3556,3747,4004,6672, # 5408 -6673,6674,3145,4005,3748,6675,6676,6677,6678,6679,3408,6680,6681,6682,6683,3206, # 5424 -3207,6684,6685,4781,4427,6686,4782,4783,4784,6687,6688,6689,4190,6690,6691,3479, # 5440 -6692,2746,6693,4428,6694,6695,6696,6697,6698,6699,4785,6700,6701,3208,2727,6702, # 5456 -3146,6703,6704,3409,2196,6705,4429,6706,6707,6708,2534,1996,6709,6710,6711,2747, # 5472 -6712,6713,6714,4786,3643,6715,4430,4431,6716,3557,6717,4432,4433,6718,6719,6720, # 5488 -6721,3749,6722,4006,4787,6723,6724,3644,4788,4434,6725,6726,4789,2772,6727,6728, # 5504 -6729,6730,6731,2708,3865,2813,4435,6732,6733,4790,4791,3480,6734,6735,6736,6737, # 5520 -4436,3348,6738,3410,4007,6739,6740,4008,6741,6742,4792,3411,4191,6743,6744,6745, # 5536 -6746,6747,3866,6748,3750,6749,6750,6751,6752,6753,6754,6755,3867,6756,4009,6757, # 5552 -4793,4794,6758,2814,2987,6759,6760,6761,4437,6762,6763,6764,6765,3645,6766,6767, # 5568 -3481,4192,6768,3751,6769,6770,2174,6771,3868,3752,6772,6773,6774,4193,4795,4438, # 5584 -3558,4796,4439,6775,4797,6776,6777,4798,6778,4799,3559,4800,6779,6780,6781,3482, # 5600 -6782,2893,6783,6784,4194,4801,4010,6785,6786,4440,6787,4011,6788,6789,6790,6791, # 5616 -6792,6793,4802,6794,6795,6796,4012,6797,6798,6799,6800,3349,4803,3483,6801,4804, # 5632 -4195,6802,4013,6803,6804,4196,6805,4014,4015,6806,2847,3271,2848,6807,3484,6808, # 5648 -6809,6810,4441,6811,4442,4197,4443,3272,4805,6812,3412,4016,1579,6813,6814,4017, # 5664 -6815,3869,6816,2964,6817,4806,6818,6819,4018,3646,6820,6821,4807,4019,4020,6822, # 5680 -6823,3560,6824,6825,4021,4444,6826,4198,6827,6828,4445,6829,6830,4199,4808,6831, # 5696 -6832,6833,3870,3019,2458,6834,3753,3413,3350,6835,4809,3871,4810,3561,4446,6836, # 5712 -6837,4447,4811,4812,6838,2459,4448,6839,4449,6840,6841,4022,3872,6842,4813,4814, # 5728 -6843,6844,4815,4200,4201,4202,6845,4023,6846,6847,4450,3562,3873,6848,6849,4816, # 5744 -4817,6850,4451,4818,2139,6851,3563,6852,6853,3351,6854,6855,3352,4024,2709,3414, # 5760 -4203,4452,6856,4204,6857,6858,3874,3875,6859,6860,4819,6861,6862,6863,6864,4453, # 5776 -3647,6865,6866,4820,6867,6868,6869,6870,4454,6871,2869,6872,6873,4821,6874,3754, # 5792 -6875,4822,4205,6876,6877,6878,3648,4206,4455,6879,4823,6880,4824,3876,6881,3055, # 5808 -4207,6882,3415,6883,6884,6885,4208,4209,6886,4210,3353,6887,3354,3564,3209,3485, # 5824 -2652,6888,2728,6889,3210,3755,6890,4025,4456,6891,4825,6892,6893,6894,6895,4211, # 5840 -6896,6897,6898,4826,6899,6900,4212,6901,4827,6902,2773,3565,6903,4828,6904,6905, # 5856 -6906,6907,3649,3650,6908,2849,3566,6909,3567,3100,6910,6911,6912,6913,6914,6915, # 5872 -4026,6916,3355,4829,3056,4457,3756,6917,3651,6918,4213,3652,2870,6919,4458,6920, # 5888 -2438,6921,6922,3757,2774,4830,6923,3356,4831,4832,6924,4833,4459,3653,2507,6925, # 5904 -4834,2535,6926,6927,3273,4027,3147,6928,3568,6929,6930,6931,4460,6932,3877,4461, # 5920 -2729,3654,6933,6934,6935,6936,2175,4835,2630,4214,4028,4462,4836,4215,6937,3148, # 5936 -4216,4463,4837,4838,4217,6938,6939,2850,4839,6940,4464,6941,6942,6943,4840,6944, # 5952 -4218,3274,4465,6945,6946,2710,6947,4841,4466,6948,6949,2894,6950,6951,4842,6952, # 5968 -4219,3057,2871,6953,6954,6955,6956,4467,6957,2711,6958,6959,6960,3275,3101,4843, # 5984 -6961,3357,3569,6962,4844,6963,6964,4468,4845,3570,6965,3102,4846,3758,6966,4847, # 6000 -3878,4848,4849,4029,6967,2929,3879,4850,4851,6968,6969,1733,6970,4220,6971,6972, # 6016 -6973,6974,6975,6976,4852,6977,6978,6979,6980,6981,6982,3759,6983,6984,6985,3486, # 6032 -3487,6986,3488,3416,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,4853, # 6048 -6998,6999,4030,7000,7001,3211,7002,7003,4221,7004,7005,3571,4031,7006,3572,7007, # 6064 -2614,4854,2577,7008,7009,2965,3655,3656,4855,2775,3489,3880,4222,4856,3881,4032, # 6080 -3882,3657,2730,3490,4857,7010,3149,7011,4469,4858,2496,3491,4859,2283,7012,7013, # 6096 -7014,2365,4860,4470,7015,7016,3760,7017,7018,4223,1917,7019,7020,7021,4471,7022, # 6112 -2776,4472,7023,7024,7025,7026,4033,7027,3573,4224,4861,4034,4862,7028,7029,1929, # 6128 -3883,4035,7030,4473,3058,7031,2536,3761,3884,7032,4036,7033,2966,2895,1968,4474, # 6144 -3276,4225,3417,3492,4226,2105,7034,7035,1754,2596,3762,4227,4863,4475,3763,4864, # 6160 -3764,2615,2777,3103,3765,3658,3418,4865,2296,3766,2815,7036,7037,7038,3574,2872, # 6176 -3277,4476,7039,4037,4477,7040,7041,4038,7042,7043,7044,7045,7046,7047,2537,7048, # 6192 -7049,7050,7051,7052,7053,7054,4478,7055,7056,3767,3659,4228,3575,7057,7058,4229, # 6208 -7059,7060,7061,3660,7062,3212,7063,3885,4039,2460,7064,7065,7066,7067,7068,7069, # 6224 -7070,7071,7072,7073,7074,4866,3768,4867,7075,7076,7077,7078,4868,3358,3278,2653, # 6240 -7079,7080,4479,3886,7081,7082,4869,7083,7084,7085,7086,7087,7088,2538,7089,7090, # 6256 -7091,4040,3150,3769,4870,4041,2896,3359,4230,2930,7092,3279,7093,2967,4480,3213, # 6272 -4481,3661,7094,7095,7096,7097,7098,7099,7100,7101,7102,2461,3770,7103,7104,4231, # 6288 -3151,7105,7106,7107,4042,3662,7108,7109,4871,3663,4872,4043,3059,7110,7111,7112, # 6304 -3493,2988,7113,4873,7114,7115,7116,3771,4874,7117,7118,4232,4875,7119,3576,2336, # 6320 -4876,7120,4233,3419,4044,4877,4878,4482,4483,4879,4484,4234,7121,3772,4880,1045, # 6336 -3280,3664,4881,4882,7122,7123,7124,7125,4883,7126,2778,7127,4485,4486,7128,4884, # 6352 -3214,3887,7129,7130,3215,7131,4885,4045,7132,7133,4046,7134,7135,7136,7137,7138, # 6368 -7139,7140,7141,7142,7143,4235,7144,4886,7145,7146,7147,4887,7148,7149,7150,4487, # 6384 -4047,4488,7151,7152,4888,4048,2989,3888,7153,3665,7154,4049,7155,7156,7157,7158, # 6400 -7159,7160,2931,4889,4890,4489,7161,2631,3889,4236,2779,7162,7163,4891,7164,3060, # 6416 -7165,1672,4892,7166,4893,4237,3281,4894,7167,7168,3666,7169,3494,7170,7171,4050, # 6432 -7172,7173,3104,3360,3420,4490,4051,2684,4052,7174,4053,7175,7176,7177,2253,4054, # 6448 -7178,7179,4895,7180,3152,3890,3153,4491,3216,7181,7182,7183,2968,4238,4492,4055, # 6464 -7184,2990,7185,2479,7186,7187,4493,7188,7189,7190,7191,7192,4896,7193,4897,2969, # 6480 -4494,4898,7194,3495,7195,7196,4899,4495,7197,3105,2731,7198,4900,7199,7200,7201, # 6496 -4056,7202,3361,7203,7204,4496,4901,4902,7205,4497,7206,7207,2315,4903,7208,4904, # 6512 -7209,4905,2851,7210,7211,3577,7212,3578,4906,7213,4057,3667,4907,7214,4058,2354, # 6528 -3891,2376,3217,3773,7215,7216,7217,7218,7219,4498,7220,4908,3282,2685,7221,3496, # 6544 -4909,2632,3154,4910,7222,2337,7223,4911,7224,7225,7226,4912,4913,3283,4239,4499, # 6560 -7227,2816,7228,7229,7230,7231,7232,7233,7234,4914,4500,4501,7235,7236,7237,2686, # 6576 -7238,4915,7239,2897,4502,7240,4503,7241,2516,7242,4504,3362,3218,7243,7244,7245, # 6592 -4916,7246,7247,4505,3363,7248,7249,7250,7251,3774,4506,7252,7253,4917,7254,7255, # 6608 -3284,2991,4918,4919,3219,3892,4920,3106,3497,4921,7256,7257,7258,4922,7259,4923, # 6624 -3364,4507,4508,4059,7260,4240,3498,7261,7262,4924,7263,2992,3893,4060,3220,7264, # 6640 -7265,7266,7267,7268,7269,4509,3775,7270,2817,7271,4061,4925,4510,3776,7272,4241, # 6656 -4511,3285,7273,7274,3499,7275,7276,7277,4062,4512,4926,7278,3107,3894,7279,7280, # 6672 -4927,7281,4513,7282,7283,3668,7284,7285,4242,4514,4243,7286,2058,4515,4928,4929, # 6688 -4516,7287,3286,4244,7288,4517,7289,7290,7291,3669,7292,7293,4930,4931,4932,2355, # 6704 -4933,7294,2633,4518,7295,4245,7296,7297,4519,7298,7299,4520,4521,4934,7300,4246, # 6720 -4522,7301,7302,7303,3579,7304,4247,4935,7305,4936,7306,7307,7308,7309,3777,7310, # 6736 -4523,7311,7312,7313,4248,3580,7314,4524,3778,4249,7315,3581,7316,3287,7317,3221, # 6752 -7318,4937,7319,7320,7321,7322,7323,7324,4938,4939,7325,4525,7326,7327,7328,4063, # 6768 -7329,7330,4940,7331,7332,4941,7333,4526,7334,3500,2780,1741,4942,2026,1742,7335, # 6784 -7336,3582,4527,2388,7337,7338,7339,4528,7340,4250,4943,7341,7342,7343,4944,7344, # 6800 -7345,7346,3020,7347,4945,7348,7349,7350,7351,3895,7352,3896,4064,3897,7353,7354, # 6816 -7355,4251,7356,7357,3898,7358,3779,7359,3780,3288,7360,7361,4529,7362,4946,4530, # 6832 -2027,7363,3899,4531,4947,3222,3583,7364,4948,7365,7366,7367,7368,4949,3501,4950, # 6848 -3781,4951,4532,7369,2517,4952,4252,4953,3155,7370,4954,4955,4253,2518,4533,7371, # 6864 -7372,2712,4254,7373,7374,7375,3670,4956,3671,7376,2389,3502,4065,7377,2338,7378, # 6880 -7379,7380,7381,3061,7382,4957,7383,7384,7385,7386,4958,4534,7387,7388,2993,7389, # 6896 -3062,7390,4959,7391,7392,7393,4960,3108,4961,7394,4535,7395,4962,3421,4536,7396, # 6912 -4963,7397,4964,1857,7398,4965,7399,7400,2176,3584,4966,7401,7402,3422,4537,3900, # 6928 -3585,7403,3782,7404,2852,7405,7406,7407,4538,3783,2654,3423,4967,4539,7408,3784, # 6944 -3586,2853,4540,4541,7409,3901,7410,3902,7411,7412,3785,3109,2327,3903,7413,7414, # 6960 -2970,4066,2932,7415,7416,7417,3904,3672,3424,7418,4542,4543,4544,7419,4968,7420, # 6976 -7421,4255,7422,7423,7424,7425,7426,4067,7427,3673,3365,4545,7428,3110,2559,3674, # 6992 -7429,7430,3156,7431,7432,3503,7433,3425,4546,7434,3063,2873,7435,3223,4969,4547, # 7008 -4548,2898,4256,4068,7436,4069,3587,3786,2933,3787,4257,4970,4971,3788,7437,4972, # 7024 -3064,7438,4549,7439,7440,7441,7442,7443,4973,3905,7444,2874,7445,7446,7447,7448, # 7040 -3021,7449,4550,3906,3588,4974,7450,7451,3789,3675,7452,2578,7453,4070,7454,7455, # 7056 -7456,4258,3676,7457,4975,7458,4976,4259,3790,3504,2634,4977,3677,4551,4260,7459, # 7072 -7460,7461,7462,3907,4261,4978,7463,7464,7465,7466,4979,4980,7467,7468,2213,4262, # 7088 -7469,7470,7471,3678,4981,7472,2439,7473,4263,3224,3289,7474,3908,2415,4982,7475, # 7104 -4264,7476,4983,2655,7477,7478,2732,4552,2854,2875,7479,7480,4265,7481,4553,4984, # 7120 -7482,7483,4266,7484,3679,3366,3680,2818,2781,2782,3367,3589,4554,3065,7485,4071, # 7136 -2899,7486,7487,3157,2462,4072,4555,4073,4985,4986,3111,4267,2687,3368,4556,4074, # 7152 -3791,4268,7488,3909,2783,7489,2656,1962,3158,4557,4987,1963,3159,3160,7490,3112, # 7168 -4988,4989,3022,4990,4991,3792,2855,7491,7492,2971,4558,7493,7494,4992,7495,7496, # 7184 -7497,7498,4993,7499,3426,4559,4994,7500,3681,4560,4269,4270,3910,7501,4075,4995, # 7200 -4271,7502,7503,4076,7504,4996,7505,3225,4997,4272,4077,2819,3023,7506,7507,2733, # 7216 -4561,7508,4562,7509,3369,3793,7510,3590,2508,7511,7512,4273,3113,2994,2616,7513, # 7232 -7514,7515,7516,7517,7518,2820,3911,4078,2748,7519,7520,4563,4998,7521,7522,7523, # 7248 -7524,4999,4274,7525,4564,3682,2239,4079,4565,7526,7527,7528,7529,5000,7530,7531, # 7264 -5001,4275,3794,7532,7533,7534,3066,5002,4566,3161,7535,7536,4080,7537,3162,7538, # 7280 -7539,4567,7540,7541,7542,7543,7544,7545,5003,7546,4568,7547,7548,7549,7550,7551, # 7296 -7552,7553,7554,7555,7556,5004,7557,7558,7559,5005,7560,3795,7561,4569,7562,7563, # 7312 -7564,2821,3796,4276,4277,4081,7565,2876,7566,5006,7567,7568,2900,7569,3797,3912, # 7328 -7570,7571,7572,4278,7573,7574,7575,5007,7576,7577,5008,7578,7579,4279,2934,7580, # 7344 -7581,5009,7582,4570,7583,4280,7584,7585,7586,4571,4572,3913,7587,4573,3505,7588, # 7360 -5010,7589,7590,7591,7592,3798,4574,7593,7594,5011,7595,4281,7596,7597,7598,4282, # 7376 -5012,7599,7600,5013,3163,7601,5014,7602,3914,7603,7604,2734,4575,4576,4577,7605, # 7392 -7606,7607,7608,7609,3506,5015,4578,7610,4082,7611,2822,2901,2579,3683,3024,4579, # 7408 -3507,7612,4580,7613,3226,3799,5016,7614,7615,7616,7617,7618,7619,7620,2995,3290, # 7424 -7621,4083,7622,5017,7623,7624,7625,7626,7627,4581,3915,7628,3291,7629,5018,7630, # 7440 -7631,7632,7633,4084,7634,7635,3427,3800,7636,7637,4582,7638,5019,4583,5020,7639, # 7456 -3916,7640,3801,5021,4584,4283,7641,7642,3428,3591,2269,7643,2617,7644,4585,3592, # 7472 -7645,4586,2902,7646,7647,3227,5022,7648,4587,7649,4284,7650,7651,7652,4588,2284, # 7488 -7653,5023,7654,7655,7656,4589,5024,3802,7657,7658,5025,3508,4590,7659,7660,7661, # 7504 -1969,5026,7662,7663,3684,1821,2688,7664,2028,2509,4285,7665,2823,1841,7666,2689, # 7520 -3114,7667,3917,4085,2160,5027,5028,2972,7668,5029,7669,7670,7671,3593,4086,7672, # 7536 -4591,4087,5030,3803,7673,7674,7675,7676,7677,7678,7679,4286,2366,4592,4593,3067, # 7552 -2328,7680,7681,4594,3594,3918,2029,4287,7682,5031,3919,3370,4288,4595,2856,7683, # 7568 -3509,7684,7685,5032,5033,7686,7687,3804,2784,7688,7689,7690,7691,3371,7692,7693, # 7584 -2877,5034,7694,7695,3920,4289,4088,7696,7697,7698,5035,7699,5036,4290,5037,5038, # 7600 -5039,7700,7701,7702,5040,5041,3228,7703,1760,7704,5042,3229,4596,2106,4089,7705, # 7616 -4597,2824,5043,2107,3372,7706,4291,4090,5044,7707,4091,7708,5045,3025,3805,4598, # 7632 -4292,4293,4294,3373,7709,4599,7710,5046,7711,7712,5047,5048,3806,7713,7714,7715, # 7648 -5049,7716,7717,7718,7719,4600,5050,7720,7721,7722,5051,7723,4295,3429,7724,7725, # 7664 -7726,7727,3921,7728,3292,5052,4092,7729,7730,7731,7732,7733,7734,7735,5053,5054, # 7680 -7736,7737,7738,7739,3922,3685,7740,7741,7742,7743,2635,5055,7744,5056,4601,7745, # 7696 -7746,2560,7747,7748,7749,7750,3923,7751,7752,7753,7754,7755,4296,2903,7756,7757, # 7712 -7758,7759,7760,3924,7761,5057,4297,7762,7763,5058,4298,7764,4093,7765,7766,5059, # 7728 -3925,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,3595,7777,4299,5060,4094, # 7744 -7778,3293,5061,7779,7780,4300,7781,7782,4602,7783,3596,7784,7785,3430,2367,7786, # 7760 -3164,5062,5063,4301,7787,7788,4095,5064,5065,7789,3374,3115,7790,7791,7792,7793, # 7776 -7794,7795,7796,3597,4603,7797,7798,3686,3116,3807,5066,7799,7800,5067,7801,7802, # 7792 -4604,4302,5068,4303,4096,7803,7804,3294,7805,7806,5069,4605,2690,7807,3026,7808, # 7808 -7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824, # 7824 -7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7840 -7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856, # 7856 -7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872, # 7872 -7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888, # 7888 -7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904, # 7904 -7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920, # 7920 -7921,7922,7923,7924,3926,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, # 7936 -7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, # 7952 -7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, # 7968 -7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, # 7984 -7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, # 8000 -8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, # 8016 -8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, # 8032 -8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, # 8048 -8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, # 8064 -8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, # 8080 -8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, # 8096 -8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, # 8112 -8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, # 8128 -8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, # 8144 -8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, # 8160 -8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, # 8176 -8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, # 8192 -8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, # 8208 -8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, # 8224 -8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, # 8240 -8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, # 8256 -8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271) # 8272 - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/jpcntx.py b/plugin.video.alfa/lib/requests/packages/chardet/jpcntx.py deleted file mode 100755 index 00f8284f..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/jpcntx.py +++ /dev/null @@ -1,227 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .compat import wrap_ord - -NUM_OF_CATEGORY = 6 -DONT_KNOW = -1 -ENOUGH_REL_THRESHOLD = 100 -MAX_REL_THRESHOLD = 1000 -MINIMUM_DATA_THRESHOLD = 4 - -# This is hiragana 2-char sequence table, the number in each cell represents its frequency category -jp2CharContext = ( -(0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1), -(2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4), -(0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2), -(0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4), -(1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4), -(0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3), -(0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3), -(0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3), -(0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4), -(0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3), -(2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4), -(0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3), -(0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5), -(0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3), -(2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5), -(0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4), -(1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4), -(0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3), -(0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3), -(0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3), -(0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5), -(0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4), -(0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5), -(0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3), -(0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4), -(0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4), -(0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4), -(0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1), -(0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0), -(1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3), -(0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0), -(0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3), -(0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3), -(0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5), -(0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4), -(2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5), -(0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3), -(0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3), -(0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3), -(0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3), -(0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4), -(0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4), -(0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2), -(0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3), -(0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3), -(0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3), -(0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3), -(0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4), -(0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3), -(0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4), -(0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3), -(0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3), -(0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4), -(0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4), -(0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3), -(2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4), -(0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4), -(0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3), -(0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4), -(0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4), -(1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4), -(0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3), -(0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2), -(0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2), -(0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3), -(0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3), -(0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5), -(0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3), -(0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4), -(1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4), -(0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), -(0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3), -(0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1), -(0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2), -(0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3), -(0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1), -) - -class JapaneseContextAnalysis: - def __init__(self): - self.reset() - - def reset(self): - self._mTotalRel = 0 # total sequence received - # category counters, each interger counts sequence in its category - self._mRelSample = [0] * NUM_OF_CATEGORY - # if last byte in current buffer is not the last byte of a character, - # we need to know how many bytes to skip in next buffer - self._mNeedToSkipCharNum = 0 - self._mLastCharOrder = -1 # The order of previous char - # If this flag is set to True, detection is done and conclusion has - # been made - self._mDone = False - - def feed(self, aBuf, aLen): - if self._mDone: - return - - # The buffer we got is byte oriented, and a character may span in more than one - # buffers. In case the last one or two byte in last buffer is not - # complete, we record how many byte needed to complete that character - # and skip these bytes here. We can choose to record those bytes as - # well and analyse the character once it is complete, but since a - # character will not make much difference, by simply skipping - # this character will simply our logic and improve performance. - i = self._mNeedToSkipCharNum - while i < aLen: - order, charLen = self.get_order(aBuf[i:i + 2]) - i += charLen - if i > aLen: - self._mNeedToSkipCharNum = i - aLen - self._mLastCharOrder = -1 - else: - if (order != -1) and (self._mLastCharOrder != -1): - self._mTotalRel += 1 - if self._mTotalRel > MAX_REL_THRESHOLD: - self._mDone = True - break - self._mRelSample[jp2CharContext[self._mLastCharOrder][order]] += 1 - self._mLastCharOrder = order - - def got_enough_data(self): - return self._mTotalRel > ENOUGH_REL_THRESHOLD - - def get_confidence(self): - # This is just one way to calculate confidence. It works well for me. - if self._mTotalRel > MINIMUM_DATA_THRESHOLD: - return (self._mTotalRel - self._mRelSample[0]) / self._mTotalRel - else: - return DONT_KNOW - - def get_order(self, aBuf): - return -1, 1 - -class SJISContextAnalysis(JapaneseContextAnalysis): - def __init__(self): - self.charset_name = "SHIFT_JIS" - - def get_charset_name(self): - return self.charset_name - - def get_order(self, aBuf): - if not aBuf: - return -1, 1 - # find out current char's byte length - first_char = wrap_ord(aBuf[0]) - if ((0x81 <= first_char <= 0x9F) or (0xE0 <= first_char <= 0xFC)): - charLen = 2 - if (first_char == 0x87) or (0xFA <= first_char <= 0xFC): - self.charset_name = "CP932" - else: - charLen = 1 - - # return its order if it is hiragana - if len(aBuf) > 1: - second_char = wrap_ord(aBuf[1]) - if (first_char == 202) and (0x9F <= second_char <= 0xF1): - return second_char - 0x9F, charLen - - return -1, charLen - -class EUCJPContextAnalysis(JapaneseContextAnalysis): - def get_order(self, aBuf): - if not aBuf: - return -1, 1 - # find out current char's byte length - first_char = wrap_ord(aBuf[0]) - if (first_char == 0x8E) or (0xA1 <= first_char <= 0xFE): - charLen = 2 - elif first_char == 0x8F: - charLen = 3 - else: - charLen = 1 - - # return its order if it is hiragana - if len(aBuf) > 1: - second_char = wrap_ord(aBuf[1]) - if (first_char == 0xA4) and (0xA1 <= second_char <= 0xF3): - return second_char - 0xA1, charLen - - return -1, charLen - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/langbulgarianmodel.py b/plugin.video.alfa/lib/requests/packages/chardet/langbulgarianmodel.py deleted file mode 100755 index ea5a60ba..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/langbulgarianmodel.py +++ /dev/null @@ -1,229 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -# this table is modified base on win1251BulgarianCharToOrderMap, so -# only number <64 is sure valid - -Latin5_BulgarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 -194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80 -210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90 - 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0 - 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0 -) - -win1251BulgarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 -206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80 -221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90 - 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0 - 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0 -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 96.9392% -# first 1024 sequences:3.0618% -# rest sequences: 0.2992% -# negative sequences: 0.0020% -BulgarianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, -3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, -0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, -0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, -0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, -0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, -0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, -2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, -3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, -1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, -3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, -1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, -2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, -2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, -3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, -1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, -2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, -2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, -1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, -2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, -2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, -2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, -1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, -2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, -1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, -3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, -1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, -3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, -1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, -2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, -1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, -2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, -1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, -2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, -1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, -2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, -1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, -0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, -1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, -1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, -1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, -0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, -1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, -1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -) - -Latin5BulgarianModel = { - 'charToOrderMap': Latin5_BulgarianCharToOrderMap, - 'precedenceMatrix': BulgarianLangModel, - 'mTypicalPositiveRatio': 0.969392, - 'keepEnglishLetter': False, - 'charsetName': "ISO-8859-5" -} - -Win1251BulgarianModel = { - 'charToOrderMap': win1251BulgarianCharToOrderMap, - 'precedenceMatrix': BulgarianLangModel, - 'mTypicalPositiveRatio': 0.969392, - 'keepEnglishLetter': False, - 'charsetName': "windows-1251" -} - - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/langcyrillicmodel.py b/plugin.video.alfa/lib/requests/packages/chardet/langcyrillicmodel.py deleted file mode 100755 index 15e338fc..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/langcyrillicmodel.py +++ /dev/null @@ -1,329 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# KOI8-R language model -# Character Mapping Table: -KOI8R_CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80 -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90 -223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0 -238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0 - 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0 - 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0 - 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0 - 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0 -) - -win1251_CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, -239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -) - -latin5_CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -) - -macCyrillic_CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, -239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255, -) - -IBM855_CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, -206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, - 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, -220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, -230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, - 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, - 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, -250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255, -) - -IBM866_CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 97.6601% -# first 1024 sequences: 2.3389% -# rest sequences: 0.1237% -# negative sequences: 0.0009% -RussianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, -1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, -1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, -2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, -1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, -3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, -1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, -2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, -1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, -1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, -1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, -1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, -3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, -1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, -2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, -1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, -2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, -1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, -1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, -1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, -3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, -3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, -1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, -1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, -0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, -1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, -1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, -0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, -1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, -2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, -1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, -1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, -2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, -1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, -1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, -1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, -0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, -0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, -0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, -2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, -0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -) - -Koi8rModel = { - 'charToOrderMap': KOI8R_CharToOrderMap, - 'precedenceMatrix': RussianLangModel, - 'mTypicalPositiveRatio': 0.976601, - 'keepEnglishLetter': False, - 'charsetName': "KOI8-R" -} - -Win1251CyrillicModel = { - 'charToOrderMap': win1251_CharToOrderMap, - 'precedenceMatrix': RussianLangModel, - 'mTypicalPositiveRatio': 0.976601, - 'keepEnglishLetter': False, - 'charsetName': "windows-1251" -} - -Latin5CyrillicModel = { - 'charToOrderMap': latin5_CharToOrderMap, - 'precedenceMatrix': RussianLangModel, - 'mTypicalPositiveRatio': 0.976601, - 'keepEnglishLetter': False, - 'charsetName': "ISO-8859-5" -} - -MacCyrillicModel = { - 'charToOrderMap': macCyrillic_CharToOrderMap, - 'precedenceMatrix': RussianLangModel, - 'mTypicalPositiveRatio': 0.976601, - 'keepEnglishLetter': False, - 'charsetName': "MacCyrillic" -}; - -Ibm866Model = { - 'charToOrderMap': IBM866_CharToOrderMap, - 'precedenceMatrix': RussianLangModel, - 'mTypicalPositiveRatio': 0.976601, - 'keepEnglishLetter': False, - 'charsetName': "IBM866" -} - -Ibm855Model = { - 'charToOrderMap': IBM855_CharToOrderMap, - 'precedenceMatrix': RussianLangModel, - 'mTypicalPositiveRatio': 0.976601, - 'keepEnglishLetter': False, - 'charsetName': "IBM855" -} - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/langgreekmodel.py b/plugin.video.alfa/lib/requests/packages/chardet/langgreekmodel.py deleted file mode 100755 index 93241ce2..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/langgreekmodel.py +++ /dev/null @@ -1,225 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin7_CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 -253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 -253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 -253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0 -110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 -124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 -) - -win1253_CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 -253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 -253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 -253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0 -110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 -124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 98.2851% -# first 1024 sequences:1.7001% -# rest sequences: 0.0359% -# negative sequences: 0.0148% -GreekLangModel = ( -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, -3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, -2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, -0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, -2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, -2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, -0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, -2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, -0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, -3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, -3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, -2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, -2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, -0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, -0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, -0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, -0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, -0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, -0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, -0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, -0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, -0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, -0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, -0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, -0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, -0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, -0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, -0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, -0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, -0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, -0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, -0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, -0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, -0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, -0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, -0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, -0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, -0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, -0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, -0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, -0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, -0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, -0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -Latin7GreekModel = { - 'charToOrderMap': Latin7_CharToOrderMap, - 'precedenceMatrix': GreekLangModel, - 'mTypicalPositiveRatio': 0.982851, - 'keepEnglishLetter': False, - 'charsetName': "ISO-8859-7" -} - -Win1253GreekModel = { - 'charToOrderMap': win1253_CharToOrderMap, - 'precedenceMatrix': GreekLangModel, - 'mTypicalPositiveRatio': 0.982851, - 'keepEnglishLetter': False, - 'charsetName': "windows-1253" -} - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/langhebrewmodel.py b/plugin.video.alfa/lib/requests/packages/chardet/langhebrewmodel.py deleted file mode 100755 index d8713244..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/langhebrewmodel.py +++ /dev/null @@ -1,201 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Simon Montagu -# Portions created by the Initial Developer are Copyright (C) 2005 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Shoshannah Forbes - original C code (?) -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Windows-1255 language model -# Character Mapping Table: -win1255_CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40 - 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50 -253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60 - 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70 -124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, -215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, - 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, -106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, - 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, -238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, - 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, - 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 98.4004% -# first 1024 sequences: 1.5981% -# rest sequences: 0.087% -# negative sequences: 0.0015% -HebrewLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, -3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, -1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, -1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, -1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, -1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, -0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, -0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, -0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, -0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, -0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, -0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, -0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, -0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, -0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, -1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, -0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, -0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, -0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, -0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, -0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, -1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, -1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, -2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, -0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, -0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, -) - -Win1255HebrewModel = { - 'charToOrderMap': win1255_CharToOrderMap, - 'precedenceMatrix': HebrewLangModel, - 'mTypicalPositiveRatio': 0.984004, - 'keepEnglishLetter': False, - 'charsetName': "windows-1255" -} - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/langhungarianmodel.py b/plugin.video.alfa/lib/requests/packages/chardet/langhungarianmodel.py deleted file mode 100755 index 6f59c612..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/langhungarianmodel.py +++ /dev/null @@ -1,225 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin2_HungarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174, -175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190, -191,192,193,194,195,196,197, 75,198,199,200,201,202,203,204,205, - 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241, - 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85, -245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253, -) - -win1250HungarianCharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, -177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190, -191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205, - 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241, - 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87, -245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 94.7368% -# first 1024 sequences:5.2623% -# rest sequences: 0.8894% -# negative sequences: 0.0009% -HungarianLangModel = ( -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2, -3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2, -0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0, -1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0, -1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1, -3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0, -2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1, -2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1, -2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1, -2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1, -1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1, -1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1, -3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0, -1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1, -1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1, -2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1, -2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0, -2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1, -3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1, -1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0, -1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0, -1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1, -2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0, -1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0, -2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1, -2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1, -1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1, -1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0, -0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1, -2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1, -2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1, -1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0, -1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0, -2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0, -2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1, -2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0, -1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0, -0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -) - -Latin2HungarianModel = { - 'charToOrderMap': Latin2_HungarianCharToOrderMap, - 'precedenceMatrix': HungarianLangModel, - 'mTypicalPositiveRatio': 0.947368, - 'keepEnglishLetter': True, - 'charsetName': "ISO-8859-2" -} - -Win1250HungarianModel = { - 'charToOrderMap': win1250HungarianCharToOrderMap, - 'precedenceMatrix': HungarianLangModel, - 'mTypicalPositiveRatio': 0.947368, - 'keepEnglishLetter': True, - 'charsetName': "windows-1250" -} - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/langthaimodel.py b/plugin.video.alfa/lib/requests/packages/chardet/langthaimodel.py deleted file mode 100755 index df343a74..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/langthaimodel.py +++ /dev/null @@ -1,200 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# The following result for thai was collected from a limited sample (1M). - -# Character Mapping Table: -TIS620CharToOrderMap = ( -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40 -188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50 -253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60 - 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70 -209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222, -223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235, -236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57, - 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54, - 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63, - 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244, - 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247, - 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253, -) - -# Model Table: -# total sequences: 100% -# first 512 sequences: 92.6386% -# first 1024 sequences:7.3177% -# rest sequences: 1.0230% -# negative sequences: 0.0436% -ThaiLangModel = ( -0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3, -0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2, -3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3, -0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2, -3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2, -3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1, -3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1, -3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1, -2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1, -3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2, -1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3, -3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0, -1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2, -0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3, -0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1, -2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2, -0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2, -3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0, -2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, -3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1, -2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1, -3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0, -3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1, -3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1, -3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1, -1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2, -0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3, -0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1, -3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0, -3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1, -1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0, -3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1, -3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2, -0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0, -0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0, -1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1, -1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1, -3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1, -0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0, -3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0, -0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1, -0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0, -0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1, -0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1, -0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0, -0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1, -0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0, -0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0, -0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0, -3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1, -2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1, -0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0, -3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0, -1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, -1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -) - -TIS620ThaiModel = { - 'charToOrderMap': TIS620CharToOrderMap, - 'precedenceMatrix': ThaiLangModel, - 'mTypicalPositiveRatio': 0.926386, - 'keepEnglishLetter': False, - 'charsetName': "TIS-620" -} - -# flake8: noqa diff --git a/plugin.video.alfa/lib/requests/packages/chardet/latin1prober.py b/plugin.video.alfa/lib/requests/packages/chardet/latin1prober.py deleted file mode 100755 index 0ae41be6..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/latin1prober.py +++ /dev/null @@ -1,139 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetprober import CharSetProber -from .constants import eNotMe -from .compat import wrap_ord - -FREQ_CAT_NUM = 4 - -UDF = 0 # undefined -OTH = 1 # other -ASC = 2 # ascii capital letter -ASS = 3 # ascii small letter -ACV = 4 # accent capital vowel -ACO = 5 # accent capital other -ASV = 6 # accent small vowel -ASO = 7 # accent small other -CLASS_NUM = 8 # total classes - -Latin1_CharToClass = ( - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F - OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 - ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F - OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 - ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F - OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 - OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F - UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 - OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF - ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 - ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF - ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 - ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF - ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 - ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF - ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 - ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF -) - -# 0 : illegal -# 1 : very unlikely -# 2 : normal -# 3 : very likely -Latin1ClassModel = ( - # UDF OTH ASC ASS ACV ACO ASV ASO - 0, 0, 0, 0, 0, 0, 0, 0, # UDF - 0, 3, 3, 3, 3, 3, 3, 3, # OTH - 0, 3, 3, 3, 3, 3, 3, 3, # ASC - 0, 3, 3, 3, 1, 1, 3, 3, # ASS - 0, 3, 3, 3, 1, 2, 1, 2, # ACV - 0, 3, 3, 3, 3, 3, 3, 3, # ACO - 0, 3, 1, 3, 1, 1, 1, 3, # ASV - 0, 3, 1, 3, 1, 1, 3, 3, # ASO -) - - -class Latin1Prober(CharSetProber): - def __init__(self): - CharSetProber.__init__(self) - self.reset() - - def reset(self): - self._mLastCharClass = OTH - self._mFreqCounter = [0] * FREQ_CAT_NUM - CharSetProber.reset(self) - - def get_charset_name(self): - return "windows-1252" - - def feed(self, aBuf): - aBuf = self.filter_with_english_letters(aBuf) - for c in aBuf: - charClass = Latin1_CharToClass[wrap_ord(c)] - freq = Latin1ClassModel[(self._mLastCharClass * CLASS_NUM) - + charClass] - if freq == 0: - self._mState = eNotMe - break - self._mFreqCounter[freq] += 1 - self._mLastCharClass = charClass - - return self.get_state() - - def get_confidence(self): - if self.get_state() == eNotMe: - return 0.01 - - total = sum(self._mFreqCounter) - if total < 0.01: - confidence = 0.0 - else: - confidence = ((self._mFreqCounter[3] - self._mFreqCounter[1] * 20.0) - / total) - if confidence < 0.0: - confidence = 0.0 - # lower the confidence of latin1 so that other more accurate - # detector can take priority. - confidence = confidence * 0.73 - return confidence diff --git a/plugin.video.alfa/lib/requests/packages/chardet/mbcharsetprober.py b/plugin.video.alfa/lib/requests/packages/chardet/mbcharsetprober.py deleted file mode 100755 index 1eee253c..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/mbcharsetprober.py +++ /dev/null @@ -1,86 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Proofpoint, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import sys -from . import constants -from .charsetprober import CharSetProber - - -class MultiByteCharSetProber(CharSetProber): - def __init__(self): - CharSetProber.__init__(self) - self._mDistributionAnalyzer = None - self._mCodingSM = None - self._mLastChar = [0, 0] - - def reset(self): - CharSetProber.reset(self) - if self._mCodingSM: - self._mCodingSM.reset() - if self._mDistributionAnalyzer: - self._mDistributionAnalyzer.reset() - self._mLastChar = [0, 0] - - def get_charset_name(self): - pass - - def feed(self, aBuf): - aLen = len(aBuf) - for i in range(0, aLen): - codingState = self._mCodingSM.next_state(aBuf[i]) - if codingState == constants.eError: - if constants._debug: - sys.stderr.write(self.get_charset_name() - + ' prober hit error at byte ' + str(i) - + '\n') - self._mState = constants.eNotMe - break - elif codingState == constants.eItsMe: - self._mState = constants.eFoundIt - break - elif codingState == constants.eStart: - charLen = self._mCodingSM.get_current_charlen() - if i == 0: - self._mLastChar[1] = aBuf[0] - self._mDistributionAnalyzer.feed(self._mLastChar, charLen) - else: - self._mDistributionAnalyzer.feed(aBuf[i - 1:i + 1], - charLen) - - self._mLastChar[0] = aBuf[aLen - 1] - - if self.get_state() == constants.eDetecting: - if (self._mDistributionAnalyzer.got_enough_data() and - (self.get_confidence() > constants.SHORTCUT_THRESHOLD)): - self._mState = constants.eFoundIt - - return self.get_state() - - def get_confidence(self): - return self._mDistributionAnalyzer.get_confidence() diff --git a/plugin.video.alfa/lib/requests/packages/chardet/mbcsgroupprober.py b/plugin.video.alfa/lib/requests/packages/chardet/mbcsgroupprober.py deleted file mode 100755 index 2f6f5e89..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/mbcsgroupprober.py +++ /dev/null @@ -1,54 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Proofpoint, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetgroupprober import CharSetGroupProber -from .utf8prober import UTF8Prober -from .sjisprober import SJISProber -from .eucjpprober import EUCJPProber -from .gb2312prober import GB2312Prober -from .euckrprober import EUCKRProber -from .cp949prober import CP949Prober -from .big5prober import Big5Prober -from .euctwprober import EUCTWProber - - -class MBCSGroupProber(CharSetGroupProber): - def __init__(self): - CharSetGroupProber.__init__(self) - self._mProbers = [ - UTF8Prober(), - SJISProber(), - EUCJPProber(), - GB2312Prober(), - EUCKRProber(), - CP949Prober(), - Big5Prober(), - EUCTWProber() - ] - self.reset() diff --git a/plugin.video.alfa/lib/requests/packages/chardet/mbcssm.py b/plugin.video.alfa/lib/requests/packages/chardet/mbcssm.py deleted file mode 100755 index 3b22f578..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/mbcssm.py +++ /dev/null @@ -1,572 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .constants import eStart, eError, eItsMe - -# BIG5 - -BIG5_cls = ( - 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,1, # 78 - 7f - 4,4,4,4,4,4,4,4, # 80 - 87 - 4,4,4,4,4,4,4,4, # 88 - 8f - 4,4,4,4,4,4,4,4, # 90 - 97 - 4,4,4,4,4,4,4,4, # 98 - 9f - 4,3,3,3,3,3,3,3, # a0 - a7 - 3,3,3,3,3,3,3,3, # a8 - af - 3,3,3,3,3,3,3,3, # b0 - b7 - 3,3,3,3,3,3,3,3, # b8 - bf - 3,3,3,3,3,3,3,3, # c0 - c7 - 3,3,3,3,3,3,3,3, # c8 - cf - 3,3,3,3,3,3,3,3, # d0 - d7 - 3,3,3,3,3,3,3,3, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,3,3,3, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,3,3,0 # f8 - ff -) - -BIG5_st = ( - eError,eStart,eStart, 3,eError,eError,eError,eError,#00-07 - eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,#08-0f - eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart#10-17 -) - -Big5CharLenTable = (0, 1, 1, 2, 0) - -Big5SMModel = {'classTable': BIG5_cls, - 'classFactor': 5, - 'stateTable': BIG5_st, - 'charLenTable': Big5CharLenTable, - 'name': 'Big5'} - -# CP949 - -CP949_cls = ( - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,0,0, # 00 - 0f - 1,1,1,1,1,1,1,1, 1,1,1,0,1,1,1,1, # 10 - 1f - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 20 - 2f - 1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1, # 30 - 3f - 1,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4, # 40 - 4f - 4,4,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 50 - 5f - 1,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5, # 60 - 6f - 5,5,5,5,5,5,5,5, 5,5,5,1,1,1,1,1, # 70 - 7f - 0,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 80 - 8f - 6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6, # 90 - 9f - 6,7,7,7,7,7,7,7, 7,7,7,7,7,8,8,8, # a0 - af - 7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7, # b0 - bf - 7,7,7,7,7,7,9,2, 2,3,2,2,2,2,2,2, # c0 - cf - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # d0 - df - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2, # e0 - ef - 2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,0, # f0 - ff -) - -CP949_st = ( -#cls= 0 1 2 3 4 5 6 7 8 9 # previous state = - eError,eStart, 3,eError,eStart,eStart, 4, 5,eError, 6, # eStart - eError,eError,eError,eError,eError,eError,eError,eError,eError,eError, # eError - eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe, # eItsMe - eError,eError,eStart,eStart,eError,eError,eError,eStart,eStart,eStart, # 3 - eError,eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart,eStart, # 4 - eError,eStart,eStart,eStart,eStart,eStart,eStart,eStart,eStart,eStart, # 5 - eError,eStart,eStart,eStart,eStart,eError,eError,eStart,eStart,eStart, # 6 -) - -CP949CharLenTable = (0, 1, 2, 0, 1, 1, 2, 2, 0, 2) - -CP949SMModel = {'classTable': CP949_cls, - 'classFactor': 10, - 'stateTable': CP949_st, - 'charLenTable': CP949CharLenTable, - 'name': 'CP949'} - -# EUC-JP - -EUCJP_cls = ( - 4,4,4,4,4,4,4,4, # 00 - 07 - 4,4,4,4,4,4,5,5, # 08 - 0f - 4,4,4,4,4,4,4,4, # 10 - 17 - 4,4,4,5,4,4,4,4, # 18 - 1f - 4,4,4,4,4,4,4,4, # 20 - 27 - 4,4,4,4,4,4,4,4, # 28 - 2f - 4,4,4,4,4,4,4,4, # 30 - 37 - 4,4,4,4,4,4,4,4, # 38 - 3f - 4,4,4,4,4,4,4,4, # 40 - 47 - 4,4,4,4,4,4,4,4, # 48 - 4f - 4,4,4,4,4,4,4,4, # 50 - 57 - 4,4,4,4,4,4,4,4, # 58 - 5f - 4,4,4,4,4,4,4,4, # 60 - 67 - 4,4,4,4,4,4,4,4, # 68 - 6f - 4,4,4,4,4,4,4,4, # 70 - 77 - 4,4,4,4,4,4,4,4, # 78 - 7f - 5,5,5,5,5,5,5,5, # 80 - 87 - 5,5,5,5,5,5,1,3, # 88 - 8f - 5,5,5,5,5,5,5,5, # 90 - 97 - 5,5,5,5,5,5,5,5, # 98 - 9f - 5,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,2,2,2, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,2,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,0,5 # f8 - ff -) - -EUCJP_st = ( - 3, 4, 3, 5,eStart,eError,eError,eError,#00-07 - eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f - eItsMe,eItsMe,eStart,eError,eStart,eError,eError,eError,#10-17 - eError,eError,eStart,eError,eError,eError, 3,eError,#18-1f - 3,eError,eError,eError,eStart,eStart,eStart,eStart#20-27 -) - -EUCJPCharLenTable = (2, 2, 2, 3, 1, 0) - -EUCJPSMModel = {'classTable': EUCJP_cls, - 'classFactor': 6, - 'stateTable': EUCJP_st, - 'charLenTable': EUCJPCharLenTable, - 'name': 'EUC-JP'} - -# EUC-KR - -EUCKR_cls = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 1,1,1,1,1,1,1,1, # 40 - 47 - 1,1,1,1,1,1,1,1, # 48 - 4f - 1,1,1,1,1,1,1,1, # 50 - 57 - 1,1,1,1,1,1,1,1, # 58 - 5f - 1,1,1,1,1,1,1,1, # 60 - 67 - 1,1,1,1,1,1,1,1, # 68 - 6f - 1,1,1,1,1,1,1,1, # 70 - 77 - 1,1,1,1,1,1,1,1, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,3,3,3, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,3,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 2,2,2,2,2,2,2,2, # e0 - e7 - 2,2,2,2,2,2,2,2, # e8 - ef - 2,2,2,2,2,2,2,2, # f0 - f7 - 2,2,2,2,2,2,2,0 # f8 - ff -) - -EUCKR_st = ( - eError,eStart, 3,eError,eError,eError,eError,eError,#00-07 - eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart,eStart #08-0f -) - -EUCKRCharLenTable = (0, 1, 2, 0) - -EUCKRSMModel = {'classTable': EUCKR_cls, - 'classFactor': 4, - 'stateTable': EUCKR_st, - 'charLenTable': EUCKRCharLenTable, - 'name': 'EUC-KR'} - -# EUC-TW - -EUCTW_cls = ( - 2,2,2,2,2,2,2,2, # 00 - 07 - 2,2,2,2,2,2,0,0, # 08 - 0f - 2,2,2,2,2,2,2,2, # 10 - 17 - 2,2,2,0,2,2,2,2, # 18 - 1f - 2,2,2,2,2,2,2,2, # 20 - 27 - 2,2,2,2,2,2,2,2, # 28 - 2f - 2,2,2,2,2,2,2,2, # 30 - 37 - 2,2,2,2,2,2,2,2, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,2, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,6,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,3,4,4,4,4,4,4, # a0 - a7 - 5,5,1,1,1,1,1,1, # a8 - af - 1,1,1,1,1,1,1,1, # b0 - b7 - 1,1,1,1,1,1,1,1, # b8 - bf - 1,1,3,1,3,3,3,3, # c0 - c7 - 3,3,3,3,3,3,3,3, # c8 - cf - 3,3,3,3,3,3,3,3, # d0 - d7 - 3,3,3,3,3,3,3,3, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,3,3,3, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,3,3,0 # f8 - ff -) - -EUCTW_st = ( - eError,eError,eStart, 3, 3, 3, 4,eError,#00-07 - eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,#08-0f - eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eStart,eError,#10-17 - eStart,eStart,eStart,eError,eError,eError,eError,eError,#18-1f - 5,eError,eError,eError,eStart,eError,eStart,eStart,#20-27 - eStart,eError,eStart,eStart,eStart,eStart,eStart,eStart #28-2f -) - -EUCTWCharLenTable = (0, 0, 1, 2, 2, 2, 3) - -EUCTWSMModel = {'classTable': EUCTW_cls, - 'classFactor': 7, - 'stateTable': EUCTW_st, - 'charLenTable': EUCTWCharLenTable, - 'name': 'x-euc-tw'} - -# GB2312 - -GB2312_cls = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 3,3,3,3,3,3,3,3, # 30 - 37 - 3,3,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,4, # 78 - 7f - 5,6,6,6,6,6,6,6, # 80 - 87 - 6,6,6,6,6,6,6,6, # 88 - 8f - 6,6,6,6,6,6,6,6, # 90 - 97 - 6,6,6,6,6,6,6,6, # 98 - 9f - 6,6,6,6,6,6,6,6, # a0 - a7 - 6,6,6,6,6,6,6,6, # a8 - af - 6,6,6,6,6,6,6,6, # b0 - b7 - 6,6,6,6,6,6,6,6, # b8 - bf - 6,6,6,6,6,6,6,6, # c0 - c7 - 6,6,6,6,6,6,6,6, # c8 - cf - 6,6,6,6,6,6,6,6, # d0 - d7 - 6,6,6,6,6,6,6,6, # d8 - df - 6,6,6,6,6,6,6,6, # e0 - e7 - 6,6,6,6,6,6,6,6, # e8 - ef - 6,6,6,6,6,6,6,6, # f0 - f7 - 6,6,6,6,6,6,6,0 # f8 - ff -) - -GB2312_st = ( - eError,eStart,eStart,eStart,eStart,eStart, 3,eError,#00-07 - eError,eError,eError,eError,eError,eError,eItsMe,eItsMe,#08-0f - eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eError,eError,eStart,#10-17 - 4,eError,eStart,eStart,eError,eError,eError,eError,#18-1f - eError,eError, 5,eError,eError,eError,eItsMe,eError,#20-27 - eError,eError,eStart,eStart,eStart,eStart,eStart,eStart #28-2f -) - -# To be accurate, the length of class 6 can be either 2 or 4. -# But it is not necessary to discriminate between the two since -# it is used for frequency analysis only, and we are validing -# each code range there as well. So it is safe to set it to be -# 2 here. -GB2312CharLenTable = (0, 1, 1, 1, 1, 1, 2) - -GB2312SMModel = {'classTable': GB2312_cls, - 'classFactor': 7, - 'stateTable': GB2312_st, - 'charLenTable': GB2312CharLenTable, - 'name': 'GB2312'} - -# Shift_JIS - -SJIS_cls = ( - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,1, # 78 - 7f - 3,3,3,3,3,2,2,3, # 80 - 87 - 3,3,3,3,3,3,3,3, # 88 - 8f - 3,3,3,3,3,3,3,3, # 90 - 97 - 3,3,3,3,3,3,3,3, # 98 - 9f - #0xa0 is illegal in sjis encoding, but some pages does - #contain such byte. We need to be more error forgiven. - 2,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,2,2,2, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,2,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,4,4,4, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,0,0,0) # f8 - ff - - -SJIS_st = ( - eError,eStart,eStart, 3,eError,eError,eError,eError,#00-07 - eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f - eItsMe,eItsMe,eError,eError,eStart,eStart,eStart,eStart #10-17 -) - -SJISCharLenTable = (0, 1, 1, 2, 0, 0) - -SJISSMModel = {'classTable': SJIS_cls, - 'classFactor': 6, - 'stateTable': SJIS_st, - 'charLenTable': SJISCharLenTable, - 'name': 'Shift_JIS'} - -# UCS2-BE - -UCS2BE_cls = ( - 0,0,0,0,0,0,0,0, # 00 - 07 - 0,0,1,0,0,2,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,3,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,3,3,3,3,3,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,0,0,0,0,0, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,0,0,0,0,0,0,0, # a0 - a7 - 0,0,0,0,0,0,0,0, # a8 - af - 0,0,0,0,0,0,0,0, # b0 - b7 - 0,0,0,0,0,0,0,0, # b8 - bf - 0,0,0,0,0,0,0,0, # c0 - c7 - 0,0,0,0,0,0,0,0, # c8 - cf - 0,0,0,0,0,0,0,0, # d0 - d7 - 0,0,0,0,0,0,0,0, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,4,5 # f8 - ff -) - -UCS2BE_st = ( - 5, 7, 7,eError, 4, 3,eError,eError,#00-07 - eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f - eItsMe,eItsMe, 6, 6, 6, 6,eError,eError,#10-17 - 6, 6, 6, 6, 6,eItsMe, 6, 6,#18-1f - 6, 6, 6, 6, 5, 7, 7,eError,#20-27 - 5, 8, 6, 6,eError, 6, 6, 6,#28-2f - 6, 6, 6, 6,eError,eError,eStart,eStart #30-37 -) - -UCS2BECharLenTable = (2, 2, 2, 0, 2, 2) - -UCS2BESMModel = {'classTable': UCS2BE_cls, - 'classFactor': 6, - 'stateTable': UCS2BE_st, - 'charLenTable': UCS2BECharLenTable, - 'name': 'UTF-16BE'} - -# UCS2-LE - -UCS2LE_cls = ( - 0,0,0,0,0,0,0,0, # 00 - 07 - 0,0,1,0,0,2,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,3,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,3,3,3,3,3,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,0,0,0,0,0, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,0,0,0,0,0,0,0, # a0 - a7 - 0,0,0,0,0,0,0,0, # a8 - af - 0,0,0,0,0,0,0,0, # b0 - b7 - 0,0,0,0,0,0,0,0, # b8 - bf - 0,0,0,0,0,0,0,0, # c0 - c7 - 0,0,0,0,0,0,0,0, # c8 - cf - 0,0,0,0,0,0,0,0, # d0 - d7 - 0,0,0,0,0,0,0,0, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,4,5 # f8 - ff -) - -UCS2LE_st = ( - 6, 6, 7, 6, 4, 3,eError,eError,#00-07 - eError,eError,eError,eError,eItsMe,eItsMe,eItsMe,eItsMe,#08-0f - eItsMe,eItsMe, 5, 5, 5,eError,eItsMe,eError,#10-17 - 5, 5, 5,eError, 5,eError, 6, 6,#18-1f - 7, 6, 8, 8, 5, 5, 5,eError,#20-27 - 5, 5, 5,eError,eError,eError, 5, 5,#28-2f - 5, 5, 5,eError, 5,eError,eStart,eStart #30-37 -) - -UCS2LECharLenTable = (2, 2, 2, 2, 2, 2) - -UCS2LESMModel = {'classTable': UCS2LE_cls, - 'classFactor': 6, - 'stateTable': UCS2LE_st, - 'charLenTable': UCS2LECharLenTable, - 'name': 'UTF-16LE'} - -# UTF-8 - -UTF8_cls = ( - 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 1,1,1,1,1,1,1,1, # 40 - 47 - 1,1,1,1,1,1,1,1, # 48 - 4f - 1,1,1,1,1,1,1,1, # 50 - 57 - 1,1,1,1,1,1,1,1, # 58 - 5f - 1,1,1,1,1,1,1,1, # 60 - 67 - 1,1,1,1,1,1,1,1, # 68 - 6f - 1,1,1,1,1,1,1,1, # 70 - 77 - 1,1,1,1,1,1,1,1, # 78 - 7f - 2,2,2,2,3,3,3,3, # 80 - 87 - 4,4,4,4,4,4,4,4, # 88 - 8f - 4,4,4,4,4,4,4,4, # 90 - 97 - 4,4,4,4,4,4,4,4, # 98 - 9f - 5,5,5,5,5,5,5,5, # a0 - a7 - 5,5,5,5,5,5,5,5, # a8 - af - 5,5,5,5,5,5,5,5, # b0 - b7 - 5,5,5,5,5,5,5,5, # b8 - bf - 0,0,6,6,6,6,6,6, # c0 - c7 - 6,6,6,6,6,6,6,6, # c8 - cf - 6,6,6,6,6,6,6,6, # d0 - d7 - 6,6,6,6,6,6,6,6, # d8 - df - 7,8,8,8,8,8,8,8, # e0 - e7 - 8,8,8,8,8,9,8,8, # e8 - ef - 10,11,11,11,11,11,11,11, # f0 - f7 - 12,13,13,13,14,15,0,0 # f8 - ff -) - -UTF8_st = ( - eError,eStart,eError,eError,eError,eError, 12, 10,#00-07 - 9, 11, 8, 7, 6, 5, 4, 3,#08-0f - eError,eError,eError,eError,eError,eError,eError,eError,#10-17 - eError,eError,eError,eError,eError,eError,eError,eError,#18-1f - eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,#20-27 - eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,eItsMe,#28-2f - eError,eError, 5, 5, 5, 5,eError,eError,#30-37 - eError,eError,eError,eError,eError,eError,eError,eError,#38-3f - eError,eError,eError, 5, 5, 5,eError,eError,#40-47 - eError,eError,eError,eError,eError,eError,eError,eError,#48-4f - eError,eError, 7, 7, 7, 7,eError,eError,#50-57 - eError,eError,eError,eError,eError,eError,eError,eError,#58-5f - eError,eError,eError,eError, 7, 7,eError,eError,#60-67 - eError,eError,eError,eError,eError,eError,eError,eError,#68-6f - eError,eError, 9, 9, 9, 9,eError,eError,#70-77 - eError,eError,eError,eError,eError,eError,eError,eError,#78-7f - eError,eError,eError,eError,eError, 9,eError,eError,#80-87 - eError,eError,eError,eError,eError,eError,eError,eError,#88-8f - eError,eError, 12, 12, 12, 12,eError,eError,#90-97 - eError,eError,eError,eError,eError,eError,eError,eError,#98-9f - eError,eError,eError,eError,eError, 12,eError,eError,#a0-a7 - eError,eError,eError,eError,eError,eError,eError,eError,#a8-af - eError,eError, 12, 12, 12,eError,eError,eError,#b0-b7 - eError,eError,eError,eError,eError,eError,eError,eError,#b8-bf - eError,eError,eStart,eStart,eStart,eStart,eError,eError,#c0-c7 - eError,eError,eError,eError,eError,eError,eError,eError #c8-cf -) - -UTF8CharLenTable = (0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6) - -UTF8SMModel = {'classTable': UTF8_cls, - 'classFactor': 16, - 'stateTable': UTF8_st, - 'charLenTable': UTF8CharLenTable, - 'name': 'UTF-8'} diff --git a/plugin.video.alfa/lib/requests/packages/chardet/sbcharsetprober.py b/plugin.video.alfa/lib/requests/packages/chardet/sbcharsetprober.py deleted file mode 100755 index da26715c..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/sbcharsetprober.py +++ /dev/null @@ -1,120 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import sys -from . import constants -from .charsetprober import CharSetProber -from .compat import wrap_ord - -SAMPLE_SIZE = 64 -SB_ENOUGH_REL_THRESHOLD = 1024 -POSITIVE_SHORTCUT_THRESHOLD = 0.95 -NEGATIVE_SHORTCUT_THRESHOLD = 0.05 -SYMBOL_CAT_ORDER = 250 -NUMBER_OF_SEQ_CAT = 4 -POSITIVE_CAT = NUMBER_OF_SEQ_CAT - 1 -#NEGATIVE_CAT = 0 - - -class SingleByteCharSetProber(CharSetProber): - def __init__(self, model, reversed=False, nameProber=None): - CharSetProber.__init__(self) - self._mModel = model - # TRUE if we need to reverse every pair in the model lookup - self._mReversed = reversed - # Optional auxiliary prober for name decision - self._mNameProber = nameProber - self.reset() - - def reset(self): - CharSetProber.reset(self) - # char order of last character - self._mLastOrder = 255 - self._mSeqCounters = [0] * NUMBER_OF_SEQ_CAT - self._mTotalSeqs = 0 - self._mTotalChar = 0 - # characters that fall in our sampling range - self._mFreqChar = 0 - - def get_charset_name(self): - if self._mNameProber: - return self._mNameProber.get_charset_name() - else: - return self._mModel['charsetName'] - - def feed(self, aBuf): - if not self._mModel['keepEnglishLetter']: - aBuf = self.filter_without_english_letters(aBuf) - aLen = len(aBuf) - if not aLen: - return self.get_state() - for c in aBuf: - order = self._mModel['charToOrderMap'][wrap_ord(c)] - if order < SYMBOL_CAT_ORDER: - self._mTotalChar += 1 - if order < SAMPLE_SIZE: - self._mFreqChar += 1 - if self._mLastOrder < SAMPLE_SIZE: - self._mTotalSeqs += 1 - if not self._mReversed: - i = (self._mLastOrder * SAMPLE_SIZE) + order - model = self._mModel['precedenceMatrix'][i] - else: # reverse the order of the letters in the lookup - i = (order * SAMPLE_SIZE) + self._mLastOrder - model = self._mModel['precedenceMatrix'][i] - self._mSeqCounters[model] += 1 - self._mLastOrder = order - - if self.get_state() == constants.eDetecting: - if self._mTotalSeqs > SB_ENOUGH_REL_THRESHOLD: - cf = self.get_confidence() - if cf > POSITIVE_SHORTCUT_THRESHOLD: - if constants._debug: - sys.stderr.write('%s confidence = %s, we have a' - 'winner\n' % - (self._mModel['charsetName'], cf)) - self._mState = constants.eFoundIt - elif cf < NEGATIVE_SHORTCUT_THRESHOLD: - if constants._debug: - sys.stderr.write('%s confidence = %s, below negative' - 'shortcut threshhold %s\n' % - (self._mModel['charsetName'], cf, - NEGATIVE_SHORTCUT_THRESHOLD)) - self._mState = constants.eNotMe - - return self.get_state() - - def get_confidence(self): - r = 0.01 - if self._mTotalSeqs > 0: - r = ((1.0 * self._mSeqCounters[POSITIVE_CAT]) / self._mTotalSeqs - / self._mModel['mTypicalPositiveRatio']) - r = r * self._mFreqChar / self._mTotalChar - if r >= 1.0: - r = 0.99 - return r diff --git a/plugin.video.alfa/lib/requests/packages/chardet/sbcsgroupprober.py b/plugin.video.alfa/lib/requests/packages/chardet/sbcsgroupprober.py deleted file mode 100755 index b2248145..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/sbcsgroupprober.py +++ /dev/null @@ -1,69 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from .charsetgroupprober import CharSetGroupProber -from .sbcharsetprober import SingleByteCharSetProber -from .langcyrillicmodel import (Win1251CyrillicModel, Koi8rModel, - Latin5CyrillicModel, MacCyrillicModel, - Ibm866Model, Ibm855Model) -from .langgreekmodel import Latin7GreekModel, Win1253GreekModel -from .langbulgarianmodel import Latin5BulgarianModel, Win1251BulgarianModel -from .langhungarianmodel import Latin2HungarianModel, Win1250HungarianModel -from .langthaimodel import TIS620ThaiModel -from .langhebrewmodel import Win1255HebrewModel -from .hebrewprober import HebrewProber - - -class SBCSGroupProber(CharSetGroupProber): - def __init__(self): - CharSetGroupProber.__init__(self) - self._mProbers = [ - SingleByteCharSetProber(Win1251CyrillicModel), - SingleByteCharSetProber(Koi8rModel), - SingleByteCharSetProber(Latin5CyrillicModel), - SingleByteCharSetProber(MacCyrillicModel), - SingleByteCharSetProber(Ibm866Model), - SingleByteCharSetProber(Ibm855Model), - SingleByteCharSetProber(Latin7GreekModel), - SingleByteCharSetProber(Win1253GreekModel), - SingleByteCharSetProber(Latin5BulgarianModel), - SingleByteCharSetProber(Win1251BulgarianModel), - SingleByteCharSetProber(Latin2HungarianModel), - SingleByteCharSetProber(Win1250HungarianModel), - SingleByteCharSetProber(TIS620ThaiModel), - ] - hebrewProber = HebrewProber() - logicalHebrewProber = SingleByteCharSetProber(Win1255HebrewModel, - False, hebrewProber) - visualHebrewProber = SingleByteCharSetProber(Win1255HebrewModel, True, - hebrewProber) - hebrewProber.set_model_probers(logicalHebrewProber, visualHebrewProber) - self._mProbers.extend([hebrewProber, logicalHebrewProber, - visualHebrewProber]) - - self.reset() diff --git a/plugin.video.alfa/lib/requests/packages/chardet/sjisprober.py b/plugin.video.alfa/lib/requests/packages/chardet/sjisprober.py deleted file mode 100755 index bb7edfc2..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/sjisprober.py +++ /dev/null @@ -1,91 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -import sys -from .mbcharsetprober import MultiByteCharSetProber -from .codingstatemachine import CodingStateMachine -from .chardistribution import SJISDistributionAnalysis -from .jpcntx import SJISContextAnalysis -from .mbcssm import SJISSMModel -from . import constants - - -class SJISProber(MultiByteCharSetProber): - def __init__(self): - MultiByteCharSetProber.__init__(self) - self._mCodingSM = CodingStateMachine(SJISSMModel) - self._mDistributionAnalyzer = SJISDistributionAnalysis() - self._mContextAnalyzer = SJISContextAnalysis() - self.reset() - - def reset(self): - MultiByteCharSetProber.reset(self) - self._mContextAnalyzer.reset() - - def get_charset_name(self): - return self._mContextAnalyzer.get_charset_name() - - def feed(self, aBuf): - aLen = len(aBuf) - for i in range(0, aLen): - codingState = self._mCodingSM.next_state(aBuf[i]) - if codingState == constants.eError: - if constants._debug: - sys.stderr.write(self.get_charset_name() - + ' prober hit error at byte ' + str(i) - + '\n') - self._mState = constants.eNotMe - break - elif codingState == constants.eItsMe: - self._mState = constants.eFoundIt - break - elif codingState == constants.eStart: - charLen = self._mCodingSM.get_current_charlen() - if i == 0: - self._mLastChar[1] = aBuf[0] - self._mContextAnalyzer.feed(self._mLastChar[2 - charLen:], - charLen) - self._mDistributionAnalyzer.feed(self._mLastChar, charLen) - else: - self._mContextAnalyzer.feed(aBuf[i + 1 - charLen:i + 3 - - charLen], charLen) - self._mDistributionAnalyzer.feed(aBuf[i - 1:i + 1], - charLen) - - self._mLastChar[0] = aBuf[aLen - 1] - - if self.get_state() == constants.eDetecting: - if (self._mContextAnalyzer.got_enough_data() and - (self.get_confidence() > constants.SHORTCUT_THRESHOLD)): - self._mState = constants.eFoundIt - - return self.get_state() - - def get_confidence(self): - contxtCf = self._mContextAnalyzer.get_confidence() - distribCf = self._mDistributionAnalyzer.get_confidence() - return max(contxtCf, distribCf) diff --git a/plugin.video.alfa/lib/requests/packages/chardet/universaldetector.py b/plugin.video.alfa/lib/requests/packages/chardet/universaldetector.py deleted file mode 100755 index 9d510c7b..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/universaldetector.py +++ /dev/null @@ -1,170 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from . import constants -import sys -import codecs -from .latin1prober import Latin1Prober # windows-1252 -from .mbcsgroupprober import MBCSGroupProber # multi-byte character sets -from .sbcsgroupprober import SBCSGroupProber # single-byte character sets -from .escprober import EscCharSetProber # ISO-2122, etc. -import re - -MINIMUM_THRESHOLD = 0.20 -ePureAscii = 0 -eEscAscii = 1 -eHighbyte = 2 - - -class UniversalDetector: - def __init__(self): - self._highBitDetector = re.compile(b'[\x80-\xFF]') - self._escDetector = re.compile(b'(\033|~{)') - self._mEscCharSetProber = None - self._mCharSetProbers = [] - self.reset() - - def reset(self): - self.result = {'encoding': None, 'confidence': 0.0} - self.done = False - self._mStart = True - self._mGotData = False - self._mInputState = ePureAscii - self._mLastChar = b'' - if self._mEscCharSetProber: - self._mEscCharSetProber.reset() - for prober in self._mCharSetProbers: - prober.reset() - - def feed(self, aBuf): - if self.done: - return - - aLen = len(aBuf) - if not aLen: - return - - if not self._mGotData: - # If the data starts with BOM, we know it is UTF - if aBuf[:3] == codecs.BOM_UTF8: - # EF BB BF UTF-8 with BOM - self.result = {'encoding': "UTF-8-SIG", 'confidence': 1.0} - elif aBuf[:4] == codecs.BOM_UTF32_LE: - # FF FE 00 00 UTF-32, little-endian BOM - self.result = {'encoding': "UTF-32LE", 'confidence': 1.0} - elif aBuf[:4] == codecs.BOM_UTF32_BE: - # 00 00 FE FF UTF-32, big-endian BOM - self.result = {'encoding': "UTF-32BE", 'confidence': 1.0} - elif aBuf[:4] == b'\xFE\xFF\x00\x00': - # FE FF 00 00 UCS-4, unusual octet order BOM (3412) - self.result = { - 'encoding': "X-ISO-10646-UCS-4-3412", - 'confidence': 1.0 - } - elif aBuf[:4] == b'\x00\x00\xFF\xFE': - # 00 00 FF FE UCS-4, unusual octet order BOM (2143) - self.result = { - 'encoding': "X-ISO-10646-UCS-4-2143", - 'confidence': 1.0 - } - elif aBuf[:2] == codecs.BOM_LE: - # FF FE UTF-16, little endian BOM - self.result = {'encoding': "UTF-16LE", 'confidence': 1.0} - elif aBuf[:2] == codecs.BOM_BE: - # FE FF UTF-16, big endian BOM - self.result = {'encoding': "UTF-16BE", 'confidence': 1.0} - - self._mGotData = True - if self.result['encoding'] and (self.result['confidence'] > 0.0): - self.done = True - return - - if self._mInputState == ePureAscii: - if self._highBitDetector.search(aBuf): - self._mInputState = eHighbyte - elif ((self._mInputState == ePureAscii) and - self._escDetector.search(self._mLastChar + aBuf)): - self._mInputState = eEscAscii - - self._mLastChar = aBuf[-1:] - - if self._mInputState == eEscAscii: - if not self._mEscCharSetProber: - self._mEscCharSetProber = EscCharSetProber() - if self._mEscCharSetProber.feed(aBuf) == constants.eFoundIt: - self.result = {'encoding': self._mEscCharSetProber.get_charset_name(), - 'confidence': self._mEscCharSetProber.get_confidence()} - self.done = True - elif self._mInputState == eHighbyte: - if not self._mCharSetProbers: - self._mCharSetProbers = [MBCSGroupProber(), SBCSGroupProber(), - Latin1Prober()] - for prober in self._mCharSetProbers: - if prober.feed(aBuf) == constants.eFoundIt: - self.result = {'encoding': prober.get_charset_name(), - 'confidence': prober.get_confidence()} - self.done = True - break - - def close(self): - if self.done: - return - if not self._mGotData: - if constants._debug: - sys.stderr.write('no data received!\n') - return - self.done = True - - if self._mInputState == ePureAscii: - self.result = {'encoding': 'ascii', 'confidence': 1.0} - return self.result - - if self._mInputState == eHighbyte: - proberConfidence = None - maxProberConfidence = 0.0 - maxProber = None - for prober in self._mCharSetProbers: - if not prober: - continue - proberConfidence = prober.get_confidence() - if proberConfidence > maxProberConfidence: - maxProberConfidence = proberConfidence - maxProber = prober - if maxProber and (maxProberConfidence > MINIMUM_THRESHOLD): - self.result = {'encoding': maxProber.get_charset_name(), - 'confidence': maxProber.get_confidence()} - return self.result - - if constants._debug: - sys.stderr.write('no probers hit minimum threshhold\n') - for prober in self._mCharSetProbers[0].mProbers: - if not prober: - continue - sys.stderr.write('%s confidence = %s\n' % - (prober.get_charset_name(), - prober.get_confidence())) diff --git a/plugin.video.alfa/lib/requests/packages/chardet/utf8prober.py b/plugin.video.alfa/lib/requests/packages/chardet/utf8prober.py deleted file mode 100755 index 72c8d3d6..00000000 --- a/plugin.video.alfa/lib/requests/packages/chardet/utf8prober.py +++ /dev/null @@ -1,76 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -from . import constants -from .charsetprober import CharSetProber -from .codingstatemachine import CodingStateMachine -from .mbcssm import UTF8SMModel - -ONE_CHAR_PROB = 0.5 - - -class UTF8Prober(CharSetProber): - def __init__(self): - CharSetProber.__init__(self) - self._mCodingSM = CodingStateMachine(UTF8SMModel) - self.reset() - - def reset(self): - CharSetProber.reset(self) - self._mCodingSM.reset() - self._mNumOfMBChar = 0 - - def get_charset_name(self): - return "utf-8" - - def feed(self, aBuf): - for c in aBuf: - codingState = self._mCodingSM.next_state(c) - if codingState == constants.eError: - self._mState = constants.eNotMe - break - elif codingState == constants.eItsMe: - self._mState = constants.eFoundIt - break - elif codingState == constants.eStart: - if self._mCodingSM.get_current_charlen() >= 2: - self._mNumOfMBChar += 1 - - if self.get_state() == constants.eDetecting: - if self.get_confidence() > constants.SHORTCUT_THRESHOLD: - self._mState = constants.eFoundIt - - return self.get_state() - - def get_confidence(self): - unlike = 0.99 - if self._mNumOfMBChar < 6: - for i in range(0, self._mNumOfMBChar): - unlike = unlike * ONE_CHAR_PROB - return 1.0 - unlike - else: - return unlike diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/__init__.py b/plugin.video.alfa/lib/requests/packages/urllib3/__init__.py deleted file mode 100755 index de7c06d8..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/__init__.py +++ /dev/null @@ -1,69 +0,0 @@ -""" -urllib3 - Thread-safe connection pooling and re-using. -""" - -__author__ = 'Andrey Petrov (andrey.petrov@shazow.net)' -__license__ = 'MIT' -__version__ = '1.10.4' - - -from .connectionpool import ( - HTTPConnectionPool, - HTTPSConnectionPool, - connection_from_url -) - -from . import exceptions -from .filepost import encode_multipart_formdata -from .poolmanager import PoolManager, ProxyManager, proxy_from_url -from .response import HTTPResponse -from .util.request import make_headers -from .util.url import get_host -from .util.timeout import Timeout -from .util.retry import Retry - - -# Set default logging handler to avoid "No handler found" warnings. -import logging -try: # Python 2.7+ - from logging import NullHandler -except ImportError: - class NullHandler(logging.Handler): - def emit(self, record): - pass - -logging.getLogger(__name__).addHandler(NullHandler()) - -def add_stderr_logger(level=logging.DEBUG): - """ - Helper for quickly adding a StreamHandler to the logger. Useful for - debugging. - - Returns the handler after adding it. - """ - # This method needs to be in this __init__.py to get the __name__ correct - # even if urllib3 is vendored within another package. - logger = logging.getLogger(__name__) - handler = logging.StreamHandler() - handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s %(message)s')) - logger.addHandler(handler) - logger.setLevel(level) - logger.debug('Added a stderr logging handler to logger: %s' % __name__) - return handler - -# ... Clean up. -del NullHandler - - -import warnings -# SecurityWarning's always go off by default. -warnings.simplefilter('always', exceptions.SecurityWarning, append=True) -# InsecurePlatformWarning's don't vary between requests, so we keep it default. -warnings.simplefilter('default', exceptions.InsecurePlatformWarning, - append=True) - -def disable_warnings(category=exceptions.HTTPWarning): - """ - Helper for quickly disabling all urllib3 warnings. - """ - warnings.simplefilter('ignore', category) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/_collections.py b/plugin.video.alfa/lib/requests/packages/urllib3/_collections.py deleted file mode 100755 index e55a1e5b..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/_collections.py +++ /dev/null @@ -1,323 +0,0 @@ -from collections import Mapping, MutableMapping -try: - from threading import RLock -except ImportError: # Platform-specific: No threads available - class RLock: - def __enter__(self): - pass - - def __exit__(self, exc_type, exc_value, traceback): - pass - - -try: # Python 2.7+ - from collections import OrderedDict -except ImportError: - from .packages.ordered_dict import OrderedDict -from .packages.six import iterkeys, itervalues, PY3 - - -__all__ = ['RecentlyUsedContainer', 'HTTPHeaderDict'] - - -_Null = object() - - -class RecentlyUsedContainer(MutableMapping): - """ - Provides a thread-safe dict-like container which maintains up to - ``maxsize`` keys while throwing away the least-recently-used keys beyond - ``maxsize``. - - :param maxsize: - Maximum number of recent elements to retain. - - :param dispose_func: - Every time an item is evicted from the container, - ``dispose_func(value)`` is called. Callback which will get called - """ - - ContainerCls = OrderedDict - - def __init__(self, maxsize=10, dispose_func=None): - self._maxsize = maxsize - self.dispose_func = dispose_func - - self._container = self.ContainerCls() - self.lock = RLock() - - def __getitem__(self, key): - # Re-insert the item, moving it to the end of the eviction line. - with self.lock: - item = self._container.pop(key) - self._container[key] = item - return item - - def __setitem__(self, key, value): - evicted_value = _Null - with self.lock: - # Possibly evict the existing value of 'key' - evicted_value = self._container.get(key, _Null) - self._container[key] = value - - # If we didn't evict an existing value, we might have to evict the - # least recently used item from the beginning of the container. - if len(self._container) > self._maxsize: - _key, evicted_value = self._container.popitem(last=False) - - if self.dispose_func and evicted_value is not _Null: - self.dispose_func(evicted_value) - - def __delitem__(self, key): - with self.lock: - value = self._container.pop(key) - - if self.dispose_func: - self.dispose_func(value) - - def __len__(self): - with self.lock: - return len(self._container) - - def __iter__(self): - raise NotImplementedError('Iteration over this class is unlikely to be threadsafe.') - - def clear(self): - with self.lock: - # Copy pointers to all values, then wipe the mapping - values = list(itervalues(self._container)) - self._container.clear() - - if self.dispose_func: - for value in values: - self.dispose_func(value) - - def keys(self): - with self.lock: - return list(iterkeys(self._container)) - - -_dict_setitem = dict.__setitem__ -_dict_getitem = dict.__getitem__ -_dict_delitem = dict.__delitem__ -_dict_contains = dict.__contains__ -_dict_setdefault = dict.setdefault - - -class HTTPHeaderDict(dict): - """ - :param headers: - An iterable of field-value pairs. Must not contain multiple field names - when compared case-insensitively. - - :param kwargs: - Additional field-value pairs to pass in to ``dict.update``. - - A ``dict`` like container for storing HTTP Headers. - - Field names are stored and compared case-insensitively in compliance with - RFC 7230. Iteration provides the first case-sensitive key seen for each - case-insensitive pair. - - Using ``__setitem__`` syntax overwrites fields that compare equal - case-insensitively in order to maintain ``dict``'s api. For fields that - compare equal, instead create a new ``HTTPHeaderDict`` and use ``.add`` - in a loop. - - If multiple fields that are equal case-insensitively are passed to the - constructor or ``.update``, the behavior is undefined and some will be - lost. - - >>> headers = HTTPHeaderDict() - >>> headers.add('Set-Cookie', 'foo=bar') - >>> headers.add('set-cookie', 'baz=quxx') - >>> headers['content-length'] = '7' - >>> headers['SET-cookie'] - 'foo=bar, baz=quxx' - >>> headers['Content-Length'] - '7' - """ - - def __init__(self, headers=None, **kwargs): - dict.__init__(self) - if headers is not None: - if isinstance(headers, HTTPHeaderDict): - self._copy_from(headers) - else: - self.extend(headers) - if kwargs: - self.extend(kwargs) - - def __setitem__(self, key, val): - return _dict_setitem(self, key.lower(), (key, val)) - - def __getitem__(self, key): - val = _dict_getitem(self, key.lower()) - return ', '.join(val[1:]) - - def __delitem__(self, key): - return _dict_delitem(self, key.lower()) - - def __contains__(self, key): - return _dict_contains(self, key.lower()) - - def __eq__(self, other): - if not isinstance(other, Mapping) and not hasattr(other, 'keys'): - return False - if not isinstance(other, type(self)): - other = type(self)(other) - return dict((k1, self[k1]) for k1 in self) == dict((k2, other[k2]) for k2 in other) - - def __ne__(self, other): - return not self.__eq__(other) - - values = MutableMapping.values - get = MutableMapping.get - update = MutableMapping.update - - if not PY3: # Python 2 - iterkeys = MutableMapping.iterkeys - itervalues = MutableMapping.itervalues - - __marker = object() - - def pop(self, key, default=__marker): - '''D.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - ''' - # Using the MutableMapping function directly fails due to the private marker. - # Using ordinary dict.pop would expose the internal structures. - # So let's reinvent the wheel. - try: - value = self[key] - except KeyError: - if default is self.__marker: - raise - return default - else: - del self[key] - return value - - def discard(self, key): - try: - del self[key] - except KeyError: - pass - - def add(self, key, val): - """Adds a (name, value) pair, doesn't overwrite the value if it already - exists. - - >>> headers = HTTPHeaderDict(foo='bar') - >>> headers.add('Foo', 'baz') - >>> headers['foo'] - 'bar, baz' - """ - key_lower = key.lower() - new_vals = key, val - # Keep the common case aka no item present as fast as possible - vals = _dict_setdefault(self, key_lower, new_vals) - if new_vals is not vals: - # new_vals was not inserted, as there was a previous one - if isinstance(vals, list): - # If already several items got inserted, we have a list - vals.append(val) - else: - # vals should be a tuple then, i.e. only one item so far - # Need to convert the tuple to list for further extension - _dict_setitem(self, key_lower, [vals[0], vals[1], val]) - - def extend(self, *args, **kwargs): - """Generic import function for any type of header-like object. - Adapted version of MutableMapping.update in order to insert items - with self.add instead of self.__setitem__ - """ - if len(args) > 1: - raise TypeError("extend() takes at most 1 positional " - "arguments ({} given)".format(len(args))) - other = args[0] if len(args) >= 1 else () - - if isinstance(other, HTTPHeaderDict): - for key, val in other.iteritems(): - self.add(key, val) - elif isinstance(other, Mapping): - for key in other: - self.add(key, other[key]) - elif hasattr(other, "keys"): - for key in other.keys(): - self.add(key, other[key]) - else: - for key, value in other: - self.add(key, value) - - for key, value in kwargs.items(): - self.add(key, value) - - def getlist(self, key): - """Returns a list of all the values for the named field. Returns an - empty list if the key doesn't exist.""" - try: - vals = _dict_getitem(self, key.lower()) - except KeyError: - return [] - else: - if isinstance(vals, tuple): - return [vals[1]] - else: - return vals[1:] - - # Backwards compatibility for httplib - getheaders = getlist - getallmatchingheaders = getlist - iget = getlist - - def __repr__(self): - return "%s(%s)" % (type(self).__name__, dict(self.itermerged())) - - def _copy_from(self, other): - for key in other: - val = _dict_getitem(other, key) - if isinstance(val, list): - # Don't need to convert tuples - val = list(val) - _dict_setitem(self, key, val) - - def copy(self): - clone = type(self)() - clone._copy_from(self) - return clone - - def iteritems(self): - """Iterate over all header lines, including duplicate ones.""" - for key in self: - vals = _dict_getitem(self, key) - for val in vals[1:]: - yield vals[0], val - - def itermerged(self): - """Iterate over all headers, merging duplicate ones together.""" - for key in self: - val = _dict_getitem(self, key) - yield val[0], ', '.join(val[1:]) - - def items(self): - return list(self.iteritems()) - - @classmethod - def from_httplib(cls, message): # Python 2 - """Read headers from a Python 2 httplib message object.""" - # python2.7 does not expose a proper API for exporting multiheaders - # efficiently. This function re-reads raw lines from the message - # object and extracts the multiheaders properly. - headers = [] - - for line in message.headers: - if line.startswith((' ', '\t')): - key, value = headers[-1] - headers[-1] = (key, value + '\r\n' + line.rstrip()) - continue - - key, value = line.split(':', 1) - headers.append((key, value.strip())) - - return cls(headers) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/connection.py b/plugin.video.alfa/lib/requests/packages/urllib3/connection.py deleted file mode 100755 index 2d9df79b..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/connection.py +++ /dev/null @@ -1,264 +0,0 @@ -import datetime -import sys -import socket -from socket import timeout as SocketTimeout -import warnings -from .packages import six - -try: # Python 3 - from http.client import HTTPConnection as _HTTPConnection, HTTPException -except ImportError: - from httplib import HTTPConnection as _HTTPConnection, HTTPException - - -class DummyConnection(object): - "Used to detect a failed ConnectionCls import." - pass - - -try: # Compiled with SSL? - HTTPSConnection = DummyConnection - import ssl - BaseSSLError = ssl.SSLError -except (ImportError, AttributeError): # Platform-specific: No SSL. - ssl = None - - class BaseSSLError(BaseException): - pass - - -try: # Python 3: - # Not a no-op, we're adding this to the namespace so it can be imported. - ConnectionError = ConnectionError -except NameError: # Python 2: - class ConnectionError(Exception): - pass - - -from .exceptions import ( - ConnectTimeoutError, - SystemTimeWarning, - SecurityWarning, -) -from .packages.ssl_match_hostname import match_hostname - -from .util.ssl_ import ( - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, - assert_fingerprint, -) - - -from .util import connection - -port_by_scheme = { - 'http': 80, - 'https': 443, -} - -RECENT_DATE = datetime.date(2014, 1, 1) - - -class HTTPConnection(_HTTPConnection, object): - """ - Based on httplib.HTTPConnection but provides an extra constructor - backwards-compatibility layer between older and newer Pythons. - - Additional keyword parameters are used to configure attributes of the connection. - Accepted parameters include: - - - ``strict``: See the documentation on :class:`urllib3.connectionpool.HTTPConnectionPool` - - ``source_address``: Set the source address for the current connection. - - .. note:: This is ignored for Python 2.6. It is only applied for 2.7 and 3.x - - - ``socket_options``: Set specific options on the underlying socket. If not specified, then - defaults are loaded from ``HTTPConnection.default_socket_options`` which includes disabling - Nagle's algorithm (sets TCP_NODELAY to 1) unless the connection is behind a proxy. - - For example, if you wish to enable TCP Keep Alive in addition to the defaults, - you might pass:: - - HTTPConnection.default_socket_options + [ - (socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1), - ] - - Or you may want to disable the defaults by passing an empty list (e.g., ``[]``). - """ - - default_port = port_by_scheme['http'] - - #: Disable Nagle's algorithm by default. - #: ``[(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)]`` - default_socket_options = [(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)] - - #: Whether this connection verifies the host's certificate. - is_verified = False - - def __init__(self, *args, **kw): - if six.PY3: # Python 3 - kw.pop('strict', None) - - # Pre-set source_address in case we have an older Python like 2.6. - self.source_address = kw.get('source_address') - - if sys.version_info < (2, 7): # Python 2.6 - # _HTTPConnection on Python 2.6 will balk at this keyword arg, but - # not newer versions. We can still use it when creating a - # connection though, so we pop it *after* we have saved it as - # self.source_address. - kw.pop('source_address', None) - - #: The socket options provided by the user. If no options are - #: provided, we use the default options. - self.socket_options = kw.pop('socket_options', self.default_socket_options) - - # Superclass also sets self.source_address in Python 2.7+. - _HTTPConnection.__init__(self, *args, **kw) - - def _new_conn(self): - """ Establish a socket connection and set nodelay settings on it. - - :return: New socket connection. - """ - extra_kw = {} - if self.source_address: - extra_kw['source_address'] = self.source_address - - if self.socket_options: - extra_kw['socket_options'] = self.socket_options - - try: - conn = connection.create_connection( - (self.host, self.port), self.timeout, **extra_kw) - - except SocketTimeout: - raise ConnectTimeoutError( - self, "Connection to %s timed out. (connect timeout=%s)" % - (self.host, self.timeout)) - - return conn - - def _prepare_conn(self, conn): - self.sock = conn - # the _tunnel_host attribute was added in python 2.6.3 (via - # http://hg.python.org/cpython/rev/0f57b30a152f) so pythons 2.6(0-2) do - # not have them. - if getattr(self, '_tunnel_host', None): - # TODO: Fix tunnel so it doesn't depend on self.sock state. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - def connect(self): - conn = self._new_conn() - self._prepare_conn(conn) - - -class HTTPSConnection(HTTPConnection): - default_port = port_by_scheme['https'] - - def __init__(self, host, port=None, key_file=None, cert_file=None, - strict=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, **kw): - - HTTPConnection.__init__(self, host, port, strict=strict, - timeout=timeout, **kw) - - self.key_file = key_file - self.cert_file = cert_file - - # Required property for Google AppEngine 1.9.0 which otherwise causes - # HTTPS requests to go out as HTTP. (See Issue #356) - self._protocol = 'https' - - def connect(self): - conn = self._new_conn() - self._prepare_conn(conn) - self.sock = ssl.wrap_socket(conn, self.key_file, self.cert_file) - - -class VerifiedHTTPSConnection(HTTPSConnection): - """ - Based on httplib.HTTPSConnection but wraps the socket with - SSL certification. - """ - cert_reqs = None - ca_certs = None - ssl_version = None - assert_fingerprint = None - - def set_cert(self, key_file=None, cert_file=None, - cert_reqs=None, ca_certs=None, - assert_hostname=None, assert_fingerprint=None): - - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.ca_certs = ca_certs - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - - def connect(self): - # Add certificate verification - conn = self._new_conn() - - resolved_cert_reqs = resolve_cert_reqs(self.cert_reqs) - resolved_ssl_version = resolve_ssl_version(self.ssl_version) - - hostname = self.host - if getattr(self, '_tunnel_host', None): - # _tunnel_host was added in Python 2.6.3 - # (See: http://hg.python.org/cpython/rev/0f57b30a152f) - - self.sock = conn - # Calls self._set_hostport(), so self.host is - # self._tunnel_host below. - self._tunnel() - # Mark this connection as not reusable - self.auto_open = 0 - - # Override the host with the one we're requesting data from. - hostname = self._tunnel_host - - is_time_off = datetime.date.today() < RECENT_DATE - if is_time_off: - warnings.warn(( - 'System time is way off (before {0}). This will probably ' - 'lead to SSL verification errors').format(RECENT_DATE), - SystemTimeWarning - ) - - # Wrap socket using verification with the root certs in - # trusted_root_certs - self.sock = ssl_wrap_socket(conn, self.key_file, self.cert_file, - cert_reqs=resolved_cert_reqs, - ca_certs=self.ca_certs, - server_hostname=hostname, - ssl_version=resolved_ssl_version) - - if self.assert_fingerprint: - assert_fingerprint(self.sock.getpeercert(binary_form=True), - self.assert_fingerprint) - elif resolved_cert_reqs != ssl.CERT_NONE \ - and self.assert_hostname is not False: - cert = self.sock.getpeercert() - if not cert.get('subjectAltName', ()): - warnings.warn(( - 'Certificate has no `subjectAltName`, falling back to check for a `commonName` for now. ' - 'This feature is being removed by major browsers and deprecated by RFC 2818. ' - '(See https://github.com/shazow/urllib3/issues/497 for details.)'), - SecurityWarning - ) - match_hostname(cert, self.assert_hostname or hostname) - - self.is_verified = (resolved_cert_reqs == ssl.CERT_REQUIRED - or self.assert_fingerprint is not None) - - -if ssl: - # Make a copy for testing. - UnverifiedHTTPSConnection = HTTPSConnection - HTTPSConnection = VerifiedHTTPSConnection -else: - HTTPSConnection = DummyConnection diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/connectionpool.py b/plugin.video.alfa/lib/requests/packages/urllib3/connectionpool.py deleted file mode 100755 index 57c89903..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/connectionpool.py +++ /dev/null @@ -1,795 +0,0 @@ -import errno -import logging -import sys -import warnings - -from socket import error as SocketError, timeout as SocketTimeout -import socket - -try: # Python 3 - from queue import LifoQueue, Empty, Full -except ImportError: - from Queue import LifoQueue, Empty, Full - import Queue as _ # Platform-specific: Windows - - -from .exceptions import ( - ClosedPoolError, - ProtocolError, - EmptyPoolError, - HostChangedError, - LocationValueError, - MaxRetryError, - ProxyError, - ReadTimeoutError, - SSLError, - TimeoutError, - InsecureRequestWarning, -) -from .packages.ssl_match_hostname import CertificateError -from .packages import six -from .connection import ( - port_by_scheme, - DummyConnection, - HTTPConnection, HTTPSConnection, VerifiedHTTPSConnection, - HTTPException, BaseSSLError, ConnectionError -) -from .request import RequestMethods -from .response import HTTPResponse - -from .util.connection import is_connection_dropped -from .util.retry import Retry -from .util.timeout import Timeout -from .util.url import get_host - - -xrange = six.moves.xrange - -log = logging.getLogger(__name__) - -_Default = object() - - -## Pool objects -class ConnectionPool(object): - """ - Base class for all connection pools, such as - :class:`.HTTPConnectionPool` and :class:`.HTTPSConnectionPool`. - """ - - scheme = None - QueueCls = LifoQueue - - def __init__(self, host, port=None): - if not host: - raise LocationValueError("No host specified.") - - # httplib doesn't like it when we include brackets in ipv6 addresses - self.host = host.strip('[]') - self.port = port - - def __str__(self): - return '%s(host=%r, port=%r)' % (type(self).__name__, - self.host, self.port) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.close() - # Return False to re-raise any potential exceptions - return False - - def close(): - """ - Close all pooled connections and disable the pool. - """ - pass - - -# This is taken from http://hg.python.org/cpython/file/7aaba721ebc0/Lib/socket.py#l252 -_blocking_errnos = set([errno.EAGAIN, errno.EWOULDBLOCK]) - - -class HTTPConnectionPool(ConnectionPool, RequestMethods): - """ - Thread-safe connection pool for one host. - - :param host: - Host used for this HTTP Connection (e.g. "localhost"), passed into - :class:`httplib.HTTPConnection`. - - :param port: - Port used for this HTTP Connection (None is equivalent to 80), passed - into :class:`httplib.HTTPConnection`. - - :param strict: - Causes BadStatusLine to be raised if the status line can't be parsed - as a valid HTTP/1.0 or 1.1 status line, passed into - :class:`httplib.HTTPConnection`. - - .. note:: - Only works in Python 2. This parameter is ignored in Python 3. - - :param timeout: - Socket timeout in seconds for each individual connection. This can - be a float or integer, which sets the timeout for the HTTP request, - or an instance of :class:`urllib3.util.Timeout` which gives you more - fine-grained control over request timeouts. After the constructor has - been parsed, this is always a `urllib3.util.Timeout` object. - - :param maxsize: - Number of connections to save that can be reused. More than 1 is useful - in multithreaded situations. If ``block`` is set to false, more - connections will be created but they will not be saved once they've - been used. - - :param block: - If set to True, no more than ``maxsize`` connections will be used at - a time. When no free connections are available, the call will block - until a connection has been released. This is a useful side effect for - particular multithreaded situations where one does not want to use more - than maxsize connections per host to prevent flooding. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param retries: - Retry configuration to use by default with requests in this pool. - - :param _proxy: - Parsed proxy URL, should not be used directly, instead, see - :class:`urllib3.connectionpool.ProxyManager`" - - :param _proxy_headers: - A dictionary with proxy headers, should not be used directly, - instead, see :class:`urllib3.connectionpool.ProxyManager`" - - :param \**conn_kw: - Additional parameters are used to create fresh :class:`urllib3.connection.HTTPConnection`, - :class:`urllib3.connection.HTTPSConnection` instances. - """ - - scheme = 'http' - ConnectionCls = HTTPConnection - - def __init__(self, host, port=None, strict=False, - timeout=Timeout.DEFAULT_TIMEOUT, maxsize=1, block=False, - headers=None, retries=None, - _proxy=None, _proxy_headers=None, - **conn_kw): - ConnectionPool.__init__(self, host, port) - RequestMethods.__init__(self, headers) - - self.strict = strict - - if not isinstance(timeout, Timeout): - timeout = Timeout.from_float(timeout) - - if retries is None: - retries = Retry.DEFAULT - - self.timeout = timeout - self.retries = retries - - self.pool = self.QueueCls(maxsize) - self.block = block - - self.proxy = _proxy - self.proxy_headers = _proxy_headers or {} - - # Fill the queue up so that doing get() on it will block properly - for _ in xrange(maxsize): - self.pool.put(None) - - # These are mostly for testing and debugging purposes. - self.num_connections = 0 - self.num_requests = 0 - self.conn_kw = conn_kw - - if self.proxy: - # Enable Nagle's algorithm for proxies, to avoid packet fragmentation. - # We cannot know if the user has added default socket options, so we cannot replace the - # list. - self.conn_kw.setdefault('socket_options', []) - - def _new_conn(self): - """ - Return a fresh :class:`HTTPConnection`. - """ - self.num_connections += 1 - log.info("Starting new HTTP connection (%d): %s" % - (self.num_connections, self.host)) - - conn = self.ConnectionCls(host=self.host, port=self.port, - timeout=self.timeout.connect_timeout, - strict=self.strict, **self.conn_kw) - return conn - - def _get_conn(self, timeout=None): - """ - Get a connection. Will return a pooled connection if one is available. - - If no connections are available and :prop:`.block` is ``False``, then a - fresh connection is returned. - - :param timeout: - Seconds to wait before giving up and raising - :class:`urllib3.exceptions.EmptyPoolError` if the pool is empty and - :prop:`.block` is ``True``. - """ - conn = None - try: - conn = self.pool.get(block=self.block, timeout=timeout) - - except AttributeError: # self.pool is None - raise ClosedPoolError(self, "Pool is closed.") - - except Empty: - if self.block: - raise EmptyPoolError(self, - "Pool reached maximum size and no more " - "connections are allowed.") - pass # Oh well, we'll create a new connection then - - # If this is a persistent connection, check if it got disconnected - if conn and is_connection_dropped(conn): - log.info("Resetting dropped connection: %s" % self.host) - conn.close() - if getattr(conn, 'auto_open', 1) == 0: - # This is a proxied connection that has been mutated by - # httplib._tunnel() and cannot be reused (since it would - # attempt to bypass the proxy) - conn = None - - return conn or self._new_conn() - - def _put_conn(self, conn): - """ - Put a connection back into the pool. - - :param conn: - Connection object for the current host and port as returned by - :meth:`._new_conn` or :meth:`._get_conn`. - - If the pool is already full, the connection is closed and discarded - because we exceeded maxsize. If connections are discarded frequently, - then maxsize should be increased. - - If the pool is closed, then the connection will be closed and discarded. - """ - try: - self.pool.put(conn, block=False) - return # Everything is dandy, done. - except AttributeError: - # self.pool is None. - pass - except Full: - # This should never happen if self.block == True - log.warning( - "Connection pool is full, discarding connection: %s" % - self.host) - - # Connection never got put back into the pool, close it. - if conn: - conn.close() - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - pass - - def _prepare_proxy(self, conn): - # Nothing to do for HTTP connections. - pass - - def _get_timeout(self, timeout): - """ Helper that always returns a :class:`urllib3.util.Timeout` """ - if timeout is _Default: - return self.timeout.clone() - - if isinstance(timeout, Timeout): - return timeout.clone() - else: - # User passed us an int/float. This is for backwards compatibility, - # can be removed later - return Timeout.from_float(timeout) - - def _raise_timeout(self, err, url, timeout_value): - """Is the error actually a timeout? Will raise a ReadTimeout or pass""" - - if isinstance(err, SocketTimeout): - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - # See the above comment about EAGAIN in Python 3. In Python 2 we have - # to specifically catch it and throw the timeout error - if hasattr(err, 'errno') and err.errno in _blocking_errnos: - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - # Catch possible read timeouts thrown as SSL errors. If not the - # case, rethrow the original. We need to do this because of: - # http://bugs.python.org/issue10272 - if 'timed out' in str(err) or 'did not complete (read)' in str(err): # Python 2.6 - raise ReadTimeoutError(self, url, "Read timed out. (read timeout=%s)" % timeout_value) - - def _make_request(self, conn, method, url, timeout=_Default, - **httplib_request_kw): - """ - Perform a request on a given urllib connection object taken from our - pool. - - :param conn: - a connection from one of our connection pools - - :param timeout: - Socket timeout in seconds for the request. This can be a - float or integer, which will set the same timeout value for - the socket connect and the socket read, or an instance of - :class:`urllib3.util.Timeout`, which gives you more fine-grained - control over your timeouts. - """ - self.num_requests += 1 - - timeout_obj = self._get_timeout(timeout) - timeout_obj.start_connect() - conn.timeout = timeout_obj.connect_timeout - - # Trigger any extra validation we need to do. - try: - self._validate_conn(conn) - except (SocketTimeout, BaseSSLError) as e: - # Py2 raises this as a BaseSSLError, Py3 raises it as socket timeout. - self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) - raise - - # conn.request() calls httplib.*.request, not the method in - # urllib3.request. It also calls makefile (recv) on the socket. - conn.request(method, url, **httplib_request_kw) - - # Reset the timeout for the recv() on the socket - read_timeout = timeout_obj.read_timeout - - # App Engine doesn't have a sock attr - if getattr(conn, 'sock', None): - # In Python 3 socket.py will catch EAGAIN and return None when you - # try and read into the file pointer created by http.client, which - # instead raises a BadStatusLine exception. Instead of catching - # the exception and assuming all BadStatusLine exceptions are read - # timeouts, check for a zero timeout before making the request. - if read_timeout == 0: - raise ReadTimeoutError( - self, url, "Read timed out. (read timeout=%s)" % read_timeout) - if read_timeout is Timeout.DEFAULT_TIMEOUT: - conn.sock.settimeout(socket.getdefaulttimeout()) - else: # None or a value - conn.sock.settimeout(read_timeout) - - # Receive the response from the server - try: - try: # Python 2.7, use buffering of HTTP responses - httplib_response = conn.getresponse(buffering=True) - except TypeError: # Python 2.6 and older - httplib_response = conn.getresponse() - except (SocketTimeout, BaseSSLError, SocketError) as e: - self._raise_timeout(err=e, url=url, timeout_value=read_timeout) - raise - - # AppEngine doesn't have a version attr. - http_version = getattr(conn, '_http_vsn_str', 'HTTP/?') - log.debug("\"%s %s %s\" %s %s" % (method, url, http_version, - httplib_response.status, - httplib_response.length)) - return httplib_response - - def close(self): - """ - Close all pooled connections and disable the pool. - """ - # Disable access to the pool - old_pool, self.pool = self.pool, None - - try: - while True: - conn = old_pool.get(block=False) - if conn: - conn.close() - - except Empty: - pass # Done. - - def is_same_host(self, url): - """ - Check if the given ``url`` is a member of the same host as this - connection pool. - """ - if url.startswith('/'): - return True - - # TODO: Add optional support for socket.gethostbyname checking. - scheme, host, port = get_host(url) - - # Use explicit default port for comparison when none is given - if self.port and not port: - port = port_by_scheme.get(scheme) - elif not self.port and port == port_by_scheme.get(scheme): - port = None - - return (scheme, host, port) == (self.scheme, self.host, self.port) - - def urlopen(self, method, url, body=None, headers=None, retries=None, - redirect=True, assert_same_host=True, timeout=_Default, - pool_timeout=None, release_conn=None, **response_kw): - """ - Get a connection from the pool and perform an HTTP request. This is the - lowest level call for making a request, so you'll need to specify all - the raw details. - - .. note:: - - More commonly, it's appropriate to use a convenience method provided - by :class:`.RequestMethods`, such as :meth:`request`. - - .. note:: - - `release_conn` will only behave as expected if - `preload_content=False` because we want to make - `preload_content=False` the default behaviour someday soon without - breaking backwards compatibility. - - :param method: - HTTP request method (such as GET, POST, PUT, etc.) - - :param body: - Data to send in the request body (useful for creating - POST requests, see HTTPConnectionPool.post_url for - more convenience). - - :param headers: - Dictionary of custom headers to send, such as User-Agent, - If-None-Match, etc. If None, pool headers are used. If provided, - these headers completely replace any pool-specific headers. - - :param retries: - Configure the number of retries to allow before raising a - :class:`~urllib3.exceptions.MaxRetryError` exception. - - Pass ``None`` to retry until you receive a response. Pass a - :class:`~urllib3.util.retry.Retry` object for fine-grained control - over different types of retries. - Pass an integer number to retry connection errors that many times, - but no other types of errors. Pass zero to never retry. - - If ``False``, then retries are disabled and any exception is raised - immediately. Also, instead of raising a MaxRetryError on redirects, - the redirect response will be returned. - - :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. - - :param redirect: - If True, automatically handle redirects (status codes 301, 302, - 303, 307, 308). Each redirect counts as a retry. Disabling retries - will disable redirect, too. - - :param assert_same_host: - If ``True``, will make sure that the host of the pool requests is - consistent else will raise HostChangedError. When False, you can - use the pool on an HTTP proxy and request foreign hosts. - - :param timeout: - If specified, overrides the default timeout for this one - request. It may be a float (in seconds) or an instance of - :class:`urllib3.util.Timeout`. - - :param pool_timeout: - If set and the pool is set to block=True, then this method will - block for ``pool_timeout`` seconds and raise EmptyPoolError if no - connection is available within the time period. - - :param release_conn: - If False, then the urlopen call will not release the connection - back into the pool once a response is received (but will release if - you read the entire contents of the response such as when - `preload_content=True`). This is useful if you're not preloading - the response's content immediately. You will need to call - ``r.release_conn()`` on the response ``r`` to return the connection - back into the pool. If None, it takes the value of - ``response_kw.get('preload_content', True)``. - - :param \**response_kw: - Additional parameters are passed to - :meth:`urllib3.response.HTTPResponse.from_httplib` - """ - if headers is None: - headers = self.headers - - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect, default=self.retries) - - if release_conn is None: - release_conn = response_kw.get('preload_content', True) - - # Check host - if assert_same_host and not self.is_same_host(url): - raise HostChangedError(self, url, retries) - - conn = None - - # Merge the proxy headers. Only do this in HTTP. We have to copy the - # headers dict so we can safely change it without those changes being - # reflected in anyone else's copy. - if self.scheme == 'http': - headers = headers.copy() - headers.update(self.proxy_headers) - - # Must keep the exception bound to a separate variable or else Python 3 - # complains about UnboundLocalError. - err = None - - try: - # Request a connection from the queue. - timeout_obj = self._get_timeout(timeout) - conn = self._get_conn(timeout=pool_timeout) - - conn.timeout = timeout_obj.connect_timeout - - is_new_proxy_conn = self.proxy is not None and not getattr(conn, 'sock', None) - if is_new_proxy_conn: - self._prepare_proxy(conn) - - # Make the request on the httplib connection object. - httplib_response = self._make_request(conn, method, url, - timeout=timeout_obj, - body=body, headers=headers) - - # If we're going to release the connection in ``finally:``, then - # the request doesn't need to know about the connection. Otherwise - # it will also try to release it and we'll have a double-release - # mess. - response_conn = not release_conn and conn - - # Import httplib's response into our own wrapper object - response = HTTPResponse.from_httplib(httplib_response, - pool=self, - connection=response_conn, - **response_kw) - - # else: - # The connection will be put back into the pool when - # ``response.release_conn()`` is called (implicitly by - # ``response.read()``) - - except Empty: - # Timed out by queue. - raise EmptyPoolError(self, "No pool connections are available.") - - except (BaseSSLError, CertificateError) as e: - # Close the connection. If a connection is reused on which there - # was a Certificate error, the next request will certainly raise - # another Certificate error. - if conn: - conn.close() - conn = None - raise SSLError(e) - - except SSLError: - # Treat SSLError separately from BaseSSLError to preserve - # traceback. - if conn: - conn.close() - conn = None - raise - - except (TimeoutError, HTTPException, SocketError, ConnectionError) as e: - if conn: - # Discard the connection for these exceptions. It will be - # be replaced during the next _get_conn() call. - conn.close() - conn = None - - if isinstance(e, SocketError) and self.proxy: - e = ProxyError('Cannot connect to proxy.', e) - elif isinstance(e, (SocketError, HTTPException)): - e = ProtocolError('Connection aborted.', e) - - retries = retries.increment(method, url, error=e, _pool=self, - _stacktrace=sys.exc_info()[2]) - retries.sleep() - - # Keep track of the error for the retry warning. - err = e - - finally: - if release_conn: - # Put the connection back to be reused. If the connection is - # expired then it will be None, which will get replaced with a - # fresh connection during _get_conn. - self._put_conn(conn) - - if not conn: - # Try again - log.warning("Retrying (%r) after connection " - "broken by '%r': %s" % (retries, err, url)) - return self.urlopen(method, url, body, headers, retries, - redirect, assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, **response_kw) - - # Handle redirect? - redirect_location = redirect and response.get_redirect_location() - if redirect_location: - if response.status == 303: - method = 'GET' - - try: - retries = retries.increment(method, url, response=response, _pool=self) - except MaxRetryError: - if retries.raise_on_redirect: - raise - return response - - log.info("Redirecting %s -> %s" % (url, redirect_location)) - return self.urlopen(method, redirect_location, body, headers, - retries=retries, redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, **response_kw) - - # Check if we should retry the HTTP response. - if retries.is_forced_retry(method, status_code=response.status): - retries = retries.increment(method, url, response=response, _pool=self) - retries.sleep() - log.info("Forced retry: %s" % url) - return self.urlopen(method, url, body, headers, - retries=retries, redirect=redirect, - assert_same_host=assert_same_host, - timeout=timeout, pool_timeout=pool_timeout, - release_conn=release_conn, **response_kw) - - return response - - -class HTTPSConnectionPool(HTTPConnectionPool): - """ - Same as :class:`.HTTPConnectionPool`, but HTTPS. - - When Python is compiled with the :mod:`ssl` module, then - :class:`.VerifiedHTTPSConnection` is used, which *can* verify certificates, - instead of :class:`.HTTPSConnection`. - - :class:`.VerifiedHTTPSConnection` uses one of ``assert_fingerprint``, - ``assert_hostname`` and ``host`` in this order to verify connections. - If ``assert_hostname`` is False, no verification is done. - - The ``key_file``, ``cert_file``, ``cert_reqs``, ``ca_certs`` and - ``ssl_version`` are only used if :mod:`ssl` is available and are fed into - :meth:`urllib3.util.ssl_wrap_socket` to upgrade the connection socket - into an SSL socket. - """ - - scheme = 'https' - ConnectionCls = HTTPSConnection - - def __init__(self, host, port=None, - strict=False, timeout=Timeout.DEFAULT_TIMEOUT, maxsize=1, - block=False, headers=None, retries=None, - _proxy=None, _proxy_headers=None, - key_file=None, cert_file=None, cert_reqs=None, - ca_certs=None, ssl_version=None, - assert_hostname=None, assert_fingerprint=None, - **conn_kw): - - HTTPConnectionPool.__init__(self, host, port, strict, timeout, maxsize, - block, headers, retries, _proxy, _proxy_headers, - **conn_kw) - self.key_file = key_file - self.cert_file = cert_file - self.cert_reqs = cert_reqs - self.ca_certs = ca_certs - self.ssl_version = ssl_version - self.assert_hostname = assert_hostname - self.assert_fingerprint = assert_fingerprint - - def _prepare_conn(self, conn): - """ - Prepare the ``connection`` for :meth:`urllib3.util.ssl_wrap_socket` - and establish the tunnel if proxy is used. - """ - - if isinstance(conn, VerifiedHTTPSConnection): - conn.set_cert(key_file=self.key_file, - cert_file=self.cert_file, - cert_reqs=self.cert_reqs, - ca_certs=self.ca_certs, - assert_hostname=self.assert_hostname, - assert_fingerprint=self.assert_fingerprint) - conn.ssl_version = self.ssl_version - - return conn - - def _prepare_proxy(self, conn): - """ - Establish tunnel connection early, because otherwise httplib - would improperly set Host: header to proxy's IP:port. - """ - # Python 2.7+ - try: - set_tunnel = conn.set_tunnel - except AttributeError: # Platform-specific: Python 2.6 - set_tunnel = conn._set_tunnel - - if sys.version_info <= (2, 6, 4) and not self.proxy_headers: # Python 2.6.4 and older - set_tunnel(self.host, self.port) - else: - set_tunnel(self.host, self.port, self.proxy_headers) - - conn.connect() - - def _new_conn(self): - """ - Return a fresh :class:`httplib.HTTPSConnection`. - """ - self.num_connections += 1 - log.info("Starting new HTTPS connection (%d): %s" - % (self.num_connections, self.host)) - - if not self.ConnectionCls or self.ConnectionCls is DummyConnection: - raise SSLError("Can't connect to HTTPS URL because the SSL " - "module is not available.") - - actual_host = self.host - actual_port = self.port - if self.proxy is not None: - actual_host = self.proxy.host - actual_port = self.proxy.port - - conn = self.ConnectionCls(host=actual_host, port=actual_port, - timeout=self.timeout.connect_timeout, - strict=self.strict, **self.conn_kw) - - return self._prepare_conn(conn) - - def _validate_conn(self, conn): - """ - Called right before a request is made, after the socket is created. - """ - super(HTTPSConnectionPool, self)._validate_conn(conn) - - # Force connect early to allow us to validate the connection. - if not getattr(conn, 'sock', None): # AppEngine might not have `.sock` - conn.connect() - - if not conn.is_verified: - warnings.warn(( - 'Unverified HTTPS request is being made. ' - 'Adding certificate verification is strongly advised. See: ' - 'https://urllib3.readthedocs.org/en/latest/security.html'), - InsecureRequestWarning) - - -def connection_from_url(url, **kw): - """ - Given a url, return an :class:`.ConnectionPool` instance of its host. - - This is a shortcut for not having to parse out the scheme, host, and port - of the url before creating an :class:`.ConnectionPool` instance. - - :param url: - Absolute URL string that must include the scheme. Port is optional. - - :param \**kw: - Passes additional parameters to the constructor of the appropriate - :class:`.ConnectionPool`. Useful for specifying things like - timeout, maxsize, headers, etc. - - Example:: - - >>> conn = connection_from_url('http://google.com/') - >>> r = conn.request('GET', '/') - """ - scheme, host, port = get_host(url) - if scheme == 'https': - return HTTPSConnectionPool(host, port=port, **kw) - else: - return HTTPConnectionPool(host, port=port, **kw) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/contrib/__init__.py b/plugin.video.alfa/lib/requests/packages/urllib3/contrib/__init__.py deleted file mode 100755 index e69de29b..00000000 diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/contrib/ntlmpool.py b/plugin.video.alfa/lib/requests/packages/urllib3/contrib/ntlmpool.py deleted file mode 100755 index c00f1a9e..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/contrib/ntlmpool.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -NTLM authenticating pool, contributed by erikcederstran - -Issue #10, see: http://code.google.com/p/urllib3/issues/detail?id=10 -""" - -try: - from http.client import HTTPSConnection -except ImportError: - from httplib import HTTPSConnection -from logging import getLogger -from ntlm import ntlm - -from urllib3 import HTTPSConnectionPool - - -log = getLogger(__name__) - - -class NTLMConnectionPool(HTTPSConnectionPool): - """ - Implements an NTLM authentication version of an urllib3 connection pool - """ - - scheme = 'https' - - def __init__(self, user, pw, authurl, *args, **kwargs): - """ - authurl is a random URL on the server that is protected by NTLM. - user is the Windows user, probably in the DOMAIN\\username format. - pw is the password for the user. - """ - super(NTLMConnectionPool, self).__init__(*args, **kwargs) - self.authurl = authurl - self.rawuser = user - user_parts = user.split('\\', 1) - self.domain = user_parts[0].upper() - self.user = user_parts[1] - self.pw = pw - - def _new_conn(self): - # Performs the NTLM handshake that secures the connection. The socket - # must be kept open while requests are performed. - self.num_connections += 1 - log.debug('Starting NTLM HTTPS connection no. %d: https://%s%s' % - (self.num_connections, self.host, self.authurl)) - - headers = {} - headers['Connection'] = 'Keep-Alive' - req_header = 'Authorization' - resp_header = 'www-authenticate' - - conn = HTTPSConnection(host=self.host, port=self.port) - - # Send negotiation message - headers[req_header] = ( - 'NTLM %s' % ntlm.create_NTLM_NEGOTIATE_MESSAGE(self.rawuser)) - log.debug('Request headers: %s' % headers) - conn.request('GET', self.authurl, None, headers) - res = conn.getresponse() - reshdr = dict(res.getheaders()) - log.debug('Response status: %s %s' % (res.status, res.reason)) - log.debug('Response headers: %s' % reshdr) - log.debug('Response data: %s [...]' % res.read(100)) - - # Remove the reference to the socket, so that it can not be closed by - # the response object (we want to keep the socket open) - res.fp = None - - # Server should respond with a challenge message - auth_header_values = reshdr[resp_header].split(', ') - auth_header_value = None - for s in auth_header_values: - if s[:5] == 'NTLM ': - auth_header_value = s[5:] - if auth_header_value is None: - raise Exception('Unexpected %s response header: %s' % - (resp_header, reshdr[resp_header])) - - # Send authentication message - ServerChallenge, NegotiateFlags = \ - ntlm.parse_NTLM_CHALLENGE_MESSAGE(auth_header_value) - auth_msg = ntlm.create_NTLM_AUTHENTICATE_MESSAGE(ServerChallenge, - self.user, - self.domain, - self.pw, - NegotiateFlags) - headers[req_header] = 'NTLM %s' % auth_msg - log.debug('Request headers: %s' % headers) - conn.request('GET', self.authurl, None, headers) - res = conn.getresponse() - log.debug('Response status: %s %s' % (res.status, res.reason)) - log.debug('Response headers: %s' % dict(res.getheaders())) - log.debug('Response data: %s [...]' % res.read()[:100]) - if res.status != 200: - if res.status == 401: - raise Exception('Server rejected request: wrong ' - 'username or password') - raise Exception('Wrong server response: %s %s' % - (res.status, res.reason)) - - res.fp = None - log.debug('Connection established') - return conn - - def urlopen(self, method, url, body=None, headers=None, retries=3, - redirect=True, assert_same_host=True): - if headers is None: - headers = {} - headers['Connection'] = 'Keep-Alive' - return super(NTLMConnectionPool, self).urlopen(method, url, body, - headers, retries, - redirect, - assert_same_host) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/exceptions.py b/plugin.video.alfa/lib/requests/packages/urllib3/exceptions.py deleted file mode 100755 index 60b418d6..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/exceptions.py +++ /dev/null @@ -1,169 +0,0 @@ - -## Base Exceptions - -class HTTPError(Exception): - "Base exception used by this module." - pass - -class HTTPWarning(Warning): - "Base warning used by this module." - pass - - - -class PoolError(HTTPError): - "Base exception for errors caused within a pool." - def __init__(self, pool, message): - self.pool = pool - HTTPError.__init__(self, "%s: %s" % (pool, message)) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, None) - - -class RequestError(PoolError): - "Base exception for PoolErrors that have associated URLs." - def __init__(self, pool, url, message): - self.url = url - PoolError.__init__(self, pool, message) - - def __reduce__(self): - # For pickling purposes. - return self.__class__, (None, self.url, None) - - -class SSLError(HTTPError): - "Raised when SSL certificate fails in an HTTPS connection." - pass - - -class ProxyError(HTTPError): - "Raised when the connection to a proxy fails." - pass - - -class DecodeError(HTTPError): - "Raised when automatic decoding based on Content-Type fails." - pass - - -class ProtocolError(HTTPError): - "Raised when something unexpected happens mid-request/response." - pass - - -#: Renamed to ProtocolError but aliased for backwards compatibility. -ConnectionError = ProtocolError - - -## Leaf Exceptions - -class MaxRetryError(RequestError): - """Raised when the maximum number of retries is exceeded. - - :param pool: The connection pool - :type pool: :class:`~urllib3.connectionpool.HTTPConnectionPool` - :param string url: The requested Url - :param exceptions.Exception reason: The underlying error - - """ - - def __init__(self, pool, url, reason=None): - self.reason = reason - - message = "Max retries exceeded with url: %s (Caused by %r)" % ( - url, reason) - - RequestError.__init__(self, pool, url, message) - - -class HostChangedError(RequestError): - "Raised when an existing pool gets a request for a foreign host." - - def __init__(self, pool, url, retries=3): - message = "Tried to open a foreign host with url: %s" % url - RequestError.__init__(self, pool, url, message) - self.retries = retries - - -class TimeoutStateError(HTTPError): - """ Raised when passing an invalid state to a timeout """ - pass - - -class TimeoutError(HTTPError): - """ Raised when a socket timeout error occurs. - - Catching this error will catch both :exc:`ReadTimeoutErrors - ` and :exc:`ConnectTimeoutErrors `. - """ - pass - - -class ReadTimeoutError(TimeoutError, RequestError): - "Raised when a socket timeout occurs while receiving data from a server" - pass - - -# This timeout error does not have a URL attached and needs to inherit from the -# base HTTPError -class ConnectTimeoutError(TimeoutError): - "Raised when a socket timeout occurs while connecting to a server" - pass - - -class EmptyPoolError(PoolError): - "Raised when a pool runs out of connections and no more are allowed." - pass - - -class ClosedPoolError(PoolError): - "Raised when a request enters a pool after the pool has been closed." - pass - - -class LocationValueError(ValueError, HTTPError): - "Raised when there is something wrong with a given URL input." - pass - - -class LocationParseError(LocationValueError): - "Raised when get_host or similar fails to parse the URL input." - - def __init__(self, location): - message = "Failed to parse: %s" % location - HTTPError.__init__(self, message) - - self.location = location - - -class ResponseError(HTTPError): - "Used as a container for an error reason supplied in a MaxRetryError." - GENERIC_ERROR = 'too many error responses' - SPECIFIC_ERROR = 'too many {status_code} error responses' - - -class SecurityWarning(HTTPWarning): - "Warned when perfoming security reducing actions" - pass - - -class InsecureRequestWarning(SecurityWarning): - "Warned when making an unverified HTTPS request." - pass - - -class SystemTimeWarning(SecurityWarning): - "Warned when system time is suspected to be wrong" - pass - - -class InsecurePlatformWarning(SecurityWarning): - "Warned when certain SSL configuration is not available on a platform." - pass - - -class ResponseNotChunked(ProtocolError, ValueError): - "Response needs to be chunked in order to read it as chunks." - pass diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/fields.py b/plugin.video.alfa/lib/requests/packages/urllib3/fields.py deleted file mode 100755 index a37f018b..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/fields.py +++ /dev/null @@ -1,177 +0,0 @@ -import email.utils -import mimetypes - -from .packages import six - - -def guess_content_type(filename, default='application/octet-stream'): - """ - Guess the "Content-Type" of a file. - - :param filename: - The filename to guess the "Content-Type" of using :mod:`mimetypes`. - :param default: - If no "Content-Type" can be guessed, default to `default`. - """ - if filename: - return mimetypes.guess_type(filename)[0] or default - return default - - -def format_header_param(name, value): - """ - Helper function to format and quote a single header parameter. - - Particularly useful for header parameters which might contain - non-ASCII values, like file names. This follows RFC 2231, as - suggested by RFC 2388 Section 4.4. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as a unicode string. - """ - if not any(ch in value for ch in '"\\\r\n'): - result = '%s="%s"' % (name, value) - try: - result.encode('ascii') - except UnicodeEncodeError: - pass - else: - return result - if not six.PY3: # Python 2: - value = value.encode('utf-8') - value = email.utils.encode_rfc2231(value, 'utf-8') - value = '%s*=%s' % (name, value) - return value - - -class RequestField(object): - """ - A data container for request body parameters. - - :param name: - The name of this request field. - :param data: - The data/value body. - :param filename: - An optional filename of the request field. - :param headers: - An optional dict-like object of headers to initially use for the field. - """ - def __init__(self, name, data, filename=None, headers=None): - self._name = name - self._filename = filename - self.data = data - self.headers = {} - if headers: - self.headers = dict(headers) - - @classmethod - def from_tuples(cls, fieldname, value): - """ - A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters. - - Supports constructing :class:`~urllib3.fields.RequestField` from - parameter of key/value strings AND key/filetuple. A filetuple is a - (filename, data, MIME type) tuple where the MIME type is optional. - For example:: - - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - - Field names and filenames must be unicode. - """ - if isinstance(value, tuple): - if len(value) == 3: - filename, data, content_type = value - else: - filename, data = value - content_type = guess_content_type(filename) - else: - filename = None - content_type = None - data = value - - request_param = cls(fieldname, data, filename=filename) - request_param.make_multipart(content_type=content_type) - - return request_param - - def _render_part(self, name, value): - """ - Overridable helper function to format a single header parameter. - - :param name: - The name of the parameter, a string expected to be ASCII only. - :param value: - The value of the parameter, provided as a unicode string. - """ - return format_header_param(name, value) - - def _render_parts(self, header_parts): - """ - Helper function to format and quote a single header. - - Useful for single headers that are composed of multiple items. E.g., - 'Content-Disposition' fields. - - :param header_parts: - A sequence of (k, v) typles or a :class:`dict` of (k, v) to format - as `k1="v1"; k2="v2"; ...`. - """ - parts = [] - iterable = header_parts - if isinstance(header_parts, dict): - iterable = header_parts.items() - - for name, value in iterable: - if value: - parts.append(self._render_part(name, value)) - - return '; '.join(parts) - - def render_headers(self): - """ - Renders the headers for this request field. - """ - lines = [] - - sort_keys = ['Content-Disposition', 'Content-Type', 'Content-Location'] - for sort_key in sort_keys: - if self.headers.get(sort_key, False): - lines.append('%s: %s' % (sort_key, self.headers[sort_key])) - - for header_name, header_value in self.headers.items(): - if header_name not in sort_keys: - if header_value: - lines.append('%s: %s' % (header_name, header_value)) - - lines.append('\r\n') - return '\r\n'.join(lines) - - def make_multipart(self, content_disposition=None, content_type=None, - content_location=None): - """ - Makes this request field into a multipart request field. - - This method overrides "Content-Disposition", "Content-Type" and - "Content-Location" headers to the request parameter. - - :param content_type: - The 'Content-Type' of the request body. - :param content_location: - The 'Content-Location' of the request body. - - """ - self.headers['Content-Disposition'] = content_disposition or 'form-data' - self.headers['Content-Disposition'] += '; '.join([ - '', self._render_parts( - (('name', self._name), ('filename', self._filename)) - ) - ]) - self.headers['Content-Type'] = content_type - self.headers['Content-Location'] = content_location diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/filepost.py b/plugin.video.alfa/lib/requests/packages/urllib3/filepost.py deleted file mode 100755 index 8c4aac26..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/filepost.py +++ /dev/null @@ -1,93 +0,0 @@ -import codecs - -from uuid import uuid4 -from io import BytesIO - -from .packages import six -from .packages.six import b -from .fields import RequestField - -writer = codecs.lookup('utf-8')[3] - - -def choose_boundary(): - """ - Our embarassingly-simple replacement for mimetools.choose_boundary. - """ - return uuid4().hex - - -def iter_field_objects(fields): - """ - Iterate over fields. - - Supports list of (k, v) tuples and dicts, and lists of - :class:`~urllib3.fields.RequestField`. - - """ - if isinstance(fields, dict): - i = six.iteritems(fields) - else: - i = iter(fields) - - for field in i: - if isinstance(field, RequestField): - yield field - else: - yield RequestField.from_tuples(*field) - - -def iter_fields(fields): - """ - .. deprecated:: 1.6 - - Iterate over fields. - - The addition of :class:`~urllib3.fields.RequestField` makes this function - obsolete. Instead, use :func:`iter_field_objects`, which returns - :class:`~urllib3.fields.RequestField` objects. - - Supports list of (k, v) tuples and dicts. - """ - if isinstance(fields, dict): - return ((k, v) for k, v in six.iteritems(fields)) - - return ((k, v) for k, v in fields) - - -def encode_multipart_formdata(fields, boundary=None): - """ - Encode a dictionary of ``fields`` using the multipart/form-data MIME format. - - :param fields: - Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`). - - :param boundary: - If not specified, then a random boundary will be generated using - :func:`mimetools.choose_boundary`. - """ - body = BytesIO() - if boundary is None: - boundary = choose_boundary() - - for field in iter_field_objects(fields): - body.write(b('--%s\r\n' % (boundary))) - - writer(body).write(field.render_headers()) - data = field.data - - if isinstance(data, int): - data = str(data) # Backwards compatibility - - if isinstance(data, six.text_type): - writer(body).write(data) - else: - body.write(data) - - body.write(b'\r\n') - - body.write(b('--%s--\r\n' % (boundary))) - - content_type = str('multipart/form-data; boundary=%s' % boundary) - - return body.getvalue(), content_type diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/packages/__init__.py b/plugin.video.alfa/lib/requests/packages/urllib3/packages/__init__.py deleted file mode 100755 index bc7e271a..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/packages/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from __future__ import absolute_import - -from . import ssl_match_hostname - diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/packages/ordered_dict.py b/plugin.video.alfa/lib/requests/packages/urllib3/packages/ordered_dict.py deleted file mode 100755 index 62dcb426..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/packages/ordered_dict.py +++ /dev/null @@ -1,259 +0,0 @@ -# Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. -# Passes Python2.7's test suite and incorporates all the latest updates. -# Copyright 2009 Raymond Hettinger, released under the MIT License. -# http://code.activestate.com/recipes/576693/ -try: - from thread import get_ident as _get_ident -except ImportError: - from dummy_thread import get_ident as _get_ident - -try: - from _abcoll import KeysView, ValuesView, ItemsView -except ImportError: - pass - - -class OrderedDict(dict): - 'Dictionary that remembers insertion order' - # An inherited dict maps keys to values. - # The inherited dict provides __getitem__, __len__, __contains__, and get. - # The remaining methods are order-aware. - # Big-O running times for all methods are the same as for regular dictionaries. - - # The internal self.__map dictionary maps keys to links in a doubly linked list. - # The circular doubly linked list starts and ends with a sentinel element. - # The sentinel element never gets deleted (this simplifies the algorithm). - # Each link is stored as a list of length three: [PREV, NEXT, KEY]. - - def __init__(self, *args, **kwds): - '''Initialize an ordered dictionary. Signature is the same as for - regular dictionaries, but keyword arguments are not recommended - because their insertion order is arbitrary. - - ''' - if len(args) > 1: - raise TypeError('expected at most 1 arguments, got %d' % len(args)) - try: - self.__root - except AttributeError: - self.__root = root = [] # sentinel node - root[:] = [root, root, None] - self.__map = {} - self.__update(*args, **kwds) - - def __setitem__(self, key, value, dict_setitem=dict.__setitem__): - 'od.__setitem__(i, y) <==> od[i]=y' - # Setting a new item creates a new link which goes at the end of the linked - # list, and the inherited dictionary is updated with the new key/value pair. - if key not in self: - root = self.__root - last = root[0] - last[1] = root[0] = self.__map[key] = [last, root, key] - dict_setitem(self, key, value) - - def __delitem__(self, key, dict_delitem=dict.__delitem__): - 'od.__delitem__(y) <==> del od[y]' - # Deleting an existing item uses self.__map to find the link which is - # then removed by updating the links in the predecessor and successor nodes. - dict_delitem(self, key) - link_prev, link_next, key = self.__map.pop(key) - link_prev[1] = link_next - link_next[0] = link_prev - - def __iter__(self): - 'od.__iter__() <==> iter(od)' - root = self.__root - curr = root[1] - while curr is not root: - yield curr[2] - curr = curr[1] - - def __reversed__(self): - 'od.__reversed__() <==> reversed(od)' - root = self.__root - curr = root[0] - while curr is not root: - yield curr[2] - curr = curr[0] - - def clear(self): - 'od.clear() -> None. Remove all items from od.' - try: - for node in self.__map.itervalues(): - del node[:] - root = self.__root - root[:] = [root, root, None] - self.__map.clear() - except AttributeError: - pass - dict.clear(self) - - def popitem(self, last=True): - '''od.popitem() -> (k, v), return and remove a (key, value) pair. - Pairs are returned in LIFO order if last is true or FIFO order if false. - - ''' - if not self: - raise KeyError('dictionary is empty') - root = self.__root - if last: - link = root[0] - link_prev = link[0] - link_prev[1] = root - root[0] = link_prev - else: - link = root[1] - link_next = link[1] - root[1] = link_next - link_next[0] = root - key = link[2] - del self.__map[key] - value = dict.pop(self, key) - return key, value - - # -- the following methods do not depend on the internal structure -- - - def keys(self): - 'od.keys() -> list of keys in od' - return list(self) - - def values(self): - 'od.values() -> list of values in od' - return [self[key] for key in self] - - def items(self): - 'od.items() -> list of (key, value) pairs in od' - return [(key, self[key]) for key in self] - - def iterkeys(self): - 'od.iterkeys() -> an iterator over the keys in od' - return iter(self) - - def itervalues(self): - 'od.itervalues -> an iterator over the values in od' - for k in self: - yield self[k] - - def iteritems(self): - 'od.iteritems -> an iterator over the (key, value) items in od' - for k in self: - yield (k, self[k]) - - def update(*args, **kwds): - '''od.update(E, **F) -> None. Update od from dict/iterable E and F. - - If E is a dict instance, does: for k in E: od[k] = E[k] - If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] - Or if E is an iterable of items, does: for k, v in E: od[k] = v - In either case, this is followed by: for k, v in F.items(): od[k] = v - - ''' - if len(args) > 2: - raise TypeError('update() takes at most 2 positional ' - 'arguments (%d given)' % (len(args),)) - elif not args: - raise TypeError('update() takes at least 1 argument (0 given)') - self = args[0] - # Make progressively weaker assumptions about "other" - other = () - if len(args) == 2: - other = args[1] - if isinstance(other, dict): - for key in other: - self[key] = other[key] - elif hasattr(other, 'keys'): - for key in other.keys(): - self[key] = other[key] - else: - for key, value in other: - self[key] = value - for key, value in kwds.items(): - self[key] = value - - __update = update # let subclasses override update without breaking __init__ - - __marker = object() - - def pop(self, key, default=__marker): - '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. - If key is not found, d is returned if given, otherwise KeyError is raised. - - ''' - if key in self: - result = self[key] - del self[key] - return result - if default is self.__marker: - raise KeyError(key) - return default - - def setdefault(self, key, default=None): - 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' - if key in self: - return self[key] - self[key] = default - return default - - def __repr__(self, _repr_running={}): - 'od.__repr__() <==> repr(od)' - call_key = id(self), _get_ident() - if call_key in _repr_running: - return '...' - _repr_running[call_key] = 1 - try: - if not self: - return '%s()' % (self.__class__.__name__,) - return '%s(%r)' % (self.__class__.__name__, self.items()) - finally: - del _repr_running[call_key] - - def __reduce__(self): - 'Return state information for pickling' - items = [[k, self[k]] for k in self] - inst_dict = vars(self).copy() - for k in vars(OrderedDict()): - inst_dict.pop(k, None) - if inst_dict: - return (self.__class__, (items,), inst_dict) - return self.__class__, (items,) - - def copy(self): - 'od.copy() -> a shallow copy of od' - return self.__class__(self) - - @classmethod - def fromkeys(cls, iterable, value=None): - '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S - and values equal to v (which defaults to None). - - ''' - d = cls() - for key in iterable: - d[key] = value - return d - - def __eq__(self, other): - '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive - while comparison to a regular mapping is order-insensitive. - - ''' - if isinstance(other, OrderedDict): - return len(self)==len(other) and self.items() == other.items() - return dict.__eq__(self, other) - - def __ne__(self, other): - return not self == other - - # -- the following methods are only used in Python 2.7 -- - - def viewkeys(self): - "od.viewkeys() -> a set-like object providing a view on od's keys" - return KeysView(self) - - def viewvalues(self): - "od.viewvalues() -> an object providing a view on od's values" - return ValuesView(self) - - def viewitems(self): - "od.viewitems() -> a set-like object providing a view on od's items" - return ItemsView(self) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/packages/six.py b/plugin.video.alfa/lib/requests/packages/urllib3/packages/six.py deleted file mode 100755 index 2e5446dc..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/packages/six.py +++ /dev/null @@ -1,385 +0,0 @@ -"""Utilities for writing code that runs on Python 2 and 3""" - -#Copyright (c) 2010-2011 Benjamin Peterson - -#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. - -import operator -import sys -import types - -__author__ = "Benjamin Peterson " -__version__ = "1.2.0" # Revision 41c74fef2ded - - -# True if we are running on Python 3. -PY3 = sys.version_info[0] == 3 - -if PY3: - string_types = str, - integer_types = int, - class_types = type, - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = basestring, - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - def __len__(self): - return 1 << 31 - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) - # This is a bit ugly, but it avoids running this again. - delattr(tp, self.name) - return result - - -class MovedModule(_LazyDescr): - - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - -class MovedAttribute(_LazyDescr): - - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - - -class _MovedItems(types.ModuleType): - """Lazy loading of moved objects""" - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("reload_module", "__builtin__", "imp", "reload"), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule("copyreg", "copy_reg"), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", - "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", - "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", - "tkinter.simpledialog"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("winreg", "_winreg"), -] -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) -del attr - -moves = sys.modules[__name__ + ".moves"] = _MovedItems("moves") - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_code = "__code__" - _func_defaults = "__defaults__" - - _iterkeys = "keys" - _itervalues = "values" - _iteritems = "items" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_code = "func_code" - _func_defaults = "func_defaults" - - _iterkeys = "iterkeys" - _itervalues = "itervalues" - _iteritems = "iteritems" - - -try: - advance_iterator = next -except NameError: - def advance_iterator(it): - return it.next() -next = advance_iterator - - -if PY3: - def get_unbound_function(unbound): - return unbound - - Iterator = object - - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) -else: - def get_unbound_function(unbound): - return unbound.im_func - - class Iterator(object): - - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc(get_unbound_function, - """Get the function out of a possibly unbound function""") - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) - - -def iterkeys(d): - """Return an iterator over the keys of a dictionary.""" - return iter(getattr(d, _iterkeys)()) - -def itervalues(d): - """Return an iterator over the values of a dictionary.""" - return iter(getattr(d, _itervalues)()) - -def iteritems(d): - """Return an iterator over the (key, value) pairs of a dictionary.""" - return iter(getattr(d, _iteritems)()) - - -if PY3: - def b(s): - return s.encode("latin-1") - def u(s): - return s - if sys.version_info[1] <= 1: - def int2byte(i): - return bytes((i,)) - else: - # This is about 2x faster than the implementation above on 3.2+ - int2byte = operator.methodcaller("to_bytes", 1, "big") - import io - StringIO = io.StringIO - BytesIO = io.BytesIO -else: - def b(s): - return s - def u(s): - return unicode(s, "unicode_escape") - int2byte = chr - import StringIO - StringIO = BytesIO = StringIO.StringIO -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -if PY3: - import builtins - exec_ = getattr(builtins, "exec") - - - def reraise(tp, value, tb=None): - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - - - print_ = getattr(builtins, "print") - del builtins - -else: - def exec_(code, globs=None, locs=None): - """Execute code in a namespace.""" - if globs is None: - frame = sys._getframe(1) - globs = frame.f_globals - if locs is None: - locs = frame.f_locals - del frame - elif locs is None: - locs = globs - exec("""exec code in globs, locs""") - - - exec_("""def reraise(tp, value, tb=None): - raise tp, value, tb -""") - - - def print_(*args, **kwargs): - """The new-style print function.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - def write(data): - if not isinstance(data, basestring): - data = str(data) - fp.write(data) - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) - -_add_doc(reraise, """Reraise an exception.""") - - -def with_metaclass(meta, base=object): - """Create a base class with a metaclass.""" - return meta("NewBase", (base,), {}) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py b/plugin.video.alfa/lib/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py deleted file mode 100755 index a41e06bd..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -try: - # Python 3.2+ - from ssl import CertificateError, match_hostname -except ImportError: - try: - # Backport of the function from a pypi module - from backports.ssl_match_hostname import CertificateError, match_hostname - except ImportError: - # Our vendored copy - from ._implementation import CertificateError, match_hostname - -# Not needed, but documenting what we provide. -__all__ = ('CertificateError', 'match_hostname') diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py b/plugin.video.alfa/lib/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py deleted file mode 100755 index a9e74d9f..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py +++ /dev/null @@ -1,105 +0,0 @@ -"""The match_hostname() function from Python 3.3.3, essential when using SSL.""" - -# Note: This file is under the PSF license as the code comes from the python -# stdlib. http://docs.python.org/3/license.html - -import re - -__version__ = '3.4.0.2' - -class CertificateError(ValueError): - pass - - -def _dnsname_match(dn, hostname, max_wildcards=1): - """Matching according to RFC 6125, section 6.4.3 - - http://tools.ietf.org/html/rfc6125#section-6.4.3 - """ - pats = [] - if not dn: - return False - - # Ported from python3-syntax: - # leftmost, *remainder = dn.split(r'.') - parts = dn.split(r'.') - leftmost = parts[0] - remainder = parts[1:] - - wildcards = leftmost.count('*') - if wildcards > max_wildcards: - # Issue #17980: avoid denials of service by refusing more - # than one wildcard per fragment. A survey of established - # policy among SSL implementations showed it to be a - # reasonable choice. - raise CertificateError( - "too many wildcards in certificate DNS name: " + repr(dn)) - - # speed up common case w/o wildcards - if not wildcards: - return dn.lower() == hostname.lower() - - # RFC 6125, section 6.4.3, subitem 1. - # The client SHOULD NOT attempt to match a presented identifier in which - # the wildcard character comprises a label other than the left-most label. - if leftmost == '*': - # When '*' is a fragment by itself, it matches a non-empty dotless - # fragment. - pats.append('[^.]+') - elif leftmost.startswith('xn--') or hostname.startswith('xn--'): - # RFC 6125, section 6.4.3, subitem 3. - # The client SHOULD NOT attempt to match a presented identifier - # where the wildcard character is embedded within an A-label or - # U-label of an internationalized domain name. - pats.append(re.escape(leftmost)) - else: - # Otherwise, '*' matches any dotless string, e.g. www* - pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) - - # add the remaining fragments, ignore any wildcards - for frag in remainder: - pats.append(re.escape(frag)) - - pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) - return pat.match(hostname) - - -def match_hostname(cert, hostname): - """Verify that *cert* (in decoded format as returned by - SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 - rules are followed, but IP addresses are not accepted for *hostname*. - - CertificateError is raised on failure. On success, the function - returns nothing. - """ - if not cert: - raise ValueError("empty or no certificate") - dnsnames = [] - san = cert.get('subjectAltName', ()) - for key, value in san: - if key == 'DNS': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if not dnsnames: - # The subject is only checked when there is no dNSName entry - # in subjectAltName - for sub in cert.get('subject', ()): - for key, value in sub: - # XXX according to RFC 2818, the most specific Common Name - # must be used. - if key == 'commonName': - if _dnsname_match(value, hostname): - return - dnsnames.append(value) - if len(dnsnames) > 1: - raise CertificateError("hostname %r " - "doesn't match either of %s" - % (hostname, ', '.join(map(repr, dnsnames)))) - elif len(dnsnames) == 1: - raise CertificateError("hostname %r " - "doesn't match %r" - % (hostname, dnsnames[0])) - else: - raise CertificateError("no appropriate commonName or " - "subjectAltName fields were found") diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/poolmanager.py b/plugin.video.alfa/lib/requests/packages/urllib3/poolmanager.py deleted file mode 100755 index a164d942..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/poolmanager.py +++ /dev/null @@ -1,280 +0,0 @@ -import logging - -try: # Python 3 - from urllib.parse import urljoin -except ImportError: - from urlparse import urljoin - -from ._collections import RecentlyUsedContainer -from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool -from .connectionpool import port_by_scheme -from .exceptions import LocationValueError, MaxRetryError -from .request import RequestMethods -from .util.url import parse_url -from .util.retry import Retry - - -__all__ = ['PoolManager', 'ProxyManager', 'proxy_from_url'] - - -pool_classes_by_scheme = { - 'http': HTTPConnectionPool, - 'https': HTTPSConnectionPool, -} - -log = logging.getLogger(__name__) - -SSL_KEYWORDS = ('key_file', 'cert_file', 'cert_reqs', 'ca_certs', - 'ssl_version') - - -class PoolManager(RequestMethods): - """ - Allows for arbitrary requests while transparently keeping track of - necessary connection pools for you. - - :param num_pools: - Number of connection pools to cache before discarding the least - recently used pool. - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - - :param \**connection_pool_kw: - Additional parameters are used to create fresh - :class:`urllib3.connectionpool.ConnectionPool` instances. - - Example:: - - >>> manager = PoolManager(num_pools=2) - >>> r = manager.request('GET', 'http://google.com/') - >>> r = manager.request('GET', 'http://google.com/mail') - >>> r = manager.request('GET', 'http://yahoo.com/') - >>> len(manager.pools) - 2 - - """ - - proxy = None - - def __init__(self, num_pools=10, headers=None, **connection_pool_kw): - RequestMethods.__init__(self, headers) - self.connection_pool_kw = connection_pool_kw - self.pools = RecentlyUsedContainer(num_pools, - dispose_func=lambda p: p.close()) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - self.clear() - # Return False to re-raise any potential exceptions - return False - - def _new_pool(self, scheme, host, port): - """ - Create a new :class:`ConnectionPool` based on host, port and scheme. - - This method is used to actually create the connection pools handed out - by :meth:`connection_from_url` and companion methods. It is intended - to be overridden for customization. - """ - pool_cls = pool_classes_by_scheme[scheme] - kwargs = self.connection_pool_kw - if scheme == 'http': - kwargs = self.connection_pool_kw.copy() - for kw in SSL_KEYWORDS: - kwargs.pop(kw, None) - - return pool_cls(host, port, **kwargs) - - def clear(self): - """ - Empty our store of pools and direct them all to close. - - This will not affect in-flight connections, but they will not be - re-used after completion. - """ - self.pools.clear() - - def connection_from_host(self, host, port=None, scheme='http'): - """ - Get a :class:`ConnectionPool` based on the host, port, and scheme. - - If ``port`` isn't given, it will be derived from the ``scheme`` using - ``urllib3.connectionpool.port_by_scheme``. - """ - - if not host: - raise LocationValueError("No host specified.") - - scheme = scheme or 'http' - port = port or port_by_scheme.get(scheme, 80) - pool_key = (scheme, host, port) - - with self.pools.lock: - # If the scheme, host, or port doesn't match existing open - # connections, open a new ConnectionPool. - pool = self.pools.get(pool_key) - if pool: - return pool - - # Make a fresh ConnectionPool of the desired type - pool = self._new_pool(scheme, host, port) - self.pools[pool_key] = pool - - return pool - - def connection_from_url(self, url): - """ - Similar to :func:`urllib3.connectionpool.connection_from_url` but - doesn't pass any additional parameters to the - :class:`urllib3.connectionpool.ConnectionPool` constructor. - - Additional parameters are taken from the :class:`.PoolManager` - constructor. - """ - u = parse_url(url) - return self.connection_from_host(u.host, port=u.port, scheme=u.scheme) - - def urlopen(self, method, url, redirect=True, **kw): - """ - Same as :meth:`urllib3.connectionpool.HTTPConnectionPool.urlopen` - with custom cross-host redirect logic and only sends the request-uri - portion of the ``url``. - - The given ``url`` parameter must be absolute, such that an appropriate - :class:`urllib3.connectionpool.ConnectionPool` can be chosen for it. - """ - u = parse_url(url) - conn = self.connection_from_host(u.host, port=u.port, scheme=u.scheme) - - kw['assert_same_host'] = False - kw['redirect'] = False - if 'headers' not in kw: - kw['headers'] = self.headers - - if self.proxy is not None and u.scheme == "http": - response = conn.urlopen(method, url, **kw) - else: - response = conn.urlopen(method, u.request_uri, **kw) - - redirect_location = redirect and response.get_redirect_location() - if not redirect_location: - return response - - # Support relative URLs for redirecting. - redirect_location = urljoin(url, redirect_location) - - # RFC 7231, Section 6.4.4 - if response.status == 303: - method = 'GET' - - retries = kw.get('retries') - if not isinstance(retries, Retry): - retries = Retry.from_int(retries, redirect=redirect) - - try: - retries = retries.increment(method, url, response=response, _pool=conn) - except MaxRetryError: - if retries.raise_on_redirect: - raise - return response - - kw['retries'] = retries - kw['redirect'] = redirect - - log.info("Redirecting %s -> %s" % (url, redirect_location)) - return self.urlopen(method, redirect_location, **kw) - - -class ProxyManager(PoolManager): - """ - Behaves just like :class:`PoolManager`, but sends all requests through - the defined proxy, using the CONNECT method for HTTPS URLs. - - :param proxy_url: - The URL of the proxy to be used. - - :param proxy_headers: - A dictionary contaning headers that will be sent to the proxy. In case - of HTTP they are being sent with each request, while in the - HTTPS/CONNECT case they are sent only once. Could be used for proxy - authentication. - - Example: - >>> proxy = urllib3.ProxyManager('http://localhost:3128/') - >>> r1 = proxy.request('GET', 'http://google.com/') - >>> r2 = proxy.request('GET', 'http://httpbin.org/') - >>> len(proxy.pools) - 1 - >>> r3 = proxy.request('GET', 'https://httpbin.org/') - >>> r4 = proxy.request('GET', 'https://twitter.com/') - >>> len(proxy.pools) - 3 - - """ - - def __init__(self, proxy_url, num_pools=10, headers=None, - proxy_headers=None, **connection_pool_kw): - - if isinstance(proxy_url, HTTPConnectionPool): - proxy_url = '%s://%s:%i' % (proxy_url.scheme, proxy_url.host, - proxy_url.port) - proxy = parse_url(proxy_url) - if not proxy.port: - port = port_by_scheme.get(proxy.scheme, 80) - proxy = proxy._replace(port=port) - - assert proxy.scheme in ("http", "https"), \ - 'Not supported proxy scheme %s' % proxy.scheme - - self.proxy = proxy - self.proxy_headers = proxy_headers or {} - - connection_pool_kw['_proxy'] = self.proxy - connection_pool_kw['_proxy_headers'] = self.proxy_headers - - super(ProxyManager, self).__init__( - num_pools, headers, **connection_pool_kw) - - def connection_from_host(self, host, port=None, scheme='http'): - if scheme == "https": - return super(ProxyManager, self).connection_from_host( - host, port, scheme) - - return super(ProxyManager, self).connection_from_host( - self.proxy.host, self.proxy.port, self.proxy.scheme) - - def _set_proxy_headers(self, url, headers=None): - """ - Sets headers needed by proxies: specifically, the Accept and Host - headers. Only sets headers not provided by the user. - """ - headers_ = {'Accept': '*/*'} - - netloc = parse_url(url).netloc - if netloc: - headers_['Host'] = netloc - - if headers: - headers_.update(headers) - return headers_ - - def urlopen(self, method, url, redirect=True, **kw): - "Same as HTTP(S)ConnectionPool.urlopen, ``url`` must be absolute." - u = parse_url(url) - - if u.scheme == "http": - # For proxied HTTPS requests, httplib sets the necessary headers - # on the CONNECT to the proxy. For HTTP, we'll definitely - # need to set 'Host' at the very least. - headers = kw.get('headers', self.headers) - kw['headers'] = self._set_proxy_headers(url, headers) - - return super(ProxyManager, self).urlopen(method, url, redirect=redirect, **kw) - - -def proxy_from_url(url, **kw): - return ProxyManager(proxy_url=url, **kw) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/request.py b/plugin.video.alfa/lib/requests/packages/urllib3/request.py deleted file mode 100755 index 61020c06..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/request.py +++ /dev/null @@ -1,141 +0,0 @@ -try: - from urllib.parse import urlencode -except ImportError: - from urllib import urlencode - -from .filepost import encode_multipart_formdata - - -__all__ = ['RequestMethods'] - - -class RequestMethods(object): - """ - Convenience mixin for classes who implement a :meth:`urlopen` method, such - as :class:`~urllib3.connectionpool.HTTPConnectionPool` and - :class:`~urllib3.poolmanager.PoolManager`. - - Provides behavior for making common types of HTTP request methods and - decides which type of request field encoding to use. - - Specifically, - - :meth:`.request_encode_url` is for sending requests whose fields are - encoded in the URL (such as GET, HEAD, DELETE). - - :meth:`.request_encode_body` is for sending requests whose fields are - encoded in the *body* of the request using multipart or www-form-urlencoded - (such as for POST, PUT, PATCH). - - :meth:`.request` is for making any kind of request, it will look up the - appropriate encoding format and use one of the above two methods to make - the request. - - Initializer parameters: - - :param headers: - Headers to include with all requests, unless other headers are given - explicitly. - """ - - _encode_url_methods = set(['DELETE', 'GET', 'HEAD', 'OPTIONS']) - - def __init__(self, headers=None): - self.headers = headers or {} - - def urlopen(self, method, url, body=None, headers=None, - encode_multipart=True, multipart_boundary=None, - **kw): # Abstract - raise NotImplemented("Classes extending RequestMethods must implement " - "their own ``urlopen`` method.") - - def request(self, method, url, fields=None, headers=None, **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the appropriate encoding of - ``fields`` based on the ``method`` used. - - This is a convenience method that requires the least amount of manual - effort. It can be used in most situations, while still having the - option to drop down to more specific methods when necessary, such as - :meth:`request_encode_url`, :meth:`request_encode_body`, - or even the lowest level :meth:`urlopen`. - """ - method = method.upper() - - if method in self._encode_url_methods: - return self.request_encode_url(method, url, fields=fields, - headers=headers, - **urlopen_kw) - else: - return self.request_encode_body(method, url, fields=fields, - headers=headers, - **urlopen_kw) - - def request_encode_url(self, method, url, fields=None, **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the url. This is useful for request methods like GET, HEAD, DELETE, etc. - """ - if fields: - url += '?' + urlencode(fields) - return self.urlopen(method, url, **urlopen_kw) - - def request_encode_body(self, method, url, fields=None, headers=None, - encode_multipart=True, multipart_boundary=None, - **urlopen_kw): - """ - Make a request using :meth:`urlopen` with the ``fields`` encoded in - the body. This is useful for request methods like POST, PUT, PATCH, etc. - - When ``encode_multipart=True`` (default), then - :meth:`urllib3.filepost.encode_multipart_formdata` is used to encode - the payload with the appropriate content type. Otherwise - :meth:`urllib.urlencode` is used with the - 'application/x-www-form-urlencoded' content type. - - Multipart encoding must be used when posting files, and it's reasonably - safe to use it in other times too. However, it may break request - signing, such as with OAuth. - - Supports an optional ``fields`` parameter of key/value strings AND - key/filetuple. A filetuple is a (filename, data, MIME type) tuple where - the MIME type is optional. For example:: - - fields = { - 'foo': 'bar', - 'fakefile': ('foofile.txt', 'contents of foofile'), - 'realfile': ('barfile.txt', open('realfile').read()), - 'typedfile': ('bazfile.bin', open('bazfile').read(), - 'image/jpeg'), - 'nonamefile': 'contents of nonamefile field', - } - - When uploading a file, providing a filename (the first parameter of the - tuple) is optional but recommended to best mimick behavior of browsers. - - Note that if ``headers`` are supplied, the 'Content-Type' header will - be overwritten because it depends on the dynamic random boundary string - which is used to compose the body of the request. The random boundary - string can be explicitly set with the ``multipart_boundary`` parameter. - """ - if headers is None: - headers = self.headers - - extra_kw = {'headers': {}} - - if fields: - if 'body' in urlopen_kw: - raise TypeError('request got values for both \'fields\' and \'body\', can only specify one.') - - if encode_multipart: - body, content_type = encode_multipart_formdata(fields, boundary=multipart_boundary) - else: - body, content_type = urlencode(fields), 'application/x-www-form-urlencoded' - - extra_kw['body'] = body - extra_kw['headers'] = {'Content-Type': content_type} - - extra_kw['headers'].update(headers) - extra_kw.update(urlopen_kw) - - return self.urlopen(method, url, **extra_kw) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/response.py b/plugin.video.alfa/lib/requests/packages/urllib3/response.py deleted file mode 100755 index da34a4b9..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/response.py +++ /dev/null @@ -1,466 +0,0 @@ -try: - import http.client as httplib -except ImportError: - import httplib -import zlib -import io -from socket import timeout as SocketTimeout - -from ._collections import HTTPHeaderDict -from .exceptions import ( - ProtocolError, DecodeError, ReadTimeoutError, ResponseNotChunked -) -from .packages.six import string_types as basestring, binary_type, PY3 -from .connection import HTTPException, BaseSSLError -from .util.response import is_fp_closed - - -class DeflateDecoder(object): - - def __init__(self): - self._first_try = True - self._data = binary_type() - self._obj = zlib.decompressobj() - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - if not data: - return data - - if not self._first_try: - return self._obj.decompress(data) - - self._data += data - try: - return self._obj.decompress(data) - except zlib.error: - self._first_try = False - self._obj = zlib.decompressobj(-zlib.MAX_WBITS) - try: - return self.decompress(self._data) - finally: - self._data = None - - -class GzipDecoder(object): - - def __init__(self): - self._obj = zlib.decompressobj(16 + zlib.MAX_WBITS) - - def __getattr__(self, name): - return getattr(self._obj, name) - - def decompress(self, data): - if not data: - return data - return self._obj.decompress(data) - - -def _get_decoder(mode): - if mode == 'gzip': - return GzipDecoder() - - return DeflateDecoder() - - -class HTTPResponse(io.IOBase): - """ - HTTP Response container. - - Backwards-compatible to httplib's HTTPResponse but the response ``body`` is - loaded and decoded on-demand when the ``data`` property is accessed. This - class is also compatible with the Python standard library's :mod:`io` - module, and can hence be treated as a readable object in the context of that - framework. - - Extra parameters for behaviour not present in httplib.HTTPResponse: - - :param preload_content: - If True, the response's body will be preloaded during construction. - - :param decode_content: - If True, attempts to decode specific content-encoding's based on headers - (like 'gzip' and 'deflate') will be skipped and raw data will be used - instead. - - :param original_response: - When this HTTPResponse wrapper is generated from an httplib.HTTPResponse - object, it's convenient to include the original for debug purposes. It's - otherwise unused. - """ - - CONTENT_DECODERS = ['gzip', 'deflate'] - REDIRECT_STATUSES = [301, 302, 303, 307, 308] - - def __init__(self, body='', headers=None, status=0, version=0, reason=None, - strict=0, preload_content=True, decode_content=True, - original_response=None, pool=None, connection=None): - - if isinstance(headers, HTTPHeaderDict): - self.headers = headers - else: - self.headers = HTTPHeaderDict(headers) - self.status = status - self.version = version - self.reason = reason - self.strict = strict - self.decode_content = decode_content - - self._decoder = None - self._body = None - self._fp = None - self._original_response = original_response - self._fp_bytes_read = 0 - - if body and isinstance(body, (basestring, binary_type)): - self._body = body - - self._pool = pool - self._connection = connection - - if hasattr(body, 'read'): - self._fp = body - - # Are we using the chunked-style of transfer encoding? - self.chunked = False - self.chunk_left = None - tr_enc = self.headers.get('transfer-encoding', '').lower() - # Don't incur the penalty of creating a list and then discarding it - encodings = (enc.strip() for enc in tr_enc.split(",")) - if "chunked" in encodings: - self.chunked = True - - # We certainly don't want to preload content when the response is chunked. - if not self.chunked and preload_content and not self._body: - self._body = self.read(decode_content=decode_content) - - def get_redirect_location(self): - """ - Should we redirect and where to? - - :returns: Truthy redirect location string if we got a redirect status - code and valid location. ``None`` if redirect status and no - location. ``False`` if not a redirect status code. - """ - if self.status in self.REDIRECT_STATUSES: - return self.headers.get('location') - - return False - - def release_conn(self): - if not self._pool or not self._connection: - return - - self._pool._put_conn(self._connection) - self._connection = None - - @property - def data(self): - # For backwords-compat with earlier urllib3 0.4 and earlier. - if self._body: - return self._body - - if self._fp: - return self.read(cache_content=True) - - def tell(self): - """ - Obtain the number of bytes pulled over the wire so far. May differ from - the amount of content returned by :meth:``HTTPResponse.read`` if bytes - are encoded on the wire (e.g, compressed). - """ - return self._fp_bytes_read - - def _init_decoder(self): - """ - Set-up the _decoder attribute if necessar. - """ - # Note: content-encoding value should be case-insensitive, per RFC 7230 - # Section 3.2 - content_encoding = self.headers.get('content-encoding', '').lower() - if self._decoder is None and content_encoding in self.CONTENT_DECODERS: - self._decoder = _get_decoder(content_encoding) - - def _decode(self, data, decode_content, flush_decoder): - """ - Decode the data passed in and potentially flush the decoder. - """ - try: - if decode_content and self._decoder: - data = self._decoder.decompress(data) - except (IOError, zlib.error) as e: - content_encoding = self.headers.get('content-encoding', '').lower() - raise DecodeError( - "Received response with content-encoding: %s, but " - "failed to decode it." % content_encoding, e) - - if flush_decoder and decode_content and self._decoder: - buf = self._decoder.decompress(binary_type()) - data += buf + self._decoder.flush() - - return data - - def read(self, amt=None, decode_content=None, cache_content=False): - """ - Similar to :meth:`httplib.HTTPResponse.read`, but with two additional - parameters: ``decode_content`` and ``cache_content``. - - :param amt: - How much of the content to read. If specified, caching is skipped - because it doesn't make sense to cache partial content as the full - response. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - - :param cache_content: - If True, will save the returned data such that the same result is - returned despite of the state of the underlying file object. This - is useful if you want the ``.data`` property to continue working - after having ``.read()`` the file object. (Overridden if ``amt`` is - set.) - """ - self._init_decoder() - if decode_content is None: - decode_content = self.decode_content - - if self._fp is None: - return - - flush_decoder = False - - try: - try: - if amt is None: - # cStringIO doesn't like amt=None - data = self._fp.read() - flush_decoder = True - else: - cache_content = False - data = self._fp.read(amt) - if amt != 0 and not data: # Platform-specific: Buggy versions of Python. - # Close the connection when no data is returned - # - # This is redundant to what httplib/http.client _should_ - # already do. However, versions of python released before - # December 15, 2012 (http://bugs.python.org/issue16298) do - # not properly close the connection in all cases. There is - # no harm in redundantly calling close. - self._fp.close() - flush_decoder = True - - except SocketTimeout: - # FIXME: Ideally we'd like to include the url in the ReadTimeoutError but - # there is yet no clean way to get at it from this context. - raise ReadTimeoutError(self._pool, None, 'Read timed out.') - - except BaseSSLError as e: - # FIXME: Is there a better way to differentiate between SSLErrors? - if 'read operation timed out' not in str(e): # Defensive: - # This shouldn't happen but just in case we're missing an edge - # case, let's avoid swallowing SSL errors. - raise - - raise ReadTimeoutError(self._pool, None, 'Read timed out.') - - except HTTPException as e: - # This includes IncompleteRead. - raise ProtocolError('Connection broken: %r' % e, e) - - self._fp_bytes_read += len(data) - - data = self._decode(data, decode_content, flush_decoder) - - if cache_content: - self._body = data - - return data - - finally: - if self._original_response and self._original_response.isclosed(): - self.release_conn() - - def stream(self, amt=2**16, decode_content=None): - """ - A generator wrapper for the read() method. A call will block until - ``amt`` bytes have been read from the connection or until the - connection is closed. - - :param amt: - How much of the content to read. The generator will return up to - much data per iteration, but may return less. This is particularly - likely when using compressed data. However, the empty string will - never be returned. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - if self.chunked: - for line in self.read_chunked(amt, decode_content=decode_content): - yield line - else: - while not is_fp_closed(self._fp): - data = self.read(amt=amt, decode_content=decode_content) - - if data: - yield data - - @classmethod - def from_httplib(ResponseCls, r, **response_kw): - """ - Given an :class:`httplib.HTTPResponse` instance ``r``, return a - corresponding :class:`urllib3.response.HTTPResponse` object. - - Remaining parameters are passed to the HTTPResponse constructor, along - with ``original_response=r``. - """ - headers = r.msg - if not isinstance(headers, HTTPHeaderDict): - if PY3: # Python 3 - headers = HTTPHeaderDict(headers.items()) - else: # Python 2 - headers = HTTPHeaderDict.from_httplib(headers) - - # HTTPResponse objects in Python 3 don't have a .strict attribute - strict = getattr(r, 'strict', 0) - resp = ResponseCls(body=r, - headers=headers, - status=r.status, - version=r.version, - reason=r.reason, - strict=strict, - original_response=r, - **response_kw) - return resp - - # Backwards-compatibility methods for httplib.HTTPResponse - def getheaders(self): - return self.headers - - def getheader(self, name, default=None): - return self.headers.get(name, default) - - # Overrides from io.IOBase - def close(self): - if not self.closed: - self._fp.close() - - @property - def closed(self): - if self._fp is None: - return True - elif hasattr(self._fp, 'closed'): - return self._fp.closed - elif hasattr(self._fp, 'isclosed'): # Python 2 - return self._fp.isclosed() - else: - return True - - def fileno(self): - if self._fp is None: - raise IOError("HTTPResponse has no file to get a fileno from") - elif hasattr(self._fp, "fileno"): - return self._fp.fileno() - else: - raise IOError("The file-like object this HTTPResponse is wrapped " - "around has no file descriptor") - - def flush(self): - if self._fp is not None and hasattr(self._fp, 'flush'): - return self._fp.flush() - - def readable(self): - # This method is required for `io` module compatibility. - return True - - def readinto(self, b): - # This method is required for `io` module compatibility. - temp = self.read(len(b)) - if len(temp) == 0: - return 0 - else: - b[:len(temp)] = temp - return len(temp) - - def _update_chunk_length(self): - # First, we'll figure out length of a chunk and then - # we'll try to read it from socket. - if self.chunk_left is not None: - return - line = self._fp.fp.readline() - line = line.split(b';', 1)[0] - try: - self.chunk_left = int(line, 16) - except ValueError: - # Invalid chunked protocol response, abort. - self.close() - raise httplib.IncompleteRead(line) - - def _handle_chunk(self, amt): - returned_chunk = None - if amt is None: - chunk = self._fp._safe_read(self.chunk_left) - returned_chunk = chunk - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - elif amt < self.chunk_left: - value = self._fp._safe_read(amt) - self.chunk_left = self.chunk_left - amt - returned_chunk = value - elif amt == self.chunk_left: - value = self._fp._safe_read(amt) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - returned_chunk = value - else: # amt > self.chunk_left - returned_chunk = self._fp._safe_read(self.chunk_left) - self._fp._safe_read(2) # Toss the CRLF at the end of the chunk. - self.chunk_left = None - return returned_chunk - - def read_chunked(self, amt=None, decode_content=None): - """ - Similar to :meth:`HTTPResponse.read`, but with an additional - parameter: ``decode_content``. - - :param decode_content: - If True, will attempt to decode the body based on the - 'content-encoding' header. - """ - self._init_decoder() - # FIXME: Rewrite this method and make it a class with a better structured logic. - if not self.chunked: - raise ResponseNotChunked("Response is not chunked. " - "Header 'transfer-encoding: chunked' is missing.") - - if self._original_response and self._original_response._method.upper() == 'HEAD': - # Don't bother reading the body of a HEAD request. - # FIXME: Can we do this somehow without accessing private httplib _method? - self._original_response.close() - return - - while True: - self._update_chunk_length() - if self.chunk_left == 0: - break - chunk = self._handle_chunk(amt) - yield self._decode(chunk, decode_content=decode_content, - flush_decoder=True) - - # Chunk content ends with \r\n: discard it. - while True: - line = self._fp.fp.readline() - if not line: - # Some sites may not end with '\r\n'. - break - if line == b'\r\n': - break - - # We read everything; close the "file". - if self._original_response: - self._original_response.close() - self.release_conn() diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/util/__init__.py b/plugin.video.alfa/lib/requests/packages/urllib3/util/__init__.py deleted file mode 100755 index de29ee42..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/util/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# For backwards compatibility, provide imports that used to be here. -from .connection import is_connection_dropped -from .request import make_headers -from .response import is_fp_closed -from .ssl_ import ( - SSLContext, - HAS_SNI, - assert_fingerprint, - resolve_cert_reqs, - resolve_ssl_version, - ssl_wrap_socket, -) -from .timeout import ( - current_time, - Timeout, -) - -from .retry import Retry -from .url import ( - get_host, - parse_url, - split_first, - Url, -) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/util/connection.py b/plugin.video.alfa/lib/requests/packages/urllib3/util/connection.py deleted file mode 100755 index d591293c..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/util/connection.py +++ /dev/null @@ -1,98 +0,0 @@ -import socket -try: - from select import poll, POLLIN -except ImportError: # `poll` doesn't exist on OSX and other platforms - poll = False - try: - from select import select - except ImportError: # `select` doesn't exist on AppEngine. - select = False - - -def is_connection_dropped(conn): # Platform-specific - """ - Returns True if the connection is dropped and should be closed. - - :param conn: - :class:`httplib.HTTPConnection` object. - - Note: For platforms like AppEngine, this will always return ``False`` to - let the platform handle connection recycling transparently for us. - """ - sock = getattr(conn, 'sock', False) - if sock is False: # Platform-specific: AppEngine - return False - if sock is None: # Connection already closed (such as by httplib). - return True - - if not poll: - if not select: # Platform-specific: AppEngine - return False - - try: - return select([sock], [], [], 0.0)[0] - except socket.error: - return True - - # This version is better on platforms that support it. - p = poll() - p.register(sock, POLLIN) - for (fno, ev) in p.poll(0.0): - if fno == sock.fileno(): - # Either data is buffered (bad), or the connection is dropped. - return True - - -# This function is copied from socket.py in the Python 2.7 standard -# library test suite. Added to its signature is only `socket_options`. -def create_connection(address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, - source_address=None, socket_options=None): - """Connect to *address* and return the socket object. - - Convenience function. Connect to *address* (a 2-tuple ``(host, - port)``) and return the socket object. Passing the optional - *timeout* parameter will set the timeout on the socket instance - before attempting to connect. If no *timeout* is supplied, the - global default timeout setting returned by :func:`getdefaulttimeout` - is used. If *source_address* is set it must be a tuple of (host, port) - for the socket to bind as a source address before making the connection. - An host of '' or port 0 tells the OS to use the default. - """ - - host, port = address - err = None - for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - sock = None - try: - sock = socket.socket(af, socktype, proto) - - # If provided, set socket level options before connecting. - # This is the only addition urllib3 makes to this function. - _set_socket_options(sock, socket_options) - - if timeout is not socket._GLOBAL_DEFAULT_TIMEOUT: - sock.settimeout(timeout) - if source_address: - sock.bind(source_address) - sock.connect(sa) - return sock - - except socket.error as _: - err = _ - if sock is not None: - sock.close() - sock = None - - if err is not None: - raise err - else: - raise socket.error("getaddrinfo returns an empty list") - - -def _set_socket_options(sock, options): - if options is None: - return - - for opt in options: - sock.setsockopt(*opt) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/util/request.py b/plugin.video.alfa/lib/requests/packages/urllib3/util/request.py deleted file mode 100755 index f877a1cd..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/util/request.py +++ /dev/null @@ -1,71 +0,0 @@ -from base64 import b64encode - -from ..packages.six import b - -ACCEPT_ENCODING = 'gzip,deflate' - - -def make_headers(keep_alive=None, accept_encoding=None, user_agent=None, - basic_auth=None, proxy_basic_auth=None, disable_cache=None): - """ - Shortcuts for generating request headers. - - :param keep_alive: - If ``True``, adds 'connection: keep-alive' header. - - :param accept_encoding: - Can be a boolean, list, or string. - ``True`` translates to 'gzip,deflate'. - List will get joined by comma. - String will be used as provided. - - :param user_agent: - String representing the user-agent you want, such as - "python-urllib3/0.6" - - :param basic_auth: - Colon-separated username:password string for 'authorization: basic ...' - auth header. - - :param proxy_basic_auth: - Colon-separated username:password string for 'proxy-authorization: basic ...' - auth header. - - :param disable_cache: - If ``True``, adds 'cache-control: no-cache' header. - - Example:: - - >>> make_headers(keep_alive=True, user_agent="Batman/1.0") - {'connection': 'keep-alive', 'user-agent': 'Batman/1.0'} - >>> make_headers(accept_encoding=True) - {'accept-encoding': 'gzip,deflate'} - """ - headers = {} - if accept_encoding: - if isinstance(accept_encoding, str): - pass - elif isinstance(accept_encoding, list): - accept_encoding = ','.join(accept_encoding) - else: - accept_encoding = ACCEPT_ENCODING - headers['accept-encoding'] = accept_encoding - - if user_agent: - headers['user-agent'] = user_agent - - if keep_alive: - headers['connection'] = 'keep-alive' - - if basic_auth: - headers['authorization'] = 'Basic ' + \ - b64encode(b(basic_auth)).decode('utf-8') - - if proxy_basic_auth: - headers['proxy-authorization'] = 'Basic ' + \ - b64encode(b(proxy_basic_auth)).decode('utf-8') - - if disable_cache: - headers['cache-control'] = 'no-cache' - - return headers diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/util/response.py b/plugin.video.alfa/lib/requests/packages/urllib3/util/response.py deleted file mode 100755 index 242fa675..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/util/response.py +++ /dev/null @@ -1,22 +0,0 @@ -def is_fp_closed(obj): - """ - Checks whether a given file-like object is closed. - - :param obj: - The file-like object to check. - """ - - try: - # Check via the official file-like-object way. - return obj.closed - except AttributeError: - pass - - try: - # Check if the object is a container for another file-like object that - # gets released on exhaustion (e.g. HTTPResponse). - return obj.fp is None - except AttributeError: - pass - - raise ValueError("Unable to determine whether fp is closed.") diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/util/retry.py b/plugin.video.alfa/lib/requests/packages/urllib3/util/retry.py deleted file mode 100755 index 3fb8d545..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/util/retry.py +++ /dev/null @@ -1,285 +0,0 @@ -import time -import logging - -from ..exceptions import ( - ConnectTimeoutError, - MaxRetryError, - ProtocolError, - ReadTimeoutError, - ResponseError, -) -from ..packages import six - - -log = logging.getLogger(__name__) - - -class Retry(object): - """ Retry configuration. - - Each retry attempt will create a new Retry object with updated values, so - they can be safely reused. - - Retries can be defined as a default for a pool:: - - retries = Retry(connect=5, read=2, redirect=5) - http = PoolManager(retries=retries) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool):: - - response = http.request('GET', 'http://example.com/', retries=Retry(10)) - - Retries can be disabled by passing ``False``:: - - response = http.request('GET', 'http://example.com/', retries=False) - - Errors will be wrapped in :class:`~urllib3.exceptions.MaxRetryError` unless - retries are disabled, in which case the causing exception will be raised. - - :param int total: - Total number of retries to allow. Takes precedence over other counts. - - Set to ``None`` to remove this constraint and fall back on other - counts. It's a good idea to set this to some sensibly-high value to - account for unexpected edge cases and avoid infinite retry loops. - - Set to ``0`` to fail on the first retry. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param int connect: - How many connection-related errors to retry on. - - These are errors raised before the request is sent to the remote server, - which we assume has not triggered the server to process the request. - - Set to ``0`` to fail on the first retry of this type. - - :param int read: - How many times to retry on read errors. - - These errors are raised after the request was sent to the server, so the - request may have side-effects. - - Set to ``0`` to fail on the first retry of this type. - - :param int redirect: - How many redirects to perform. Limit this to avoid infinite redirect - loops. - - A redirect is a HTTP response with a status code 301, 302, 303, 307 or - 308. - - Set to ``0`` to fail on the first retry of this type. - - Set to ``False`` to disable and imply ``raise_on_redirect=False``. - - :param iterable method_whitelist: - Set of uppercased HTTP method verbs that we should retry on. - - By default, we only retry on methods which are considered to be - indempotent (multiple requests with the same parameters end with the - same state). See :attr:`Retry.DEFAULT_METHOD_WHITELIST`. - - :param iterable status_forcelist: - A set of HTTP status codes that we should force a retry on. - - By default, this is disabled with ``None``. - - :param float backoff_factor: - A backoff factor to apply between attempts. urllib3 will sleep for:: - - {backoff factor} * (2 ^ ({number of total retries} - 1)) - - seconds. If the backoff_factor is 0.1, then :func:`.sleep` will sleep - for [0.1s, 0.2s, 0.4s, ...] between retries. It will never be longer - than :attr:`Retry.MAX_BACKOFF`. - - By default, backoff is disabled (set to 0). - - :param bool raise_on_redirect: Whether, if the number of redirects is - exhausted, to raise a MaxRetryError, or to return a response with a - response code in the 3xx range. - """ - - DEFAULT_METHOD_WHITELIST = frozenset([ - 'HEAD', 'GET', 'PUT', 'DELETE', 'OPTIONS', 'TRACE']) - - #: Maximum backoff time. - BACKOFF_MAX = 120 - - def __init__(self, total=10, connect=None, read=None, redirect=None, - method_whitelist=DEFAULT_METHOD_WHITELIST, status_forcelist=None, - backoff_factor=0, raise_on_redirect=True, _observed_errors=0): - - self.total = total - self.connect = connect - self.read = read - - if redirect is False or total is False: - redirect = 0 - raise_on_redirect = False - - self.redirect = redirect - self.status_forcelist = status_forcelist or set() - self.method_whitelist = method_whitelist - self.backoff_factor = backoff_factor - self.raise_on_redirect = raise_on_redirect - self._observed_errors = _observed_errors # TODO: use .history instead? - - def new(self, **kw): - params = dict( - total=self.total, - connect=self.connect, read=self.read, redirect=self.redirect, - method_whitelist=self.method_whitelist, - status_forcelist=self.status_forcelist, - backoff_factor=self.backoff_factor, - raise_on_redirect=self.raise_on_redirect, - _observed_errors=self._observed_errors, - ) - params.update(kw) - return type(self)(**params) - - @classmethod - def from_int(cls, retries, redirect=True, default=None): - """ Backwards-compatibility for the old retries format.""" - if retries is None: - retries = default if default is not None else cls.DEFAULT - - if isinstance(retries, Retry): - return retries - - redirect = bool(redirect) and None - new_retries = cls(retries, redirect=redirect) - log.debug("Converted retries value: %r -> %r" % (retries, new_retries)) - return new_retries - - def get_backoff_time(self): - """ Formula for computing the current backoff - - :rtype: float - """ - if self._observed_errors <= 1: - return 0 - - backoff_value = self.backoff_factor * (2 ** (self._observed_errors - 1)) - return min(self.BACKOFF_MAX, backoff_value) - - def sleep(self): - """ Sleep between retry attempts using an exponential backoff. - - By default, the backoff factor is 0 and this method will return - immediately. - """ - backoff = self.get_backoff_time() - if backoff <= 0: - return - time.sleep(backoff) - - def _is_connection_error(self, err): - """ Errors when we're fairly sure that the server did not receive the - request, so it should be safe to retry. - """ - return isinstance(err, ConnectTimeoutError) - - def _is_read_error(self, err): - """ Errors that occur after the request has been started, so we should - assume that the server began processing it. - """ - return isinstance(err, (ReadTimeoutError, ProtocolError)) - - def is_forced_retry(self, method, status_code): - """ Is this method/status code retryable? (Based on method/codes whitelists) - """ - if self.method_whitelist and method.upper() not in self.method_whitelist: - return False - - return self.status_forcelist and status_code in self.status_forcelist - - def is_exhausted(self): - """ Are we out of retries? """ - retry_counts = (self.total, self.connect, self.read, self.redirect) - retry_counts = list(filter(None, retry_counts)) - if not retry_counts: - return False - - return min(retry_counts) < 0 - - def increment(self, method=None, url=None, response=None, error=None, _pool=None, _stacktrace=None): - """ Return a new Retry object with incremented retry counters. - - :param response: A response object, or None, if the server did not - return a response. - :type response: :class:`~urllib3.response.HTTPResponse` - :param Exception error: An error encountered during the request, or - None if the response was received successfully. - - :return: A new ``Retry`` object. - """ - if self.total is False and error: - # Disabled, indicate to re-raise the error. - raise six.reraise(type(error), error, _stacktrace) - - total = self.total - if total is not None: - total -= 1 - - _observed_errors = self._observed_errors - connect = self.connect - read = self.read - redirect = self.redirect - cause = 'unknown' - - if error and self._is_connection_error(error): - # Connect retry? - if connect is False: - raise six.reraise(type(error), error, _stacktrace) - elif connect is not None: - connect -= 1 - _observed_errors += 1 - - elif error and self._is_read_error(error): - # Read retry? - if read is False: - raise six.reraise(type(error), error, _stacktrace) - elif read is not None: - read -= 1 - _observed_errors += 1 - - elif response and response.get_redirect_location(): - # Redirect retry? - if redirect is not None: - redirect -= 1 - cause = 'too many redirects' - - else: - # Incrementing because of a server error like a 500 in - # status_forcelist and a the given method is in the whitelist - _observed_errors += 1 - cause = ResponseError.GENERIC_ERROR - if response and response.status: - cause = ResponseError.SPECIFIC_ERROR.format( - status_code=response.status) - - new_retry = self.new( - total=total, - connect=connect, read=read, redirect=redirect, - _observed_errors=_observed_errors) - - if new_retry.is_exhausted(): - raise MaxRetryError(_pool, url, error or ResponseError(cause)) - - log.debug("Incremented Retry for (url='%s'): %r" % (url, new_retry)) - - return new_retry - - - def __repr__(self): - return ('{cls.__name__}(total={self.total}, connect={self.connect}, ' - 'read={self.read}, redirect={self.redirect})').format( - cls=type(self), self=self) - - -# For backwards compatibility (equivalent to pre-v1.9): -Retry.DEFAULT = Retry(3) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/util/ssl_.py b/plugin.video.alfa/lib/requests/packages/urllib3/util/ssl_.py deleted file mode 100755 index 1d1452aa..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/util/ssl_.py +++ /dev/null @@ -1,280 +0,0 @@ -from binascii import hexlify, unhexlify -from hashlib import md5, sha1, sha256 - -from ..exceptions import SSLError, InsecurePlatformWarning - - -SSLContext = None -HAS_SNI = False -create_default_context = None - -import errno -import warnings - -try: # Test for SSL features - import ssl - from ssl import wrap_socket, CERT_NONE, PROTOCOL_SSLv23 - from ssl import HAS_SNI # Has SNI? -except ImportError: - pass - - -try: - from ssl import OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION -except ImportError: - OP_NO_SSLv2, OP_NO_SSLv3 = 0x1000000, 0x2000000 - OP_NO_COMPRESSION = 0x20000 - -# A secure default. -# Sources for more information on TLS ciphers: -# -# - https://wiki.mozilla.org/Security/Server_Side_TLS -# - https://www.ssllabs.com/projects/best-practices/index.html -# - https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ -# -# The general intent is: -# - Prefer cipher suites that offer perfect forward secrecy (DHE/ECDHE), -# - prefer ECDHE over DHE for better performance, -# - prefer any AES-GCM over any AES-CBC for better performance and security, -# - use 3DES as fallback which is secure but slow, -# - disable NULL authentication, MD5 MACs and DSS for security reasons. -DEFAULT_CIPHERS = ( - 'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:' - 'DH+HIGH:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+HIGH:RSA+3DES:!aNULL:' - '!eNULL:!MD5' -) - -try: - from ssl import SSLContext # Modern SSL? -except ImportError: - import sys - - class SSLContext(object): # Platform-specific: Python 2 & 3.1 - supports_set_ciphers = ((2, 7) <= sys.version_info < (3,) or - (3, 2) <= sys.version_info) - - def __init__(self, protocol_version): - self.protocol = protocol_version - # Use default values from a real SSLContext - self.check_hostname = False - self.verify_mode = ssl.CERT_NONE - self.ca_certs = None - self.options = 0 - self.certfile = None - self.keyfile = None - self.ciphers = None - - def load_cert_chain(self, certfile, keyfile): - self.certfile = certfile - self.keyfile = keyfile - - def load_verify_locations(self, location): - self.ca_certs = location - - def set_ciphers(self, cipher_suite): - if not self.supports_set_ciphers: - raise TypeError( - 'Your version of Python does not support setting ' - 'a custom cipher suite. Please upgrade to Python ' - '2.7, 3.2, or later if you need this functionality.' - ) - self.ciphers = cipher_suite - - def wrap_socket(self, socket, server_hostname=None): - warnings.warn( - 'A true SSLContext object is not available. This prevents ' - 'urllib3 from configuring SSL appropriately and may cause ' - 'certain SSL connections to fail. For more information, see ' - 'https://urllib3.readthedocs.org/en/latest/security.html' - '#insecureplatformwarning.', - InsecurePlatformWarning - ) - kwargs = { - 'keyfile': self.keyfile, - 'certfile': self.certfile, - 'ca_certs': self.ca_certs, - 'cert_reqs': self.verify_mode, - 'ssl_version': self.protocol, - } - if self.supports_set_ciphers: # Platform-specific: Python 2.7+ - return wrap_socket(socket, ciphers=self.ciphers, **kwargs) - else: # Platform-specific: Python 2.6 - return wrap_socket(socket, **kwargs) - - -def assert_fingerprint(cert, fingerprint): - """ - Checks if given fingerprint matches the supplied certificate. - - :param cert: - Certificate as bytes object. - :param fingerprint: - Fingerprint as string of hexdigits, can be interspersed by colons. - """ - - # Maps the length of a digest to a possible hash function producing - # this digest. - hashfunc_map = { - 16: md5, - 20: sha1, - 32: sha256, - } - - fingerprint = fingerprint.replace(':', '').lower() - digest_length, odd = divmod(len(fingerprint), 2) - - if odd or digest_length not in hashfunc_map: - raise SSLError('Fingerprint is of invalid length.') - - # We need encode() here for py32; works on py2 and p33. - fingerprint_bytes = unhexlify(fingerprint.encode()) - - hashfunc = hashfunc_map[digest_length] - - cert_digest = hashfunc(cert).digest() - - if not cert_digest == fingerprint_bytes: - raise SSLError('Fingerprints did not match. Expected "{0}", got "{1}".' - .format(hexlify(fingerprint_bytes), - hexlify(cert_digest))) - - -def resolve_cert_reqs(candidate): - """ - Resolves the argument to a numeric constant, which can be passed to - the wrap_socket function/method from the ssl module. - Defaults to :data:`ssl.CERT_NONE`. - If given a string it is assumed to be the name of the constant in the - :mod:`ssl` module or its abbrevation. - (So you can specify `REQUIRED` instead of `CERT_REQUIRED`. - If it's neither `None` nor a string we assume it is already the numeric - constant which can directly be passed to wrap_socket. - """ - if candidate is None: - return CERT_NONE - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, 'CERT_' + candidate) - return res - - return candidate - - -def resolve_ssl_version(candidate): - """ - like resolve_cert_reqs - """ - if candidate is None: - return PROTOCOL_SSLv23 - - if isinstance(candidate, str): - res = getattr(ssl, candidate, None) - if res is None: - res = getattr(ssl, 'PROTOCOL_' + candidate) - return res - - return candidate - - -def create_urllib3_context(ssl_version=None, cert_reqs=None, - options=None, ciphers=None): - """All arguments have the same meaning as ``ssl_wrap_socket``. - - By default, this function does a lot of the same work that - ``ssl.create_default_context`` does on Python 3.4+. It: - - - Disables SSLv2, SSLv3, and compression - - Sets a restricted set of server ciphers - - If you wish to enable SSLv3, you can do:: - - from urllib3.util import ssl_ - context = ssl_.create_urllib3_context() - context.options &= ~ssl_.OP_NO_SSLv3 - - You can do the same to enable compression (substituting ``COMPRESSION`` - for ``SSLv3`` in the last line above). - - :param ssl_version: - The desired protocol version to use. This will default to - PROTOCOL_SSLv23 which will negotiate the highest protocol that both - the server and your installation of OpenSSL support. - :param cert_reqs: - Whether to require the certificate verification. This defaults to - ``ssl.CERT_REQUIRED``. - :param options: - Specific OpenSSL options. These default to ``ssl.OP_NO_SSLv2``, - ``ssl.OP_NO_SSLv3``, ``ssl.OP_NO_COMPRESSION``. - :param ciphers: - Which cipher suites to allow the server to select. - :returns: - Constructed SSLContext object with specified options - :rtype: SSLContext - """ - context = SSLContext(ssl_version or ssl.PROTOCOL_SSLv23) - - # Setting the default here, as we may have no ssl module on import - cert_reqs = ssl.CERT_REQUIRED if cert_reqs is None else cert_reqs - - if options is None: - options = 0 - # SSLv2 is easily broken and is considered harmful and dangerous - options |= OP_NO_SSLv2 - # SSLv3 has several problems and is now dangerous - options |= OP_NO_SSLv3 - # Disable compression to prevent CRIME attacks for OpenSSL 1.0+ - # (issue #309) - options |= OP_NO_COMPRESSION - - context.options |= options - - if getattr(context, 'supports_set_ciphers', True): # Platform-specific: Python 2.6 - context.set_ciphers(ciphers or DEFAULT_CIPHERS) - - context.verify_mode = cert_reqs - if getattr(context, 'check_hostname', None) is not None: # Platform-specific: Python 3.2 - # We do our own verification, including fingerprints and alternative - # hostnames. So disable it here - context.check_hostname = False - return context - - -def ssl_wrap_socket(sock, keyfile=None, certfile=None, cert_reqs=None, - ca_certs=None, server_hostname=None, - ssl_version=None, ciphers=None, ssl_context=None): - """ - All arguments except for server_hostname and ssl_context have the same - meaning as they do when using :func:`ssl.wrap_socket`. - - :param server_hostname: - When SNI is supported, the expected hostname of the certificate - :param ssl_context: - A pre-made :class:`SSLContext` object. If none is provided, one will - be created using :func:`create_urllib3_context`. - :param ciphers: - A string of ciphers we wish the client to support. This is not - supported on Python 2.6 as the ssl module does not support it. - """ - context = ssl_context - if context is None: - context = create_urllib3_context(ssl_version, cert_reqs, - ciphers=ciphers) - - if ca_certs: - try: - context.load_verify_locations(ca_certs) - except IOError as e: # Platform-specific: Python 2.6, 2.7, 3.2 - raise SSLError(e) - # Py33 raises FileNotFoundError which subclasses OSError - # These are not equivalent unless we check the errno attribute - except OSError as e: # Platform-specific: Python 3.3 and beyond - if e.errno == errno.ENOENT: - raise SSLError(e) - raise - if certfile: - context.load_cert_chain(certfile, keyfile) - if HAS_SNI: # Platform-specific: OpenSSL with enabled SNI - return context.wrap_socket(sock, server_hostname=server_hostname) - return context.wrap_socket(sock) diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/util/timeout.py b/plugin.video.alfa/lib/requests/packages/urllib3/util/timeout.py deleted file mode 100755 index 16a3d2e0..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/util/timeout.py +++ /dev/null @@ -1,240 +0,0 @@ -# The default socket timeout, used by httplib to indicate that no timeout was -# specified by the user -from socket import _GLOBAL_DEFAULT_TIMEOUT -import time - -from ..exceptions import TimeoutStateError - -# A sentinel value to indicate that no timeout was specified by the user in -# urllib3 -_Default = object() - -def current_time(): - """ - Retrieve the current time. This function is mocked out in unit testing. - """ - return time.time() - - -class Timeout(object): - """ Timeout configuration. - - Timeouts can be defined as a default for a pool:: - - timeout = Timeout(connect=2.0, read=7.0) - http = PoolManager(timeout=timeout) - response = http.request('GET', 'http://example.com/') - - Or per-request (which overrides the default for the pool):: - - response = http.request('GET', 'http://example.com/', timeout=Timeout(10)) - - Timeouts can be disabled by setting all the parameters to ``None``:: - - no_timeout = Timeout(connect=None, read=None) - response = http.request('GET', 'http://example.com/, timeout=no_timeout) - - - :param total: - This combines the connect and read timeouts into one; the read timeout - will be set to the time leftover from the connect attempt. In the - event that both a connect timeout and a total are specified, or a read - timeout and a total are specified, the shorter timeout will be applied. - - Defaults to None. - - :type total: integer, float, or None - - :param connect: - The maximum amount of time to wait for a connection attempt to a server - to succeed. Omitting the parameter will default the connect timeout to - the system default, probably `the global default timeout in socket.py - `_. - None will set an infinite timeout for connection attempts. - - :type connect: integer, float, or None - - :param read: - The maximum amount of time to wait between consecutive - read operations for a response from the server. Omitting - the parameter will default the read timeout to the system - default, probably `the global default timeout in socket.py - `_. - None will set an infinite timeout. - - :type read: integer, float, or None - - .. note:: - - Many factors can affect the total amount of time for urllib3 to return - an HTTP response. - - For example, Python's DNS resolver does not obey the timeout specified - on the socket. Other factors that can affect total request time include - high CPU load, high swap, the program running at a low priority level, - or other behaviors. - - In addition, the read and total timeouts only measure the time between - read operations on the socket connecting the client and the server, - not the total amount of time for the request to return a complete - response. For most requests, the timeout is raised because the server - has not sent the first byte in the specified time. This is not always - the case; if a server streams one byte every fifteen seconds, a timeout - of 20 seconds will not trigger, even though the request will take - several minutes to complete. - - If your goal is to cut off any request after a set amount of wall clock - time, consider having a second "watcher" thread to cut off a slow - request. - """ - - #: A sentinel object representing the default timeout value - DEFAULT_TIMEOUT = _GLOBAL_DEFAULT_TIMEOUT - - def __init__(self, total=None, connect=_Default, read=_Default): - self._connect = self._validate_timeout(connect, 'connect') - self._read = self._validate_timeout(read, 'read') - self.total = self._validate_timeout(total, 'total') - self._start_connect = None - - def __str__(self): - return '%s(connect=%r, read=%r, total=%r)' % ( - type(self).__name__, self._connect, self._read, self.total) - - @classmethod - def _validate_timeout(cls, value, name): - """ Check that a timeout attribute is valid. - - :param value: The timeout value to validate - :param name: The name of the timeout attribute to validate. This is - used to specify in error messages. - :return: The validated and casted version of the given value. - :raises ValueError: If the type is not an integer or a float, or if it - is a numeric value less than zero. - """ - if value is _Default: - return cls.DEFAULT_TIMEOUT - - if value is None or value is cls.DEFAULT_TIMEOUT: - return value - - try: - float(value) - except (TypeError, ValueError): - raise ValueError("Timeout value %s was %s, but it must be an " - "int or float." % (name, value)) - - try: - if value < 0: - raise ValueError("Attempted to set %s timeout to %s, but the " - "timeout cannot be set to a value less " - "than 0." % (name, value)) - except TypeError: # Python 3 - raise ValueError("Timeout value %s was %s, but it must be an " - "int or float." % (name, value)) - - return value - - @classmethod - def from_float(cls, timeout): - """ Create a new Timeout from a legacy timeout value. - - The timeout value used by httplib.py sets the same timeout on the - connect(), and recv() socket requests. This creates a :class:`Timeout` - object that sets the individual timeouts to the ``timeout`` value - passed to this function. - - :param timeout: The legacy timeout value. - :type timeout: integer, float, sentinel default object, or None - :return: Timeout object - :rtype: :class:`Timeout` - """ - return Timeout(read=timeout, connect=timeout) - - def clone(self): - """ Create a copy of the timeout object - - Timeout properties are stored per-pool but each request needs a fresh - Timeout object to ensure each one has its own start/stop configured. - - :return: a copy of the timeout object - :rtype: :class:`Timeout` - """ - # We can't use copy.deepcopy because that will also create a new object - # for _GLOBAL_DEFAULT_TIMEOUT, which socket.py uses as a sentinel to - # detect the user default. - return Timeout(connect=self._connect, read=self._read, - total=self.total) - - def start_connect(self): - """ Start the timeout clock, used during a connect() attempt - - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to start a timer that has been started already. - """ - if self._start_connect is not None: - raise TimeoutStateError("Timeout timer has already been started.") - self._start_connect = current_time() - return self._start_connect - - def get_connect_duration(self): - """ Gets the time elapsed since the call to :meth:`start_connect`. - - :return: Elapsed time. - :rtype: float - :raises urllib3.exceptions.TimeoutStateError: if you attempt - to get duration for a timer that hasn't been started. - """ - if self._start_connect is None: - raise TimeoutStateError("Can't get connect duration for timer " - "that has not started.") - return current_time() - self._start_connect - - @property - def connect_timeout(self): - """ Get the value to use when setting a connection timeout. - - This will be a positive float or integer, the value None - (never timeout), or the default system timeout. - - :return: Connect timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - """ - if self.total is None: - return self._connect - - if self._connect is None or self._connect is self.DEFAULT_TIMEOUT: - return self.total - - return min(self._connect, self.total) - - @property - def read_timeout(self): - """ Get the value for the read timeout. - - This assumes some time has elapsed in the connection timeout and - computes the read timeout appropriately. - - If self.total is set, the read timeout is dependent on the amount of - time taken by the connect timeout. If the connection time has not been - established, a :exc:`~urllib3.exceptions.TimeoutStateError` will be - raised. - - :return: Value to use for the read timeout. - :rtype: int, float, :attr:`Timeout.DEFAULT_TIMEOUT` or None - :raises urllib3.exceptions.TimeoutStateError: If :meth:`start_connect` - has not yet been called on this object. - """ - if (self.total is not None and - self.total is not self.DEFAULT_TIMEOUT and - self._read is not None and - self._read is not self.DEFAULT_TIMEOUT): - # In case the connect timeout has not yet been established. - if self._start_connect is None: - return self._read - return max(0, min(self.total - self.get_connect_duration(), - self._read)) - elif self.total is not None and self.total is not self.DEFAULT_TIMEOUT: - return max(0, self.total - self.get_connect_duration()) - else: - return self._read diff --git a/plugin.video.alfa/lib/requests/packages/urllib3/util/url.py b/plugin.video.alfa/lib/requests/packages/urllib3/util/url.py deleted file mode 100755 index 129d7469..00000000 --- a/plugin.video.alfa/lib/requests/packages/urllib3/util/url.py +++ /dev/null @@ -1,214 +0,0 @@ -from collections import namedtuple - -from ..exceptions import LocationParseError - - -url_attrs = ['scheme', 'auth', 'host', 'port', 'path', 'query', 'fragment'] - - -class Url(namedtuple('Url', url_attrs)): - """ - Datastructure for representing an HTTP URL. Used as a return value for - :func:`parse_url`. - """ - slots = () - - def __new__(cls, scheme=None, auth=None, host=None, port=None, path=None, - query=None, fragment=None): - if path and not path.startswith('/'): - path = '/' + path - return super(Url, cls).__new__(cls, scheme, auth, host, port, path, - query, fragment) - - @property - def hostname(self): - """For backwards-compatibility with urlparse. We're nice like that.""" - return self.host - - @property - def request_uri(self): - """Absolute path including the query string.""" - uri = self.path or '/' - - if self.query is not None: - uri += '?' + self.query - - return uri - - @property - def netloc(self): - """Network location including host and port""" - if self.port: - return '%s:%d' % (self.host, self.port) - return self.host - - @property - def url(self): - """ - Convert self into a url - - This function should more or less round-trip with :func:`.parse_url`. The - returned url may not be exactly the same as the url inputted to - :func:`.parse_url`, but it should be equivalent by the RFC (e.g., urls - with a blank port will have : removed). - - Example: :: - - >>> U = parse_url('http://google.com/mail/') - >>> U.url - 'http://google.com/mail/' - >>> Url('http', 'username:password', 'host.com', 80, - ... '/path', 'query', 'fragment').url - 'http://username:password@host.com:80/path?query#fragment' - """ - scheme, auth, host, port, path, query, fragment = self - url = '' - - # We use "is not None" we want things to happen with empty strings (or 0 port) - if scheme is not None: - url += scheme + '://' - if auth is not None: - url += auth + '@' - if host is not None: - url += host - if port is not None: - url += ':' + str(port) - if path is not None: - url += path - if query is not None: - url += '?' + query - if fragment is not None: - url += '#' + fragment - - return url - - def __str__(self): - return self.url - -def split_first(s, delims): - """ - Given a string and an iterable of delimiters, split on the first found - delimiter. Return two split parts and the matched delimiter. - - If not found, then the first part is the full input string. - - Example:: - - >>> split_first('foo/bar?baz', '?/=') - ('foo', 'bar?baz', '/') - >>> split_first('foo/bar?baz', '123') - ('foo/bar?baz', '', None) - - Scales linearly with number of delims. Not ideal for large number of delims. - """ - min_idx = None - min_delim = None - for d in delims: - idx = s.find(d) - if idx < 0: - continue - - if min_idx is None or idx < min_idx: - min_idx = idx - min_delim = d - - if min_idx is None or min_idx < 0: - return s, '', None - - return s[:min_idx], s[min_idx+1:], min_delim - - -def parse_url(url): - """ - Given a url, return a parsed :class:`.Url` namedtuple. Best-effort is - performed to parse incomplete urls. Fields not provided will be None. - - Partly backwards-compatible with :mod:`urlparse`. - - Example:: - - >>> parse_url('http://google.com/mail/') - Url(scheme='http', host='google.com', port=None, path='/mail/', ...) - >>> parse_url('google.com:80') - Url(scheme=None, host='google.com', port=80, path=None, ...) - >>> parse_url('/foo?bar') - Url(scheme=None, host=None, port=None, path='/foo', query='bar', ...) - """ - - # While this code has overlap with stdlib's urlparse, it is much - # simplified for our needs and less annoying. - # Additionally, this implementations does silly things to be optimal - # on CPython. - - if not url: - # Empty - return Url() - - scheme = None - auth = None - host = None - port = None - path = None - fragment = None - query = None - - # Scheme - if '://' in url: - scheme, url = url.split('://', 1) - - # Find the earliest Authority Terminator - # (http://tools.ietf.org/html/rfc3986#section-3.2) - url, path_, delim = split_first(url, ['/', '?', '#']) - - if delim: - # Reassemble the path - path = delim + path_ - - # Auth - if '@' in url: - # Last '@' denotes end of auth part - auth, url = url.rsplit('@', 1) - - # IPv6 - if url and url[0] == '[': - host, url = url.split(']', 1) - host += ']' - - # Port - if ':' in url: - _host, port = url.split(':', 1) - - if not host: - host = _host - - if port: - # If given, ports must be integers. - if not port.isdigit(): - raise LocationParseError(url) - port = int(port) - else: - # Blank ports are cool, too. (rfc3986#section-3.2.3) - port = None - - elif not host and url: - host = url - - if not path: - return Url(scheme, auth, host, port, path, query, fragment) - - # Fragment - if '#' in path: - path, fragment = path.split('#', 1) - - # Query - if '?' in path: - path, query = path.split('?', 1) - - return Url(scheme, auth, host, port, path, query, fragment) - -def get_host(url): - """ - Deprecated. Use :func:`.parse_url` instead. - """ - p = parse_url(url) - return p.scheme or 'http', p.hostname, p.port diff --git a/plugin.video.alfa/lib/requests/sessions.py b/plugin.video.alfa/lib/requests/sessions.py deleted file mode 100755 index 18e5f8d8..00000000 --- a/plugin.video.alfa/lib/requests/sessions.py +++ /dev/null @@ -1,677 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.session -~~~~~~~~~~~~~~~~ - -This module provides a Session object to manage and persist settings across -requests (cookies, auth, proxies). - -""" -import os -from collections import Mapping -from datetime import datetime - -from .auth import _basic_auth_str -from .compat import cookielib, OrderedDict, urljoin, urlparse -from .cookies import ( - cookiejar_from_dict, extract_cookies_to_jar, RequestsCookieJar, merge_cookies) -from .models import Request, PreparedRequest, DEFAULT_REDIRECT_LIMIT -from .hooks import default_hooks, dispatch_hook -from .utils import to_key_val_list, default_headers, to_native_string -from .exceptions import ( - TooManyRedirects, InvalidSchema, ChunkedEncodingError, ContentDecodingError) -from .packages.urllib3._collections import RecentlyUsedContainer -from .structures import CaseInsensitiveDict - -from .adapters import HTTPAdapter - -from .utils import ( - requote_uri, get_environ_proxies, get_netrc_auth, should_bypass_proxies, - get_auth_from_url -) - -from .status_codes import codes - -# formerly defined here, reexposed here for backward compatibility -from .models import REDIRECT_STATI - -REDIRECT_CACHE_SIZE = 1000 - - -def merge_setting(request_setting, session_setting, dict_class=OrderedDict): - """ - Determines appropriate setting for a given request, taking into account the - explicit setting on that request, and the setting in the session. If a - setting is a dictionary, they will be merged together using `dict_class` - """ - - if session_setting is None: - return request_setting - - if request_setting is None: - return session_setting - - # Bypass if not a dictionary (e.g. verify) - if not ( - isinstance(session_setting, Mapping) and - isinstance(request_setting, Mapping) - ): - return request_setting - - merged_setting = dict_class(to_key_val_list(session_setting)) - merged_setting.update(to_key_val_list(request_setting)) - - # Remove keys that are set to None. - for (k, v) in request_setting.items(): - if v is None: - del merged_setting[k] - - merged_setting = dict((k, v) for (k, v) in merged_setting.items() if v is not None) - - return merged_setting - - -def merge_hooks(request_hooks, session_hooks, dict_class=OrderedDict): - """ - Properly merges both requests and session hooks. - - This is necessary because when request_hooks == {'response': []}, the - merge breaks Session hooks entirely. - """ - if session_hooks is None or session_hooks.get('response') == []: - return request_hooks - - if request_hooks is None or request_hooks.get('response') == []: - return session_hooks - - return merge_setting(request_hooks, session_hooks, dict_class) - - -class SessionRedirectMixin(object): - def resolve_redirects(self, resp, req, stream=False, timeout=None, - verify=True, cert=None, proxies=None, **adapter_kwargs): - """Receives a Response. Returns a generator of Responses.""" - - i = 0 - hist = [] # keep track of history - - while resp.is_redirect: - prepared_request = req.copy() - - if i > 0: - # Update history and keep track of redirects. - hist.append(resp) - new_hist = list(hist) - resp.history = new_hist - - try: - resp.content # Consume socket so it can be released - except (ChunkedEncodingError, ContentDecodingError, RuntimeError): - resp.raw.read(decode_content=False) - - if i >= self.max_redirects: - raise TooManyRedirects('Exceeded %s redirects.' % self.max_redirects) - - # Release the connection back into the pool. - resp.close() - - url = resp.headers['location'] - method = req.method - - # Handle redirection without scheme (see: RFC 1808 Section 4) - if url.startswith('//'): - parsed_rurl = urlparse(resp.url) - url = '%s:%s' % (parsed_rurl.scheme, url) - - # The scheme should be lower case... - parsed = urlparse(url) - url = parsed.geturl() - - # Facilitate relative 'location' headers, as allowed by RFC 7231. - # (e.g. '/path/to/resource' instead of 'http://domain.tld/path/to/resource') - # Compliant with RFC3986, we percent encode the url. - if not parsed.netloc: - url = urljoin(resp.url, requote_uri(url)) - else: - url = requote_uri(url) - - prepared_request.url = to_native_string(url) - # Cache the url, unless it redirects to itself. - if resp.is_permanent_redirect and req.url != prepared_request.url: - self.redirect_cache[req.url] = prepared_request.url - - # http://tools.ietf.org/html/rfc7231#section-6.4.4 - if (resp.status_code == codes.see_other and - method != 'HEAD'): - method = 'GET' - - # Do what the browsers do, despite standards... - # First, turn 302s into GETs. - if resp.status_code == codes.found and method != 'HEAD': - method = 'GET' - - # Second, if a POST is responded to with a 301, turn it into a GET. - # This bizarre behaviour is explained in Issue 1704. - if resp.status_code == codes.moved and method == 'POST': - method = 'GET' - - prepared_request.method = method - - # https://github.com/kennethreitz/requests/issues/1084 - if resp.status_code not in (codes.temporary_redirect, codes.permanent_redirect): - if 'Content-Length' in prepared_request.headers: - del prepared_request.headers['Content-Length'] - - prepared_request.body = None - - headers = prepared_request.headers - try: - del headers['Cookie'] - except KeyError: - pass - - # Extract any cookies sent on the response to the cookiejar - # in the new request. Because we've mutated our copied prepared - # request, use the old one that we haven't yet touched. - extract_cookies_to_jar(prepared_request._cookies, req, resp.raw) - prepared_request._cookies.update(self.cookies) - prepared_request.prepare_cookies(prepared_request._cookies) - - # Rebuild auth and proxy information. - proxies = self.rebuild_proxies(prepared_request, proxies) - self.rebuild_auth(prepared_request, resp) - - # Override the original request. - req = prepared_request - - resp = self.send( - req, - stream=stream, - timeout=timeout, - verify=verify, - cert=cert, - proxies=proxies, - allow_redirects=False, - **adapter_kwargs - ) - - extract_cookies_to_jar(self.cookies, prepared_request, resp.raw) - - i += 1 - yield resp - - def rebuild_auth(self, prepared_request, response): - """ - When being redirected we may want to strip authentication from the - request to avoid leaking credentials. This method intelligently removes - and reapplies authentication where possible to avoid credential loss. - """ - headers = prepared_request.headers - url = prepared_request.url - - if 'Authorization' in headers: - # If we get redirected to a new host, we should strip out any - # authentication headers. - original_parsed = urlparse(response.request.url) - redirect_parsed = urlparse(url) - - if (original_parsed.hostname != redirect_parsed.hostname): - del headers['Authorization'] - - # .netrc might have more auth for us on our new host. - new_auth = get_netrc_auth(url) if self.trust_env else None - if new_auth is not None: - prepared_request.prepare_auth(new_auth) - - return - - def rebuild_proxies(self, prepared_request, proxies): - """ - This method re-evaluates the proxy configuration by considering the - environment variables. If we are redirected to a URL covered by - NO_PROXY, we strip the proxy configuration. Otherwise, we set missing - proxy keys for this URL (in case they were stripped by a previous - redirect). - - This method also replaces the Proxy-Authorization header where - necessary. - """ - headers = prepared_request.headers - url = prepared_request.url - scheme = urlparse(url).scheme - new_proxies = proxies.copy() if proxies is not None else {} - - if self.trust_env and not should_bypass_proxies(url): - environ_proxies = get_environ_proxies(url) - - proxy = environ_proxies.get(scheme) - - if proxy: - new_proxies.setdefault(scheme, environ_proxies[scheme]) - - if 'Proxy-Authorization' in headers: - del headers['Proxy-Authorization'] - - try: - username, password = get_auth_from_url(new_proxies[scheme]) - except KeyError: - username, password = None, None - - if username and password: - headers['Proxy-Authorization'] = _basic_auth_str(username, password) - - return new_proxies - - -class Session(SessionRedirectMixin): - """A Requests session. - - Provides cookie persistence, connection-pooling, and configuration. - - Basic Usage:: - - >>> import requests - >>> s = requests.Session() - >>> s.get('http://httpbin.org/get') - 200 - """ - - __attrs__ = [ - 'headers', 'cookies', 'auth', 'proxies', 'hooks', 'params', 'verify', - 'cert', 'prefetch', 'adapters', 'stream', 'trust_env', - 'max_redirects', - ] - - def __init__(self): - - #: A case-insensitive dictionary of headers to be sent on each - #: :class:`Request ` sent from this - #: :class:`Session `. - self.headers = default_headers() - - #: Default Authentication tuple or object to attach to - #: :class:`Request `. - self.auth = None - - #: Dictionary mapping protocol to the URL of the proxy (e.g. - #: {'http': 'foo.bar:3128'}) to be used on each - #: :class:`Request `. - self.proxies = {} - - #: Event-handling hooks. - self.hooks = default_hooks() - - #: Dictionary of querystring data to attach to each - #: :class:`Request `. The dictionary values may be lists for - #: representing multivalued query parameters. - self.params = {} - - #: Stream response content default. - self.stream = False - - #: SSL Verification default. - self.verify = True - - #: SSL certificate default. - self.cert = None - - #: Maximum number of redirects allowed. If the request exceeds this - #: limit, a :class:`TooManyRedirects` exception is raised. - self.max_redirects = DEFAULT_REDIRECT_LIMIT - - #: Should we trust the environment? - self.trust_env = True - - #: A CookieJar containing all currently outstanding cookies set on this - #: session. By default it is a - #: :class:`RequestsCookieJar `, but - #: may be any other ``cookielib.CookieJar`` compatible object. - self.cookies = cookiejar_from_dict({}) - - # Default connection adapters. - self.adapters = OrderedDict() - self.mount('https://', HTTPAdapter()) - self.mount('http://', HTTPAdapter()) - - # Only store 1000 redirects to prevent using infinite memory - self.redirect_cache = RecentlyUsedContainer(REDIRECT_CACHE_SIZE) - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def prepare_request(self, request): - """Constructs a :class:`PreparedRequest ` for - transmission and returns it. The :class:`PreparedRequest` has settings - merged from the :class:`Request ` instance and those of the - :class:`Session`. - - :param request: :class:`Request` instance to prepare with this - session's settings. - """ - cookies = request.cookies or {} - - # Bootstrap CookieJar. - if not isinstance(cookies, cookielib.CookieJar): - cookies = cookiejar_from_dict(cookies) - - # Merge with session cookies - merged_cookies = merge_cookies( - merge_cookies(RequestsCookieJar(), self.cookies), cookies) - - - # Set environment's basic authentication if not explicitly set. - auth = request.auth - if self.trust_env and not auth and not self.auth: - auth = get_netrc_auth(request.url) - - p = PreparedRequest() - p.prepare( - method=request.method.upper(), - url=request.url, - files=request.files, - data=request.data, - json=request.json, - headers=merge_setting(request.headers, self.headers, dict_class=CaseInsensitiveDict), - params=merge_setting(request.params, self.params), - auth=merge_setting(auth, self.auth), - cookies=merged_cookies, - hooks=merge_hooks(request.hooks, self.hooks), - ) - return p - - def request(self, method, url, - params=None, - data=None, - headers=None, - cookies=None, - files=None, - auth=None, - timeout=None, - allow_redirects=True, - proxies=None, - hooks=None, - stream=None, - verify=None, - cert=None, - json=None): - """Constructs a :class:`Request `, prepares it and sends it. - Returns :class:`Response ` object. - - :param method: method for the new :class:`Request` object. - :param url: URL for the new :class:`Request` object. - :param params: (optional) Dictionary or bytes to be sent in the query - string for the :class:`Request`. - :param data: (optional) Dictionary or bytes to send in the body of the - :class:`Request`. - :param json: (optional) json to send in the body of the - :class:`Request`. - :param headers: (optional) Dictionary of HTTP Headers to send with the - :class:`Request`. - :param cookies: (optional) Dict or CookieJar object to send with the - :class:`Request`. - :param files: (optional) Dictionary of ``'filename': file-like-objects`` - for multipart encoding upload. - :param auth: (optional) Auth tuple or callable to enable - Basic/Digest/Custom HTTP Auth. - :param timeout: (optional) How long to wait for the server to send - data before giving up, as a float, or a (`connect timeout, read - timeout `_) tuple. - :type timeout: float or tuple - :param allow_redirects: (optional) Set to True by default. - :type allow_redirects: bool - :param proxies: (optional) Dictionary mapping protocol to the URL of - the proxy. - :param stream: (optional) whether to immediately download the response - content. Defaults to ``False``. - :param verify: (optional) if ``True``, the SSL cert will be verified. - A CA_BUNDLE path can also be provided. - :param cert: (optional) if String, path to ssl client cert file (.pem). - If Tuple, ('cert', 'key') pair. - """ - - method = to_native_string(method) - - # Create the Request. - req = Request( - method = method.upper(), - url = url, - headers = headers, - files = files, - data = data or {}, - json = json, - params = params or {}, - auth = auth, - cookies = cookies, - hooks = hooks, - ) - prep = self.prepare_request(req) - - proxies = proxies or {} - - settings = self.merge_environment_settings( - prep.url, proxies, stream, verify, cert - ) - - # Send the request. - send_kwargs = { - 'timeout': timeout, - 'allow_redirects': allow_redirects, - } - send_kwargs.update(settings) - resp = self.send(prep, **send_kwargs) - - return resp - - def get(self, url, **kwargs): - """Sends a GET request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - """ - - kwargs.setdefault('allow_redirects', True) - return self.request('GET', url, **kwargs) - - def options(self, url, **kwargs): - """Sends a OPTIONS request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - """ - - kwargs.setdefault('allow_redirects', True) - return self.request('OPTIONS', url, **kwargs) - - def head(self, url, **kwargs): - """Sends a HEAD request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - """ - - kwargs.setdefault('allow_redirects', False) - return self.request('HEAD', url, **kwargs) - - def post(self, url, data=None, json=None, **kwargs): - """Sends a POST request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param json: (optional) json to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - """ - - return self.request('POST', url, data=data, json=json, **kwargs) - - def put(self, url, data=None, **kwargs): - """Sends a PUT request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - """ - - return self.request('PUT', url, data=data, **kwargs) - - def patch(self, url, data=None, **kwargs): - """Sends a PATCH request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param data: (optional) Dictionary, bytes, or file-like object to send in the body of the :class:`Request`. - :param \*\*kwargs: Optional arguments that ``request`` takes. - """ - - return self.request('PATCH', url, data=data, **kwargs) - - def delete(self, url, **kwargs): - """Sends a DELETE request. Returns :class:`Response` object. - - :param url: URL for the new :class:`Request` object. - :param \*\*kwargs: Optional arguments that ``request`` takes. - """ - - return self.request('DELETE', url, **kwargs) - - def send(self, request, **kwargs): - """Send a given PreparedRequest.""" - # Set defaults that the hooks can utilize to ensure they always have - # the correct parameters to reproduce the previous request. - kwargs.setdefault('stream', self.stream) - kwargs.setdefault('verify', self.verify) - kwargs.setdefault('cert', self.cert) - kwargs.setdefault('proxies', self.proxies) - - # It's possible that users might accidentally send a Request object. - # Guard against that specific failure case. - if not isinstance(request, PreparedRequest): - raise ValueError('You can only send PreparedRequests.') - - checked_urls = set() - while request.url in self.redirect_cache: - checked_urls.add(request.url) - new_url = self.redirect_cache.get(request.url) - if new_url in checked_urls: - break - request.url = new_url - - # Set up variables needed for resolve_redirects and dispatching of hooks - allow_redirects = kwargs.pop('allow_redirects', True) - stream = kwargs.get('stream') - hooks = request.hooks - - # Get the appropriate adapter to use - adapter = self.get_adapter(url=request.url) - - # Start time (approximately) of the request - start = datetime.utcnow() - - # Send the request - r = adapter.send(request, **kwargs) - - # Total elapsed time of the request (approximately) - r.elapsed = datetime.utcnow() - start - - # Response manipulation hooks - r = dispatch_hook('response', hooks, r, **kwargs) - - # Persist cookies - if r.history: - - # If the hooks create history then we want those cookies too - for resp in r.history: - extract_cookies_to_jar(self.cookies, resp.request, resp.raw) - - extract_cookies_to_jar(self.cookies, request, r.raw) - - # Redirect resolving generator. - gen = self.resolve_redirects(r, request, **kwargs) - - # Resolve redirects if allowed. - history = [resp for resp in gen] if allow_redirects else [] - - # Shuffle things around if there's history. - if history: - # Insert the first (original) request at the start - history.insert(0, r) - # Get the last request made - r = history.pop() - r.history = history - - if not stream: - r.content - - return r - - def merge_environment_settings(self, url, proxies, stream, verify, cert): - """Check the environment and merge it with some settings.""" - # Gather clues from the surrounding environment. - if self.trust_env: - # Set environment's proxies. - env_proxies = get_environ_proxies(url) or {} - for (k, v) in env_proxies.items(): - proxies.setdefault(k, v) - - # Look for requests environment configuration and be compatible - # with cURL. - if verify is True or verify is None: - verify = (os.environ.get('REQUESTS_CA_BUNDLE') or - os.environ.get('CURL_CA_BUNDLE')) - - # Merge all the kwargs. - proxies = merge_setting(proxies, self.proxies) - stream = merge_setting(stream, self.stream) - verify = merge_setting(verify, self.verify) - cert = merge_setting(cert, self.cert) - - return {'verify': verify, 'proxies': proxies, 'stream': stream, - 'cert': cert} - - def get_adapter(self, url): - """Returns the appropriate connnection adapter for the given URL.""" - for (prefix, adapter) in self.adapters.items(): - - if url.lower().startswith(prefix): - return adapter - - # Nothing matches :-/ - raise InvalidSchema("No connection adapters were found for '%s'" % url) - - def close(self): - """Closes all adapters and as such the session""" - for v in self.adapters.values(): - v.close() - - def mount(self, prefix, adapter): - """Registers a connection adapter to a prefix. - - Adapters are sorted in descending order by key length.""" - - self.adapters[prefix] = adapter - keys_to_move = [k for k in self.adapters if len(k) < len(prefix)] - - for key in keys_to_move: - self.adapters[key] = self.adapters.pop(key) - - def __getstate__(self): - state = dict((attr, getattr(self, attr, None)) for attr in self.__attrs__) - state['redirect_cache'] = dict(self.redirect_cache) - return state - - def __setstate__(self, state): - redirect_cache = state.pop('redirect_cache', {}) - for attr, value in state.items(): - setattr(self, attr, value) - - self.redirect_cache = RecentlyUsedContainer(REDIRECT_CACHE_SIZE) - for redirect, to in redirect_cache.items(): - self.redirect_cache[redirect] = to - - -def session(): - """Returns a :class:`Session` for context-management.""" - - return Session() diff --git a/plugin.video.alfa/lib/requests/status_codes.py b/plugin.video.alfa/lib/requests/status_codes.py deleted file mode 100755 index f9d4698c..00000000 --- a/plugin.video.alfa/lib/requests/status_codes.py +++ /dev/null @@ -1,89 +0,0 @@ -# -*- coding: utf-8 -*- - -from .structures import LookupDict - -_codes = { - - # Informational. - 100: ('continue',), - 101: ('switching_protocols',), - 102: ('processing',), - 103: ('checkpoint',), - 122: ('uri_too_long', 'request_uri_too_long'), - 200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'), - 201: ('created',), - 202: ('accepted',), - 203: ('non_authoritative_info', 'non_authoritative_information'), - 204: ('no_content',), - 205: ('reset_content', 'reset'), - 206: ('partial_content', 'partial'), - 207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'), - 208: ('already_reported',), - 226: ('im_used',), - - # Redirection. - 300: ('multiple_choices',), - 301: ('moved_permanently', 'moved', '\\o-'), - 302: ('found',), - 303: ('see_other', 'other'), - 304: ('not_modified',), - 305: ('use_proxy',), - 306: ('switch_proxy',), - 307: ('temporary_redirect', 'temporary_moved', 'temporary'), - 308: ('permanent_redirect', - 'resume_incomplete', 'resume',), # These 2 to be removed in 3.0 - - # Client Error. - 400: ('bad_request', 'bad'), - 401: ('unauthorized',), - 402: ('payment_required', 'payment'), - 403: ('forbidden',), - 404: ('not_found', '-o-'), - 405: ('method_not_allowed', 'not_allowed'), - 406: ('not_acceptable',), - 407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'), - 408: ('request_timeout', 'timeout'), - 409: ('conflict',), - 410: ('gone',), - 411: ('length_required',), - 412: ('precondition_failed', 'precondition'), - 413: ('request_entity_too_large',), - 414: ('request_uri_too_large',), - 415: ('unsupported_media_type', 'unsupported_media', 'media_type'), - 416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'), - 417: ('expectation_failed',), - 418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'), - 422: ('unprocessable_entity', 'unprocessable'), - 423: ('locked',), - 424: ('failed_dependency', 'dependency'), - 425: ('unordered_collection', 'unordered'), - 426: ('upgrade_required', 'upgrade'), - 428: ('precondition_required', 'precondition'), - 429: ('too_many_requests', 'too_many'), - 431: ('header_fields_too_large', 'fields_too_large'), - 444: ('no_response', 'none'), - 449: ('retry_with', 'retry'), - 450: ('blocked_by_windows_parental_controls', 'parental_controls'), - 451: ('unavailable_for_legal_reasons', 'legal_reasons'), - 499: ('client_closed_request',), - - # Server Error. - 500: ('internal_server_error', 'server_error', '/o\\', '✗'), - 501: ('not_implemented',), - 502: ('bad_gateway',), - 503: ('service_unavailable', 'unavailable'), - 504: ('gateway_timeout',), - 505: ('http_version_not_supported', 'http_version'), - 506: ('variant_also_negotiates',), - 507: ('insufficient_storage',), - 509: ('bandwidth_limit_exceeded', 'bandwidth'), - 510: ('not_extended',), -} - -codes = LookupDict(name='status_codes') - -for (code, titles) in list(_codes.items()): - for title in titles: - setattr(codes, title, code) - if not title.startswith('\\'): - setattr(codes, title.upper(), code) diff --git a/plugin.video.alfa/lib/requests/structures.py b/plugin.video.alfa/lib/requests/structures.py deleted file mode 100755 index df594121..00000000 --- a/plugin.video.alfa/lib/requests/structures.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.structures -~~~~~~~~~~~~~~~~~~~ - -Data structures that power Requests. - -""" - -import collections - - -class CaseInsensitiveDict(collections.MutableMapping): - """ - A case-insensitive ``dict``-like object. - - Implements all methods and operations of - ``collections.MutableMapping`` as well as dict's ``copy``. Also - provides ``lower_items``. - - All keys are expected to be strings. The structure remembers the - case of the last key to be set, and ``iter(instance)``, - ``keys()``, ``items()``, ``iterkeys()``, and ``iteritems()`` - will contain case-sensitive keys. However, querying and contains - testing is case insensitive:: - - cid = CaseInsensitiveDict() - cid['Accept'] = 'application/json' - cid['aCCEPT'] == 'application/json' # True - list(cid) == ['Accept'] # True - - For example, ``headers['content-encoding']`` will return the - value of a ``'Content-Encoding'`` response header, regardless - of how the header name was originally stored. - - If the constructor, ``.update``, or equality comparison - operations are given keys that have equal ``.lower()``s, the - behavior is undefined. - - """ - def __init__(self, data=None, **kwargs): - self._store = dict() - if data is None: - data = {} - self.update(data, **kwargs) - - def __setitem__(self, key, value): - # Use the lowercased key for lookups, but store the actual - # key alongside the value. - self._store[key.lower()] = (key, value) - - def __getitem__(self, key): - return self._store[key.lower()][1] - - def __delitem__(self, key): - del self._store[key.lower()] - - def __iter__(self): - return (casedkey for casedkey, mappedvalue in self._store.values()) - - def __len__(self): - return len(self._store) - - def lower_items(self): - """Like iteritems(), but with all lowercase keys.""" - return ( - (lowerkey, keyval[1]) - for (lowerkey, keyval) - in self._store.items() - ) - - def __eq__(self, other): - if isinstance(other, collections.Mapping): - other = CaseInsensitiveDict(other) - else: - return NotImplemented - # Compare insensitively - return dict(self.lower_items()) == dict(other.lower_items()) - - # Copy is required - def copy(self): - return CaseInsensitiveDict(self._store.values()) - - def __repr__(self): - return str(dict(self.items())) - -class LookupDict(dict): - """Dictionary lookup object.""" - - def __init__(self, name=None): - self.name = name - super(LookupDict, self).__init__() - - def __repr__(self): - return '' % (self.name) - - def __getitem__(self, key): - # We allow fall-through here, so values default to None - - return self.__dict__.get(key, None) - - def get(self, key, default=None): - return self.__dict__.get(key, default) diff --git a/plugin.video.alfa/lib/requests/utils.py b/plugin.video.alfa/lib/requests/utils.py deleted file mode 100755 index dc82b809..00000000 --- a/plugin.video.alfa/lib/requests/utils.py +++ /dev/null @@ -1,707 +0,0 @@ -# -*- coding: utf-8 -*- - -""" -requests.utils -~~~~~~~~~~~~~~ - -This module provides utility functions that are used within Requests -that are also useful for external consumption. - -""" - -import cgi -import codecs -import collections -import io -import os -import platform -import re -import sys -import socket -import struct -import warnings - -from . import __version__ -from . import certs -from .compat import parse_http_list as _parse_list_header -from .compat import (quote, urlparse, bytes, str, OrderedDict, unquote, is_py2, - builtin_str, getproxies, proxy_bypass, urlunparse, - basestring) -from .cookies import RequestsCookieJar, cookiejar_from_dict -from .structures import CaseInsensitiveDict -from .exceptions import InvalidURL - -_hush_pyflakes = (RequestsCookieJar,) - -NETRC_FILES = ('.netrc', '_netrc') - -DEFAULT_CA_BUNDLE_PATH = certs.where() - - -def dict_to_sequence(d): - """Returns an internal sequence dictionary update.""" - - if hasattr(d, 'items'): - d = d.items() - - return d - - -def super_len(o): - if hasattr(o, '__len__'): - return len(o) - - if hasattr(o, 'len'): - return o.len - - if hasattr(o, 'fileno'): - try: - fileno = o.fileno() - except io.UnsupportedOperation: - pass - else: - return os.fstat(fileno).st_size - - if hasattr(o, 'getvalue'): - # e.g. BytesIO, cStringIO.StringIO - return len(o.getvalue()) - - -def get_netrc_auth(url): - """Returns the Requests tuple auth for a given url from netrc.""" - - try: - from netrc import netrc, NetrcParseError - - netrc_path = None - - for f in NETRC_FILES: - try: - loc = os.path.expanduser('~/{0}'.format(f)) - except KeyError: - # os.path.expanduser can fail when $HOME is undefined and - # getpwuid fails. See http://bugs.python.org/issue20164 & - # https://github.com/kennethreitz/requests/issues/1846 - return - - if os.path.exists(loc): - netrc_path = loc - break - - # Abort early if there isn't one. - if netrc_path is None: - return - - ri = urlparse(url) - - # Strip port numbers from netloc - host = ri.netloc.split(':')[0] - - try: - _netrc = netrc(netrc_path).authenticators(host) - if _netrc: - # Return with login / password - login_i = (0 if _netrc[0] else 1) - return (_netrc[login_i], _netrc[2]) - except (NetrcParseError, IOError): - # If there was a parsing error or a permissions issue reading the file, - # we'll just skip netrc auth - pass - - # AppEngine hackiness. - except (ImportError, AttributeError): - pass - - -def guess_filename(obj): - """Tries to guess the filename of the given object.""" - name = getattr(obj, 'name', None) - if (name and isinstance(name, basestring) and name[0] != '<' and - name[-1] != '>'): - return os.path.basename(name) - - -def from_key_val_list(value): - """Take an object and test to see if it can be represented as a - dictionary. Unless it can not be represented as such, return an - OrderedDict, e.g., - - :: - - >>> from_key_val_list([('key', 'val')]) - OrderedDict([('key', 'val')]) - >>> from_key_val_list('string') - ValueError: need more than 1 value to unpack - >>> from_key_val_list({'key': 'val'}) - OrderedDict([('key', 'val')]) - """ - if value is None: - return None - - if isinstance(value, (str, bytes, bool, int)): - raise ValueError('cannot encode objects that are not 2-tuples') - - return OrderedDict(value) - - -def to_key_val_list(value): - """Take an object and test to see if it can be represented as a - dictionary. If it can be, return a list of tuples, e.g., - - :: - - >>> to_key_val_list([('key', 'val')]) - [('key', 'val')] - >>> to_key_val_list({'key': 'val'}) - [('key', 'val')] - >>> to_key_val_list('string') - ValueError: cannot encode objects that are not 2-tuples. - """ - if value is None: - return None - - if isinstance(value, (str, bytes, bool, int)): - raise ValueError('cannot encode objects that are not 2-tuples') - - if isinstance(value, collections.Mapping): - value = value.items() - - return list(value) - - -# From mitsuhiko/werkzeug (used with permission). -def parse_list_header(value): - """Parse lists as described by RFC 2068 Section 2. - - In particular, parse comma-separated lists where the elements of - the list may include quoted-strings. A quoted-string could - contain a comma. A non-quoted string could have quotes in the - middle. Quotes are removed automatically after parsing. - - It basically works like :func:`parse_set_header` just that items - may appear multiple times and case sensitivity is preserved. - - The return value is a standard :class:`list`: - - >>> parse_list_header('token, "quoted value"') - ['token', 'quoted value'] - - To create a header from the :class:`list` again, use the - :func:`dump_header` function. - - :param value: a string with a list header. - :return: :class:`list` - """ - result = [] - for item in _parse_list_header(value): - if item[:1] == item[-1:] == '"': - item = unquote_header_value(item[1:-1]) - result.append(item) - return result - - -# From mitsuhiko/werkzeug (used with permission). -def parse_dict_header(value): - """Parse lists of key, value pairs as described by RFC 2068 Section 2 and - convert them into a python dict: - - >>> d = parse_dict_header('foo="is a fish", bar="as well"') - >>> type(d) is dict - True - >>> sorted(d.items()) - [('bar', 'as well'), ('foo', 'is a fish')] - - If there is no value for a key it will be `None`: - - >>> parse_dict_header('key_without_value') - {'key_without_value': None} - - To create a header from the :class:`dict` again, use the - :func:`dump_header` function. - - :param value: a string with a dict header. - :return: :class:`dict` - """ - result = {} - for item in _parse_list_header(value): - if '=' not in item: - result[item] = None - continue - name, value = item.split('=', 1) - if value[:1] == value[-1:] == '"': - value = unquote_header_value(value[1:-1]) - result[name] = value - return result - - -# From mitsuhiko/werkzeug (used with permission). -def unquote_header_value(value, is_filename=False): - r"""Unquotes a header value. (Reversal of :func:`quote_header_value`). - This does not use the real unquoting but what browsers are actually - using for quoting. - - :param value: the header value to unquote. - """ - if value and value[0] == value[-1] == '"': - # this is not the real unquoting, but fixing this so that the - # RFC is met will result in bugs with internet explorer and - # probably some other browsers as well. IE for example is - # uploading files with "C:\foo\bar.txt" as filename - value = value[1:-1] - - # if this is a filename and the starting characters look like - # a UNC path, then just return the value without quotes. Using the - # replace sequence below on a UNC path has the effect of turning - # the leading double slash into a single slash and then - # _fix_ie_filename() doesn't work correctly. See #458. - if not is_filename or value[:2] != '\\\\': - return value.replace('\\\\', '\\').replace('\\"', '"') - return value - - -def dict_from_cookiejar(cj): - """Returns a key/value dictionary from a CookieJar. - - :param cj: CookieJar object to extract cookies from. - """ - - cookie_dict = {} - - for cookie in cj: - cookie_dict[cookie.name] = cookie.value - - return cookie_dict - - -def add_dict_to_cookiejar(cj, cookie_dict): - """Returns a CookieJar from a key/value dictionary. - - :param cj: CookieJar to insert cookies into. - :param cookie_dict: Dict of key/values to insert into CookieJar. - """ - - cj2 = cookiejar_from_dict(cookie_dict) - cj.update(cj2) - return cj - - -def get_encodings_from_content(content): - """Returns encodings from given content string. - - :param content: bytestring to extract encodings from. - """ - warnings.warn(( - 'In requests 3.0, get_encodings_from_content will be removed. For ' - 'more information, please see the discussion on issue #2266. (This' - ' warning should only appear once.)'), - DeprecationWarning) - - charset_re = re.compile(r']', flags=re.I) - pragma_re = re.compile(r']', flags=re.I) - xml_re = re.compile(r'^<\?xml.*?encoding=["\']*(.+?)["\'>]') - - return (charset_re.findall(content) + - pragma_re.findall(content) + - xml_re.findall(content)) - - -def get_encoding_from_headers(headers): - """Returns encodings from given HTTP Header Dict. - - :param headers: dictionary to extract encoding from. - """ - - content_type = headers.get('content-type') - - if not content_type: - return None - - content_type, params = cgi.parse_header(content_type) - - if 'charset' in params: - return params['charset'].strip("'\"") - - if 'text' in content_type: - return 'ISO-8859-1' - - -def stream_decode_response_unicode(iterator, r): - """Stream decodes a iterator.""" - - if r.encoding is None: - for item in iterator: - yield item - return - - decoder = codecs.getincrementaldecoder(r.encoding)(errors='replace') - for chunk in iterator: - rv = decoder.decode(chunk) - if rv: - yield rv - rv = decoder.decode(b'', final=True) - if rv: - yield rv - - -def iter_slices(string, slice_length): - """Iterate over slices of a string.""" - pos = 0 - while pos < len(string): - yield string[pos:pos + slice_length] - pos += slice_length - - -def get_unicode_from_response(r): - """Returns the requested content back in unicode. - - :param r: Response object to get unicode content from. - - Tried: - - 1. charset from content-type - 2. fall back and replace all unicode characters - - """ - warnings.warn(( - 'In requests 3.0, get_unicode_from_response will be removed. For ' - 'more information, please see the discussion on issue #2266. (This' - ' warning should only appear once.)'), - DeprecationWarning) - - tried_encodings = [] - - # Try charset from content-type - encoding = get_encoding_from_headers(r.headers) - - if encoding: - try: - return str(r.content, encoding) - except UnicodeError: - tried_encodings.append(encoding) - - # Fall back: - try: - return str(r.content, encoding, errors='replace') - except TypeError: - return r.content - - -# The unreserved URI characters (RFC 3986) -UNRESERVED_SET = frozenset( - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" - + "0123456789-._~") - - -def unquote_unreserved(uri): - """Un-escape any percent-escape sequences in a URI that are unreserved - characters. This leaves all reserved, illegal and non-ASCII bytes encoded. - """ - parts = uri.split('%') - for i in range(1, len(parts)): - h = parts[i][0:2] - if len(h) == 2 and h.isalnum(): - try: - c = chr(int(h, 16)) - except ValueError: - raise InvalidURL("Invalid percent-escape sequence: '%s'" % h) - - if c in UNRESERVED_SET: - parts[i] = c + parts[i][2:] - else: - parts[i] = '%' + parts[i] - else: - parts[i] = '%' + parts[i] - return ''.join(parts) - - -def requote_uri(uri): - """Re-quote the given URI. - - This function passes the given URI through an unquote/quote cycle to - ensure that it is fully and consistently quoted. - """ - safe_with_percent = "!#$%&'()*+,/:;=?@[]~" - safe_without_percent = "!#$&'()*+,/:;=?@[]~" - try: - # Unquote only the unreserved characters - # Then quote only illegal characters (do not quote reserved, - # unreserved, or '%') - return quote(unquote_unreserved(uri), safe=safe_with_percent) - except InvalidURL: - # We couldn't unquote the given URI, so let's try quoting it, but - # there may be unquoted '%'s in the URI. We need to make sure they're - # properly quoted so they do not cause issues elsewhere. - return quote(uri, safe=safe_without_percent) - - -def address_in_network(ip, net): - """ - This function allows you to check if on IP belongs to a network subnet - Example: returns True if ip = 192.168.1.1 and net = 192.168.1.0/24 - returns False if ip = 192.168.1.1 and net = 192.168.100.0/24 - """ - ipaddr = struct.unpack('=L', socket.inet_aton(ip))[0] - netaddr, bits = net.split('/') - netmask = struct.unpack('=L', socket.inet_aton(dotted_netmask(int(bits))))[0] - network = struct.unpack('=L', socket.inet_aton(netaddr))[0] & netmask - return (ipaddr & netmask) == (network & netmask) - - -def dotted_netmask(mask): - """ - Converts mask from /xx format to xxx.xxx.xxx.xxx - Example: if mask is 24 function returns 255.255.255.0 - """ - bits = 0xffffffff ^ (1 << 32 - mask) - 1 - return socket.inet_ntoa(struct.pack('>I', bits)) - - -def is_ipv4_address(string_ip): - try: - socket.inet_aton(string_ip) - except socket.error: - return False - return True - - -def is_valid_cidr(string_network): - """Very simple check of the cidr format in no_proxy variable""" - if string_network.count('/') == 1: - try: - mask = int(string_network.split('/')[1]) - except ValueError: - return False - - if mask < 1 or mask > 32: - return False - - try: - socket.inet_aton(string_network.split('/')[0]) - except socket.error: - return False - else: - return False - return True - - -def should_bypass_proxies(url): - """ - Returns whether we should bypass proxies or not. - """ - get_proxy = lambda k: os.environ.get(k) or os.environ.get(k.upper()) - - # First check whether no_proxy is defined. If it is, check that the URL - # we're getting isn't in the no_proxy list. - no_proxy = get_proxy('no_proxy') - netloc = urlparse(url).netloc - - if no_proxy: - # We need to check whether we match here. We need to see if we match - # the end of the netloc, both with and without the port. - no_proxy = no_proxy.replace(' ', '').split(',') - - ip = netloc.split(':')[0] - if is_ipv4_address(ip): - for proxy_ip in no_proxy: - if is_valid_cidr(proxy_ip): - if address_in_network(ip, proxy_ip): - return True - else: - for host in no_proxy: - if netloc.endswith(host) or netloc.split(':')[0].endswith(host): - # The URL does match something in no_proxy, so we don't want - # to apply the proxies on this URL. - return True - - # If the system proxy settings indicate that this URL should be bypassed, - # don't proxy. - # The proxy_bypass function is incredibly buggy on OS X in early versions - # of Python 2.6, so allow this call to fail. Only catch the specific - # exceptions we've seen, though: this call failing in other ways can reveal - # legitimate problems. - try: - bypass = proxy_bypass(netloc) - except (TypeError, socket.gaierror): - bypass = False - - if bypass: - return True - - return False - -def get_environ_proxies(url): - """Return a dict of environment proxies.""" - if should_bypass_proxies(url): - return {} - else: - return getproxies() - - -def default_user_agent(name="python-requests"): - """Return a string representing the default user agent.""" - _implementation = platform.python_implementation() - - if _implementation == 'CPython': - _implementation_version = platform.python_version() - elif _implementation == 'PyPy': - _implementation_version = '%s.%s.%s' % (sys.pypy_version_info.major, - sys.pypy_version_info.minor, - sys.pypy_version_info.micro) - if sys.pypy_version_info.releaselevel != 'final': - _implementation_version = ''.join([_implementation_version, sys.pypy_version_info.releaselevel]) - elif _implementation == 'Jython': - _implementation_version = platform.python_version() # Complete Guess - elif _implementation == 'IronPython': - _implementation_version = platform.python_version() # Complete Guess - else: - _implementation_version = 'Unknown' - - try: - p_system = platform.system() - p_release = platform.release() - except IOError: - p_system = 'Unknown' - p_release = 'Unknown' - - return " ".join(['%s/%s' % (name, __version__), - '%s/%s' % (_implementation, _implementation_version), - '%s/%s' % (p_system, p_release)]) - - -def default_headers(): - return CaseInsensitiveDict({ - 'User-Agent': default_user_agent(), - 'Accept-Encoding': ', '.join(('gzip', 'deflate')), - 'Accept': '*/*', - 'Connection': 'keep-alive', - }) - - -def parse_header_links(value): - """Return a dict of parsed link headers proxies. - - i.e. Link: ; rel=front; type="image/jpeg",; rel=back;type="image/jpeg" - - """ - - links = [] - - replace_chars = " '\"" - - for val in re.split(", *<", value): - try: - url, params = val.split(";", 1) - except ValueError: - url, params = val, '' - - link = {} - - link["url"] = url.strip("<> '\"") - - for param in params.split(";"): - try: - key, value = param.split("=") - except ValueError: - break - - link[key.strip(replace_chars)] = value.strip(replace_chars) - - links.append(link) - - return links - - -# Null bytes; no need to recreate these on each call to guess_json_utf -_null = '\x00'.encode('ascii') # encoding to ASCII for Python 3 -_null2 = _null * 2 -_null3 = _null * 3 - - -def guess_json_utf(data): - # JSON always starts with two ASCII characters, so detection is as - # easy as counting the nulls and from their location and count - # determine the encoding. Also detect a BOM, if present. - sample = data[:4] - if sample in (codecs.BOM_UTF32_LE, codecs.BOM32_BE): - return 'utf-32' # BOM included - if sample[:3] == codecs.BOM_UTF8: - return 'utf-8-sig' # BOM included, MS style (discouraged) - if sample[:2] in (codecs.BOM_UTF16_LE, codecs.BOM_UTF16_BE): - return 'utf-16' # BOM included - nullcount = sample.count(_null) - if nullcount == 0: - return 'utf-8' - if nullcount == 2: - if sample[::2] == _null2: # 1st and 3rd are null - return 'utf-16-be' - if sample[1::2] == _null2: # 2nd and 4th are null - return 'utf-16-le' - # Did not detect 2 valid UTF-16 ascii-range characters - if nullcount == 3: - if sample[:3] == _null3: - return 'utf-32-be' - if sample[1:] == _null3: - return 'utf-32-le' - # Did not detect a valid UTF-32 ascii-range character - return None - - -def prepend_scheme_if_needed(url, new_scheme): - '''Given a URL that may or may not have a scheme, prepend the given scheme. - Does not replace a present scheme with the one provided as an argument.''' - scheme, netloc, path, params, query, fragment = urlparse(url, new_scheme) - - # urlparse is a finicky beast, and sometimes decides that there isn't a - # netloc present. Assume that it's being over-cautious, and switch netloc - # and path if urlparse decided there was no netloc. - if not netloc: - netloc, path = path, netloc - - return urlunparse((scheme, netloc, path, params, query, fragment)) - - -def get_auth_from_url(url): - """Given a url with authentication components, extract them into a tuple of - username,password.""" - parsed = urlparse(url) - - try: - auth = (unquote(parsed.username), unquote(parsed.password)) - except (AttributeError, TypeError): - auth = ('', '') - - return auth - - -def to_native_string(string, encoding='ascii'): - """ - Given a string object, regardless of type, returns a representation of that - string in the native string type, encoding and decoding where necessary. - This assumes ASCII unless told otherwise. - """ - out = None - - if isinstance(string, builtin_str): - out = string - else: - if is_py2: - out = string.encode(encoding) - else: - out = string.decode(encoding) - - return out - - -def urldefragauth(url): - """ - Given a url remove the fragment and the authentication part - """ - scheme, netloc, path, params, query, fragment = urlparse(url) - - # see func:`prepend_scheme_if_needed` - if not netloc: - netloc, path = path, netloc - - netloc = netloc.rsplit('@', 1)[-1] - - return urlunparse((scheme, netloc, path, params, query, '')) From 3c883d874ce8c9c83f78e00de14ba38dbd227f1c Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 18 Jul 2018 09:14:57 -0500 Subject: [PATCH 42/52] strings: fix language --- plugin.video.alfa/resources/language/English/strings.po | 4 ---- 1 file changed, 4 deletions(-) diff --git a/plugin.video.alfa/resources/language/English/strings.po b/plugin.video.alfa/resources/language/English/strings.po index 7af606f8..71981a04 100644 --- a/plugin.video.alfa/resources/language/English/strings.po +++ b/plugin.video.alfa/resources/language/English/strings.po @@ -737,10 +737,6 @@ msgctxt "#60060" msgid "Alfa Auto-configuration" msgstr "" -msgctxt "#60061" -msgid "Do you want Alfa to auto-configure Kodi's video library?\nIf you choose 'No' you can do it later from 'Configuration > Preferences > Paths'." -msgstr "" - msgctxt "#60062" msgid "Adding movies to your video library..." msgstr "" From 13a9b7fd79ea350964ee95d9b13d346dde9ac06a Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 18 Jul 2018 09:19:13 -0500 Subject: [PATCH 43/52] strings: fix language --- .../language/Spanish (Argentina)/strings.po | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po index 7040cced..f52b1490 100644 --- a/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Argentina)/strings.po @@ -717,6 +717,22 @@ msgctxt "#60055" msgid "Error of provider configuration in BD." msgstr "Error al configurar el scraper en la BD." +msgctxt "#60056" +msgid "Videolibrary %s not configured" +msgstr "Videoteca %s no ha sido configurada" + +msgctxt "#60057" +msgid "Videolibrary %s configured" +msgstr "Videoteca %s configurada" + +msgctxt "#60058" +msgid "You need to restart Kodi for the changes to take effect." +msgstr "Tu necesitas reiniciar Kodi para que los cambios se efectúen" + +msgctxt "#60059" +msgid "Congratulations, Kodi's video library has been configured correctly." +msgstr "Felicitaciones, videoteca de Kodi ha sido configurado correctamente" + msgctxt "#60060" msgid "Alfa Auto-configuration" msgstr "Alfa Auto-configuración" @@ -1691,7 +1707,7 @@ msgstr "Buscando " msgctxt "#60423" msgid "Search" -msgstr "Buscar +msgstr "Buscar" msgctxt "#60424" msgid "Searches key have been deleted correctly" @@ -3804,4 +3820,3 @@ msgstr "Buscando en %s" msgctxt "#70283" msgid "movie" msgstr "pelicula" - From 27518c84617292905c22038229005187f928ee72 Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 18 Jul 2018 09:20:01 -0500 Subject: [PATCH 44/52] strings: fix language --- .../language/Spanish (Mexico)/strings.po | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po index 63155fd8..f52b1490 100644 --- a/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po +++ b/plugin.video.alfa/resources/language/Spanish (Mexico)/strings.po @@ -717,6 +717,22 @@ msgctxt "#60055" msgid "Error of provider configuration in BD." msgstr "Error al configurar el scraper en la BD." +msgctxt "#60056" +msgid "Videolibrary %s not configured" +msgstr "Videoteca %s no ha sido configurada" + +msgctxt "#60057" +msgid "Videolibrary %s configured" +msgstr "Videoteca %s configurada" + +msgctxt "#60058" +msgid "You need to restart Kodi for the changes to take effect." +msgstr "Tu necesitas reiniciar Kodi para que los cambios se efectúen" + +msgctxt "#60059" +msgid "Congratulations, Kodi's video library has been configured correctly." +msgstr "Felicitaciones, videoteca de Kodi ha sido configurado correctamente" + msgctxt "#60060" msgid "Alfa Auto-configuration" msgstr "Alfa Auto-configuración" @@ -1691,7 +1707,7 @@ msgstr "Buscando " msgctxt "#60423" msgid "Search" -msgstr "Buscar +msgstr "Buscar" msgctxt "#60424" msgid "Searches key have been deleted correctly" From a608505e94eb24b2cace8d30f32782f10c0d1daf Mon Sep 17 00:00:00 2001 From: Intel1 <25161862+Intel11@users.noreply.github.com> Date: Wed, 18 Jul 2018 09:20:52 -0500 Subject: [PATCH 45/52] strings: fix languages --- .../resources/language/Spanish/strings.po | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/plugin.video.alfa/resources/language/Spanish/strings.po b/plugin.video.alfa/resources/language/Spanish/strings.po index f551c017..f52b1490 100644 --- a/plugin.video.alfa/resources/language/Spanish/strings.po +++ b/plugin.video.alfa/resources/language/Spanish/strings.po @@ -717,6 +717,22 @@ msgctxt "#60055" msgid "Error of provider configuration in BD." msgstr "Error al configurar el scraper en la BD." +msgctxt "#60056" +msgid "Videolibrary %s not configured" +msgstr "Videoteca %s no ha sido configurada" + +msgctxt "#60057" +msgid "Videolibrary %s configured" +msgstr "Videoteca %s configurada" + +msgctxt "#60058" +msgid "You need to restart Kodi for the changes to take effect." +msgstr "Tu necesitas reiniciar Kodi para que los cambios se efectúen" + +msgctxt "#60059" +msgid "Congratulations, Kodi's video library has been configured correctly." +msgstr "Felicitaciones, videoteca de Kodi ha sido configurado correctamente" + msgctxt "#60060" msgid "Alfa Auto-configuration" msgstr "Alfa Auto-configuración" @@ -1691,7 +1707,7 @@ msgstr "Buscando " msgctxt "#60423" msgid "Search" -msgstr "Buscar +msgstr "Buscar" msgctxt "#60424" msgid "Searches key have been deleted correctly" @@ -3800,3 +3816,7 @@ msgstr "¿Desea mostrar estos enlaces?" msgctxt "#70282" msgid "Searching in %s" msgstr "Buscando en %s" + +msgctxt "#70283" +msgid "movie" +msgstr "pelicula" From 2a88cb3d1de856341ed93a49c2f4e2b25660b3f0 Mon Sep 17 00:00:00 2001 From: Intel1 Date: Wed, 18 Jul 2018 10:37:08 -0500 Subject: [PATCH 46/52] Actualizados inkaseries wikiseries --- plugin.video.alfa/channels/inkaseries.py | 4 ++-- plugin.video.alfa/channels/wikiseries.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugin.video.alfa/channels/inkaseries.py b/plugin.video.alfa/channels/inkaseries.py index 35b7d644..1fbab100 100644 --- a/plugin.video.alfa/channels/inkaseries.py +++ b/plugin.video.alfa/channels/inkaseries.py @@ -111,12 +111,12 @@ def seasons(item): if config.get_videolibrary_support() and len(itemlist) > 0: itemlist.append( Item(channel=item.channel, title='[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]', url=item.url, - action="add_serie_to_library", extra="all_episodes", contentSerieName=item.contentSerieName, + action="add_serie_to_library", extra="episodios", contentSerieName=item.contentSerieName, extra1='library')) return itemlist -def all_episodes(item): +def episodios(item): logger.info() itemlist = [] templist = seasons(item) diff --git a/plugin.video.alfa/channels/wikiseries.py b/plugin.video.alfa/channels/wikiseries.py index 665b778d..5c97a326 100644 --- a/plugin.video.alfa/channels/wikiseries.py +++ b/plugin.video.alfa/channels/wikiseries.py @@ -136,12 +136,12 @@ def seasons(item): if config.get_videolibrary_support() and len(itemlist) > 0: itemlist.append( Item(channel=item.channel, title='[COLOR yellow]Añadir esta serie a la videoteca[/COLOR]', url=item.url, - action="add_serie_to_library", extra="all_episodes", contentSerieName=item.contentSerieName, + action="add_serie_to_library", extra="episodios", contentSerieName=item.contentSerieName, extra1='library')) return itemlist -def all_episodes(item): +def episodios(item): logger.info() itemlist = [] templist = seasons(item) From 450b726087af7cbf0929d9865a538539dcb2b279 Mon Sep 17 00:00:00 2001 From: Kingbox <37674310+lopezvg@users.noreply.github.com> Date: Wed, 18 Jul 2018 22:10:54 +0200 Subject: [PATCH 47/52] MejorTorrent: canal arreglado para nuevo dominio y estructura MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Se conserva el canal anterior para las geografías donde todavía funciona. En las geografías donde está intervenido se desactiva automáticamente. Las series se migrarán automáticamente al nuevo canal si el anterior se desactiva. La películas se traducirán al nuevo canal cada vez que se visualicen --- plugin.video.alfa/channels/mejortorrent.json | 92 +- plugin.video.alfa/channels/mejortorrent.py | 33 +- plugin.video.alfa/channels/mejortorrent1.json | 65 ++ plugin.video.alfa/channels/mejortorrent1.py | 1023 +++++++++++++++++ 4 files changed, 1169 insertions(+), 44 deletions(-) create mode 100644 plugin.video.alfa/channels/mejortorrent1.json create mode 100644 plugin.video.alfa/channels/mejortorrent1.py diff --git a/plugin.video.alfa/channels/mejortorrent.json b/plugin.video.alfa/channels/mejortorrent.json index edc84806..f8a27b94 100755 --- a/plugin.video.alfa/channels/mejortorrent.json +++ b/plugin.video.alfa/channels/mejortorrent.json @@ -1,57 +1,67 @@ { - "id": "mejortorrent", - "name": "Mejor Torrent", - "active": true, - "adult": false, - "language": ["*"], - "thumbnail": "mejortorrent.png", - "banner": "mejortorrent.png", + "active": true, + "adult": false, + "banner": "mejortorrent.png", "categories": [ - "torrent", - "movie", - "tvshow", + "torrent", + "movie", + "tvshow", "documentary" - ], + ], + "id": "mejortorrent", + "language": [ + "*" + ], + "name": "Mejor Torrent", "settings": [ { - "id": "include_in_global_search", - "type": "bool", - "label": "Incluir en busqueda global", - "default": true, - "enabled": true, + "default": "http://www.mejortorrent.com/", + "enabled": true, + "id": "domain_name", + "label": "URL actual de la Web Mejor Torrent", + "type": "text", "visible": true - }, + }, { - "id": "modo_grafico", - "type": "bool", - "label": "Buscar información extra (TMDB)", - "default": true, - "enabled": true, + "default": true, + "enabled": true, + "id": "include_in_global_search", + "label": "Incluir en busqueda global", + "type": "bool", "visible": true - }, + }, { - "id": "seleccionar_ult_temporadda_activa", - "type": "bool", - "label": "Seleccionar para Videoteca si estará activa solo la última Temporada", - "default": true, - "enabled": true, + "default": true, + "enabled": true, + "id": "modo_grafico", + "label": "Buscar información extra (TMDB)", + "type": "bool", "visible": true - }, + }, { - "id": "include_in_newest_peliculas", - "type": "bool", - "label": "Incluir en Novedades - Peliculas", - "default": true, - "enabled": true, + "default": true, + "enabled": true, + "id": "seleccionar_ult_temporadda_activa", + "label": "Seleccionar para Videoteca si estará activa solo la última Temporada", + "type": "bool", "visible": true - }, + }, { - "id": "include_in_newest_documentales", - "type": "bool", - "label": "Incluir en Novedades - Documentales", - "default": true, - "enabled": true, + "default": true, + "enabled": true, + "id": "include_in_newest_peliculas", + "label": "Incluir en Novedades - Peliculas", + "type": "bool", + "visible": true + }, + { + "default": true, + "enabled": true, + "id": "include_in_newest_documentales", + "label": "Incluir en Novedades - Documentales", + "type": "bool", "visible": true } - ] + ], + "thumbnail": ", thumb_intervenido_pn.jpeg" } \ No newline at end of file diff --git a/plugin.video.alfa/channels/mejortorrent.py b/plugin.video.alfa/channels/mejortorrent.py index 8fc53494..2a975f77 100755 --- a/plugin.video.alfa/channels/mejortorrent.py +++ b/plugin.video.alfa/channels/mejortorrent.py @@ -14,7 +14,8 @@ from platformcode import config, logger from core import tmdb from lib import generictools -host = "http://www.mejortorrent.com" +host = 'http://www.mejortorrent.com/' +#host = config.get_setting('domain_name', 'mejortorrent') __modo_grafico__ = config.get_setting('modo_grafico', 'mejortorrent') @@ -182,7 +183,12 @@ def listado(item): matches = re.compile(patron, re.DOTALL).findall(data) matches_cnt = len(matches) - if not matches and not 'Se han encontrado 0 resultados.' in data: #error + if not matches and not 'Se han encontrado 0 resultados.' in data: #error + item = generictools.web_intervenida(item, data) #Verificamos que no haya sido clausurada + if item.intervencion: #Sí ha sido clausurada judicialmente + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Llamamos al método para el pintado del error + return itemlist #Salimos + logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos @@ -495,7 +501,12 @@ def listado_busqueda(item): matches += re.compile(patron, re.DOTALL).findall(data) matches_cnt = len(matches) - if not matches and not 'Se han encontrado 0 resultados.' and not "href='/juego-descargar-torrent" in data: #error + if not matches and not 'Se han encontrado 0 resultados.' and not "href='/juego-descargar-torrent" in data: #error + item = generictools.web_intervenida(item, data) #Verificamos que no haya sido clausurada + if item.intervencion: #Sí ha sido clausurada judicialmente + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Llamamos al método para el pintado del error + return itemlist #Salimos + logger.error("ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos @@ -706,6 +717,7 @@ def findvideos(item): itemlist = [] #Bajamos los datos de la página + data = '' try: if item.post: #Puede traer datos para una llamada "post". De momento usado para documentales, pero podrían ser series data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url, post=item.post).data) @@ -720,6 +732,16 @@ def findvideos(item): return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos matches = re.compile(patron, re.DOTALL).findall(data) + if not matches: + item = generictools.web_intervenida(item, data) #Verificamos que no haya sido clausurada + if item.intervencion: #Sí ha sido clausurada judicialmente + item, itemlist = generictools.post_tmdb_findvideos(item, itemlist) #Llamamos al método para el pintado del error + return itemlist #Salimos + + logger.error("ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.category + ': ERROR 02: FINDVIDEOS: El archivo Torrent no existe o ha cambiado la estructura de la Web. Verificar en la Web y reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + #logger.debug(data) #logger.debug("PATRON: " + patron) #logger.debug(matches) @@ -814,6 +836,11 @@ def episodios(item): matches = re.compile(patron, re.DOTALL).findall(data) if not matches: #error + item = generictools.web_intervenida(item, data) #Verificamos que no haya sido clausurada + if item.intervencion: #Sí ha sido clausurada judicialmente + item, itemlist = generictools.post_tmdb_findvideos(item, itemlist) #Llamamos al método para el pintado del error + return itemlist #Salimos + logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos diff --git a/plugin.video.alfa/channels/mejortorrent1.json b/plugin.video.alfa/channels/mejortorrent1.json new file mode 100644 index 00000000..dd27bb1a --- /dev/null +++ b/plugin.video.alfa/channels/mejortorrent1.json @@ -0,0 +1,65 @@ +{ + "id": "mejortorrent1", + "name": "Mejor Torrent 1", + "active": true, + "adult": false, + "language": ["*"], + "thumbnail": "mejortorrent.png", + "banner": "mejortorrent.png", + "categories": [ + "torrent", + "movie", + "tvshow", + "documentary" + ], + "settings": [ + { + "id": "domain_name", + "type": "text", + "label": "URL actual de la Web Mejor Torrent", + "default": "https://mejortorrent1.com/", + "enabled": true, + "visible": true + }, + { + "id": "include_in_global_search", + "type": "bool", + "label": "Incluir en busqueda global", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "modo_grafico", + "type": "bool", + "label": "Buscar información extra (TMDB)", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "seleccionar_ult_temporadda_activa", + "type": "bool", + "label": "Seleccionar para Videoteca si estará activa solo la última Temporada", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "include_in_newest_peliculas", + "type": "bool", + "label": "Incluir en Novedades - Peliculas", + "default": true, + "enabled": true, + "visible": true + }, + { + "id": "include_in_newest_documentales", + "type": "bool", + "label": "Incluir en Novedades - Documentales", + "default": true, + "enabled": true, + "visible": true + } + ] +} \ No newline at end of file diff --git a/plugin.video.alfa/channels/mejortorrent1.py b/plugin.video.alfa/channels/mejortorrent1.py new file mode 100644 index 00000000..8c82d512 --- /dev/null +++ b/plugin.video.alfa/channels/mejortorrent1.py @@ -0,0 +1,1023 @@ +# -*- coding: utf-8 -*- + +import re +import sys +import urllib +import urlparse + +from channelselector import get_thumb +from core import httptools +from core import scrapertools +from core import servertools +from core.item import Item +from platformcode import config, logger +from core import tmdb +from lib import generictools + +host = config.get_setting('domain_name', 'mejortorrent1') + +__modo_grafico__ = config.get_setting('modo_grafico', 'mejortorrent1') + +def mainlist(item): + logger.info() + + itemlist = [] + + thumb_pelis = get_thumb("channels_movie.png") + thumb_pelis_hd = get_thumb("channels_movie_hd.png") + thumb_series = get_thumb("channels_tvshow.png") + thumb_series_hd = get_thumb("channels_tvshow_hd.png") + thumb_series_az = get_thumb("channels_tvshow_az.png") + thumb_docus = get_thumb("channels_documentary.png") + thumb_buscar = get_thumb("search.png") + thumb_settings = get_thumb("setting_0.png") + + #itemlist.append(Item(channel=item.channel, title="Novedades", action="listado_busqueda", extra="novedades", tipo=False, + # url= host + "ultimos-torrents/", thumbnail=thumb_buscar)) + + itemlist.append(Item(channel=item.channel, title="Peliculas", action="submenu", extra="peliculas", + url= host, thumbnail=thumb_pelis)) + + itemlist.append(Item(channel=item.channel, title="Series", action="submenu", extra="series", + url= host, thumbnail=thumb_series)) + + itemlist.append(Item(channel=item.channel, title="Documentales", action="submenu", extra="documentales", + url= host, thumbnail=thumb_docus)) + + itemlist.append(Item(channel=item.channel, title="Buscar...", action="search", thumbnail=thumb_buscar, tipo=False)) + + itemlist.append( + Item(channel=item.channel, action="", title="[COLOR yellow]Configuración del Canal:[/COLOR]", url="", thumbnail=thumb_settings)) + itemlist.append( + Item(channel=item.channel, action="settingCanal", title="URL del Canal y otros", url="", thumbnail=thumb_settings)) + + return itemlist + + +def settingCanal(item): + from platformcode import platformtools + platformtools.show_channel_settings() + platformtools.itemlist_refresh() + return + + +def submenu(item): + logger.info() + itemlist = [] + + thumb_pelis = get_thumb("channels_movie.png") + thumb_pelis_hd = get_thumb("channels_movie_hd.png") + thumb_series = get_thumb("channels_tvshow.png") + thumb_series_hd = get_thumb("channels_tvshow_hd.png") + thumb_series_az = get_thumb("channels_tvshow_az.png") + thumb_docus = get_thumb("channels_documentary.png") + thumb_buscar = get_thumb("search.png") + thumb_settings = get_thumb("setting_0.png") + + if item.extra == "peliculas": + itemlist.append(Item(channel=item.channel, title="Peliculas", action="listado", extra="peliculas", tipo=False, + url= host + "peliculas/", thumbnail=thumb_pelis)) + itemlist.append(Item(channel=item.channel, title="Películas Listado Alfabético", action="alfabeto", + url= host + "listado?cat=peliculas&letra=", extra="peliculas", thumbnail=thumb_pelis)) + itemlist.append(Item(channel=item.channel, title="Peliculas HD", action="listado", extra="peliculas", tipo=False, + url= host + "peliculas-hd/", thumbnail=thumb_pelis_hd)) + itemlist.append(Item(channel=item.channel, title="Películas HD Listado Alfabético", action="alfabeto", + url= host + "listado?cat=peliculas hd&letra=", extra="peliculas", thumbnail=thumb_pelis)) + + elif item.extra == "series": + itemlist.append(Item(channel=item.channel, title="Series", action="listado", extra="series", tipo=False, + url= host + "series/", thumbnail=thumb_series)) + itemlist.append(Item(channel=item.channel, title="Series Listado Alfabético", action="alfabeto", extra="series", + url= host + "listado?cat=series&letra=", thumbnail=thumb_series_az)) + itemlist.append(Item(channel=item.channel, title="Series HD", action="listado", extra="series", tipo=False, + url= host + "series-hd/", thumbnail=thumb_series_hd)) + itemlist.append(Item(channel=item.channel, title="Series HD Listado Alfabético", action="alfabeto", extra="series", + url= host + "listado?cat=series hd&letra=", thumbnail=thumb_series_az)) + + elif item.extra == "documentales": + itemlist.append(Item(channel=item.channel, title="Documentales", action="listado", extra="documentales", tipo=False, + url= host + "documentales/", thumbnail=thumb_docus)) + itemlist.append(Item(channel=item.channel, title="Documentales Listado Alfabético", action="alfabeto", extra="documentales", url= host + "listado?cat=documentales&letra=", thumbnail=thumb_docus)) + itemlist.append(Item(channel=item.channel, title="Varios", action="listado", extra="varios", tipo=False, + url= host + "variados/", thumbnail=thumb_docus)) + itemlist.append(Item(channel=item.channel, title="Varios Listado Alfabético", action="alfabeto", extra="varios", url= host + "listado?cat=variados&letra=", thumbnail=thumb_docus)) + + return itemlist + + +def alfabeto(item): + logger.info() + itemlist = [] + + for letra in ['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']: + itemlist.append(Item(channel=item.channel, action="listado", title=letra, extra=item.extra, tipo=True, url=item.url + letra.lower())) + + return itemlist + +def listado(item): + logger.info() + itemlist = [] + url_next_page ='' # Control de paginación + cnt_tot = 30 # Poner el num. máximo de items por página + + if item.category: + del item.category + if item.totalItems: + del item.totalItems + + try: + data = '' + data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url).data) + data = re.sub('\r\n', '', data).decode('utf8').encode('utf8') + data = data.replace("'", '"') + except: + logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + if not data: #Si la web está caída salimos sin dar error + logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + + # En este canal las url's y los títulos tienen diferente formato dependiendo del contenido + if (item.extra == "peliculas" or item.extra == "varios") and item.tipo: #Desde Lista Alfabética + patron = '([^<]+)?<\/a>' + patron_enlace = '\/\/.*?\/(.*?)\/$' + patron_title = '([^<]+)<\/a>(\s*([^>]+)<\/b>)?' + item.action = "findvideos" + item.contentType = "movie" + pag = False #No hay paginación + elif (item.extra == "peliculas" or item.extra == "varios") and not item.tipo: #Desde Menú principal + patron = '?' + patron_enlace = '\/\/.*?\/(.*?)\/$' + patron_title = '([^<]+)<\/a>(\s*([^>]+)<\/b>)?' + item.action = "findvideos" + item.contentType = "movie" + pag = True #Sí hay paginación + cnt_tot = 20 # Poner el num. máximo de items por página. Parece que hay 18 + item.next_page = 'b' + elif item.extra == "series" and item.tipo: + patron = '([^<]+)?<\/a>' + patron_enlace = '\/\/.*?\/(.*?)-[temporada]?\d+[-|x]' + patron_title = '([^<]+)<\/a>(\s*([^>]+)<\/b>)?' + patron_title_ep = '\/\/.*?\/(.*?)-(\d{1,2})x(\d{1,2})(?:-al-\d{1,2}x\d{1,2})?-?(\d+p)?\/$' + patron_title_se = '\/\/.*?\/(.*?)temporada-?(?:\d+p-)?(\d{1,2})?-?(.*?)?\/$' + item.action = "episodios" + item.contentType = "season" + pag = False + cnt_tot = 10 # Se reduce el numero de items por página porque es un proceso pesado + elif item.extra == "series" and not item.tipo: + patron = '?' + patron_enlace = '\/\/.*?\/(.*?)-[temporada]?\d+[-|x]' + patron_title = '([^<]+)<\/a>(\s*([^>]+)<\/b>)?' + patron_title_ep = '\/\/.*?\/(.*?)-(\d{1,2})x(\d{1,2})(?:-al-\d{1,2}x\d{1,2})?-?(\d+p)?\/$' + patron_title_se = '\/\/.*?\/(.*?)temporada-?(?:\d+p-)?(\d{1,2})?-?(.*?)?\/$' + item.action = "episodios" + item.contentType = "season" + pag = True + cnt_tot = 10 # Se reduce el numero de items por página porque es un proceso pesado + elif item.extra == "documentales" and item.tipo: + patron = '([^<]+)?<\/a>' + patron_enlace = '\/\/.*?\/(.*?)-[temporada]?\d+[-|x]' + patron_title = '([^<]+)<\/a>(\s*([^>]+)<\/b>)?' + patron_title_ep = '\/\/.*?\/(.*?)-(\d{1,2})x(\d{1,2})(?:-al-\d{1,2}x\d{1,2})?-?(\d+p)?\/$' + patron_title_se = '\/\/.*?\/(.*?)temporada-?(?:\d+p-)?(\d{1,2})?-?(.*?)?\/$' + item.action = "episodios" + item.contentType = "tvshow" + pag = False + else: + patron = '?' + patron_enlace = '\/\/.*?\/(.*?)-[temporada]?\d+[-|x]' + patron_title = '([^<]+)<\/a>(\s*([^>]+)<\/b>)?' + patron_title_ep = '\/\/.*?\/(.*?)-(\d{1,2})x(\d{1,2})(?:-al-\d{1,2}x\d{1,2})?-?(\d+p)?\/$' + patron_title_se = '\/\/.*?\/(.*?)temporada-?(?:\d+p-)?(\d{1,2})?-?(.*?)?\/$' + item.action = "episodios" + item.contentType = "tvshow" + pag = True + item.next_page = 'b' + + # Preparamos la paginación. Las páginas alfabéticas no tienen paginación. + # El resto sí, pero con un número variable de links + if not item.cnt_pag: + cnt_pag = 0 + else: + cnt_pag = item.cnt_pag + del item.cnt_pag + if not item.cnt_pag_num: + cnt_pag_num = 0 # Número de página actual + else: + cnt_pag_num = item.cnt_pag_num + del item.cnt_pag_num + + matches = re.compile(patron, re.DOTALL).findall(data) + matches_cnt = len(matches) + if not matches and not 'Se han encontrado0 resultados.' in data: #error + item = generictools.web_intervenida(item, data) #Verificamos que no haya sido clausurada + if item.intervencion: #Sí ha sido clausurada judicialmente + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Llamamos al método para el pintado del error + return itemlist #Salimos + + logger.error("ERROR 02: LISTADO: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + + #Capturamos el num. de la última página para informala a pié de página. Opción para páginas sin paginación + if pag == False: + item.last_page = (len(matches) / cnt_tot) + 1 + + if not item.last_page and pag: #Capturamos el num. de la última página para informala a pié de página + item.last_page = -1 + #patron_next_page = " Siguiente >> <\/a>" + if "/documentales" in item.url: + patron_next_page = '\d+<\/a' + else: + patron_next_page = '&\w+;<\/a>&\w+;<\/div>' + url_next_page = urlparse.urljoin(item.url, scrapertools.find_single_match(data, patron_next_page) + str(cnt_pag_num + 2)) + #url_last_page = re.sub(r"\d+$", "9999", url_next_page) + #data_last = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(url_last_page).data) + if "/documentales" in item.url: + patron_last_page = '\d+<\/a> <\/div>' + else: + patron_last_page = '&\w+;<\/a>&\w+;<\/div>' + #patron_last_page = '(\d+)<\/span>' + if "/documentales" in item.url: + item.last_page = int(scrapertools.find_single_match(data, patron_last_page)) + else: + #item.last_page = int(scrapertools.find_single_match(data, patron_last_page)) * (len(matches) / cnt_tot) + item.last_page = int(scrapertools.find_single_match(data, patron_last_page)) + + if matches_cnt > cnt_tot and item.extra == "documentales" and pag: + item.next_page = '' + if item.next_page != 'b': + if matches_cnt > cnt_pag + cnt_tot: + url_next_page = item.url + matches = matches[cnt_pag:cnt_pag+cnt_tot] + next_page = '' + if matches_cnt <= cnt_pag + (cnt_tot * 2): + if pag: + next_page = 'b' + modo = 'continue' + else: + matches = matches[cnt_pag:cnt_pag+cnt_tot] + next_page = 'a' + #patron_next_page = " Siguiente >> <\/a>" + if "/documentales" in item.url: + patron_next_page = '\d+<\/a' + else: + patron_next_page = '&\w+;<\/a>&\w+;<\/div>' + matches_next_page = re.compile(patron_next_page, re.DOTALL).findall(data) + modo = 'continue' + if len(matches_next_page) > 0: + url_next_page = urlparse.urljoin(item.url, matches_next_page[0] + str(cnt_pag_num + 2)) + modo = 'next' + if item.next_page: + del item.next_page + + #logger.debug(data) + #logger.debug("PATRON1: " + patron + " / ") + #logger.debug(matches) + + # Primera pasada + # En la primera pasada se obtiene una información básica del título a partir de la url + # Para Series se obtienen la temporada y el episodio + # Se limpian algunas etiquetas del item inical. + for scrapedurl, scrapedthumbnail in matches: + item_local = item.clone() + item_local.tipo = True + del item_local.tipo + if item_local.totalItems: + del item_local.totalItems + if item_local.modo: + del item_local.modo + if item_local.next_page: + del item_local.next_page + item_local.pag = True + del item_local.pag + if item_local.text_color: + del item_local.text_color + item_local.last_page = 0 + del item_local.last_page + if item_local.cnt_pag_num: + del item_local.cnt_pag_num + + item_local.title = '' + item_local.context = "['buscar_trailer']" + + item_local.title = scrapertools.find_single_match(scrapedurl, patron_enlace) + item_local.title = item_local.title.replace("-", " ").capitalize() + item_local.url = scrapedurl + item_local.thumbnail = scrapedthumbnail + if "http" not in item_local.thumbnail: + item_local.thumbnail = '' + item_local.infoLabels['year'] = '-' # Al no saber el año, le ponemos "-" y TmDB lo calcula automáticamente + + # Para que el menú contextual muestre conrrectamente las opciones de añadir a Videoteca + if item_local.extra == "series": + if scrapertools.find_single_match(scrapedurl, patron_title_ep): + item_local.contentType = "episode" + else: + item_local.contentType = "season" + + # Poner nombre real de serie. Busca nº de temporada y capítulo + if item_local.extra == "series": + if item_local.contentType == "episode": + real_title, item_local.contentSeason, episodio, item_local.quality = scrapertools.find_single_match(scrapedurl, patron_title_ep) + + #Hay que buscar la raiz de la temporada + data_epi = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item_local.url).data) + url = scrapertools.find_single_match(data_epi, '.*

0: + title_foot += ' de %s' % str(item.last_page) + itemlist.append( + Item(channel=item.channel, action="listado", title="[COLOR gold][B]Pagina siguiente >> [/B][/COLOR]" + title_foot, url=url_next_page, next_page=next_page, cnt_pag=cnt_pag, pag=pag, modo=modo, extra=item.extra, tipo=item.tipo, last_page=item.last_page, cnt_pag_num=cnt_pag_num)) + + #logger.debug(url_next_page + " / " + next_page + " / " + str(matches_cnt) + " / " + str(cnt_pag) + " / " + str(pag) + " / " + modo + " / " + item.extra + " / " + str(item.tipo)) + + return itemlist + + +def listado_busqueda(item): + logger.info() + itemlist = [] + url_next_page ='' # Controlde paginación + cnt_tot = 39 # Poner el num. máximo de items por página. Dejamos que la web lo controle + cnt_title = 0 # Contador de líneas insertadas en Itemlist + cnt_pag = 0 # Contador de líneas leídas de Matches + cnt_next = 0 # Contador de páginas leidas antes de pintar la pantalla + total_pag = 10 # Líneas por página de la web + curr_page_num = 1 # Página actual + category = "" # Guarda la categoria que viene desde una busqueda global + matches = [] + + if item.url_next_page: + url_next_page = item.url_next_page + else: + url_next_page = item.url + + #Máximo num. de líneas permitidas por TMDB. Máx de 5 páginas por Itemlist para no degradar el rendimiento + while cnt_title <= cnt_tot and cnt_next < 5: + + status = False # Calidad de los datos leídos + try: + data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(url_next_page, post=item.post).data) + data = re.sub('\r\n', '', data).decode('utf8').encode('utf8') + data = data.replace("'", '"') + except: + logger.error("ERROR 01: LISTADO_BUSQUEDA: La Web no responde o ha cambiado de URL: " + item.url + item.post + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + if not data: #Si la web está caída salimos sin dar error + logger.error("ERROR 01: LISTADO_BUSQUEDA: La Web no responde o ha cambiado de URL: " + item.url + item.post + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: LISTADO_BUSQUEDA:. La Web no responde o ha cambiado de URL. Si la Web está activa, reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + + cnt_next += 1 + # busca series y Novedades + patron = '\(([^>]+)\)<\/a><\/td>' #título + patron += '([^>]+)<\/td><\/tr>' #calidad y tipo de contenido + matches_alt = scrapertools.find_multiple_matches(data, patron) + + i = 0 + if len(matches_alt) > 0: + status = True + for scrapedurl, scrapedtitle, scrapedquality, scrapedtype in matches_alt: + if scrapedtype not in ['Juegos', 'Capitulos', 'Musica']: #limpiamos de contenidos no deseados + matches.append(matches_alt[i]) #acumulamos los títulos + i += 1 + cnt_title = len(matches) #número de títulos a pintar + + if not matches_alt and not 'Se han encontrado0 resultado(s).' in data and not "Introduce alguna palabra para buscar con al menos 3 letras" in data and status is False: #error + item = generictools.web_intervenida(item, data) #Verificamos que no haya sido clausurada + if item.intervencion: #Sí ha sido clausurada judicialmente + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Llamamos al método para el pintado del error + return itemlist #Salimos + + logger.error("ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: LISTADO_BUSQUEDA: Ha cambiado la estructura de la Web. Reportar el error con el log')) + item, itemlist = generictools.post_tmdb_listado(item, itemlist) #Llamamos al método para el pintado del error + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + + #Capturamos el num. de la última página para informala a pié de página + try: + last_page = int(scrapertools.find_single_match(data, 'Se han encontrado(\d+)<\/b> resultado\(s\).')) + last_page = (last_page / total_pag) + 1 + except: + last_page = 0 + pass + + curr_page_num = int(scrapertools.find_single_match(url_next_page, '\/page\/(\d+)\/$')) + if (curr_page_num + 1) <= last_page: #Tenemos la pantalla llena? + url_next_page = re.sub(r'\/page\/\d+\/$', '/page/%s/' % str(curr_page_num + 1), url_next_page) #actualizamos el num. pag. + else: + url_next_page = '' #si no hay más página, limpiamos para salir + cnt_title = 99 + + if cnt_title >= cnt_tot * 0.75: #Si el num. de títulos supera el límite, salimos del loop + cnt_title = 99 + + #logger.debug("MATCHES: ") + #logger.debug(matches) + #logger.debug(data) + + for scrapedurl, scrapedtitle_alt, scrapedquality, scrapedtype in matches: + # Creamos "item_local" y lo limpiamos un poco de algunos restos de item + item_local = item.clone() + if item_local.category: + category = item.category + del item_local.category + item_local.tipo = True + del item_local.tipo + if item_local.totalItems: + del item_local.totalItems + if item_local.text_color: + del item_local.text_color + if item_local.cnt_pag_num: + del item_local.cnt_pag_num + item_local.url = scrapedurl + item_local.contentThumbnail = '' + item_local.thumbnail = '' + item_local.title = '' + item_local.context = "['buscar_trailer']" + item_local.infoLabels['year'] = '-' # Al no saber el año, le ponemos "-" y TmDB lo calcula automáticamente + + # Limpiamos títulos, Sacamos datos de calidad, audio y lenguaje + scrapedtitle = re.sub('\r\n', '', scrapedtitle_alt).decode('utf8').encode('utf8').strip() + title = scrapedtitle + title = title.replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o").replace("ú", "u").replace("ü", "u").replace("�", "ñ").replace("ñ", "ñ") + + title_subs = [] + + #Determinamos y marcamos idiomas distintos del castellano + item_local.language = [] + if "[subs" in title.lower() or "[vos" in title.lower() or "v.o.s" in title.lower() or "vo" in title.lower(): + item_local.language += ["VOS"] + title = title.replace(" [Subs. integrados]", "").replace(" [subs. Integrados]", "").replace(" [VOSE", "").replace(" [VOS", "").replace(" (V.O.S.E)", "").replace(" VO", "") + if "latino" in title.lower() or "argentina" in title.lower(): + item_local.language += ["LAT"] + title = title.replace(" Latino", "").replace(" latino", "").replace(" Argentina", "").replace(" argentina", "") + title = title.replace("Castellano", "").replace("castellano", "").replace("inglés", "").replace("ingles", "").replace("Inglés", "").replace("Ingles", "") + + if "3d" in title or "3D" in title: #Reservamos info para después de TMDB + item_local.quality += " 3D" + title = title.replace(" [3d]", "").replace(" 3d", "").replace(" [3D]", "").replace(" 3D", "") + if "audio" in title.lower(): #Reservamos info de audio para después de TMDB + title_subs += ['[%s]' % scrapertools.find_single_match(title, r'(\[[a|A]udio.*?\])')] + title = re.sub(r'\[[a|A]udio.*?\]', '', title) + if "[dual" in title.lower(): + item_local.language[0:0] = ["DUAL"] + title = title = re.sub(r'\[D|dual.*?\]', '', title) + if scrapertools.find_single_match(title, r'-\s[m|M].*?serie'): + title = re.sub(r'-\s[m|M].*?serie', '', title) + title_subs += ["Miniserie"] + + if title.endswith('.'): + title = title[:-1] + + if not title: + title = "SIN TÍTULO" + title = scrapertools.remove_htmltags(title) + + # Ahora preparamos el título y la calidad tanto para series como para documentales y películas + if item.extra == "novedades" and ("Series" in scrapedtype or "Documentales" in scrapedtype): + item_local.quality = scrapertools.find_single_match(scrapedtitle, '.*?\[(.*?)\]') + else: + item_local.quality = scrapertools.remove_htmltags(scrapedquality).decode('utf8').encode('utf8') + item_local.quality = item_local.quality.replace("(", "").replace(")", "").replace("[", "").replace("]", "").replace("Documental", "").replace("documental", "") + + #Preparamos la información básica para TMDB + if "Series" in scrapedtype or "Documentales" in scrapedtype: + item_local.action = "episodios" + if "Series" in scrapedtype: + item_local.extra = "series" + else: + item_local.extra = "documentales" + item_local.contentType = "season" + + title = re.sub(r'\[\d+.*?\]', '', title) # Quitar la calidad del título + item_local.contentSerieName = scrapertools.find_single_match(title, '(.*?) Temporada \d+\s?').strip() + if not item_local.contentSerieName: + item_local.contentSerieName = title.strip() + if item_local.infoLabels['title']: + del item_local.infoLabels['title'] + title = item_local.contentSerieName + item_local.title = title + if not item_local.contentSerieName: + item_local.contentSerieName = "SIN TITULO" + item_local.contentSeason = scrapertools.find_single_match(scrapedurl, 'temporada-?(?:\d+p-)?(\d{1,2})[-|\/]') + if not item_local.contentSeason: + item_local.contentSeason = 1 + + if "(hdrip" in title.lower() or "(br" in title.lower() or "(vhsrip" in title.lower() or "(dvdrip" in title.lower() or "(fullb" in title.lower() or "(blu" in title.lower() or "(4k" in title.lower() or "(hevc" in title.lower() or "(imax" in title.lower() or "extendida" in title.lower() or "[720p]" in title.lower() or "[1080p]" in title.lower(): + if not item_local.quality: + item_local.quality = scrapertools.find_single_match(title, r'\(.*?\)?\(.*?\)') + if not item_local.quality: + item_local.quality = scrapertools.find_single_match(title, r'[\[|\(](.*?)[\)|\]]') + title = re.sub(r'\(.*?\)?\(.*?\)', '', title) + title = re.sub(r'[\[|\(].*?[\)|\]]', '', title) + if not item_local.quality: + if "fullbluray" in title.lower(): + item_local.quality = "FullBluRay" + title = title.replace("FullBluRay", "").replace("fullbluray", "") + if "4k" in title.lower() or "hdr" in title.lower(): + item_local.quality = "4K" + title = title.replace("4k-hdr", "").replace("4K-HDR", "").replace("hdr", "").replace("HDR", "").replace("4k", "").replace("4K", "") + title = title.replace("(", "").replace(")", "").replace("[", "").replace("]", "").strip() + item_local.title = title + + if "Peliculas" in scrapedtype or "Variados" in scrapedtype: + item_local.action = "findvideos" + item_local.extra = "peliculas" + item_local.contentType = "movie" + item_local.contentTitle = title + if "Variados" in scrapedtype: + item_local.extra = "varios" + + if "saga" in item_local.contentTitle.lower() or "saga" in item_local.contentSerieName.lower(): + item_local.contentTitle = item_local.contentTitle.replace("Saga ", "").replace("Saga", "") + item_local.contentSerieName = item_local.contentSerieName.replace("Saga ", "").replace("Saga", "") + title_subs += ["Saga"] + if "colecc" in item_local.contentTitle.lower() or "colecc" in item_local.contentSerieName.lower(): + item_local.contentTitle = item_local.contentTitle.replace("Coleccion ", "").replace("Coleccion", "") + item_local.contentSerieName = item_local.contentSerieName.replace("Coleccion ", "").replace("Coleccion", "") + title_subs += ["Coleccion"] + + #Guarda la variable temporal que almacena la info adicional del título a ser restaurada después de TMDB + item_local.title_subs = title_subs + + #Salvamos y borramos el número de temporadas porque TMDB a veces hace tonterias. Lo pasamos como serie completa + if item_local.contentSeason and (item_local.contentType == "season" or item_local.contentType == "tvshow"): + item_local.contentSeason_save = item_local.contentSeason + del item_local.infoLabels['season'] + + itemlist.append(item_local.clone()) + + #logger.debug(item_local) + + if not category: #Si este campo no existe es que viene de la primera pasada de una búsqueda global + return itemlist #Retornamos sin pasar por la fase de maquillaje para ahorra tiempo + + #Llamamos a TMDB para que complete InfoLabels desde itemlist. Mejor desde itemlist porque envía las queries en paralelo + tmdb.set_infoLabels(itemlist, __modo_grafico__) + + #Llamamos al método para el maquillaje de los títulos obtenidos desde TMDB + item, itemlist = generictools.post_tmdb_listado(item, itemlist) + + if url_next_page: + title_foot = str(curr_page_num) + if last_page > 0: + title_foot += ' de %s' % str(last_page) + itemlist.append( + Item(channel=item.channel, action="listado_busqueda", title="[COLOR gold][B]Pagina siguiente >> [/B][/COLOR]" + title_foot, url=url_next_page, extra=item.extra)) + + return itemlist + + +def findvideos(item): + logger.info() + itemlist = [] + + data = '' + torrent_data = '' + headers = {'Content-Type': 'application/x-www-form-urlencoded', 'Referer': item.url} #Necesario para el Post del .Torrent + + #Llamamos al método para crear el título general del vídeo, con toda la información obtenida de TMDB + item, itemlist = generictools.post_tmdb_findvideos(item, itemlist) + + #Bajamos los datos de la página de todo menos de Documentales y Varios + if not item.post: + try: + data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url).data) + data = data.replace('"', "'") + patron = "
Formato:<\/b>&\w+;\s?([^<]+)
'): + item_local.quality = scrapertools.find_single_match(data, 'Formato:<\/b>&\w+;\s?([^<]+)
') + elif "hdtv" in item_local.url.lower() or "720p" in item_local.url.lower() or "1080p" in item_local.url.lower() or "4k" in item_local.url.lower(): + item_local.quality = scrapertools.find_single_match(item_local.url, '.*?_([H|7|1|4].*?)\.torrent') + item_local.quality = item_local.quality.replace("_", " ") + + # Extrae el tamaño del vídeo + if scrapertools.find_single_match(data, 'Tama.*?:<\/b>&\w+;\s?([^<]+B)Tama.*?:<\/b>&\w+;\s?([^<]+B))", "", httptools.downloadpage(item.url).data) + data = data.replace('"', "'") + except: #Algún error de proceso, salimos + logger.error("ERROR 01: EPISODIOS: La Web no responde o la URL es erronea" + item.url) + itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 01: EPISODIOS:. La Web no responde o la URL es erronea. Si la Web está activa, reportar el error con el log')) + return itemlist + + # Selecciona en tramo que nos interesa + data = scrapertools.find_single_match(data, "(.*?)<\/form>") + + # Prepara el patrón de búsqueda + if item.extra == "documentales": + patron = "" + url, value2, name2 = scrapertools.find_single_match(data, patron) + patron = "" + else: + patron = "[^<]+<\/a><\/td>]+>]+>([^<]+)?<\/div><\/td>" + matches = re.compile(patron, re.DOTALL).findall(data) + if not matches: #error + item = generictools.web_intervenida(item, data) #Verificamos que no haya sido clausurada + if item.intervencion: #Sí ha sido clausurada judicialmente + item, itemlist = generictools.post_tmdb_episodios(item, itemlist) #Llamamos al método para el pintado del error + return itemlist #Salimos + + logger.error("ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web " + " / PATRON: " + patron + " / DATA: " + data) + itemlist.append(item.clone(action='', title=item.channel.capitalize() + ': ERROR 02: EPISODIOS: Ha cambiado la estructura de la Web. Reportar el error con el log')) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos + + #logger.debug("PATRON: " + patron) + #logger.debug(matches) + #logger.debug(data) + + # Recorremos todos los episodios generando un Item local por cada uno en Itemlist + for scrapedurl, year in matches: + item_local = item.clone() + item_local.action = "findvideos" + item_local.contentType = "episode" + item_local.extra = "episodios" + if item_local.library_playcounts: + del item_local.library_playcounts + if item_local.library_urls: + del item_local.library_urls + if item_local.path: + del item_local.path + if item_local.update_last: + del item_local.update_last + if item_local.update_next: + del item_local.update_next + if item_local.channel_host: + del item_local.channel_host + + item_local.title = '' + item_local.context = "['buscar_trailer']" + item_local.url = scrapedurl + + if item.extra == "documentales": #llamada con post + name1 = scrapedurl + value1 = year + item_local.url = item.url + item_local.url_post = url + item_local.post = '%s=%s&%s=%s' % (name1, value1, name2, value2) + item_local.contentSeason = 1 + try: + item_local.contentEpisodeNumber = int(value1) + 1 + except: + item_local.contentEpisodeNumber = 1 + + else: + scrapedtemp, scrapedepi = scrapertools.find_single_match(item_local.url, "\/.*?-(\d{1,2})x(\d{1,2})[-|\/]") + scrapedepi2 = scrapertools.find_single_match(item_local.url, "\/.*?-\d{1,2}x\d{1,2}-al-\d{1,2}x(\d{1,2})[-|\/]") + item_local.title = '%sx%s -' % (scrapedtemp, str(scrapedepi).zfill(2)) + try: + item_local.contentSeason = int(scrapedtemp) + except: + item_local.contentSeason = 1 + try: + item_local.contentEpisodeNumber = int(scrapedepi) + except: + item_local.contentEpisodeNumber = 1 + try: + scrapedepi2 = int(scrapedepi2) + except: + scrapedepi2 = '' + + if scrapedepi2: + item_local.title = '%sx%s al %s -' % (scrapedtemp, str(scrapedepi).zfill(2), str(scrapedepi2).zfill(2)) + #item_local.infoLabels['episodio_titulo'] = 'al %s' % scrapedepi2 + else: + item_local.title = '%sx%s -' % (scrapedtemp, str(scrapedepi).zfill(2)) + + if year: + item_local.infoLabels['year'] = scrapertools.find_single_match(year, r"(\d{4})") + + itemlist.append(item_local.clone()) + + if len(itemlist) > 1: + itemlist = sorted(itemlist, key=lambda it: (int(it.contentSeason), int(it.contentEpisodeNumber))) #clasificamos + + # Pasada por TMDB y clasificación de lista por temporada y episodio + tmdb.set_infoLabels(itemlist, True) + + #Llamamos al método para el maquillaje de los títulos obtenidos desde TMDB + item, itemlist = generictools.post_tmdb_episodios(item, itemlist) + + return itemlist + + +def actualizar_titulos(item): + logger.info() + itemlist = [] + + from platformcode import launcher + + item = generictools.update_title(item) #Llamamos al método que actualiza el título con tmdb.find_and_set_infoLabels + + #Volvemos a la siguiente acción en el canal + return launcher.run(item) + + +def search(item, texto): + itemlist = [] + logger.info("search:" + texto) + texto = texto.replace(" ", "+") + + item.url = host + "search/%s/page/1/" % (texto) + + try: + itemlist = listado_busqueda(item) + return itemlist + + # Se captura la excepción, para no interrumpir al buscador global si un canal falla + except: + for line in sys.exc_info(): + logger.error("%s" % line) + return [] + + +def newest(categoria): + logger.info() + itemlist = [] + item = Item() + try: + if categoria == 'peliculas': + item.url = host + "peliculas/" + item.extra = "novedades" + item.channel = "mejortorrent1" + item.tipo = False + itemlist = listado_busqueda(item) + if "Pagina siguiente >>" in itemlist[-1].title: + itemlist.pop() + + if categoria == 'documentales': + item.url = host + "documentales/" + item.extra = "documentales" + item.channel = "mejortorrent1" + item.tipo = False + itemlist = listado(item) + if "Pagina siguiente >>" in itemlist[-1].title: + itemlist.pop() + # Se captura la excepción, para no interrumpir al canal novedades si un canal falla + except: + import sys + for line in sys.exc_info(): + logger.error("{0}".format(line)) + return [] + + return itemlist From a8f27d1508235976998580c42e7cb6cee45084b2 Mon Sep 17 00:00:00 2001 From: Kingbox <37674310+lopezvg@users.noreply.github.com> Date: Wed, 18 Jul 2018 22:13:01 +0200 Subject: [PATCH 48/52] =?UTF-8?q?Redireccionamiento=20autom=C3=A1ticos=20d?= =?UTF-8?q?e=20series=20y=20peliculas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit En caso de cambio de dominio o clausura judicial, se puede parametrizar la migración a un nuevo dominio y/o canal --- plugin.video.alfa/channels/newpct1.json | 8 + plugin.video.alfa/channels/newpct1.py | 118 ++++--- plugin.video.alfa/channels/videolibrary.py | 20 +- plugin.video.alfa/lib/generictools.py | 308 +++++++++++++++--- .../channels/thumb/thumb_intervenido_gc.png | Bin 0 -> 85976 bytes .../channels/thumb/thumb_intervenido_pn.jpeg | Bin 0 -> 526939 bytes .../themes/default/thumb_intervenido_gc.png | Bin 0 -> 85976 bytes plugin.video.alfa/videolibrary_service.py | 6 +- 8 files changed, 370 insertions(+), 90 deletions(-) create mode 100644 plugin.video.alfa/resources/media/channels/thumb/thumb_intervenido_gc.png create mode 100644 plugin.video.alfa/resources/media/channels/thumb/thumb_intervenido_pn.jpeg create mode 100644 plugin.video.alfa/resources/media/themes/default/thumb_intervenido_gc.png diff --git a/plugin.video.alfa/channels/newpct1.json b/plugin.video.alfa/channels/newpct1.json index 8be41cb8..364395eb 100644 --- a/plugin.video.alfa/channels/newpct1.json +++ b/plugin.video.alfa/channels/newpct1.json @@ -57,6 +57,14 @@ "enabled": true, "visible": false }, + { + "id": "intervenidos_channels_list", + "type": "text", + "label": "Lista de canales y clones de NewPct1 intervenidos y orden de sustitución de URLs", + "default": "('0', 'canal_org', 'canal_des', 'url_org', 'url_des', 'patron1', 'patron2', 'patron3', 'patron4', 'patron5', 'content_inc', 'content_exc', 'ow_force'), ('1', 'mejortorrent', 'mejortorrent1', 'http://www.mejortorrent.com/', 'https://mejortorrent1.com/', '(http.?:\/\/.*?\/)', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-(?:[^-]+-)([^0-9]+-)', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-(?:[^-]+-)[^0-9]+-\\d+-(Temporada-).html', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-(?:[^-]+-)[^0-9]+-(\\d+)-', '', 'tvshow, season', '', 'force'), ('1', 'mejortorrent', 'mejortorrent1', 'http://www.mejortorrent.com/', 'https://mejortorrent1.com/', '(http.?:\/\/.*?\/)', 'http.?:\/\/.*?\/.*?-torrent.?-[^-]+-([^.]+).html', '', '', '', 'movie', '', 'force')", + "enabled": true, + "visible": false + }, { "id": "seleccionar_ult_temporadda_activa", "type": "bool", diff --git a/plugin.video.alfa/channels/newpct1.py b/plugin.video.alfa/channels/newpct1.py index b17651bf..d0f6330f 100644 --- a/plugin.video.alfa/channels/newpct1.py +++ b/plugin.video.alfa/channels/newpct1.py @@ -34,8 +34,16 @@ for active_clone, channel_clone, host_clone, contentType_clone, info_clone in cl if i == host_index: channel_clone_name = channel_clone #Nombre del Canal elegido host = host_clone #URL del Canal elegido - break + if active_clone == "1": #Comprueba que el clone esté activo + break + channel_clone_name = "*** DOWN ***" #es un fallo masivo ??? + for active_clone, channel_clone, host_clone, contentType_clone, info_clone in clone_list: + if active_clone == "1": #Comprueba que el clone esté activo + channel_clone_name = channel_clone #Nombre del Canal elegido + host = host_clone #URL del Canal elegido + break i += 1 + item = Item() if item.channel != channel_py: item.channel = channel_py @@ -72,6 +80,10 @@ def mainlist(item): thumb_docus = get_thumb("channels_documentary.png") thumb_buscar = get_thumb("search.png") thumb_settings = get_thumb("setting_0.png") + + if channel_clone_name == "*** DOWN ***": #Ningún clones activo !!! + itemlist.append(item.clone(action='', title="[COLOR yellow]Ningún canal NewPct1 activo[/COLOR]")) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos y salimos itemlist.append(Item(channel=item.channel, action="submenu_novedades", title="Novedades", url=item.channel_host + "ultimas-descargas/", extra="novedades", thumbnail=thumb_pelis, category=item.category, channel_host=item.channel_host)) @@ -103,7 +115,6 @@ def settingCanal(item): return - def submenu(item): logger.info() @@ -183,6 +194,10 @@ def submenu_novedades(item): item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() item.extra = "novedades" + if channel_clone_name == "*** DOWN ***": #Ningún clones activo !!! + itemlist.append(item.clone(action='', title="[COLOR yellow]Ningún canal NewPct1 activo[/COLOR]")) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos y salimos + try: data = re.sub(r"\n|\r|\t|\s{2,}", "", httptools.downloadpage(item.url, timeout=timeout_search).data) except: @@ -307,7 +322,7 @@ def listado(item): data = re.sub(r"\n|\r|\t|\s{2}|()", "", httptools.downloadpage(item.url, timeout=timeout).data) except: pass - + patron = '
    (.*?)
' #seleccionamos el bloque que nos interesa if not data or (not scrapertools.find_single_match(data, patron) and not '

( 0 ) Resultados encontrados ' in data): logger.error("ERROR 01: LISTADO: La Web no responde o ha cambiado de URL: " + item.url + " / DATA: " + data) @@ -412,7 +427,7 @@ def listado(item): cnt_pag += cnt_tot #Tratamos todos los contenidos, creardo una variable local de Item - for scrapedurl, scrapedtitle, scrapedthumbnail, title_alt, calidad in matches: + for scrapedurl, scrapedtitle, scrapedthumbnail, scrapedtitle_alt, calidad in matches: item_local = item.clone() if item_local.tipo: del item_local.tipo @@ -422,13 +437,15 @@ def listado(item): del item_local.post_num if item_local.category: del item_local.category + if item_local.intervencion: + del item_local.intervencion item_local.title = '' item_local.context = "['buscar_trailer']" # Limpiamos títulos, Sacamos datos de calidad, audio y lenguaje title = re.sub('\r\n', '', scrapedtitle).decode('iso-8859-1').encode('utf8').strip() - title_alt = re.sub('\r\n', '', title_alt).decode('iso-8859-1').encode('utf8').strip() + title_alt = re.sub('\r\n', '', scrapedtitle_alt).decode('iso-8859-1').encode('utf8').strip() title = title.replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o").replace("ú", "u").replace("ü", "u").replace("�", "ñ").replace("ñ", "ñ").replace(".", " ") title_alt = title_alt.replace("á", "a").replace("é", "e").replace("í", "i").replace("ó", "o").replace("ú", "u").replace("ü", "u").replace("�", "ñ").replace("ñ", "ñ") @@ -590,6 +607,10 @@ def listado_busqueda(item): item.category_new = item.category item.category = scrapertools.find_single_match(item.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() + if channel_clone_name == "*** DOWN ***": #Ningún clones activo !!! + itemlist.append(item.clone(action='', title="[COLOR yellow]Ningún canal NewPct1 activo[/COLOR]")) + return itemlist #si no hay más datos, algo no funciona, pintamos lo que tenemos y salimos + itemlist = [] cnt_tot = 40 # Poner el num. máximo de items por página. Dejamos que la web lo controle cnt_title = 0 # Contador de líneas insertadas en Itemlist @@ -741,7 +762,7 @@ def listado_busqueda(item): #logger.debug(data) cnt_title = 0 - for scrapedurl, scrapedtitle, scrapedthumbnail, calidad, year, size in matches: + for scrapedurl, scrapedtitle, scrapedthumbnail, calidad, scrapedyear, scrapedsize in matches: cnt_pag += 1 #Realiza un control de las series que se añaden, ya que el buscador devuelve episodios y no las series completas @@ -786,15 +807,18 @@ def listado_busqueda(item): del item_local.adult item_local.folder = True del item_local.folder + if item_local.intervencion: + del item_local.intervencion item_local.title = '' item_local.context = "['buscar_trailer']" item_local.contentType = "" + url = scrapedurl title_subs = [] #Si son episodios sueltos de Series que vienen de Novedades, se busca la url de la Serie - if item.extra == "novedades" and "/serie" in scrapedurl and episodio_serie == 1: - item_local.url = scrapedurl + if item.extra == "novedades" and "/serie" in url and episodio_serie == 1: + item_local.url = url item_local.extra2 = 'serie_episodios' #Creamos acción temporal excluyente para otros clones if item_local.category == 'Mispelisyseries': #Esta web no gestiona bien el cambio de episodio a Serie pattern = 'class="btn-torrent">.*?window.location.href = "(.*?)";' #Patron para .torrent @@ -816,39 +840,39 @@ def listado_busqueda(item): title_subs += ["ERR"] elif item_local.channel_alt: #Si ha habido fail-over, lo comento - scrapedurl = scrapedurl.replace(item_local.channel_alt, item_local.category.lower()) + url = url.replace(item_local.channel_alt, item_local.category.lower()) title_subs += ["ALT"] try: pattern = '
.*?

.*? 0: + itemlist = itemlist_fo + itemlist del item.category_new @@ -337,6 +354,7 @@ def post_tmdb_listado(item, itemlist): def post_tmdb_episodios(item, itemlist): logger.info() + itemlist_fo = [] """ @@ -400,7 +418,7 @@ def post_tmdb_episodios(item, itemlist): if item.title_from_channel: del item.title_from_channel - for item_local in itemlist: #Recorremos el Itenlist generado por el canal + for item_local in itemlist: #Recorremos el Itemlist generado por el canal if item_local.add_videolibrary: del item_local.add_videolibrary if item_local.add_menu: @@ -409,6 +427,23 @@ def post_tmdb_episodios(item, itemlist): del item_local.contentSeason_save if item_local.title_from_channel: del item_local.title_from_channel + if item_local.library_playcounts: + del item_local.library_playcounts + if item_local.library_urls: + del item_local.library_urls + if item_local.path: + del item_local.path + if item_local.nfo: + del item_local.nfo + if item_local.update_last: + del item_local.update_last + if item_local.update_next: + del item_local.update_next + if item_local.channel_host: + del item_local.channel_host + if item_local.intervencion: + del item_local.intervencion + #logger.debug(item_local) #Ajustamos el nombre de la categoría si es un clone de NewPct1 item_local.category = scrapertools.find_single_match(item_local.url, 'http.?\:\/\/(?:www.)?(\w+)\.\w+\/').capitalize() @@ -532,7 +567,7 @@ def post_tmdb_episodios(item, itemlist): logger.error("ERROR 07: EPISODIOS: Num de Temporada fuera de rango " + " / TEMPORADA: " + str(item_local.contentSeason) + " / " + str(item_local.contentEpisodeNumber) + " / MAX_TEMPORADAS: " + str(num_temporada_max) + " / LISTA_TEMPORADAS: " + str(num_episodios_lista)) #Permitimos la actualización de los títulos, bien para uso inmediato, o para añadir a la videoteca - itemlist.append(item.clone(title="** [COLOR yelow]Actualizar Títulos - vista previa videoteca[/COLOR] **", action="actualizar_titulos", extra="episodios", tmdb_stat=False, from_action=item.action, from_title=item.title)) + itemlist.append(item.clone(title="** [COLOR yelow]Actualizar Títulos - vista previa videoteca[/COLOR] **", action="actualizar_titulos", tmdb_stat=False, from_action=item.action, from_title=item.title)) #Borro num. Temporada si no viene de menú de Añadir a Videoteca y no está actualizando la Videoteca if not item.library_playcounts: #si no está actualizando la Videoteca @@ -583,15 +618,25 @@ def post_tmdb_episodios(item, itemlist): else: #Es un canal estándar, sólo una linea de Añadir a Videoteca itemlist.append(item.clone(title="[COLOR yellow]Añadir esta serie a videoteca-[/COLOR]" + title, action="add_serie_to_library", extra="episodios", add_menu=True)) - #Si ha habido fail-over, lo comento - if channel_alt: - itemlist.append(item.clone(action='', title="[COLOR yellow]" + channel_alt.capitalize() + '[/COLOR] [ALT ] en uso')) - itemlist.append(item.clone(action='', title="[COLOR yellow]" + item.category.capitalize() + '[/COLOR] inaccesible')) + #Si intervención judicial, alerto!!! + if item.intervencion: + for clone_inter, autoridad in item.intervencion: + thumb_intervenido = get_thumb(autoridad) + itemlist_fo.append(item.clone(action='', title="[COLOR yellow]" + clone_inter.capitalize() + ': [/COLOR]' + intervenido_judicial + '. Reportar el problema en el foro', thumbnail=thumb_intervenido)) + del item.intervencion - if item.add_videolibrary: #Estamos Añadiendo a la Videoteca. - del item.add_videolibrary #Borramos ya el indicador - if item.add_menu: #Opción que avisa si se ha añadido a la Videoteca - del item.add_menu #desde la página de Episodios o desde Menú Contextual + #Si ha habido fail-over, lo comento + if channel_alt: + itemlist_fo.append(item.clone(action='', title="[COLOR yellow]" + channel_alt.capitalize() + '[/COLOR] [ALT ] en uso')) + itemlist_fo.append(item.clone(action='', title="[COLOR yellow]" + item.category.capitalize() + '[/COLOR] inaccesible')) + + if len(itemlist_fo) > 0: + itemlist = itemlist_fo + itemlist + + if item.add_videolibrary: #Estamos Añadiendo a la Videoteca. + del item.add_videolibrary #Borramos ya el indicador + if item.add_menu: #Opción que avisa si se ha añadido a la Videoteca + del item.add_menu #desde la página de Episodios o desde Menú Contextual #logger.debug(item) @@ -631,7 +676,7 @@ def post_tmdb_findvideos(item, itemlist): #Salvamos la información de max num. de episodios por temporada para despues de TMDB num_episodios = item.contentEpisodeNumber - if item.infoLabels['temporada_num_episodios']: + if item.infoLabels['temporada_num_episodios'] and item.contentEpisodeNumber <= item.infoLabels['temporada_num_episodios']: num_episodios = item.infoLabels['temporada_num_episodios'] # Obtener la información actualizada del Episodio, si no la hay. Siempre cuando viene de Videoteca @@ -712,6 +757,13 @@ def post_tmdb_findvideos(item, itemlist): elif (config.get_setting("quit_channel_name", "videolibrary") == 1 or item.channel == channel_py) and item.contentChannel == "videolibrary": title_gen = '%s: %s' % (item.category.capitalize(), title_gen) + #Si intervención judicial, alerto!!! + if item.intervencion: + for clone_inter, autoridad in item.intervencion: + thumb_intervenido = get_thumb(autoridad) + itemlist.append(item.clone(action='', title="[COLOR yellow]" + clone_inter.capitalize() + ': [/COLOR]' + intervenido_judicial + '. Reportar el problema en el foro', thumbnail=thumb_intervenido)) + del item.intervencion + #Pintamos el pseudo-título con toda la información disponible del vídeo itemlist.append(item.clone(action="", server = "", title=title_gen)) #Título con todos los datos del vídeo @@ -747,12 +799,13 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None): La llamada al método desde el principio de Submenu, Listado_Búsqueda, Episodios y Findvideos, es: from lib import generictools - item, data = generictools.fail_over_newpct1(item, patron) + item, data = generictools.fail_over_newpct1(item, patron[, patron2=][, timeout=]) - Entrada: patron: con este patron permite verificar si los datos de la nueva web son buenos - Entrada (opcional): patron2: segundo patron opcional - Entrada (opcional): timeout: valor de espera máximo en download de página. Por defecto 3 - - Saida: data: devuelve los datos del la nueva web. Si vuelve vacía es que no se ha encontrado alternativa + - Entrada (opcional): patron=True: pide que sólo verifique si el canal en uso está activo, si no, ofrece otro + - Salida: data: devuelve los datos del la nueva web. Si vuelve vacía es que no se ha encontrado alternativa """ #logger.debug(item) @@ -771,13 +824,12 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None): #Array con los datos de los canales alternativos #Cargamos en .json del canal para ver las listas de valores en settings - fail_over_list = channeltools.get_channel_json(channel_py) - for settings in fail_over_list['settings']: #Se recorren todos los settings + fail_over = channeltools.get_channel_json(channel_py) + for settings in fail_over['settings']: #Se recorren todos los settings if settings['id'] == "clonenewpct1_channels_list": #Encontramos en setting - fail_over_list = settings['default'] #Carga lista de clones + fail_over = settings['default'] #Carga lista de clones break - #fail_over_list = config.get_setting('clonenewpct1_channels_list', channel_py) - fail_over_list = ast.literal_eval(fail_over_list) + fail_over_list = ast.literal_eval(fail_over) #Recorremos el Array identificando el canal que falla for active, channel, channel_host, contentType, action_excluded in fail_over_list: @@ -790,8 +842,9 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None): channel_failed = channel #salvamos el nombre del canal o categoría channel_host_failed = channel_host #salvamos el nombre del host channel_url_failed = item.url #salvamos la url + if patron == True and active == '1': #solo nos han pedido verificar el clone + return (item, data) #nos vamos, con el mismo clone, si está activo if (item.action == 'episodios' or item.action == 'findvideos') and item.contentType not in contentType: #soporta el fail_over de este contenido? - data = '' logger.error("ERROR 99: " + item.action.upper() + ": Acción no soportada para Fail-Over en canal: " + item.url) return (item, data) #no soporta el fail_over de este contenido, no podemos hacer nada break @@ -799,7 +852,7 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None): if not channel_failed: logger.error(item) return (item, data) #Algo no ha funcionado, no podemos hacer nada - + #Recorremos el Array identificando canales activos que funcionen, distintos del caído, que soporten el contenido for active, channel, channel_host, contentType, action_excluded in fail_over_list: data_alt = '' @@ -819,8 +872,11 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None): item.channel_host = channel_host #quitamos el código de series, porque puede variar entre webs if item.action == "episodios" or item.action == "get_seasons": - item.url = re.sub(r'\/\d+$', '', item.url) #parece que con el título solo ecuentra la serie, normalmente... + item.url = re.sub(r'\/\d+\/?$', '', item.url) #parece que con el título solo ecuentra la serie, normalmente... + if patron == True: #solo nos han pedido verificar el clone + return (item, data) #nos vamos, con un nuevo clone + #Leemos la nueva url try: if item.post: @@ -842,12 +898,14 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None): data_alt = scrapertools.find_single_match(data_alt, patron2) if not data_alt: #no ha habido suerte, probamos con el siguiente canal logger.error("ERROR 02: " + item.action + ": Ha cambiado la estructura de la Web: " + item.url + " / Patron: " + patron) + web_intervenida(item, data) data = '' continue else: break #por fin !!! Este canal parece que funciona else: logger.error("ERROR 02: " + item.action + ": Ha cambiado la estructura de la Web: " + item.url + " / Patron: " + patron) + web_intervenida(item, data) data = '' continue @@ -869,14 +927,88 @@ def fail_over_newpct1(item, patron, patron2=None, timeout=None): #logger.debug(item) return (item, data) + - -def redirect_clone_newpct1(item): +def web_intervenida(item, data, desactivar=True): logger.info() """ - Llamada para redirigir cualquier llamada a un clone de NewPct1 a NewPct1.py + Llamada para verificar si la caída de un clone de Newpct1 es debido a una intervención judicial + + La llamada al método desde es: + + from lib import generictools + item = generictools.web_intervenida(item, data[, desactivar=True]) + + - Entrada: data: resultado de la descarga. Nos permite analizar si se trata de una intervención + - Entrada: desactivar=True: indica que desactiva el canal o clone en caso de intervención judicial + - Salida: item.intervencion: devuele un array con el nombre del clone intervenido y el thumb de la autoridad que interviene. El canal puede anunciarlo. + - Salida: Si es un clone de Newpct1, se desactiva el clone en el .json del Canal. Si es otro canal, se desactiva el canal en su .json. + + """ + + intervencion = () + + if intervenido_policia in data or intervenido_guardia in data: #Verificamos que sea una intervención judicial + judicial = 'intervenido_gc.png' #Por defecto thumb de la Benemérita + if intervenido_policia in data: + judicial = 'intervenido_pn.jpeg' #thumb de la Policia Nacional + category = item.category + if not item.category: + category = item.channel + intervencion = (category, judicial) #Guardamos el nombre canal/categoría y el thumb judicial + if not item.intervencion: + item.intervencion = [] #Si no existe el array, lo creamos + item.intervencion += [intervencion] #Añadimos esta intervención al array + + logger.error("ERROR 99: " + category + ": " + intervenido_judicial + ": " + item.url + ": DESACTIVADO=" + str(desactivar) + " / DATA: " + data) + + if desactivar == False: #Si no queremos desactivar el canal, nos vamos + return item + + #Cargamos en .json del canal para ver las listas de valores en settings. Carga las claves desordenadas !!! + from core import filetools + import json + json_data = channeltools.get_channel_json(item.channel) + + if item.channel == channel_py: #Si es un clone de Newpct1, lo desactivamos + for settings in json_data['settings']: #Se recorren todos los settings + if settings['id'] == "clonenewpct1_channels_list": #Encontramos en setting + action_excluded = scrapertools.find_single_match(settings['default'], "\('\d', '%s', '[^']+', '[^']*', '([^']*)'\)" % item.category.lower()) #extraemos el valor de action_excluded + if action_excluded: + if "intervenido" not in action_excluded: + action_excluded += ', %s' % judicial #Agregamos el thumb de la autoridad judicial + else: + action_excluded = '%s' % judicial + + #Reemplazamos el estado a desactivado y agregamos el thumb de la autoridad judicial + settings['default'] = re.sub(r"\('\d', '%s', ('[^']+', '[^']*'), '[^']*'\)" % item.category.lower(), r"('0', '%s', \1, '%s')" % (item.category.lower(), action_excluded), settings['default']) + + break + else: + json_data['active'] = False #Se desactiva el canal + json_data['thumbnail'] = ', thumb_%s' % judicial #Guardamos el thumb de la autoridad judicial + + #Guardamos los cambios hechos en el .json + try: + channel_path = filetools.join(config.get_runtime_path(), "channels", item.channel + ".json") + with open(channel_path, 'w') as outfile: #Grabamos el .json actualizado + json.dump(json_data, outfile, sort_keys = True, indent = 2, ensure_ascii = False) + except: + logger.error("ERROR 98 al salvar el archivo: %s" % channel_path) + + #logger.debug(item) + + return item + + +def redirect_clone_newpct1(item, head_nfo=None, it=None, overwrite=False, path=False): + logger.info() + + """ + + Llamada para redirigir cualquier llamada a un clone de NewPct1 a NewPct1.py, o de una url de un canal caido a una alternativa Incluye las llamadas estándar del canal y la llamadas externas: - Play fron Library - Videolibrary Update @@ -884,23 +1016,123 @@ def redirect_clone_newpct1(item): La lógica es reemplazar item.channel por "newpct1" y dejar el nombre del clone en item.category. De esta forma utiliza siempre el código de NewPct1.py, aunque con las urls y apariencia del clone seleccionado por el usuario. - Este método interroga la configruación de NewPct1 para extraer la lista de canales clones. Si item.channel es un clone de NewPct1 y está en esa lista, actualiza item.channel='newpct1' + En el caso de un canal/clone caído o intervenido judicialmente, puede reemplazar el canal en item.channel, o el clone en item.category, y la parte de item.url que se introduzca en una tabla. Esta conversión sólo se realiza si el canal original está inactivo, pero lo realiza siempre para los clones, o si el canal de origen y destino son los mismos. - La llamada recibe el parámetro Item y lo devuleve actualizado + Este método interroga el .json de NewPct1 para extraer la lista de canales clones. Si item.channel es un clone de NewPct1 y está en esa lista, actualiza item.channel='newpct1' + + También en este .json está la tabla para la conversión de canales y urls: + - activo: está o no activa esta entrada + - canal_org: canal o clone de origen + - canal_des: canal o clone de destino (puede ser el mismo) + - url_org: parte de la url a sustituir de canal o clone de origen + - url_des: parte de la url a sustituir de canal o clone de destino + - patron1: expresión Regex aplicable a la url (opcional) + - patron2: expresión Regex aplicable a la url (opcional) + - patron3: expresión Regex aplicable a la url (opcional) + - patron4: expresión Regex aplicable a la url (opcional) + - patron5: expresión Regex aplicable a la url (opcional) + - content_inc: contenido al que aplica esta entrada, o * (item.contentType o item.extra) + - content_exc: contenido que se excluye de esta entrada (item.contentType) (opcional) + - ow_force: indicador para la acción de "videolibrary_service.py". Puede crear la variable item.ow_force: + - force: indica al canal que analize toda la serie y que videolibrary_service la reescriba + - auto: indica a videolibrary_service que la reescriba + - no: no acción especial para videolibrary_service + ejemplo: ('1', 'mejortorrent', 'mejortorrent1', 'http://www.mejortorrent.com/', 'https://mejortorrent1.com/', 'auto') + + La llamada recibe el parámetro Item, el .nfoy los devuleve actualizados, así como opcionalmente el parámetro "overwrite· que puede forzar la reescritura de todos los archivos de la serie """ + if not it: + it = Item() + #logger.debug(item) + ow_force_param = True + channel_enabled = False + update_stat = 0 #Array con los datos de los canales alternativos - #Cargamos en .json del canal para ver las listas de valores en settings + #Cargamos en .json de Newpct1 para ver las listas de valores en settings fail_over_list = channeltools.get_channel_json(channel_py) for settings in fail_over_list['settings']: #Se recorren todos los settings if settings['id'] == "clonenewpct1_channels_list": #Encontramos en setting fail_over_list = settings['default'] #Carga lista de clones - break - #fail_over_list = config.get_setting('clonenewpct1_channels_list', channel_py) - + if settings['id'] == "intervenidos_channels_list": #Encontramos en setting + intervencion = settings['default'] #Carga lista de clones y canales intervenidos + + #primero tratamos los clones de Newpct1 + channel_alt = item.channel #Salvamos en nombre del canal o clone channel = "'%s'" % item.channel - if channel in fail_over_list: + if channel in fail_over_list: #Si es un clone de Newpct1, se actualiza el canal item.channel = channel_py + + #Ahora tratamos las webs intervenidas, tranformamos la url, el nfo y borramos los archivos obsoletos de la serie + if channel not in intervencion: #Hacemos una lookup para ver si... + return (item, it, overwrite) #... el canal/clone está listado + + import ast + intervencion_list = ast.literal_eval(intervencion) #Convertir a Array el string + #logger.debug(intervencion_list) + if item.channel != channel_py: + channel_enabled = channeltools.is_enabled(item.channel) #Verificamos que el canal esté inactivo + for activo, canal_org, canal_des, url_org, url_des, patron1, patron2, patron3, patron4, patron5, content_inc, content_exc, ow_force in intervencion_list: + if activo == '1' and canal_org == channel_alt: #Es esta nuestra entrada? + if item.contentType == "list": #Si viene de Videolibrary, le cambiamos ya el canal + if item.channel != channel_py: + item.channel = canal_des #Cambiamos el canal. Si es clone, lo hace el canal + if item.contentType not in content_inc: + continue + if item.contentType in content_exc: #Es esta nuestra entrada? + continue + if channel_enabled and canal_org != canal_des: #Si el canal está activo, puede ser solo... + continue #... una intervención que afecte solo a una región + item.url = item.url.replace(url_org, url_des) #reemplzamos una parte de url + if patron1: #Hay expresión regex? + url = scrapertools.find_single_match(item.url, patron1) #La aplicamos a url + if patron2: #Hay más expresión regex? + url += scrapertools.find_single_match(item.url, patron2) #La aplicamos a url + if patron3: #Hay más expresión regex? + url += scrapertools.find_single_match(item.url, patron3) #La aplicamos a url + if patron4: #Hay más expresión regex? + url += scrapertools.find_single_match(item.url, patron4) #La aplicamos a url + if patron5: #Hay más expresión regex? + url += scrapertools.find_single_match(item.url, patron5) #La aplicamos a url + item.url = url #Guardamos la suma de los resultados intermedios + update_stat += 1 #Ya hemos actualizado algo + + if update_stat > 0: #Ha habido alguna actualización? Entonces salvamos + if item.channel == channel_py: #Si es Newpct1... + if item.contentType == "tvshow": + item.url = re.sub(r'\/\d+\/?$', '', item.url) #parece que con el título ecuentra la serie, normalmente... + if it.url: + it.url = item.url #reemplazamos una parte de url en .nfo, aunque no suele haberla + if item.library_urls: + item.library_urls.pop(canal_org, None) + item.library_urls = {canal_des: item.url} + it.library_urls = item.library_urls + if item.channel != channel_py: + item.channel = canal_des #Cambiamos el canal. Si es clone, lo hace el canal + if channel_alt == item.category.lower(): #Actualizamos la Categoría y si la tenía + item.category = item.channel.capitalize() + if ow_force == 'force': #Queremos que el canal revise la serie entera? + item.ow_force = "1" #Se lo decimos + if ow_force in ['force', 'auto']: #Sobreescribir la series? + overwrite = ow_force_param #Sí, lo marcamos + + if item.contentType in ['tvshow', 'season'] and it.library_urls: + if path == False: + TVSHOWS_PATH = item.path + else: + TVSHOWS_PATH = path - return item \ No newline at end of file + # Listamos todos los ficheros de la serie, asi evitamos tener que comprobar si existe uno por uno + raiz, carpetas_series, ficheros = filetools.walk(TVSHOWS_PATH).next() + ficheros = [filetools.join(TVSHOWS_PATH, f) for f in ficheros] #Almacenamos la lista de archivos de la carpeta + canal_erase = '[%s]' % canal_org + for archivo in ficheros: + if canal_erase in archivo: #Borramos los .json que sean del canal intervenido + filetools.remove(archivo) + if "tvshow.nfo" in archivo: + filetools.write(archivo, head_nfo + it.tojson()) #escribo el .nfo por si aborta update + + #logger.debug(item) + + return (item, it, overwrite) \ No newline at end of file diff --git a/plugin.video.alfa/resources/media/channels/thumb/thumb_intervenido_gc.png b/plugin.video.alfa/resources/media/channels/thumb/thumb_intervenido_gc.png new file mode 100644 index 0000000000000000000000000000000000000000..eb0dcf4fa95bfe8dd18e22456d680f6612d61064 GIT binary patch literal 85976 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 z Date: Wed, 18 Jul 2018 22:13:32 +0200 Subject: [PATCH 49/52] =?UTF-8?q?Quasar:=20marca=20videos=20vistos=20autom?= =?UTF-8?q?=C3=A1ticamente?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platformcode/platformtools.py | 8 ++++---- .../themes/default/thumb_intervenido_pn.jpeg | Bin 0 -> 526939 bytes 2 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 plugin.video.alfa/resources/media/themes/default/thumb_intervenido_pn.jpeg diff --git a/plugin.video.alfa/platformcode/platformtools.py b/plugin.video.alfa/platformcode/platformtools.py index b928e2db..506a6676 100644 --- a/plugin.video.alfa/platformcode/platformtools.py +++ b/plugin.video.alfa/platformcode/platformtools.py @@ -1055,14 +1055,14 @@ def play_torrent(item, xlistitem, mediaurl): time_limit = time.time() + 150 #Marcamos el timepo máx. de buffering while not is_playing() and time.time() < time_limit: #Esperamos mientra buffera time.sleep(5) #Repetimos cada intervalo - logger.debug(str(time_limit)) + #logger.debug(str(time_limit)) if is_playing(): #Ha terminado de bufferar o ha cancelado from platformcode import xbmc_videolibrary xbmc_videolibrary.mark_auto_as_watched(item) #Marcamos como visto al terminar - logger.debug("Llamado el marcado") - else: - logger.debug("Video cancelado o timeout") + #logger.debug("Llamado el marcado") + #else: + #logger.debug("Video cancelado o timeout") if seleccion == 1: from platformcode import mct diff --git a/plugin.video.alfa/resources/media/themes/default/thumb_intervenido_pn.jpeg b/plugin.video.alfa/resources/media/themes/default/thumb_intervenido_pn.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..f9a87e4a63ce10871ef1eb1d876b824e7888195e GIT binary patch literal 526939 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�)<6YQbDX9U5)uMrSB6pE}9R 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 z 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 gepW2Z{ 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 literal 0 HcmV?d00001 From 1dea265e3dd7f5201e32d2f2da4d615b5df3381a Mon Sep 17 00:00:00 2001 From: Alfa <30527549+alfa-addon@users.noreply.github.com> Date: Wed, 18 Jul 2018 15:30:08 -0500 Subject: [PATCH 50/52] v2.5.26 --- addon.xml | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 addon.xml diff --git a/addon.xml b/addon.xml new file mode 100644 index 00000000..0dfbb8c9 --- /dev/null +++ b/addon.xml @@ -0,0 +1,44 @@ + + + + + + + + video + + +

Navega con Kodi por páginas web. + + icon.png + fanart.jpg + resources/media/themes/ss/1.jpg + resources/media/themes/ss/2.jpg + resources/media/themes/ss/3.jpg + resources/media/themes/ss/4.jpg + + [B]Estos son los cambios para esta versión:[/B] + [COLOR green][B]Canales agregados y arreglos[/B][/COLOR] + ¤ mejortorrent ¤ mejortorrent1 + ¤ newpct1 ¤ inkaseries + ¤ wikiseries ¤ powvideo + ¤ mega + ¤ arreglos internos + + ¤ Agradecimientos a @angedam por colaborar en ésta versión + + + Navega con Kodi por páginas web para ver sus videos de manera fácil. + Browse web pages using Kodi + Browse web pages using Kodi, you can easily watch their video content. + [COLOR red]The owners and submitters to this addon do not host or distribute any of the content displayed by these addons nor do they have any affiliation with the content providers.[/COLOR] + all + GNU GPL v3 + foro + web + my@email.com + https://github.com/alfa-addon/addon + + + + From 006fa97596ebd14aca007df07dda5ab34471c5e3 Mon Sep 17 00:00:00 2001 From: Alfa <30527549+alfa-addon@users.noreply.github.com> Date: Wed, 18 Jul 2018 15:30:47 -0500 Subject: [PATCH 51/52] Delete addon.xml --- addon.xml | 44 -------------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 addon.xml diff --git a/addon.xml b/addon.xml deleted file mode 100644 index 0dfbb8c9..00000000 --- a/addon.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - video - - - Navega con Kodi por páginas web. - - icon.png - fanart.jpg - resources/media/themes/ss/1.jpg - resources/media/themes/ss/2.jpg - resources/media/themes/ss/3.jpg - resources/media/themes/ss/4.jpg - - [B]Estos son los cambios para esta versión:[/B] - [COLOR green][B]Canales agregados y arreglos[/B][/COLOR] - ¤ mejortorrent ¤ mejortorrent1 - ¤ newpct1 ¤ inkaseries - ¤ wikiseries ¤ powvideo - ¤ mega - ¤ arreglos internos - - ¤ Agradecimientos a @angedam por colaborar en ésta versión - - - Navega con Kodi por páginas web para ver sus videos de manera fácil. - Browse web pages using Kodi - Browse web pages using Kodi, you can easily watch their video content. - [COLOR red]The owners and submitters to this addon do not host or distribute any of the content displayed by these addons nor do they have any affiliation with the content providers.[/COLOR] - all - GNU GPL v3 - foro - web - my@email.com - https://github.com/alfa-addon/addon - - - - From 129c8f01028d4cc6e4b67b039b672a15a5e275db Mon Sep 17 00:00:00 2001 From: Alfa <30527549+alfa-addon@users.noreply.github.com> Date: Wed, 18 Jul 2018 15:31:04 -0500 Subject: [PATCH 52/52] v2.5.26 --- plugin.video.alfa/addon.xml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/plugin.video.alfa/addon.xml b/plugin.video.alfa/addon.xml index 3d461309..0dfbb8c9 100755 --- a/plugin.video.alfa/addon.xml +++ b/plugin.video.alfa/addon.xml @@ -1,5 +1,5 @@ - + @@ -19,12 +19,13 @@ [B]Estos son los cambios para esta versión:[/B] [COLOR green][B]Canales agregados y arreglos[/B][/COLOR] - ¤ newpct1 ¤ novelashdgratis - ¤ poseidonhd ¤ doramasmp4 - ¤ novelashdgratis ¤ cinecalidad + ¤ mejortorrent ¤ mejortorrent1 + ¤ newpct1 ¤ inkaseries + ¤ wikiseries ¤ powvideo + ¤ mega ¤ arreglos internos - ¤ Agradecimientos a @MrTruth0, @cpradof, @pixo206 por colaborar en ésta versión + ¤ Agradecimientos a @angedam por colaborar en ésta versión Navega con Kodi por páginas web para ver sus videos de manera fácil.

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�)<6YQbDX9U5)uMrSB6pE}9R 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 z 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 gepW2Z{ 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 literal 0 HcmV?d00001 diff --git a/plugin.video.alfa/resources/media/themes/default/thumb_intervenido_gc.png b/plugin.video.alfa/resources/media/themes/default/thumb_intervenido_gc.png new file mode 100644 index 0000000000000000000000000000000000000000..eb0dcf4fa95bfe8dd18e22456d680f6612d61064 GIT binary patch literal 85976 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