diff --git a/multisrc/overrides/mmrcms/animaregia/src/AnimaRegia.kt b/multisrc/overrides/mmrcms/animaregia/src/AnimaRegia.kt new file mode 100644 index 000000000..701a4d776 --- /dev/null +++ b/multisrc/overrides/mmrcms/animaregia/src/AnimaRegia.kt @@ -0,0 +1,7 @@ +package eu.kanade.tachiyomi.extension.pt.animaregia + +import eu.kanade.tachiyomi.multisrc.mmrcms.MMRCMS + +class AnimaRegia : MMRCMS("AnimaRegia", "https://animaregia.net", "pt-BR"){ + override val id: Long = 4378659695320121364 +} diff --git a/src/all/mmrcms/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mmrcms/default/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from src/all/mmrcms/res/mipmap-hdpi/ic_launcher.png rename to multisrc/overrides/mmrcms/default/res/mipmap-hdpi/ic_launcher.png diff --git a/src/all/mmrcms/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mmrcms/default/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from src/all/mmrcms/res/mipmap-mdpi/ic_launcher.png rename to multisrc/overrides/mmrcms/default/res/mipmap-mdpi/ic_launcher.png diff --git a/src/all/mmrcms/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/default/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from src/all/mmrcms/res/mipmap-xhdpi/ic_launcher.png rename to multisrc/overrides/mmrcms/default/res/mipmap-xhdpi/ic_launcher.png diff --git a/src/all/mmrcms/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/default/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from src/all/mmrcms/res/mipmap-xxhdpi/ic_launcher.png rename to multisrc/overrides/mmrcms/default/res/mipmap-xxhdpi/ic_launcher.png diff --git a/src/all/mmrcms/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/default/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from src/all/mmrcms/res/mipmap-xxxhdpi/ic_launcher.png rename to multisrc/overrides/mmrcms/default/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/src/all/mmrcms/res/web_hi_res_512.png b/multisrc/overrides/mmrcms/default/res/web_hi_res_512.png similarity index 100% rename from src/all/mmrcms/res/web_hi_res_512.png rename to multisrc/overrides/mmrcms/default/res/web_hi_res_512.png diff --git a/multisrc/overrides/mmrcms/fallenangels/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mmrcms/fallenangels/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..bffcc3df0 Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangels/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/fallenangels/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mmrcms/fallenangels/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..f2f352ef2 Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangels/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/fallenangels/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/fallenangels/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..82d3d4eac Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangels/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/fallenangels/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/fallenangels/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..1aae40c6d Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangels/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/fallenangels/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/fallenangels/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..375ca9c05 Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangels/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/fallenangels/res/web_hi_res_512.png b/multisrc/overrides/mmrcms/fallenangels/res/web_hi_res_512.png new file mode 100644 index 000000000..8d2327466 Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangels/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..bffcc3df0 Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..f2f352ef2 Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..82d3d4eac Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..1aae40c6d Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..375ca9c05 Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangelsscans/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/fallenangelsscans/res/web_hi_res_512.png b/multisrc/overrides/mmrcms/fallenangelsscans/res/web_hi_res_512.png new file mode 100644 index 000000000..8d2327466 Binary files /dev/null and b/multisrc/overrides/mmrcms/fallenangelsscans/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/mmrcms/hentaishark/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mmrcms/hentaishark/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..3b98bbd06 Binary files /dev/null and b/multisrc/overrides/mmrcms/hentaishark/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/hentaishark/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mmrcms/hentaishark/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..ab75eec75 Binary files /dev/null and b/multisrc/overrides/mmrcms/hentaishark/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/hentaishark/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/hentaishark/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..696f84ec8 Binary files /dev/null and b/multisrc/overrides/mmrcms/hentaishark/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/hentaishark/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/hentaishark/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..89319e58a Binary files /dev/null and b/multisrc/overrides/mmrcms/hentaishark/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/hentaishark/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/hentaishark/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..22764f228 Binary files /dev/null and b/multisrc/overrides/mmrcms/hentaishark/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/hentaishark/res/web_hi_res_512.png b/multisrc/overrides/mmrcms/hentaishark/res/web_hi_res_512.png new file mode 100644 index 000000000..d92eb2672 Binary files /dev/null and b/multisrc/overrides/mmrcms/hentaishark/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/mmrcms/onma/res/mipmap-hdpi/ic_launcher.png b/multisrc/overrides/mmrcms/onma/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..c6afd84df Binary files /dev/null and b/multisrc/overrides/mmrcms/onma/res/mipmap-hdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/onma/res/mipmap-mdpi/ic_launcher.png b/multisrc/overrides/mmrcms/onma/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..1393609f4 Binary files /dev/null and b/multisrc/overrides/mmrcms/onma/res/mipmap-mdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/onma/res/mipmap-xhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/onma/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..f791f7aa5 Binary files /dev/null and b/multisrc/overrides/mmrcms/onma/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/onma/res/mipmap-xxhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/onma/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..6fc236c12 Binary files /dev/null and b/multisrc/overrides/mmrcms/onma/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/onma/res/mipmap-xxxhdpi/ic_launcher.png b/multisrc/overrides/mmrcms/onma/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..7c5f11f8d Binary files /dev/null and b/multisrc/overrides/mmrcms/onma/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/multisrc/overrides/mmrcms/onma/res/web_hi_res_512.png b/multisrc/overrides/mmrcms/onma/res/web_hi_res_512.png new file mode 100644 index 000000000..7f5c94d06 Binary files /dev/null and b/multisrc/overrides/mmrcms/onma/res/web_hi_res_512.png differ diff --git a/multisrc/overrides/mmrcms/utsukushii/src/Utsukushii.kt b/multisrc/overrides/mmrcms/utsukushii/src/Utsukushii.kt new file mode 100644 index 000000000..11c360486 --- /dev/null +++ b/multisrc/overrides/mmrcms/utsukushii/src/Utsukushii.kt @@ -0,0 +1,17 @@ +package eu.kanade.tachiyomi.extension.bg.utsukushii + +import eu.kanade.tachiyomi.multisrc.mmrcms.MMRCMS +import eu.kanade.tachiyomi.source.model.MangasPage +import eu.kanade.tachiyomi.source.model.Page +import eu.kanade.tachiyomi.source.model.SManga +import eu.kanade.tachiyomi.network.GET +import eu.kanade.tachiyomi.util.asJsoup +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response + +class Utsukushii : MMRCMS("Utsukushii", "https://manga.utsukushii-bg.com", "bg"){ + override fun popularMangaRequest(page: Int): Request { + return GET("$baseUrl/manga-list", headers) + } +} diff --git a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMS.kt similarity index 87% rename from src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt rename to multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMS.kt index a214a09a4..5dca1a078 100644 --- a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSource.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMS.kt @@ -1,13 +1,11 @@ -package eu.kanade.tachiyomi.extension.all.mmrcms +package eu.kanade.tachiyomi.multisrc.mmrcms import android.annotation.SuppressLint import android.net.Uri -import android.util.Base64 import com.github.salomonbrys.kotson.array import com.github.salomonbrys.kotson.get import com.github.salomonbrys.kotson.string import com.google.gson.JsonParser -import eu.kanade.tachiyomi.annotations.Nsfw import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.asObservableSuccess import eu.kanade.tachiyomi.source.model.Filter @@ -23,34 +21,92 @@ import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Element import rx.Observable -import java.net.URLDecoder import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale import java.util.concurrent.TimeUnit +import com.github.salomonbrys.kotson.array +import com.github.salomonbrys.kotson.bool +import com.github.salomonbrys.kotson.string +import com.google.gson.JsonArray +import com.google.gson.JsonObject +import android.util.Base64 +import java.net.URLDecoder -open class MyMangaReaderCMSSource( - final override val lang: String, - final override val name: String, - final override val baseUrl: String, - final override val supportsLatest: Boolean, - private val itemUrl: String, - private val categoryMappings: List>, - private val tagMappings: List>? +abstract class MMRCMS ( + override val name: String, + override val baseUrl: String, + override val lang: String, + private val sourceInfo: String = "", ) : HttpSource() { - private val jsonParser = JsonParser() + open val jsonData = if(sourceInfo == "") { + SourceData.giveMetaData(baseUrl) + } else{ + sourceInfo + } + /** + * Parse a List of JSON sources into a list of `MyMangaReaderCMSSource`s + * + * Example JSON : + * ``` + * { + * "language": "en", + * "name": "Example manga reader", + * "base_url": "https://example.com", + * "supports_latest": true, + * "item_url": "https://example.com/manga/", + * "categories": [ + * {"id": "stuff", "name": "Stuff"}, + * {"id": "test", "name": "Test"} + * ], + * "tags": [ + * {"id": "action", "name": "Action"}, + * {"id": "adventure", "name": "Adventure"} + * ] + * } + * + * + * Sources that do not supports tags may use `null` instead of a list of json objects + * + * @param sourceString The List of JSON strings 1 entry = one source + * @return The list of parsed sources + * + * isNSFW, language, name and base_url are no longer needed as that is handled by multisrc + * supports_latest, item_url, categories and tags are still needed + * + * + */ + open val jsonObject = JsonParser.parseString(jsonData) as JsonObject + override val supportsLatest = jsonObject["supports_latest"].bool + open val itemUrl = jsonObject["item_url"].string + open val categoryMappings = mapToPairs(jsonObject["categories"].array) + open var tagMappings = if (jsonObject["tags"].isJsonArray) { + mapToPairs(jsonObject["tags"].asJsonArray) + } else { + emptyList>() + } + + /** + * Map an array of JSON objects to pairs. Each JSON object must have + * the following properties: + * + * id: first item in pair + * name: second item in pair + * + * @param array The array to process + * @return The new list of pairs + */ + open fun mapToPairs(array: JsonArray): List> = array.map { + it as JsonObject + + it["id"].string to it["name"].string + } + + + private val itemUrlPath = Uri.parse(itemUrl).pathSegments.firstOrNull() private val parsedBaseUrl = Uri.parse(baseUrl) - /** - * Hardcode IDs for sources for which we altered name or lang - */ - override val id: Long = when (name) { - "Comic Space" -> 1847392744200215680 - "Mangás Yuri" -> 6456162511058446409 - "AnimaRegia" -> 4378659695320121364 - else -> super.id - } override val client: OkHttpClient = network.cloudflareClient.newBuilder() .connectTimeout(1, TimeUnit.MINUTES) @@ -59,10 +115,7 @@ open class MyMangaReaderCMSSource( .build() override fun popularMangaRequest(page: Int): Request { - return when (name) { - "Utsukushii" -> GET("$baseUrl/manga-list", headers) - else -> GET("$baseUrl/filterList?page=$page&sortBy=views&asc=false", headers) - } + return GET("$baseUrl/filterList?page=$page&sortBy=views&asc=false", headers) } override fun searchMangaRequest(page: Int, query: String, filters: FilterList): Request { @@ -111,7 +164,7 @@ open class MyMangaReaderCMSSource( override fun searchMangaParse(response: Response): MangasPage { return if (listOf("query", "q").any { it in response.request.url.queryParameterNames }) { // If a search query was specified, use search instead! - val jsonArray = jsonParser.parse(response.body!!.string()).let { + val jsonArray = JsonParser.parseString(response.body!!.string()).let { if (name == "Mangas.pw") it.array else it["suggestions"].array } MangasPage( @@ -214,7 +267,7 @@ open class MyMangaReaderCMSSource( } // Guess thumbnails on broken websites - private fun coverGuess(url: String?, mangaUrl: String): String? { + fun coverGuess(url: String?, mangaUrl: String): String? { return if (url?.endsWith("no-image.png") == true) { "$baseUrl/uploads/manga/${mangaUrl.substringAfterLast('/')}/cover/cover_250x350.jpg" } else { @@ -222,7 +275,7 @@ open class MyMangaReaderCMSSource( } } - private fun getUrlWithoutBaseUrl(newUrl: String): String { + fun getUrlWithoutBaseUrl(newUrl: String): String { val parsedNewUrl = Uri.parse(newUrl) val newPathSegments = parsedNewUrl.pathSegments.toMutableList() @@ -382,6 +435,7 @@ open class MyMangaReaderCMSSource( Page(i, "", url) } + override fun imageUrlParse(response: Response) = throw UnsupportedOperationException("Unused method called!") private fun getInitialFilterList() = listOf>( @@ -415,7 +469,7 @@ open class MyMangaReaderCMSSource( override fun getFilterList(): FilterList { return when { name == "Mangas.pw" -> FilterList() - tagMappings != null -> { + tagMappings != emptyList>()-> { FilterList( getInitialFilterList() + UriSelectFilter( "Tag", @@ -489,22 +543,3 @@ open class MyMangaReaderCMSSource( private val DATE_FORMAT = SimpleDateFormat("d MMM. yyyy", Locale.US) } } - -@Nsfw -class MyMangaReaderCMSSourceNsfw( - lang: String, - name: String, - baseUrl: String, - supportsLatest: Boolean, - itemUrl: String, - categoryMappings: List>, - tagMappings: List>? -) : MyMangaReaderCMSSource( - lang, - name, - baseUrl, - supportsLatest, - itemUrl, - categoryMappings, - tagMappings -) diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSGenerator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSGenerator.kt new file mode 100644 index 000000000..154fccd87 --- /dev/null +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSGenerator.kt @@ -0,0 +1,26 @@ +package eu.kanade.tachiyomi.multisrc.mmrcms + +import generator.ThemeSourceData +import generator.ThemeSourceData.SingleLang +import generator.ThemeSourceGenerator + +class MMRCMSGenerator : ThemeSourceGenerator { + + override val themePkg = "mmrcms" + + override val themeClass = "MMRCMS" + + override val baseVersionCode: Int = MMRCMSSources.version + + override val sources = MMRCMSSources.sourceList.map { + SingleLang(it.name, it.baseUrl, it.lang, it.isNsfw, it.className, it.pkgName, it.overrideVersionCode) + } + + companion object { + + @JvmStatic + fun main(args: Array) { + MMRCMSGenerator().createAll() + } + } +} diff --git a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/Generator.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSJsonGen.kt similarity index 50% rename from src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/Generator.kt rename to multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSJsonGen.kt index d8fb575ec..4409a3bc6 100644 --- a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/Generator.kt +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSJsonGen.kt @@ -1,9 +1,10 @@ -package eu.kanade.tachiyomi.extension.all.mmrcms +package eu.kanade.tachiyomi.multisrc.mmrcms import android.annotation.SuppressLint import android.annotation.TargetApi import android.os.Build import com.google.gson.Gson +import eu.kanade.tachiyomi.multisrc.mmrcms.MMRCMSSources.Companion.sourceList import okhttp3.OkHttpClient import okhttp3.Request import org.jsoup.Jsoup @@ -25,33 +26,32 @@ import javax.net.ssl.X509TrustManager * CMS: https://getcyberworks.com/product/manga-reader-cms/ */ -class Generator { - - private var preRunTotal: String +class MMRCMSJsonGen { + //private var preRunTotal: String init { System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2,TLSv1.3") - preRunTotal = Regex("""MMRSOURCE_(\d+)""").findAll(File(relativePath).readText(Charsets.UTF_8)).last().groupValues[1] + //preRunTotal = Regex("""-> (\d+)""").findAll(File(relativePath).readText(Charsets.UTF_8)).last().groupValues[1] } - data class SourceData(val lang: String, val name: String, val baseUrl: String, val isNsfw: Boolean = false) - @TargetApi(Build.VERSION_CODES.O) fun generate() { val buffer = StringBuffer() val dateTime = ZonedDateTime.now() val formattedDate = dateTime.format(DateTimeFormatter.RFC_1123_DATE_TIME) - buffer.append("package eu.kanade.tachiyomi.extension.all.mmrcms") + buffer.append("package eu.kanade.tachiyomi.multisrc.mmrcms") buffer.append("\n\n// GENERATED FILE, DO NOT MODIFY!\n// Generated $formattedDate\n\n") + buffer.append("class SourceData() {\n") + buffer.append(" companion object {\n") + buffer.append(" fun giveMetaData(url:String): String{\n") + buffer.append(" return when (url) {\n") var number = 1 sources.forEach { try { val map = mutableMapOf() - map["language"] = it.lang map["name"] = it.name map["base_url"] = it.baseUrl map["supports_latest"] = supportsLatest(it.baseUrl) - map["isNsfw"] = it.isNsfw val advancedSearchDocument = getDocument("${it.baseUrl}/advanced-search", false) @@ -89,26 +89,19 @@ class Generator { val toJson = Gson().toJson(map) - buffer.append("private const val MMRSOURCE_$number = \"\"\"$toJson\"\"\"\n") + buffer.append(" \"${it.baseUrl}\" -> \"\"\"$toJson\"\"\"\n") number++ } catch (e: Exception) { println("error generating source ${it.name} ${e.printStackTrace()}") } } - buffer.append("val SOURCES: List get() = listOf(") - for (i in 1 until number) { - buffer.append("MMRSOURCE_$i") - when (i) { - number - 1 -> { - buffer.append(")\n") - } - else -> { - buffer.append(", ") - } - } - } - println("Pre-run sources: $preRunTotal") + buffer.append(" else -> \"\"\n") + buffer.append(" }\n") + buffer.append(" }\n") + buffer.append(" }\n") + buffer.append("}\n") + //println("Pre-run sources: $preRunTotal") println("Post-run sources: ${number - 1}") val writer = PrintWriter(relativePath) writer.write(buffer.toString()) @@ -232,111 +225,13 @@ class Generator { } companion object { - val sources = listOf( - SourceData("ar", "مانجا اون لاين", "https://onma.me"), - SourceData("en", "Read Comics Online", "https://readcomicsonline.ru"), - SourceData("en", "Fallen Angels", "https://manga.fascans.com"), - SourceData("en", "Zahard", "https://zahard.top"), - SourceData("en", "Manhwas Men", "https://manhwas.men"), - SourceData("fr", "Scan FR", "https://www.scan-fr.cc"), - SourceData("fr", "Scan VF", "https://www.scan-vf.net"), - SourceData("fr", "Scan OP", "https://scan-op.cc"), - SourceData("id", "Komikid", "https://www.komikid.com"), - SourceData("pt-BR", "Mangás Yuri", "https://mangasyuri.net"), - SourceData("pl", "Nikushima", "http://azbivo.webd.pro"), - SourceData("tr", "MangaHanta", "http://mangahanta.com"), - SourceData("vi", "Fallen Angels Scans", "https://truyen.fascans.com"), - SourceData("es", "LeoManga", "https://leomanga.me"), - SourceData("es", "submanga", "https://submanga.io"), - SourceData("es", "Mangadoor", "https://mangadoor.com"), - SourceData("es", "Mangas.pw", "https://mangas.in"), - SourceData("bg", "Utsukushii", "https://manga.utsukushii-bg.com"), - SourceData("pl", "Phoenix-Scans", "https://phoenix-scans.pl"), - SourceData("tr", "Puzzmos", "https://puzzmos.com"), - SourceData("fr", "Scan-1", "https://wwv.scan-1.com"), - SourceData("fr", "Lelscan-VF", "https://lelscan-vf.co"), - SourceData("id", "Komik Manga", "https://adm.komikmanga.com"), - SourceData("ko", "Mangazuki Raws", "https://raws.mangazuki.co"), - SourceData("en", "Mangazuki", "https://mangazuki.co/"), - SourceData("pt-BR", "Remangas", "https://remangas.top"), - SourceData("pt-BR", "AnimaRegia", "https://animaregia.net"), - SourceData("tr", "MangaVadisi", "http://manga-v2.mangavadisi.org"), - SourceData("id", "MangaID", "https://mangaid.click"), - SourceData("fr", "Jpmangas", "https://jpmangas.co"), - SourceData("fr", "Op-VF", "https://www.op-vf.com"), - SourceData("fr", "FR Scan", "https://www.frscan.me"), - // NOTE: THIS SOURCE CONTAINS A CUSTOM LANGUAGE SYSTEM (which will be ignored)! - SourceData("other", "HentaiShark", "https://www.hentaishark.com", true) - ) - // Changed CMS - // SourceData("es", "Tumangaonline.co", "http://tumangaonline.com"), - // SourceData("id", "MangaYu", "https://mangayu.com"), - // SourceData("en", "MangaTreat Scans", "http://www.mangatreat.com"), - // SourceData("en", "Chibi Manga Reader", "https://www.cmreader.info"), - // SourceData("tr", "Epikmanga", "https://www.epikmanga.com"), - // SourceData("en", "Hatigarm Scans", "https://hatigarmscans.net"), - // Went offline - // SourceData("ru", "Japit Comics", "https://j-comics.ru"), - // SourceData("es", "Universo Yuri", "https://universoyuri.com"), - // SourceData("pl", "Dracaena", "https://dracaena.webd.pl/czytnik"), - // SourceData("pt-BR", "Comic Space", "https://www.comicspace.com.br"), - // SourceData("pl", "ToraScans", "http://torascans.pl"), - // SourceData("en", "White Cloud Pavilion", "https://www.whitecloudpavilion.com/manga/free"), - // SourceData("en", "Biamam Scans", "https://biamam.com"), - // SourceData("en", "Mangawww Reader", "https://mangawww.club"), - // SourceData("ru", "Anigai clan", "http://anigai.ru"), - // SourceData("en", "ZXComic", "http://zxcomic.com"), - // SourceData("es", "SOS Scanlation", "https://sosscanlation.com"), - // SourceData("es", "MangaCasa", "https://mangacasa.com")) - // SourceData("ja", "RAW MANGA READER", "https://rawmanga.site"), - // SourceData("ar", "Manga FYI", "http://mangafyi.com/manga/arabic"), - // SourceData("en", "MangaRoot", "http://mangaroot.com"), - // SourceData("en", "MangaForLife", "http://manga4ever.com"), - // SourceData("en", "Manga Spoil", "http://mangaspoil.com"), - // SourceData("en", "MangaBlue", "http://mangablue.com"), - // SourceData("en", "Manga Forest", "https://mangaforest.com"), - // SourceData("en", "DManga", "http://dmanga.website"), - // SourceData("en", "DB Manga", "http://dbmanga.com"), - // SourceData("en", "Mangacox", "http://mangacox.com"), - // SourceData("en", "GO Manhwa", "http://gomanhwa.xyz"), - // SourceData("en", "KoManga", "https://komanga.net"), - // SourceData("en", "Manganimecan", "http://manganimecan.com"), - // SourceData("en", "Hentai2Manga", "http://hentai2manga.com"), - // SourceData("en", "4 Manga", "http://4-manga.com"), - // SourceData("en", "XYXX.INFO", "http://xyxx.info"), - // SourceData("en", "Isekai Manga Reader", "https://isekaimanga.club"), - // SourceData("fa", "TrinityReader", "http://trinityreader.pw"), - // SourceData("fr", "Manga-LEL", "https://www.manga-lel.com"), - // SourceData("fr", "Manga Etonnia", "https://www.etonnia.com"), - // SourceData("fr", "ScanFR.com"), "http://scanfr.com"), - // SourceData("fr", "Manga FYI", "http://mangafyi.com/manga/french"), - // SourceData("fr", "scans-manga", "http://scans-manga.com"), - // SourceData("fr", "Henka no Kaze", "http://henkanokazelel.esy.es/upload"), - // SourceData("fr", "Tous Vos Scans", "http://www.tous-vos-scans.com"), - // SourceData("id", "Manga Desu", "http://mangadesu.net"), - // SourceData("id", "Komik Mangafire.ID", "http://go.mangafire.id"), - // SourceData("id", "MangaOnline", "https://mangaonline.web.id"), - // SourceData("id", "MangaNesia", "https://manganesia.com"), - // SourceData("id", "MangaID", "https://mangaid.me" - // SourceData("id", "Manga Seru", "http://www.mangaseru.top" - // SourceData("id", "Manga FYI", "http://mangafyi.com/manga/indonesian" - // SourceData("id", "Bacamangaku", "http://www.bacamangaku.com"), - // SourceData("id", "Indo Manga Reader", "http://indomangareader.com"), - // SourceData("it", "Kingdom Italia Reader", "http://kireader.altervista.org"), - // SourceData("ja", "IchigoBook", "http://ichigobook.com"), - // SourceData("ja", "Mangaraw Online", "http://mangaraw.online" - // SourceData("ja", "Mangazuki RAWS", "https://raws.mangazuki.co"), - // SourceData("ja", "MangaRAW", "https://www.mgraw.com"), - // SourceData("ja", "マンガ/漫画 マガジン/雑誌 raw", "http://netabare-manga-raw.com"), - // SourceData("ru", "NAKAMA", "http://nakama.ru"), - // SourceData("tr", "MangAoi", "http://mangaoi.com"), - // SourceData("tr", "ManhuaTR", "http://www.manhua-tr.com"), + val sources = sourceList - val relativePath = System.getProperty("user.dir") + "/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/GeneratedSources.kt" + val relativePath = System.getProperty("user.dir") + "/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/SourceData.kt" @JvmStatic fun main(args: Array) { - Generator().generate() + MMRCMSJsonGen().generate() } } } diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSSources.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSSources.kt new file mode 100644 index 000000000..298ca7fd7 --- /dev/null +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/MMRCMSSources.kt @@ -0,0 +1,143 @@ +package eu.kanade.tachiyomi.multisrc.mmrcms + +import java.util.Locale + + +class MMRCMSSources { + companion object { + sealed class SourceData { + abstract val name: String + abstract val baseUrl: String + abstract val isNsfw: Boolean + abstract val className: String + abstract val pkgName: String + abstract val overrideVersionCode: Int + + data class Single( + override val name: String, + override val baseUrl: String, + val lang: String, + override val isNsfw: Boolean = false, + override val className: String = name.replace(" ", ""), + override val pkgName: String = className.toLowerCase(Locale.ENGLISH), + override val overrideVersionCode: Int = 0, + ) : SourceData() + + data class Multi( + override val name: String, + override val baseUrl: String, + val langs: List, + override val isNsfw: Boolean = false, + override val className: String = name.replace(" ", "") + "Factory", + override val pkgName: String = className.substringBefore("Factory").toLowerCase(Locale.ENGLISH), + override val overrideVersionCode: Int = 0, + ) : SourceData() + } + val version: Int = 3 + val sourceList: List = listOf( + SourceData.Single("مانجا اون لاين", "https://onma.me", "ar", className = "onma"), + SourceData.Single("Read Comics Online", "https://readcomicsonline.ru", "en"), + SourceData.Single("Fallen Angels", "https://manga.fascans.com", "en"), + SourceData.Single("Zahard", "https://zahard.top", "en"), + SourceData.Single("Manhwas Men", "https://manhwas.men", "en"), + SourceData.Single("Scan FR", "https://www.scan-fr.cc", "fr"), + SourceData.Single("Scan VF", "https://www.scan-vf.net", "fr"), + SourceData.Single("Scan OP", "https://scan-op.cc", "fr"), + SourceData.Single("Komikid", "https://www.komikid.com", "id"), + SourceData.Single("Nikushima", "http://azbivo.webd.pro", "pl"), + SourceData.Single("MangaHanta", "http://mangahanta.com", "tr"), + SourceData.Single("Fallen Angels Scans", "https://truyen.fascans.com", "vi"), + SourceData.Single("LeoManga", "https://leomanga.me", "es"), + SourceData.Single("submanga", "https://submanga.io", "es"), + SourceData.Single("Mangadoor", "https://mangadoor.com", "es"), + SourceData.Single("Mangas.pw", "https://mangas.in", "es", className = "MangasPw"), + SourceData.Single("Utsukushii", "https://manga.utsukushii-bg.com", "bg"), + SourceData.Single("Phoenix-Scans", "https://phoenix-scans.pl", "pl", className = "PhoenixScans"), + SourceData.Single("Puzzmos", "https://puzzmos.com", "tr"), + SourceData.Single("Scan-1", "https://wwv.scan-1.com", "fr", className = "ScanOne"), + SourceData.Single("Lelscan-VF", "https://lelscan-vf.co", "fr", className = "LelscanVF"), + SourceData.Single("Komik Manga", "https://adm.komikmanga.com", "id"), + SourceData.Single("Mangazuki Raws", "https://raws.mangazuki.co", "ko"), + SourceData.Single("Mangazuki", "https://mangazuki.co", "en"), + SourceData.Single("Remangas", "https://remangas.top", "pt-BR"), + SourceData.Single("AnimaRegia", "https://animaregia.net", "pt-BR"), + SourceData.Single("MangaVadisi", "http://manga-v2.mangavadisi.org", "tr"), + SourceData.Single("MangaID", "https://mangaid.click", "id"), + SourceData.Single("Jpmangas", "https://jpmangas.co", "fr"), + SourceData.Single("Op-VF", "https://www.op-vf.com", "fr", className = "OpVF"), + SourceData.Single("FR Scan", "https://frscan.cc", "fr"), + // NOTE: THIS SOURCE CONTAINS A CUSTOM LANGUAGE SYSTEM (which will be ignored)! + SourceData.Single("HentaiShark", "https://www.hentaishark.com", "all", isNsfw = true), + //MultiLang("HentaiShark", "https://www.hentaishark.com", listOf("en", "ja", "zh", "de", "nl", "ko", "cz", "eo", "mn", "ar", "sk", "la", "ua", "ceb", "tl", "fi", "bg", "tr"), isNsfw = true, className = "HentaiSharkFactory"), + ) + } +} + + + +//SingleLang("Mangás Yuri", "https://mangasyuri.net", "pt-BR", className = "MangasYuri"), override val id: Long = 6456162511058446409 +//SingleLang("FR Scan", "https://www.frscan.me", "fr"), +// Reference from old Factory Source +// Changed CMS +// SourceData("es", "Tumangaonline.co", "http://tumangaonline.com"), +// SourceData("id", "MangaYu", "https://mangayu.com"), +// SourceData("en", "MangaTreat Scans", "http://www.mangatreat.com"), +// SourceData("en", "Chibi Manga Reader", "https://www.cmreader.info"), +// SourceData("tr", "Epikmanga", "https://www.epikmanga.com"), +// SourceData("en", "Hatigarm Scans", "https://hatigarmscans.net"), +// Went offline +// SourceData("ru", "Japit Comics", "https://j-comics.ru"), +// SourceData("es", "Universo Yuri", "https://universoyuri.com"), +// SourceData("pl", "Dracaena", "https://dracaena.webd.pl/czytnik"), +// SourceData("pt-BR", "Comic Space", "https://www.comicspace.com.br"), //ID "Comic Space" -> 1847392744200215680 +// SourceData("pl", "ToraScans", "http://torascans.pl"), +// SourceData("en", "White Cloud Pavilion", "https://www.whitecloudpavilion.com/manga/free"), +// SourceData("en", "Biamam Scans", "https://biamam.com"), +// SourceData("en", "Mangawww Reader", "https://mangawww.club"), +// SourceData("ru", "Anigai clan", "http://anigai.ru"), +// SourceData("en", "ZXComic", "http://zxcomic.com"), +// SourceData("es", "SOS Scanlation", "https://sosscanlation.com"), +// SourceData("es", "MangaCasa", "https://mangacasa.com")) +// SourceData("ja", "RAW MANGA READER", "https://rawmanga.site"), +// SourceData("ar", "Manga FYI", "http://mangafyi.com/manga/arabic"), +// SourceData("en", "MangaRoot", "http://mangaroot.com"), +// SourceData("en", "MangaForLife", "http://manga4ever.com"), +// SourceData("en", "Manga Spoil", "http://mangaspoil.com"), +// SourceData("en", "MangaBlue", "http://mangablue.com"), +// SourceData("en", "Manga Forest", "https://mangaforest.com"), +// SourceData("en", "DManga", "http://dmanga.website"), +// SourceData("en", "DB Manga", "http://dbmanga.com"), +// SourceData("en", "Mangacox", "http://mangacox.com"), +// SourceData("en", "GO Manhwa", "http://gomanhwa.xyz"), +// SourceData("en", "KoManga", "https://komanga.net"), +// SourceData("en", "Manganimecan", "http://manganimecan.com"), +// SourceData("en", "Hentai2Manga", "http://hentai2manga.com"), +// SourceData("en", "4 Manga", "http://4-manga.com"), +// SourceData("en", "XYXX.INFO", "http://xyxx.info"), +// SourceData("en", "Isekai Manga Reader", "https://isekaimanga.club"), +// SourceData("fa", "TrinityReader", "http://trinityreader.pw"), +// SourceData("fr", "Manga-LEL", "https://www.manga-lel.com"), +// SourceData("fr", "Manga Etonnia", "https://www.etonnia.com"), +// SourceData("fr", "ScanFR.com"), "http://scanfr.com"), +// SourceData("fr", "Manga FYI", "http://mangafyi.com/manga/french"), +// SourceData("fr", "scans-manga", "http://scans-manga.com"), +// SourceData("fr", "Henka no Kaze", "http://henkanokazelel.esy.es/upload"), +// SourceData("fr", "Tous Vos Scans", "http://www.tous-vos-scans.com"), +// SourceData("id", "Manga Desu", "http://mangadesu.net"), +// SourceData("id", "Komik Mangafire.ID", "http://go.mangafire.id"), +// SourceData("id", "MangaOnline", "https://mangaonline.web.id"), +// SourceData("id", "MangaNesia", "https://manganesia.com"), +// SourceData("id", "MangaID", "https://mangaid.me" +// SourceData("id", "Manga Seru", "http://www.mangaseru.top" +// SourceData("id", "Manga FYI", "http://mangafyi.com/manga/indonesian" +// SourceData("id", "Bacamangaku", "http://www.bacamangaku.com"), +// SourceData("id", "Indo Manga Reader", "http://indomangareader.com"), +// SourceData("it", "Kingdom Italia Reader", "http://kireader.altervista.org"), +// SourceData("ja", "IchigoBook", "http://ichigobook.com"), +// SourceData("ja", "Mangaraw Online", "http://mangaraw.online" +// SourceData("ja", "Mangazuki RAWS", "https://raws.mangazuki.co"), +// SourceData("ja", "MangaRAW", "https://www.mgraw.com"), +// SourceData("ja", "マンガ/漫画 マガジン/雑誌 raw", "http://netabare-manga-raw.com"), +// SourceData("ru", "NAKAMA", "http://nakama.ru"), +// SourceData("tr", "MangAoi", "http://mangaoi.com"), +// SourceData("tr", "ManhuaTR", "http://www.manhua-tr.com"), diff --git a/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/SourceData.kt b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/SourceData.kt new file mode 100644 index 000000000..455db1ec7 --- /dev/null +++ b/multisrc/src/main/java/eu/kanade/tachiyomi/multisrc/mmrcms/SourceData.kt @@ -0,0 +1,46 @@ +package eu.kanade.tachiyomi.multisrc.mmrcms + +// GENERATED FILE, DO NOT MODIFY! +// Generated Fri, 30 Apr 2021 15:59:47 +1200 + +class SourceData() { + companion object { + fun giveMetaData(url:String): String{ + return when (url) { + "https://onma.me" -> """{"name":"مانجا اون لاين","base_url":"https://onma.me","supports_latest":true,"item_url":"https://onma.me/manga/","categories":[{"id":"1","name":"أكشن"},{"id":"2","name":"مغامرة"},{"id":"3","name":"كوميدي"},{"id":"4","name":"شياطين"},{"id":"5","name":"دراما"},{"id":"6","name":"إيتشي"},{"id":"7","name":"خيال"},{"id":"8","name":"انحراف جنسي"},{"id":"9","name":"حريم"},{"id":"10","name":"تاريخي"},{"id":"11","name":"رعب"},{"id":"12","name":"جوسي"},{"id":"13","name":"فنون قتالية"},{"id":"14","name":"ناضج"},{"id":"15","name":"ميكا"},{"id":"16","name":"غموض"},{"id":"17","name":"وان شوت"},{"id":"18","name":"نفسي"},{"id":"19","name":"رومنسي"},{"id":"20","name":"حياة مدرسية"},{"id":"21","name":"خيال علمي"},{"id":"22","name":"سينين"},{"id":"23","name":"شوجو"},{"id":"24","name":"شوجو أي"},{"id":"25","name":"شونين"},{"id":"26","name":"شونين أي"},{"id":"27","name":"شريحة من الحياة"},{"id":"28","name":"رياضة"},{"id":"29","name":"خارق للطبيعة"},{"id":"30","name":"مأساة"},{"id":"31","name":"مصاصي الدماء"},{"id":"32","name":"سحر"},{"id":"33","name":"ويب تون"},{"id":"34","name":"دوجينشي"}],"tags":"null"}""" + "https://readcomicsonline.ru" -> """{"name":"Read Comics Online","base_url":"https://readcomicsonline.ru","supports_latest":true,"item_url":"https://readcomicsonline.ru/comic/","categories":[{"id":"1","name":"One Shots \u0026 TPBs"},{"id":"2","name":"DC Comics"},{"id":"3","name":"Marvel Comics"},{"id":"4","name":"Boom Studios"},{"id":"5","name":"Dynamite"},{"id":"6","name":"Rebellion"},{"id":"7","name":"Dark Horse"},{"id":"8","name":"IDW"},{"id":"9","name":"Archie"},{"id":"10","name":"Graphic India"},{"id":"11","name":"Darby Pop"},{"id":"12","name":"Oni Press"},{"id":"13","name":"Icon Comics"},{"id":"14","name":"United Plankton"},{"id":"15","name":"Udon"},{"id":"16","name":"Image Comics"},{"id":"17","name":"Valiant"},{"id":"18","name":"Vertigo"},{"id":"19","name":"Devils Due"},{"id":"20","name":"Aftershock Comics"},{"id":"21","name":"Antartic Press"},{"id":"22","name":"Action Lab"},{"id":"23","name":"American Mythology"},{"id":"24","name":"Zenescope"},{"id":"25","name":"Top Cow"},{"id":"26","name":"Hermes Press"},{"id":"27","name":"451"},{"id":"28","name":"Black Mask"},{"id":"29","name":"Chapterhouse Comics"},{"id":"30","name":"Red 5"},{"id":"31","name":"Heavy Metal"},{"id":"32","name":"Bongo"},{"id":"33","name":"Top Shelf"},{"id":"34","name":"Bubble"},{"id":"35","name":"Boundless"},{"id":"36","name":"Avatar Press"},{"id":"37","name":"Space Goat Productions"},{"id":"38","name":"BroadSword Comics"},{"id":"39","name":"AAM-Markosia"},{"id":"40","name":"Fantagraphics"},{"id":"41","name":"Aspen"},{"id":"42","name":"American Gothic Press"},{"id":"43","name":"Vault"},{"id":"44","name":"215 Ink"},{"id":"45","name":"Abstract Studio"},{"id":"46","name":"Albatross"},{"id":"47","name":"ARH Comix"},{"id":"48","name":"Legendary Comics"},{"id":"49","name":"Monkeybrain"},{"id":"50","name":"Joe Books"},{"id":"51","name":"MAD"},{"id":"52","name":"Comics Experience"},{"id":"53","name":"Alterna Comics"},{"id":"54","name":"Lion Forge"},{"id":"55","name":"Benitez"},{"id":"56","name":"Storm King"},{"id":"57","name":"Sucker"},{"id":"58","name":"Amryl Entertainment"},{"id":"59","name":"Ahoy Comics"},{"id":"60","name":"Mad Cave"},{"id":"61","name":"Coffin Comics"},{"id":"62","name":"Magnetic Press"},{"id":"63","name":"Ablaze"},{"id":"64","name":"Europe Comics"},{"id":"65","name":"Humanoids"},{"id":"66","name":"TKO"},{"id":"67","name":"Soleil"},{"id":"68","name":"SAF Comics"},{"id":"69","name":"Scholastic"},{"id":"70","name":"Upshot"},{"id":"71","name":"Stranger Comics"},{"id":"72","name":"Inverse"},{"id":"73","name":"Virus"}],"tags":"null"}""" + "https://manga.fascans.com" -> """{"name":"Fallen Angels","base_url":"https://manga.fascans.com","supports_latest":true,"item_url":"https://manga.fascans.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"4-Koma"},{"id":"34","name":"Cooking"}],"tags":"null"}""" + "https://zahard.top" -> """{"name":"Zahard","base_url":"https://zahard.top","supports_latest":true,"item_url":"https://zahard.top/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":[{"id":"tag","name":"("},{"id":"sdgsdg","name":"sdgsdg"},{"id":"action","name":"Action"},{"id":"fantasy","name":"Fantasy"},{"id":"manhwa","name":"Manhwa"},{"id":"martial-arts","name":"Martial Arts"},{"id":"shounen","name":"Shounen"},{"id":"webtoon","name":"Webtoon"},{"id":"webtoon","name":"Webtoon"},{"id":"action","name":"Action"},{"id":"fantasy","name":"Fantasy"},{"id":"drama","name":"Drama"},{"id":"fantasy","name":"Fantasy"},{"id":"isekai","name":"Isekai"},{"id":"manhwa","name":"Manhwa"},{"id":"romance","name":"Romance"},{"id":"webtoons","name":"Webtoons"},{"id":"romance","name":"Romance"},{"id":"sekai","name":"sekai"},{"id":"shoujo","name":"Shoujo"},{"id":"action","name":"Action"},{"id":"fantasy","name":"Fantasy"},{"id":"returner","name":"Returner"},{"id":"shounen","name":"Shounen"},{"id":"action","name":"Action"},{"id":"fantasy","name":"Fantasy"},{"id":"manhwa","name":"Manhwa"},{"id":"romance","name":"Romance"}]}""" + "https://manhwas.men" -> """{"name":"Manhwas Men","base_url":"https://manhwas.men","supports_latest":true,"item_url":"https://manhwas.men/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":[{"id":"tag","name":"前女友变女佣"},{"id":"four-sisters","name":"Four sisters"},{"id":"in-laws","name":"in-laws"},{"id":"raws","name":"raws"},{"id":"adult","name":"Adult"},{"id":"raw","name":"RAW"},{"id":"drama","name":"Drama"},{"id":"romance","name":"Romance"},{"id":"manhwa","name":"Manhwa"},{"id":"mature","name":"Mature"},{"id":"sub-english","name":"Sub English"},{"id":"seinen","name":"Seinen"},{"id":"smut","name":"Smut"},{"id":"harem","name":"Harem"},{"id":"toptoon","name":"toptoon"},{"id":"ntr","name":"NTR"}]}""" + "https://www.scan-fr.cc" -> """{"name":"Scan FR","base_url":"https://www.scan-fr.cc","supports_latest":true,"item_url":"https://www.scan-fr.cc/manga/","categories":[{"id":"1","name":"Comedy"},{"id":"2","name":"Doujinshi"},{"id":"3","name":"Drama"},{"id":"4","name":"Ecchi"},{"id":"5","name":"Fantasy"},{"id":"6","name":"Gender Bender"},{"id":"7","name":"Josei"},{"id":"8","name":"Mature"},{"id":"9","name":"Mecha"},{"id":"10","name":"Mystery"},{"id":"11","name":"One Shot"},{"id":"12","name":"Psychological"},{"id":"13","name":"Romance"},{"id":"14","name":"School Life"},{"id":"15","name":"Sci-fi"},{"id":"16","name":"Seinen"},{"id":"17","name":"Shoujo"},{"id":"18","name":"Shoujo Ai"},{"id":"19","name":"Shounen"},{"id":"20","name":"Shounen Ai"},{"id":"21","name":"Slice of Life"},{"id":"22","name":"Sports"},{"id":"23","name":"Supernatural"},{"id":"24","name":"Tragedy"},{"id":"25","name":"Yaoi"},{"id":"26","name":"Yuri"},{"id":"27","name":"Comics"},{"id":"28","name":"Autre"},{"id":"29","name":"BD Occidentale"},{"id":"30","name":"Manhwa"},{"id":"31","name":"Action"},{"id":"32","name":"Aventure"}],"tags":"null"}""" + "https://www.scan-vf.net" -> """{"name":"Scan VF","base_url":"https://www.scan-vf.net","supports_latest":true,"item_url":"https://www.scan-vf.net/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" + "https://scan-op.cc" -> """{"name":"Scan OP","base_url":"https://scan-op.cc","supports_latest":true,"item_url":"https://scan-op.cc/manga/","categories":[{"id":"1","name":"Comedy"},{"id":"2","name":"Doujinshi"},{"id":"3","name":"Drama"},{"id":"4","name":"Ecchi"},{"id":"5","name":"Fantasy"},{"id":"6","name":"Gender Bender"},{"id":"7","name":"Josei"},{"id":"8","name":"Mature"},{"id":"9","name":"Mecha"},{"id":"10","name":"Mystery"},{"id":"11","name":"One Shot"},{"id":"12","name":"Psychological"},{"id":"13","name":"Romance"},{"id":"14","name":"School Life"},{"id":"15","name":"Sci-fi"},{"id":"16","name":"Seinen"},{"id":"17","name":"Shoujo"},{"id":"18","name":"Shoujo Ai"},{"id":"19","name":"Shounen"},{"id":"20","name":"Shounen Ai"},{"id":"21","name":"Slice of Life"},{"id":"22","name":"Sports"},{"id":"23","name":"Supernatural"},{"id":"24","name":"Tragedy"},{"id":"25","name":"Yaoi"},{"id":"26","name":"Yuri"},{"id":"27","name":"Comics"},{"id":"28","name":"Autre"}],"tags":[{"id":"nouveau","name":"nouveau"}]}""" + "https://www.komikid.com" -> """{"name":"Komikid","base_url":"https://www.komikid.com","supports_latest":true,"item_url":"https://www.komikid.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Fantasy"},{"id":"7","name":"Gender Bender"},{"id":"8","name":"Historical"},{"id":"9","name":"Horror"},{"id":"10","name":"Josei"},{"id":"11","name":"Martial Arts"},{"id":"12","name":"Mature"},{"id":"13","name":"Mecha"},{"id":"14","name":"Mystery"},{"id":"15","name":"One Shot"},{"id":"16","name":"Psychological"},{"id":"17","name":"Romance"},{"id":"18","name":"School Life"},{"id":"19","name":"Sci-fi"},{"id":"20","name":"Seinen"},{"id":"21","name":"Shoujo"},{"id":"22","name":"Shoujo Ai"},{"id":"23","name":"Shounen"},{"id":"24","name":"Shounen Ai"},{"id":"25","name":"Slice of Life"},{"id":"26","name":"Sports"},{"id":"27","name":"Supernatural"},{"id":"28","name":"Tragedy"},{"id":"29","name":"Yaoi"},{"id":"30","name":"Yuri"}],"tags":"null"}""" + "http://azbivo.webd.pro" -> """{"name":"Nikushima","base_url":"http://azbivo.webd.pro","supports_latest":false,"item_url":"\u003chtml\u003e \n \u003chead\u003e \n \u003cmeta http-equiv\u003d\"Content-Language\" content\u003d\"pl\"\u003e \n \u003cmeta http-equiv name\u003d\"pragma\" content\u003d\"no-cache\"\u003e \n \u003clink href\u003d\"style/style.css\" rel\u003d\"stylesheet\" type\u003d\"text/css\"\u003e \n \u003cmeta http-equiv\u003d\"Refresh\" content\u003d\"0; url\u003dhttps://www.webd.pl/_errnda.php?utm_source\u003dwn07\u0026amp;utm_medium\u003dwww\u0026amp;utm_campaign\u003dblock\"\u003e \n \u003cmeta name\u003d\"Robots\" content\u003d\"index, follow\"\u003e \n \u003cmeta name\u003d\"revisit-after\" content\u003d\"2 days\"\u003e \n \u003cmeta name\u003d\"rating\" content\u003d\"general\"\u003e \n \u003cmeta name\u003d\"keywords\" content\u003d\"STRONA ZAWIESZONA, WEBD, DOMENY, DOMENA, HOSTING, SERWER, INTERNET, PHP, MySQL, FTP, WEBMASTER, SERWERY WIRTUALNE, WWW, KONTO, MAIL, POCZTA, E-MAIL, NET, .COM, .ORG, TANIE, PHP+MySQL, DOMENY, DOMENA, HOSTING, SERWER, INTERNET, PHP, MySQL, FTP, WEBMASTER, SERWERY WIRTUALNE, WWW, KONTO, MAIL, POCZTA, E-MAIL, DOMENY, DOMENA, NET, .COM, .ORG, TANIE, PHP+MySQL, HOSTING, SERWER, INTERNET, PHP, MySQL, FTP, WEBMASTER, SERWERY WIRTUALNE, WWW, KONTO, MAIL, POCZTA, E-MAIL, NET, .COM, .ORG, TANIE, PHP+MySQL\"\u003e \n \u003cmeta name\u003d\"description\" content\u003d\"STRONA ZAWIESZONA - Oferujemy profesjonalny hosting z PHP + MySQL, rejestrujemy domeny. Sprawdz nasz hosting i przetestuj nasze serwery. Kupuj tanio domeny i serwery!\"\u003e \n \u003ctitle\u003eSTRONA ZAWIESZONA - WEBD.PL - Tw�j profesjonalny hosting za jedyne 4.99PLN! Serwery z PHP+MySQL, tanie domeny, serwer + domena .pl - taniej sie nie da!\u003c/title\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\nfunction init() {\n if (!document.getElementById) return\n var imgOriginSrc;\n var imgTemp \u003d new Array();\n var imgarr \u003d document.getElementsByTagName(\u0027img\u0027);\n for (var i \u003d 0; i \u003c imgarr.length; i++) {\n if (imgarr[i].getAttribute(\u0027hsrc\u0027)) {\n imgTemp[i] \u003d new Image();\n imgTemp[i].src \u003d imgarr[i].getAttribute(\u0027hsrc\u0027);\n imgarr[i].onmouseover \u003d function() {\n imgOriginSrc \u003d this.getAttribute(\u0027src\u0027);\n this.setAttribute(\u0027src\u0027,this.getAttribute(\u0027hsrc\u0027))\n }\n imgarr[i].onmouseout \u003d function() {\n this.setAttribute(\u0027src\u0027,imgOriginSrc)\n }\n }\n }\n}\nonload\u003dinit;\n\u003c/script\u003e \n \u003c/head\u003e \n \u003cbody\u003e\n Trwa przekierowanie .... \u0026gt;\u0026gt;\u0026gt;\u0026gt; \u003c!--\n--\u003e \n \u003c/body\u003e\n\u003c/html\u003e/","categories":[],"tags":"null"}""" + "http://mangahanta.com" -> """{"name":"MangaHanta","base_url":"http://mangahanta.com","supports_latest":true,"item_url":"http://mangahanta.com/manga/","categories":[{"id":"1","name":"Aksiyon"},{"id":"2","name":"Macera"},{"id":"3","name":"Komedi"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantezi"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Tarihi"},{"id":"11","name":"Korku"},{"id":"12","name":"Josei"},{"id":"13","name":"Dövüş Sanatları"},{"id":"14","name":"Yetişkin"},{"id":"15","name":"Mecha"},{"id":"16","name":"Gizem"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psikolojik"},{"id":"19","name":"Romantizm"},{"id":"20","name":"Okul Hayatı"},{"id":"21","name":"Bilim-Kurgu"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Hayattan Bir Parça"},{"id":"28","name":"Spor"},{"id":"29","name":"Doğaüstü"},{"id":"30","name":"Trajedi"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"Vampir"},{"id":"34","name":"Webtoon"}],"tags":[{"id":"tag","name":"-ヒトガタナ-"},{"id":"amber","name":"Amber"},{"id":"amber-manga","name":"Amber manga"},{"id":"amber-oku","name":"Amber oku"},{"id":"amber-turkce-oku","name":"Amber Türkçe Oku"},{"id":"amber-yuno","name":"Amber Yuno"},{"id":"back-stage","name":"Back Stage"},{"id":"ballroom-e-youkoso","name":"Ballroom e Youkoso"},{"id":"beauty-game","name":"Beauty Game"},{"id":"beauty-game-oku","name":"Beauty Game Oku"},{"id":"boku-wa-mari-no-naka","name":"Boku Wa Mari No Naka"},{"id":"god-eater-kyuuseishu-no-kikan","name":"God Eater - Kyuuseishu no Kikan"},{"id":"god-eater-the-spiral-fate","name":"God Eater - The Spiral Fate"},{"id":"happiness","name":"Happiness"},{"id":"happiness-manga-oku","name":"happiness manga oku"},{"id":"happiness-turkce-oku","name":"happiness türkçe oku"},{"id":"hitogatana","name":"Hitogatana"},{"id":"im-in-mari-im-inside-mari","name":"ぼくは麻理のなか I\u0027m in Mari I\u0027m Inside Mari"},{"id":"itsuwaribito-utsuho","name":"Itsuwaribito Utsuho"},{"id":"kaguya-sama-wa-kokurasetai","name":"Kaguya-sama wa Kokurasetai"},{"id":"les-memoires-de-vanitas","name":"Les Mémoires de Vanitas"},{"id":"mahouka-koukou-no-rettousei-tsuioku-hen","name":"Mahouka Koukou no Rettousei - Tsuioku Hen"},{"id":"manga-oku","name":"manga oku"},{"id":"maou-na-ore-to-fushihime-no-yubiwa","name":"Maou na Ore to Fushihime no Yubiwa"},{"id":"may-i-shake-your-hand","name":"May I shake your hand"},{"id":"may-i-shake-your-hand-oku","name":"may I shake your hand oku"},{"id":"may-i-shake-your-hand-turkce-oku","name":"May I Shake Your Hand türkçe oku"},{"id":"memoir-of-vanitas","name":"Memoir of Vanitas"},{"id":"mutluluk","name":"Mutluluk"},{"id":"nanatsu-no-taizai","name":"Nanatsu No Taizai"},{"id":"nanatsu-no-taizai-turkce-oku","name":"Nanatsu no taizai Türkçe oku"},{"id":"oshimi-shuzo","name":"OSHIMI Shuzo"},{"id":"sousei-manga-oku","name":"sousei manga oku"},{"id":"sousei-no-onmyouji","name":"Sousei no Onmyouji"},{"id":"sousei-no-onmyouji-manga-oku","name":"Sousei no onmyouji manga oku"},{"id":"sousei-no-onmyouji-turkce-oku","name":"sousei no onmyouji türkçe oku"},{"id":"the-case-study-of-vanitas","name":"The Case Study of Vanitas"},{"id":"the-seven-deadly-sins","name":"The Seven Deadly Sins"},{"id":"vanitas-no-carte","name":"Vanitas no Carte"},{"id":"vanitas-no-shuki","name":"Vanitas no Shuki"},{"id":"yedi-olumcul-gunah","name":"Yedi Ölümcül Günah"}]}""" + "https://truyen.fascans.com" -> """{"name":"Fallen Angels Scans","base_url":"https://truyen.fascans.com","supports_latest":true,"item_url":"https://truyen.fascans.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" + "https://leomanga.me" -> """{"name":"LeoManga","base_url":"https://leomanga.me","supports_latest":false,"item_url":"https://leomanga.me/manga/","categories":[{"id":"1","name":"Accion"},{"id":"2","name":"Aventura"},{"id":"3","name":"Comedia"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasia"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historico"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Artes Marciales"},{"id":"14","name":"Madura"},{"id":"15","name":"Mecha"},{"id":"16","name":"Misterio"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psicológico"},{"id":"19","name":"Romance"},{"id":"20","name":"Vida Cotidiana"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedia"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"Deporte"},{"id":"33","name":"Thriller"},{"id":"34","name":"Vida Escolar"},{"id":"35","name":"Boys Love"},{"id":"36","name":"Girls Love"},{"id":"37","name":"Gore"},{"id":"38","name":"Hentai"},{"id":"39","name":"Magia"},{"id":"40","name":"Manwha"},{"id":"41","name":"Policial"},{"id":"42","name":"Realidad Virtual"},{"id":"43","name":"Super Poderes"},{"id":"44","name":"Suspense"},{"id":"45","name":"Supervivencia"},{"id":"46","name":"Parodia"},{"id":"47","name":"Demonios"},{"id":"48","name":"Escolar"}],"tags":[{"id":"freaking-romance","name":"Freaking Romance"},{"id":"love-lucky","name":"Love Lucky"},{"id":"lust-awakening","name":"Lust Awakening"},{"id":"despertar-de-la-lujuria","name":"Despertar de la lujuria"},{"id":"inazumaelevenaresnotenbin","name":"inazumaelevenaresnotenbin"},{"id":"heir-of-the-penguins","name":"Heir of the Penguins"},{"id":"amor","name":"amor"},{"id":"drama","name":"drama"},{"id":"mysteries","name":"mysteries"},{"id":"anal","name":"anal"},{"id":"bukkake","name":"bukkake"},{"id":"doble-penetracion","name":"doble penetracion"},{"id":"orgia","name":"orgia"},{"id":"blow-job","name":"blow job"},{"id":"big-breasts","name":"big breasts"},{"id":"incesto","name":"incesto"},{"id":"milf","name":"milf"},{"id":"prenadas","name":"preñadas"},{"id":"slave-sex","name":"slave sex"},{"id":"lolicon","name":"lolicon"},{"id":"nurse","name":"nurse"},{"id":"reality","name":"Reality"},{"id":"glitch","name":"Glitch"},{"id":"glitcher","name":"Glitcher"},{"id":"horror","name":"Horror"},{"id":"suspenso","name":"Suspenso"},{"id":"realidad","name":"Realidad"},{"id":"slider","name":"Slider"},{"id":"novela","name":"Novela"},{"id":"sobrenatural","name":"Sobrenatural"},{"id":"tragedia","name":"Tragedia"},{"id":"error","name":"Error"},{"id":"psicologico","name":"Psicologico"},{"id":"sufrimiento","name":"Sufrimiento"},{"id":"visual","name":"Visual"},{"id":"narrativo","name":"Narrativo"},{"id":"shotacon","name":"shotacon"},{"id":"paizuri","name":"paizuri"},{"id":"kemonomimi","name":"kemonomimi"},{"id":"mundo-paralelo","name":"mundo paralelo"},{"id":"coleccion-hentai","name":"coleccion hentai"},{"id":"adultos","name":"adultos"}]}""" + "https://submanga.io" -> """{"name":"submanga","base_url":"https://submanga.io","supports_latest":false,"item_url":"https://submanga.io/manga/","categories":[{"id":"1","name":"Accion"},{"id":"2","name":"Aventura"},{"id":"3","name":"Comedia"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasia"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historico"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Artes Marciales"},{"id":"14","name":"Madura"},{"id":"15","name":"Mecha"},{"id":"16","name":"Misterio"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psicológico"},{"id":"19","name":"Romance"},{"id":"20","name":"Vida Cotidiana"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedia"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"Deporte"},{"id":"33","name":"Thriller"},{"id":"34","name":"Vida Escolar"},{"id":"35","name":"Boys Love"},{"id":"36","name":"Girls Love"},{"id":"37","name":"Gore"},{"id":"38","name":"Hentai"},{"id":"39","name":"Magia"},{"id":"40","name":"Manwha"},{"id":"41","name":"Policial"},{"id":"42","name":"Realidad Virtual"},{"id":"43","name":"Super Poderes"},{"id":"44","name":"Suspense"},{"id":"45","name":"Supervivencia"},{"id":"46","name":"Parodia"},{"id":"47","name":"Demonios"},{"id":"48","name":"Escolar"}],"tags":"null"}""" + "https://mangadoor.com" -> """{"name":"Mangadoor","base_url":"https://mangadoor.com","supports_latest":true,"item_url":"https://mangadoor.com/manga/","categories":[{"id":"1","name":"Acción"},{"id":"2","name":"Aventura"},{"id":"3","name":"Comedia"},{"id":"4","name":"Drama"},{"id":"5","name":"Ecchi"},{"id":"6","name":"Fantasía"},{"id":"7","name":"Gender Bender"},{"id":"8","name":"Harem"},{"id":"9","name":"Histórico"},{"id":"10","name":"Horror"},{"id":"11","name":"Josei"},{"id":"12","name":"Artes Marciales"},{"id":"13","name":"Maduro"},{"id":"14","name":"Mecha"},{"id":"15","name":"Misterio"},{"id":"16","name":"One Shot"},{"id":"17","name":"Psicológico"},{"id":"18","name":"Romance"},{"id":"19","name":"Escolar"},{"id":"20","name":"Ciencia Ficción"},{"id":"21","name":"Seinen"},{"id":"22","name":"Shoujo"},{"id":"23","name":"Shoujo Ai"},{"id":"24","name":"Shounen"},{"id":"25","name":"Shounen Ai"},{"id":"26","name":"Recuentos de la vida"},{"id":"27","name":"Deportes"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedia"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"Demonios"},{"id":"33","name":"Juegos"},{"id":"34","name":"Policial"},{"id":"35","name":"Militar"},{"id":"36","name":"Thriller"},{"id":"37","name":"Autos"},{"id":"38","name":"Música"},{"id":"39","name":"Vampiros"},{"id":"40","name":"Magia"},{"id":"41","name":"Samurai"},{"id":"42","name":"Boys love"},{"id":"43","name":"Hentai"}],"tags":"null"}""" + "https://mangas.in" -> """{"name":"Mangas.pw","base_url":"https://mangas.in","supports_latest":true,"item_url":"https://mangas.in/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"Hentai"},{"id":"34","name":"Smut"}],"tags":"null"}""" + "https://manga.utsukushii-bg.com" -> """{"name":"Utsukushii","base_url":"https://manga.utsukushii-bg.com","supports_latest":true,"item_url":"https://manga.utsukushii-bg.com/manga/","categories":[{"id":"1","name":"Екшън"},{"id":"2","name":"Приключенски"},{"id":"3","name":"Комедия"},{"id":"4","name":"Драма"},{"id":"5","name":"Фентъзи"},{"id":"6","name":"Исторически"},{"id":"7","name":"Ужаси"},{"id":"8","name":"Джосей"},{"id":"9","name":"Бойни изкуства"},{"id":"10","name":"Меха"},{"id":"11","name":"Мистерия"},{"id":"12","name":"Самостоятелна/Пилотна глава"},{"id":"13","name":"Психологически"},{"id":"14","name":"Романтика"},{"id":"15","name":"Училищни"},{"id":"16","name":"Научна фантастика"},{"id":"17","name":"Сейнен"},{"id":"18","name":"Шоджо"},{"id":"19","name":"Реализъм"},{"id":"20","name":"Спорт"},{"id":"21","name":"Свръхестествено"},{"id":"22","name":"Трагедия"},{"id":"23","name":"Йокаи"},{"id":"24","name":"Паралелна вселена"},{"id":"25","name":"Супер сили"},{"id":"26","name":"Пародия"},{"id":"27","name":"Шонен"}],"tags":"null"}""" + "https://phoenix-scans.pl" -> """{"name":"Phoenix-Scans","base_url":"https://phoenix-scans.pl","supports_latest":true,"item_url":"https://phoenix-scans.pl/manga/","categories":[{"id":"1","name":"Shounen"},{"id":"2","name":"Tragedia"},{"id":"3","name":"Szkolne życie"},{"id":"4","name":"Romans"},{"id":"5","name":"Zagadka"},{"id":"6","name":"Horror"},{"id":"7","name":"Dojrzałe"},{"id":"8","name":"Psychologiczne"},{"id":"9","name":"Przygodowe"},{"id":"10","name":"Akcja"},{"id":"11","name":"Komedia"},{"id":"12","name":"Zboczone"},{"id":"13","name":"Fantasy"},{"id":"14","name":"Harem"},{"id":"15","name":"Historyczne"},{"id":"16","name":"Manhua"},{"id":"17","name":"Manhwa"},{"id":"18","name":"Sztuki walki"},{"id":"19","name":"One shot"},{"id":"20","name":"Sci fi"},{"id":"21","name":"Seinen"},{"id":"22","name":"Shounen ai"},{"id":"23","name":"Spokojne życie"},{"id":"24","name":"Sport"},{"id":"25","name":"Nadprzyrodzone"},{"id":"26","name":"Webtoons"},{"id":"27","name":"Dramat"},{"id":"28","name":"Hentai"},{"id":"29","name":"Mecha"},{"id":"30","name":"Gender Bender"},{"id":"31","name":"Gry"},{"id":"32","name":"Yaoi"}],"tags":[{"id":"aktywne","name":"aktywne"},{"id":"zakonczone","name":"zakończone"},{"id":"porzucone","name":"porzucone"},{"id":"zawieszone","name":"zawieszone"},{"id":"zlicencjonowane","name":"zlicencjonowane"},{"id":"hentai","name":"Hentai"}]}""" + "https://puzzmos.com" -> """{"name":"Puzzmos","base_url":"https://puzzmos.com","supports_latest":true,"item_url":"https://puzzmos.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":[{"id":"2011","name":"2011"}]}""" + "https://wwv.scan-1.com" -> """{"name":"Scan-1","base_url":"https://wwv.scan-1.com","supports_latest":true,"item_url":"https://wwv.scan-1.com/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" + "https://lelscan-vf.co" -> """{"name":"Lelscan-VF","base_url":"https://lelscan-vf.co","supports_latest":true,"item_url":"https://lelscan-vf.co/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" + "https://adm.komikmanga.com" -> """{"name":"Komik Manga","base_url":"https://adm.komikmanga.com","supports_latest":true,"item_url":"https://adm.komikmanga.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"Adult"},{"id":"34","name":"Isekai"}],"tags":"null"}""" + "https://raws.mangazuki.co" -> """{"name":"Mangazuki Raws","base_url":"https://raws.mangazuki.co","supports_latest":false,"item_url":"\u003c!doctype html\u003e\n\u003chtml lang\u003d\"en-US\"\u003e \n \u003chead\u003e \n \u003cmeta charset\u003d\"UTF-8\"\u003e \n \u003cmeta http-equiv\u003d\"Content-Type\" content\u003d\"text/html; charset\u003dUTF-8\"\u003e \n \u003cmeta http-equiv\u003d\"X-UA-Compatible\" content\u003d\"IE\u003dEdge,chrome\u003d1\"\u003e \n \u003cmeta name\u003d\"robots\" content\u003d\"noindex, nofollow\"\u003e \n \u003cmeta name\u003d\"viewport\" content\u003d\"width\u003ddevice-width,initial-scale\u003d1\"\u003e \n \u003ctitle\u003eJust a moment...\u003c/title\u003e \n \u003cstyle type\u003d\"text/css\"\u003e\n html, body {width: 100%; height: 100%; margin: 0; padding: 0;}\n body {background-color: #ffffff; color: #000000; font-family:-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, \"Helvetica Neue\",Arial, sans-serif; font-size: 16px; line-height: 1.7em;-webkit-font-smoothing: antialiased;}\n h1 { text-align: center; font-weight:700; margin: 16px 0; font-size: 32px; color:#000000; line-height: 1.25;}\n p {font-size: 20px; font-weight: 400; margin: 8px 0;}\n p, .attribution, {text-align: center;}\n #spinner {margin: 0 auto 30px auto; display: block;}\n .attribution {margin-top: 32px;}\n @keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }\n @-webkit-keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }\n #cf-bubbles \u003e .bubbles { animation: fader 1.6s infinite;}\n #cf-bubbles \u003e .bubbles:nth-child(2) { animation-delay: .2s;}\n #cf-bubbles \u003e .bubbles:nth-child(3) { animation-delay: .4s;}\n .bubbles { background-color: #f58220; width:20px; height: 20px; margin:2px; border-radius:100%; display:inline-block; }\n a { color: #2c7cb0; text-decoration: none; -moz-transition: color 0.15s ease; -o-transition: color 0.15s ease; -webkit-transition: color 0.15s ease; transition: color 0.15s ease; }\n a:hover{color: #f4a15d}\n .attribution{font-size: 16px; line-height: 1.5;}\n .ray_id{display: block; margin-top: 8px;}\n #cf-wrapper #challenge-form { padding-top:25px; padding-bottom:25px; }\n #cf-hcaptcha-container { text-align:center;}\n #cf-hcaptcha-container iframe { display: inline-block;}\n \u003c/style\u003e \n \u003cmeta http-equiv\u003d\"refresh\" content\u003d\"12\"\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\n //\u003c![CDATA[\n (function(){\n \n window._cf_chl_opt\u003d{\n cvId: \"2\",\n cType: \"non-interactive\",\n cNounce: \"43695\",\n cRay: \"647de19eba3ffb8c\",\n cHash: \"122e48a18acbe46\",\n cFPWv: \"b\",\n cTTimeMs: \"4000\",\n cRq: {\n ru: \"aHR0cHM6Ly9yYXdzLm1hbmdhenVraS5jby8\u003d\",\n ra: \"b2todHRwLzQuOS4x\",\n rm: \"R0VU\",\n d: \"p8dBkaWxCpVx9B2DDBktU5bzheOo8VgnVby0hw6aaOVxsMabbf4Pku/m4EXbmeziTjTWJftHKhiyxQ8XrYkRkcml1IT29M3QmhTCjdsUfle+V9yfJeyQpz5W1h6LSUkVYJv2UOi4AAkWbxVwqa/+DoqlEnGU2+khvV0eISJz5iszmbOf7j2RYyVQyZfAtY24DpoEKUzaIyLCQKxrOtek60gLNzYMEr2xU6EluFUEx9NKPrL2IB85V4SCcmnp9zVCY7ldt3wD9hx4jtWGMrlNiaquOYxnVJ5v/cjVR3MSZw/P6jOovow/lGsK58n3koBL6o9iHGpchN1lHiCN0Fk1eYdAPOgTEuLgLN3KTNhCGnekxmlR9JRMVDGzkIBHq5q4nNp6l5iZ3AHNYCqjz7EDJmiJz85pjlUS+BHhzWLSIman/7kiDrrg7kDHXOPTMkC0M+vDQInkcn9x+0TnEMgt9xXMAhiLTwCB6FV0+FX6sts+7dMLkaOkq/uz83EOAFBjMRzD94UiocGwD6UfV28CE4dC7zvx0fzVpKjow6bf6q29mSzwcn7qg16I/Gx/PQF3IO3JwPTMB+Nco2wftYmw8UFvEK3hIwoRu7aR72cm4DrhEaZ5THjHZgiKZKX7uulA/f3Q3Mvpmxs9XfBK+WUQGJ33Wcfb9FYbiD1oU4Bea6Y\u003d\",\n t: \"MTYxOTc1NTQxNy40MDIwMDA\u003d\",\n m: \"oz06C8PTF89ERhxMHfiuTT4VCWGZSIMw0CB2HMHxJyY\u003d\",\n i1: \"6eJh1aJs28W6VUw8VwRyNQ\u003d\u003d\",\n i2: \"ajjIIJ/miLN6VE+jT7TpYg\u003d\u003d\",\n zh: \"KeWZ+e+zK01oAMW2nPzlpK5JgXVnJwhoG7hJgU5c7eY\u003d\",\n uh: \"iDgHM1NMNOGrHUNtrBI5GQAgym9P3IepiT4cv0MfV8U\u003d\",\n hh: \"I0kdqj2F0l7JNXvXS7ighNXMGXUM2prtK7PBi3zI0Kw\u003d\",\n }\n }\n window._cf_chl_enter \u003d function(){window._cf_chl_opt.p\u003d1};\n \n })();\n //]]\u003e\n \u003c/script\u003e \n \u003c/head\u003e \n \u003cbody\u003e \n \u003ctable width\u003d\"100%\" height\u003d\"100%\" cellpadding\u003d\"20\"\u003e \n \u003ctbody\u003e\n \u003ctr\u003e \n \u003ctd align\u003d\"center\" valign\u003d\"middle\"\u003e \n \u003cdiv class\u003d\"cf-browser-verification cf-im-under-attack\"\u003e \n \u003cnoscript\u003e \n \u003ch1 data-translate\u003d\"turn_on_js\" style\u003d\"color:#bd2426;\"\u003ePlease turn JavaScript on and reload the page.\u003c/h1\u003e \n \u003c/noscript\u003e \n \u003cdiv id\u003d\"cf-content\" style\u003d\"display:none\"\u003e \n \u003cdiv id\u003d\"cf-bubbles\"\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003c/div\u003e \n \u003ch1\u003e\u003cspan data-translate\u003d\"checking_browser\"\u003eChecking your browser before accessing\u003c/span\u003e mangazuki.co.\u003c/h1\u003e \n \u003cdiv id\u003d\"no-cookie-warning\" class\u003d\"cookie-warning\" data-translate\u003d\"turn_on_cookies\" style\u003d\"display:none\"\u003e \n \u003cp data-translate\u003d\"turn_on_cookies\" style\u003d\"color:#bd2426;\"\u003ePlease enable Cookies and reload the page.\u003c/p\u003e \n \u003c/div\u003e \n \u003cp data-translate\u003d\"process_is_automatic\"\u003eThis process is automatic. Your browser will redirect to your requested content shortly.\u003c/p\u003e \n \u003cp data-translate\u003d\"allow_5_secs\" id\u003d\"cf-spinner-allow-5-secs\"\u003ePlease allow up to 5 seconds…\u003c/p\u003e \n \u003cp data-translate\u003d\"redirecting\" id\u003d\"cf-spinner-redirecting\" style\u003d\"display:none\"\u003eRedirecting…\u003c/p\u003e \n \u003c/div\u003e \n \u003cform class\u003d\"challenge-form\" id\u003d\"challenge-form\" action\u003d\"/?__cf_chl_jschl_tk__\u003d31cedf83efe0df521305eb2d348c0b1b37015d83-1619755417-0-AbDLYKr_-Hx4uDI-v9ByP6ro0OT4QcOQsTqLWhF3Q6kwoIzFN2Eb5ui5VVpNi3EnfD2EGybWcaVxE0YULVkcSXTbXEiU4xc3w5uel3OGpyP8XvQRnZGd2E44ejhWQGvKzTQVpU1_KLbIj5lefUrLPYlQ2oyCDCDTnbhiFLa2Jy-bs-l2FIwHG5RcGCqOeF2QDNTEAL3vIFZoPiSbvyphnkZNWLpUPJGbGtGVNtQer7Mn_0VGTiWEul3WeBnpQArIHWEBIUB7jy8oTHhiBKMwcp5a2i2uqibFmdfXn9H9kOLZjCuIY0yxB2wtXpSQy5L4gd1bNXbP0Pe51ucvPIKK3VjsNyEwKT-54tGuoJvle4gyTCKbw5bIbPt9ZRtXXNBecMbnbUJa7EHza4Nms6xW6Gs\" method\u003d\"POST\" enctype\u003d\"application/x-www-form-urlencoded\"\u003e \n \u003cinput type\u003d\"hidden\" name\u003d\"r\" value\u003d\"17248de69cbd13855d4ec6cca729fa8617b1ece8-1619755417-0-ASnssPpgY1bDldbaDlfPh07zP/ATwLDjEq61uZeyzM7Msq0Pt6Vc9IMWk7usfEZ4EUJKsMtTwIuY1RIVEfsgytz4U2cjd5qS/fyfnOFnFW+tUMR6eaBILPB2eTEj2gra8R/y13sJMFkmyeqN1nPC2yebou3Z20qGJG2uLxlj3V3IHmzIFrP3j+sRr/dwGlGMQWeR6Kr0+0tTu3WB6Uao3zxEX083hXk8opIhd+CFAwCYNyEXuq1Oo1Wsjqv77rioh7WjUka6GUpi7QLp1JqXJ5UApD9Ypd6ZYjHt92BmsIGNBc5N7RKJIPWPn1SopUV2YA1LIYdBaPgJf3mGQi/DEcZYn9inuKO//AcFcxci+WlUX1wT6VhTc0LXyikMemSayj0CUEm1Hn4WaUv/ZKoL3WY2iTKqQegekkfxk+Xks+cJ4l8nkSdKxuxw1dMd6EOM/xtEwA5PSEi/7rhjmmk0r2It3tPy6rQi6gXONJYAcaeUOqCjWzV8CZYl/b8Z3Sx3CzKCL7OxzMxm5P0l6f7bsjspOOc9IWNGINkzAzsUK1AaEc1+/1TIFw1Iwi801t3woFl3o/wpsSrSPPEr4oB31NAyEFKTCJ0TaoyS34RED1ANYu2mm0OprQlymLeEAyIYLjEw2vPt8GpFxQ/n7BJGsnfn2UuNQFnED1OeoiQJyqMtWDC6Uj4eebgnvSiYwsf65Ir91Jaq8V7v+44wNLiUKK7rHjRi9tbX1Tg50d4o47Flu2ZzuVAj7vf/UNXPzYufJYu50lQTHZQ9sAl1fVrP/LEFVe6nB5hy+J9cOdrQVOo8BgTRza0S2DHDhRLsfYKW0etCC3fPVJAKnAZla+pKJQjzi1TzrWfNGaS4V2sn2vKOFJPZu4OqOjiHQt6adMiSceEhrsONnNURdMjOtdXW+Zzro1nbPofjBLiSNc+TPX5Rt+NI4FlmSV+ZEif1z6F0TqZKOez6SyfWoPlfpBuKvgDg8nnc6Vjz3J6s00sGjo3ocAinWTpHGn7ihqCOAafTpgaTyILK1ikegeAdCV+6GZtWIAtOLscwqmEXB0rFtUcNbftJZ2XpFCspA/l/bVuz4mowiEFuEy6hUNbejcUBhnkYcPu/uxLTUgLuNDinJBunQMuCJ3EYWtDsRx1XedC1WpItuGZII2IITW59DrvhNWMqcWARV2eIvR9hZOCTEeLZP8dYMuNxv4qKjxLRhDBgUh5zwSqJ9EMPjTO2e6P5tq2YpYlmuF3iH1E39wGeNofrPdo8cOrn/uM1s9sCfIy4Nir/Nnzmbcb3XqewtIT3yxjiqtTsYRrHb8Dmn7R2KoE5OBFoB4R6bPiSHMLTyg3H/6wHp8J1/Nssin5TmdNSC0WtZDo3+MC4wamGjp2m4VATOZSWegD8Aimaocl9RDnR5u55UAQEmGsV1YK7y8R5ANSX4wQK1OOZvBUTbhKiPXen\"\u003e \n \u003cinput type\u003d\"hidden\" value\u003d\"04ae3a097109b20f657cfecb213a1ff1\" id\u003d\"jschl-vc\" name\u003d\"jschl_vc\"\u003e \u003c!-- \u003cinput type\u003d\"hidden\" value\u003d\"\" id\u003d\"jschl-vc\" name\u003d\"jschl_vc\"/\u003e --\u003e \n \u003cinput type\u003d\"hidden\" name\u003d\"pass\" value\u003d\"1619755421.402-8pp6wtYPbN\"\u003e \n \u003cinput type\u003d\"hidden\" id\u003d\"jschl-answer\" name\u003d\"jschl_answer\"\u003e \n \u003c/form\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\n //\u003c![CDATA[\n (function(){\n var a \u003d document.getElementById(\u0027cf-content\u0027);\n a.style.display \u003d \u0027block\u0027;\n var isIE \u003d /(MSIE|Trident\\/|Edge\\/)/i.test(window.navigator.userAgent);\n var trkjs \u003d isIE ? new Image() : document.createElement(\u0027img\u0027);\n trkjs.setAttribute(\"src\", \"/cdn-cgi/images/trace/jschal/js/transparent.gif?ray\u003d647de19eba3ffb8c\");\n trkjs.id \u003d \"trk_jschal_js\";\n trkjs.setAttribute(\"alt\", \"\");\n document.body.appendChild(trkjs);\n var cpo\u003ddocument.createElement(\u0027script\u0027);\n cpo.type\u003d\u0027text/javascript\u0027;\n cpo.src\u003d\"/cdn-cgi/challenge-platform/h/b/orchestrate/jsch/v1?ray\u003d647de19eba3ffb8c\";\n document.getElementsByTagName(\u0027head\u0027)[0].appendChild(cpo);\n }());\n //]]\u003e\n \u003c/script\u003e \n \u003cdiv id\u003d\"trk_jschal_nojs\" style\u003d\"background-image:url(\u0027/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray\u003d647de19eba3ffb8c\u0027)\"\u003e \n \u003c/div\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"attribution\"\u003e\n DDoS protection by \u003ca rel\u003d\"noopener noreferrer\" href\u003d\"https://www.cloudflare.com/5xx-error-landing/\" target\u003d\"_blank\"\u003eCloudflare\u003c/a\u003e \n \u003cbr\u003e \u003cspan class\u003d\"ray_id\"\u003eRay ID: \u003ccode\u003e647de19eba3ffb8c\u003c/code\u003e\u003c/span\u003e \n \u003c/div\u003e \u003c/td\u003e \n \u003c/tr\u003e \n \u003c/tbody\u003e\n \u003c/table\u003e \n \u003c/body\u003e\n\u003c/html\u003e/","categories":[],"tags":"null"}""" + "https://mangazuki.co" -> """{"name":"Mangazuki","base_url":"https://mangazuki.co","supports_latest":false,"item_url":"\u003c!doctype html\u003e\n\u003chtml lang\u003d\"en-US\"\u003e \n \u003chead\u003e \n \u003cmeta charset\u003d\"UTF-8\"\u003e \n \u003cmeta http-equiv\u003d\"Content-Type\" content\u003d\"text/html; charset\u003dUTF-8\"\u003e \n \u003cmeta http-equiv\u003d\"X-UA-Compatible\" content\u003d\"IE\u003dEdge,chrome\u003d1\"\u003e \n \u003cmeta name\u003d\"robots\" content\u003d\"noindex, nofollow\"\u003e \n \u003cmeta name\u003d\"viewport\" content\u003d\"width\u003ddevice-width,initial-scale\u003d1\"\u003e \n \u003ctitle\u003eJust a moment...\u003c/title\u003e \n \u003cstyle type\u003d\"text/css\"\u003e\n html, body {width: 100%; height: 100%; margin: 0; padding: 0;}\n body {background-color: #ffffff; color: #000000; font-family:-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, \"Helvetica Neue\",Arial, sans-serif; font-size: 16px; line-height: 1.7em;-webkit-font-smoothing: antialiased;}\n h1 { text-align: center; font-weight:700; margin: 16px 0; font-size: 32px; color:#000000; line-height: 1.25;}\n p {font-size: 20px; font-weight: 400; margin: 8px 0;}\n p, .attribution, {text-align: center;}\n #spinner {margin: 0 auto 30px auto; display: block;}\n .attribution {margin-top: 32px;}\n @keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }\n @-webkit-keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }\n #cf-bubbles \u003e .bubbles { animation: fader 1.6s infinite;}\n #cf-bubbles \u003e .bubbles:nth-child(2) { animation-delay: .2s;}\n #cf-bubbles \u003e .bubbles:nth-child(3) { animation-delay: .4s;}\n .bubbles { background-color: #f58220; width:20px; height: 20px; margin:2px; border-radius:100%; display:inline-block; }\n a { color: #2c7cb0; text-decoration: none; -moz-transition: color 0.15s ease; -o-transition: color 0.15s ease; -webkit-transition: color 0.15s ease; transition: color 0.15s ease; }\n a:hover{color: #f4a15d}\n .attribution{font-size: 16px; line-height: 1.5;}\n .ray_id{display: block; margin-top: 8px;}\n #cf-wrapper #challenge-form { padding-top:25px; padding-bottom:25px; }\n #cf-hcaptcha-container { text-align:center;}\n #cf-hcaptcha-container iframe { display: inline-block;}\n \u003c/style\u003e \n \u003cmeta http-equiv\u003d\"refresh\" content\u003d\"12\"\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\n //\u003c![CDATA[\n (function(){\n \n window._cf_chl_opt\u003d{\n cvId: \"2\",\n cType: \"non-interactive\",\n cNounce: \"45428\",\n cRay: \"647de1a76fa8fb90\",\n cHash: \"3e74a7283d4a4c8\",\n cFPWv: \"b\",\n cTTimeMs: \"4000\",\n cRq: {\n ru: \"aHR0cHM6Ly9tYW5nYXp1a2kuY28v\",\n ra: \"b2todHRwLzQuOS4x\",\n rm: \"R0VU\",\n d: \"/yMvbMum9TxaKLvsMCEmVoAz4o1Tw6IRMfkmAXV2jH8RjubrczOIJvbQj4tfOTOS0MVJrgUdvwkiyUtmVn9IdExcMLw+wu0HkATProYm3es/kY1oM+lvPj4aA3dd4kM8ztbjgcCLW5/cqOBN/vIn7xrhOwhRuLz0IvNVVMYJCVKpyR6bCvkeiAHlAA1NAfVGn+N2rVvHyCW/mRiaQDyuDI4ry50I/3n7lsw04NJft4kcVV1CgTAVK3PbFIm0yADz9EVYQZ3zuwhtcWm3OWhFVLV+fApNUxp5K+OisiTIaq5U8UpZZ5g/Qml8+Z8BNd5MaNIQ4vQp6xk611h2C8TvbOy9e9srIy6ptoJa3NKBe2VNGIDGgMViK4PYn8aBVo2ni8TzyIuWTS0jqAS39C920tEhAvFH6mYsJKbT4BKF7GKOKZ6+h/VLP1T5uoSKA5YnkUkBeqgAg0r3XjEyCKjk+rj+u0HVE8PPAXO4bowO7TWz52BFX0fXq2pzm0woooj2upw5LlmPhNxCpneloBVD74ew0tS7OzAzxkCPBrpoSRt+zwOQ+t1impdOnQqARxoBzXa4rdT3FRWYZC1BKu9Hws3XbhrRmhOsc8VcQlyzH2EAVIeYjYgXN1DpTbdK+A24gCPD6t62Xxo2Eh/PdHIpG7+PKTiSOFKaKUQrfbyil24\u003d\",\n t: \"MTYxOTc1NTQxOC43OTEwMDA\u003d\",\n m: \"kILeSAmwZghUoWEVg1z39QVba0G25V7yIk78//tbz+Q\u003d\",\n i1: \"Ucb0SFG3OISd7HhKRQPKVg\u003d\u003d\",\n i2: \"kSSBnk0LUD0/6aRN3GyNqQ\u003d\u003d\",\n zh: \"KeWZ+e+zK01oAMW2nPzlpK5JgXVnJwhoG7hJgU5c7eY\u003d\",\n uh: \"iDgHM1NMNOGrHUNtrBI5GQAgym9P3IepiT4cv0MfV8U\u003d\",\n hh: \"ZCwkjIp/x7rQ/OhQGADpbaKVwm+wCnV8j2iXGJ0TTyU\u003d\",\n }\n }\n window._cf_chl_enter \u003d function(){window._cf_chl_opt.p\u003d1};\n \n })();\n //]]\u003e\n \u003c/script\u003e \n \u003c/head\u003e \n \u003cbody\u003e \n \u003ctable width\u003d\"100%\" height\u003d\"100%\" cellpadding\u003d\"20\"\u003e \n \u003ctbody\u003e\n \u003ctr\u003e \n \u003ctd align\u003d\"center\" valign\u003d\"middle\"\u003e \n \u003cdiv class\u003d\"cf-browser-verification cf-im-under-attack\"\u003e \n \u003cnoscript\u003e \n \u003ch1 data-translate\u003d\"turn_on_js\" style\u003d\"color:#bd2426;\"\u003ePlease turn JavaScript on and reload the page.\u003c/h1\u003e \n \u003c/noscript\u003e \n \u003cdiv id\u003d\"cf-content\" style\u003d\"display:none\"\u003e \n \u003cdiv id\u003d\"cf-bubbles\"\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003c/div\u003e \n \u003ch1\u003e\u003cspan data-translate\u003d\"checking_browser\"\u003eChecking your browser before accessing\u003c/span\u003e mangazuki.co.\u003c/h1\u003e \n \u003cdiv id\u003d\"no-cookie-warning\" class\u003d\"cookie-warning\" data-translate\u003d\"turn_on_cookies\" style\u003d\"display:none\"\u003e \n \u003cp data-translate\u003d\"turn_on_cookies\" style\u003d\"color:#bd2426;\"\u003ePlease enable Cookies and reload the page.\u003c/p\u003e \n \u003c/div\u003e \n \u003cp data-translate\u003d\"process_is_automatic\"\u003eThis process is automatic. Your browser will redirect to your requested content shortly.\u003c/p\u003e \n \u003cp data-translate\u003d\"allow_5_secs\" id\u003d\"cf-spinner-allow-5-secs\"\u003ePlease allow up to 5 seconds…\u003c/p\u003e \n \u003cp data-translate\u003d\"redirecting\" id\u003d\"cf-spinner-redirecting\" style\u003d\"display:none\"\u003eRedirecting…\u003c/p\u003e \n \u003c/div\u003e \n \u003cform class\u003d\"challenge-form\" id\u003d\"challenge-form\" action\u003d\"/?__cf_chl_jschl_tk__\u003db30f8c1048a83cb1e7e3891a55d26f17b791e17b-1619755418-0-AcJGu0ERNyoK_pVQfwkeAHBZuAubhLbKNdzx6nFvTgzq-jINIWMtWDHRN04xiUFtInKPE15yn1QkwomN4QYsy1QsyMPfEX8qTTK_A3Fs6ztDZeY0-F15WYa65aWnmmxTPpt4WvH9LZv5pdz9IWRyv-GIyVaMA9n2gfio8FdmxlfjrPqfumZjserANZ-QPk5HFYiKH83pLtNQS0Mg1_5ajgPU5M-ChiQHsJ66lWm0J10cvjlaZmsICHBVMPS6F3uYZjPUxrEExpg7EtUnpUPmp4E5qn8P6QcY-Us1AxDvCn36re_pqNR5-17GDtl3OZo8K0N2bvyHfoa0sNifJmuWw4X4obusgvHNxlBoxIWvx5nbmAy0kZKYbIAwqBXBGlo_BJw6-cPpyBsS1ie8SGDrj38\" method\u003d\"POST\" enctype\u003d\"application/x-www-form-urlencoded\"\u003e \n \u003cinput type\u003d\"hidden\" name\u003d\"r\" value\u003d\"f78b94ba8f42da34ca76c8c835bea15cd282d620-1619755418-0-AWcmmRtLeu8tVFPw+VKAaOW/vrPYXWTiP5ebT2Vanpz1743mwTEOfcVqrKgtKYxkMrrY+9kjl0xs2vHXaKuzaqTbwJA6B6OOOwXz+ezQZ6MQEzolDDTeGa6fCtLxaRYVYMpAOL6PR1G+tz4K3fa/ae1K0F72M2TvLuOhxt+rkIk+l1uh6xq+iooO87Yuk66MV/URmvLqrOV62WNrv/RspCXHm7eaqKlGhB8mrcz94kHpuT9LN0xNg0M9S65sONEEBeydT/k6jNqp982OK6xBDed8qAmDislDkDWmzKr+SYpgh58GXOMFnEPO8mnB6gA0jN3++kXnAXXL6IDw0HS0puUQC87KkjYnU8kO5MTU7AAN6LOhXi16ci0l4z2bdOK04VrxuhnY86HH8Q+B6Aql1YqcnYGi1M6GmZjfzn5vVPQxUucGCzSNoxeMrLk4+5cbcQFnHjYbW1aB2gbwpRfXASHoWeNP/s8wNBdl7InQ2BnDVDW6UgNLCSmwIKew+59WawNU58XZor4GDuhszBouXH2atWu3URUZBWaiVo6ShbYOAIGYD7JwxUfl+3rKOy09uB838toQTeZJfFV0JBOJNNqXiWZF6J9wR+6L2+J9cBjZGwCVIm0hF0QuL4Q08nxQuho4Hq3PmbY0MBoPoKlNlcTpqJMlRnA8pbrM8dAfGYpcq6PpVbqpO5tkufhgiWxYtTlmr09MCAAJ3B89M4mUw2gbqyJyLYQ+52cxX23bMHti1h+LdTkeu2bS/sZFyeAKmOCYqeHl7QB0CWsH1xQzBRf6PqEyRPyiXScIJyUyCW9SU12M54+8m1ZNwTIwRbTI/XtDtc3ZSILZD1OUusj/RmVadj9hvy5U62sV5SDGP5qS1WFnGISUHD+YNZTeJL9/Y7+7Foah0UYZ3lYJncs43D6YMT4aP3DTcvsEya/1SDjH0G2bHu5nf4hwIR2euQfEce7FO/h7E9qQ1IpWQ3Ei0+MEUdH+KsIOqGZOK6svDd0Iioxd2LthGch1W4gRdPEGxfArABdc+krfg9v4uLVl2Nytjf2TujRKSXOmgoXjbl8lYdNm6f1CaYG1OnldY4RWKYyKeFg/Ook8Gkq9UI/J+4okZ4dzpPuMmCM7CMGZm3JdKLiRDHyZrZlpCy/3z6inZkU9tAi26voBSfAYYhN9mXfvFLBcYgda2hmx+bqFwqNOzMbflIEIk+b24CJRdHnHkmG63QdKCCNb9nbyg/DW52P1pYOwlwtLmlk6uLxctlPWC4nH8snyU8IbHgiHdoYHu7kXs9oR9p8j9qmJHfSlksX6t23bYvg9cA/+P2S8ibQ6lBkwOtU+XI7KXVHf78wXYltIZzXLmQnKPmMgQJP8nBlHW+6XKjMMOyh/wV6YeNBWsDqcnugRIEMpuGcwILZuGW5O81TLzc4lYtGtxYOthxnyxea+BXo0RB5VjuX472pY\"\u003e \n \u003cinput type\u003d\"hidden\" value\u003d\"6b5c1c76bad913bfb5f171c19995eb07\" id\u003d\"jschl-vc\" name\u003d\"jschl_vc\"\u003e \u003c!-- \u003cinput type\u003d\"hidden\" value\u003d\"\" id\u003d\"jschl-vc\" name\u003d\"jschl_vc\"/\u003e --\u003e \n \u003cinput type\u003d\"hidden\" name\u003d\"pass\" value\u003d\"1619755422.791-43KWLCV0wb\"\u003e \n \u003cinput type\u003d\"hidden\" id\u003d\"jschl-answer\" name\u003d\"jschl_answer\"\u003e \n \u003c/form\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\n //\u003c![CDATA[\n (function(){\n var a \u003d document.getElementById(\u0027cf-content\u0027);\n a.style.display \u003d \u0027block\u0027;\n var isIE \u003d /(MSIE|Trident\\/|Edge\\/)/i.test(window.navigator.userAgent);\n var trkjs \u003d isIE ? new Image() : document.createElement(\u0027img\u0027);\n trkjs.setAttribute(\"src\", \"/cdn-cgi/images/trace/jschal/js/transparent.gif?ray\u003d647de1a76fa8fb90\");\n trkjs.id \u003d \"trk_jschal_js\";\n trkjs.setAttribute(\"alt\", \"\");\n document.body.appendChild(trkjs);\n var cpo\u003ddocument.createElement(\u0027script\u0027);\n cpo.type\u003d\u0027text/javascript\u0027;\n cpo.src\u003d\"/cdn-cgi/challenge-platform/h/b/orchestrate/jsch/v1?ray\u003d647de1a76fa8fb90\";\n document.getElementsByTagName(\u0027head\u0027)[0].appendChild(cpo);\n }());\n //]]\u003e\n \u003c/script\u003e \n \u003cdiv id\u003d\"trk_jschal_nojs\" style\u003d\"background-image:url(\u0027/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray\u003d647de1a76fa8fb90\u0027)\"\u003e \n \u003c/div\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"attribution\"\u003e\n DDoS protection by \u003ca rel\u003d\"noopener noreferrer\" href\u003d\"https://www.cloudflare.com/5xx-error-landing/\" target\u003d\"_blank\"\u003eCloudflare\u003c/a\u003e \n \u003cbr\u003e \u003cspan class\u003d\"ray_id\"\u003eRay ID: \u003ccode\u003e647de1a76fa8fb90\u003c/code\u003e\u003c/span\u003e \n \u003c/div\u003e \u003c/td\u003e \n \u003c/tr\u003e \n \u003c/tbody\u003e\n \u003c/table\u003e \n \u003c/body\u003e\n\u003c/html\u003e/","categories":[],"tags":"null"}""" + "https://remangas.top" -> """{"name":"Remangas","base_url":"https://remangas.top","supports_latest":false,"item_url":"\u003c!doctype html\u003e\n\u003chtml lang\u003d\"en-US\"\u003e \n \u003chead\u003e \n \u003cmeta charset\u003d\"UTF-8\"\u003e \n \u003cmeta http-equiv\u003d\"Content-Type\" content\u003d\"text/html; charset\u003dUTF-8\"\u003e \n \u003cmeta http-equiv\u003d\"X-UA-Compatible\" content\u003d\"IE\u003dEdge,chrome\u003d1\"\u003e \n \u003cmeta name\u003d\"robots\" content\u003d\"noindex, nofollow\"\u003e \n \u003cmeta name\u003d\"viewport\" content\u003d\"width\u003ddevice-width,initial-scale\u003d1\"\u003e \n \u003ctitle\u003eJust a moment...\u003c/title\u003e \n \u003cstyle type\u003d\"text/css\"\u003e\n html, body {width: 100%; height: 100%; margin: 0; padding: 0;}\n body {background-color: #ffffff; color: #000000; font-family:-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, \"Helvetica Neue\",Arial, sans-serif; font-size: 16px; line-height: 1.7em;-webkit-font-smoothing: antialiased;}\n h1 { text-align: center; font-weight:700; margin: 16px 0; font-size: 32px; color:#000000; line-height: 1.25;}\n p {font-size: 20px; font-weight: 400; margin: 8px 0;}\n p, .attribution, {text-align: center;}\n #spinner {margin: 0 auto 30px auto; display: block;}\n .attribution {margin-top: 32px;}\n @keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }\n @-webkit-keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }\n #cf-bubbles \u003e .bubbles { animation: fader 1.6s infinite;}\n #cf-bubbles \u003e .bubbles:nth-child(2) { animation-delay: .2s;}\n #cf-bubbles \u003e .bubbles:nth-child(3) { animation-delay: .4s;}\n .bubbles { background-color: #f58220; width:20px; height: 20px; margin:2px; border-radius:100%; display:inline-block; }\n a { color: #2c7cb0; text-decoration: none; -moz-transition: color 0.15s ease; -o-transition: color 0.15s ease; -webkit-transition: color 0.15s ease; transition: color 0.15s ease; }\n a:hover{color: #f4a15d}\n .attribution{font-size: 16px; line-height: 1.5;}\n .ray_id{display: block; margin-top: 8px;}\n #cf-wrapper #challenge-form { padding-top:25px; padding-bottom:25px; }\n #cf-hcaptcha-container { text-align:center;}\n #cf-hcaptcha-container iframe { display: inline-block;}\n \u003c/style\u003e \n \u003cmeta http-equiv\u003d\"refresh\" content\u003d\"12\"\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\n //\u003c![CDATA[\n (function(){\n \n window._cf_chl_opt\u003d{\n cvId: \"2\",\n cType: \"non-interactive\",\n cNounce: \"99768\",\n cRay: \"647de1b3ca3afb84\",\n cHash: \"9c3dcb5aefbf796\",\n cFPWv: \"b\",\n cTTimeMs: \"4000\",\n cRq: {\n ru: \"aHR0cHM6Ly9yZW1hbmdhcy50b3Av\",\n ra: \"b2todHRwLzQuOS4x\",\n rm: \"R0VU\",\n d: \"V3+rE6Q5saUb/8gxjEydrlUDYuzV2a8HYQKgtlUjmcOBdwazjxKSjF46YmXh7Pucxb1ljcVPbws2uckbYgrhOGoi1G68y6D0g5xIoNIy6x2kPN3RUE3sYtMTbGanKxX/PIpuAtcWQD+yr5C3WLztxVN57Pfu86DTR+rfPZXF0rW81Ng39Yhfq+DbeNj2irQG40d//PFuaqFsYCH4ydO/4YRRF0U7bfFRonsPmUWgsb5fFgdOoPRJjIYjZ5vVub+WfymghgIcHUi/rlcFXDHmtIPCwn04+wLl/f1wWc1N7pWHkYbHbqsK+WFOGVs/lnz3AnyuUtr7WOt1gSUTVhFUM+hIQtsnKasasRSMISSy8ZjGaHAKfZka7SsUXPhGfiMkpwaEz/V0Bo30z8TRzGcJIB2oNt5ndLeOpjr6GHLRXq9grdu1O5+qt66eu4zHJ+fBcJqtpiX/oh/V2XbsnwIqI/rVD5XU5Y/Xu20aux1882Iu/Rei3icoQYMDVcyQ3eBfA4Fev0eoxiMKeO92xvn8d9xuydDwR38y7BmMi327VxKpUsb0GSK/S27vLjWS7GAkmKsV7iDpG2vSkTiadJfoIonw5CZ3kemCJO/k9Wt2h8HVZLcqehvocavh3iPcfPyoadaQJWnH60oC7oaYwMgDg9xtzWYChB3sO6DUY/VLHiB6YDr4gRhzAz5bwSu0A3TB\",\n t: \"MTYxOTc1NTQyMC43NzAwMDA\u003d\",\n m: \"7bmnaiX0DttJ2EnUPd9gutQOFVoGcimZUoUZsaEtrJI\u003d\",\n i1: \"mLoTdzAFg4duhibqSPkBRg\u003d\u003d\",\n i2: \"N3Fh5bP5Lr79+ogC1p4J4w\u003d\u003d\",\n zh: \"7/k0OT+SkUfCgFOwySaZosrNxnPICFqry9LpyhoGl7E\u003d\",\n uh: \"iDgHM1NMNOGrHUNtrBI5GQAgym9P3IepiT4cv0MfV8U\u003d\",\n hh: \"IwuJiS+2/4NJtxlZR4+4xuUdEIky+0+G/lD/1nySi04\u003d\",\n }\n }\n window._cf_chl_enter \u003d function(){window._cf_chl_opt.p\u003d1};\n \n })();\n //]]\u003e\n \u003c/script\u003e \n \u003c/head\u003e \n \u003cbody\u003e \n \u003ctable width\u003d\"100%\" height\u003d\"100%\" cellpadding\u003d\"20\"\u003e \n \u003ctbody\u003e\n \u003ctr\u003e \n \u003ctd align\u003d\"center\" valign\u003d\"middle\"\u003e \n \u003cdiv class\u003d\"cf-browser-verification cf-im-under-attack\"\u003e \n \u003cnoscript\u003e \n \u003ch1 data-translate\u003d\"turn_on_js\" style\u003d\"color:#bd2426;\"\u003ePlease turn JavaScript on and reload the page.\u003c/h1\u003e \n \u003c/noscript\u003e \n \u003cdiv id\u003d\"cf-content\" style\u003d\"display:none\"\u003e \u003ca href\u003d\"https://madbbs.org/feminine.php?issue\u003d0\" style\u003d\"display: none;\"\u003etable\u003c/a\u003e \n \u003cdiv id\u003d\"cf-bubbles\"\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003c/div\u003e \n \u003ch1\u003e\u003cspan data-translate\u003d\"checking_browser\"\u003eChecking your browser before accessing\u003c/span\u003e remangas.top.\u003c/h1\u003e \n \u003cdiv id\u003d\"no-cookie-warning\" class\u003d\"cookie-warning\" data-translate\u003d\"turn_on_cookies\" style\u003d\"display:none\"\u003e \n \u003cp data-translate\u003d\"turn_on_cookies\" style\u003d\"color:#bd2426;\"\u003ePlease enable Cookies and reload the page.\u003c/p\u003e \n \u003c/div\u003e \n \u003cp data-translate\u003d\"process_is_automatic\"\u003eThis process is automatic. Your browser will redirect to your requested content shortly.\u003c/p\u003e \n \u003cp data-translate\u003d\"allow_5_secs\" id\u003d\"cf-spinner-allow-5-secs\"\u003ePlease allow up to 5 seconds…\u003c/p\u003e \n \u003cp data-translate\u003d\"redirecting\" id\u003d\"cf-spinner-redirecting\" style\u003d\"display:none\"\u003eRedirecting…\u003c/p\u003e \n \u003c/div\u003e \n \u003cform class\u003d\"challenge-form\" id\u003d\"challenge-form\" action\u003d\"/?__cf_chl_jschl_tk__\u003d42b116e4eab97f4198c6811f2ed7f055a294a1dc-1619755420-0-AXYxXWNz9wY0OKLI9ojVUv5yOtJ8ciATyUso2u8yX_87awHbbeZsOpF8-3djvsGFV1nWXAouNY9PPyUQT4PXOr3eH2saHWS16MFE-NkqHsOGhsFgPalf3riP4RwrwTiPyn2IkMBR11GEsSHeKwTZZWc_NXJCxdObNdo-ccfgUJ-xXdkz5nKUYcDNOdmskq7KmlVcukMNsFZn_FF_oNsS8B2YbOVhUHJqDJiZF8YyA46y26-cD0EAE2svIVcCF-PtCo3JkT-O9kSTWohuTNYEJICR28RqAUrP8SgACmN_AHsW_-1aix74y2kFCzC8f9qDSZOMgvqK1EBDkIpsyELuwaZKvEhBdI-dJ0C5u4sCliVbMLamz9haNAob_kSR-JZiAF7yrUfyTAISrPZQn-fE-ilLv9BWmMwUTof5qGyjxoLB\" method\u003d\"POST\" enctype\u003d\"application/x-www-form-urlencoded\"\u003e \n \u003cinput type\u003d\"hidden\" name\u003d\"r\" value\u003d\"b2dbe9faefaa7782c8885c62f1522eaeef1db237-1619755420-0-AUb1pqgSmoo7kkDboZd4Asb0UyKkJb/fFbre+InEXiSN9jyI6jSRBfv51pWZ4KS09ywvGS7sWVDLifAs65OQvbpn09y4gCUHbymExQB2TEVqIR6CkDwXikJrenqSAcC2IjhSc5HH4gnDXfWlaQYlNUtN/2eztAoePpGl7YfhDy4JsjLq4KOwJxQSenrlmyE9y+B9nJgxi81KxPuTxQZ+Hk1pKK7pKlJ5vpS12zsxat+ST4SnRPavYP68NttVKsKWiAKr0VfCCIvhLBSfTUTCKW1s0AgkJ3yxMdAcoj1xdN73uLHVN/eXH4mK80SO98Fi7BGdFy/p+sy1+XcFShwlpYVuvC/7umg1Tcjd9UyorBvYL7lChjzAFlHVBbJP/WVXfnv++ISDpkhR3mcpeke+cIAUMNkhaHU9tYWNnFpghM5T8nDSTqBOVlrWIGxETWmuMSwX+H1TE0AI1SYvNW/Y0hb6QmmI/GbVtPauDsJNseOyoK4IioDBwbvZh6sv7URtlzwNdcjVH2qU2HYjdcvOcIuCLXxP9Sia6EAr5l8O6iAmdg1T7ZwdpR5yG2dhbVEphNxxb43cq/rWO/jTZbyaZHEs0JhDcuCBHCazwDMF2ANevhS+IZqVsSXtPnfAbPHSzo7lBHllbyf1nYAAa2gEySNKjcwHnZ57sQegXiNH98piM0AQUA5Bj+3YUTBigd+DRDhpny2+Tf5pPoSvsj0wCPYO19VnpLtbwZLVqZ2E5KKfBgRD3MOU8yHLQ3nHWXnWHp/t8EQNv8mb6wM6RLJmSgThNWZiQLeyy5Lf+OSI8xMoo+0edoiur5kGUm+l57jFFS3pO+NMObeMhPeOw2qglZTaIkGf0dGUFw1LUlwO0qxTZNXzt2XAQyFIbKFYaFsrDl4zDuuSUDzlXziBKBpGnivz4ZYJ+zpBU4+0nMvu+iITvz6uVerJCFbpqRIN1ReD8YbgBHHrv/bP3FfzVdwT+whZBoSY3gzJyjnd2bWZJGFjNpEo5VYjc33ejieM9VN037qUn4q3lrTy7PW+8SQjzPcijUwIMFWfqc8dsp2p1mBNmeMbGCWfsXd5LZbmL8XbUyYdLdraPIvhvqBB3ApjRklhW5N71kT5bg28BDB5gAoLW9U34maTY3iC3dFNp1JewJREKHlTF2mNGot5wPaCDGMdXPIiP8MwqMoafAXFL4mydUmHZWiAu2luYqEYBUWG9c7aeA4vHPxFdPgp8QyN8EaaFVHvvVtfrnWOwwXeZD5H/gMz1gxSowa2HV0R5MQqkuvn5YmkTJrcDrdKLUx4cDhZgB6j/gTMmJeO9xbgPo0NziDoP4UVVeTPRjNP8EUeCYwmG6NZjbm3SRz24KiKGt5AP8NDnnILudS6FykAuMdLMpV2qR56HxTk3e2Nxy9V87z0FQR9Zhs3LZKktF9g+b0\u003d\"\u003e \n \u003cinput type\u003d\"hidden\" value\u003d\"b6bbba43467df1ef0beaa128b0ddc636\" id\u003d\"jschl-vc\" name\u003d\"jschl_vc\"\u003e \u003c!-- \u003cinput type\u003d\"hidden\" value\u003d\"\" id\u003d\"jschl-vc\" name\u003d\"jschl_vc\"/\u003e --\u003e \n \u003cinput type\u003d\"hidden\" name\u003d\"pass\" value\u003d\"1619755424.77-liMuc/gH07\"\u003e \n \u003cinput type\u003d\"hidden\" id\u003d\"jschl-answer\" name\u003d\"jschl_answer\"\u003e \n \u003c/form\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\n //\u003c![CDATA[\n (function(){\n var a \u003d document.getElementById(\u0027cf-content\u0027);\n a.style.display \u003d \u0027block\u0027;\n var isIE \u003d /(MSIE|Trident\\/|Edge\\/)/i.test(window.navigator.userAgent);\n var trkjs \u003d isIE ? new Image() : document.createElement(\u0027img\u0027);\n trkjs.setAttribute(\"src\", \"/cdn-cgi/images/trace/jschal/js/transparent.gif?ray\u003d647de1b3ca3afb84\");\n trkjs.id \u003d \"trk_jschal_js\";\n trkjs.setAttribute(\"alt\", \"\");\n document.body.appendChild(trkjs);\n var cpo\u003ddocument.createElement(\u0027script\u0027);\n cpo.type\u003d\u0027text/javascript\u0027;\n cpo.src\u003d\"/cdn-cgi/challenge-platform/h/b/orchestrate/jsch/v1?ray\u003d647de1b3ca3afb84\";\n document.getElementsByTagName(\u0027head\u0027)[0].appendChild(cpo);\n }());\n //]]\u003e\n \u003c/script\u003e \n \u003cdiv id\u003d\"trk_jschal_nojs\" style\u003d\"background-image:url(\u0027/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray\u003d647de1b3ca3afb84\u0027)\"\u003e \n \u003c/div\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"attribution\"\u003e\n DDoS protection by \u003ca rel\u003d\"noopener noreferrer\" href\u003d\"https://www.cloudflare.com/5xx-error-landing/\" target\u003d\"_blank\"\u003eCloudflare\u003c/a\u003e \n \u003cbr\u003e \u003cspan class\u003d\"ray_id\"\u003eRay ID: \u003ccode\u003e647de1b3ca3afb84\u003c/code\u003e\u003c/span\u003e \n \u003c/div\u003e \u003c/td\u003e \n \u003c/tr\u003e \n \u003c/tbody\u003e\n \u003c/table\u003e \n \u003c/body\u003e\n\u003c/html\u003e/","categories":[],"tags":"null"}""" + "https://animaregia.net" -> """{"name":"AnimaRegia","base_url":"https://animaregia.net","supports_latest":true,"item_url":"http://animaregia.net/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" + "http://manga-v2.mangavadisi.org" -> """{"name":"MangaVadisi","base_url":"http://manga-v2.mangavadisi.org","supports_latest":true,"item_url":"http://manga-v2.mangavadisi.org/manga/","categories":[{"id":"1","name":"Aksiyon"},{"id":"2","name":"Macera"},{"id":"3","name":"Komedi"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantastik"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Tarihi"},{"id":"11","name":"Korku"},{"id":"12","name":"Josei"},{"id":"13","name":"Dövüş Sanatları"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Gizem"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psikolojik"},{"id":"19","name":"Romantizm"},{"id":"20","name":"Okul Hayatı"},{"id":"21","name":"Bilim Kurgu"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Günlük Yaşam"},{"id":"28","name":"Spor"},{"id":"29","name":"Doğaüstü"},{"id":"30","name":"Trajedi"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" + "https://mangaid.click" -> """{"name":"MangaID","base_url":"https://mangaid.click","supports_latest":true,"item_url":"https://mangaid.click/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"Psychological"},{"id":"18","name":"Romance"},{"id":"19","name":"School Life"},{"id":"20","name":"Sci-fi"},{"id":"21","name":"Seinen"},{"id":"22","name":"Shoujo"},{"id":"23","name":"Shoujo Ai"},{"id":"24","name":"Shounen"},{"id":"25","name":"Shounen Ai"},{"id":"26","name":"Slice of Life"},{"id":"27","name":"Sports"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedy"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"School"},{"id":"33","name":"Isekai"},{"id":"34","name":"Military"}],"tags":"null"}""" + "https://jpmangas.co" -> """{"name":"Jpmangas","base_url":"https://jpmangas.co","supports_latest":true,"item_url":"https://jpmangas.co/lecture-en-ligne/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" + "https://www.op-vf.com" -> """{"name":"Op-VF","base_url":"https://www.op-vf.com","supports_latest":true,"item_url":"https://www.op-vf.com/manga/","categories":[],"tags":"null"}""" + "https://frscan.cc" -> """{"name":"FR Scan","base_url":"https://frscan.cc","supports_latest":true,"item_url":"https://frscan.cc/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"Vie Scolaire"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Tranche de vie"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedie"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"Autre"},{"id":"34","name":"BD Occidentale"},{"id":"35","name":"Webtoon"}],"tags":"null"}""" + "https://www.hentaishark.com" -> """{"name":"HentaiShark","base_url":"https://www.hentaishark.com","supports_latest":true,"item_url":"https://www.hentaishark.com/manga/","categories":[{"id":"1","name":"Doujinshi"},{"id":"2","name":"Manga"},{"id":"3","name":"Western"},{"id":"4","name":"non-h"},{"id":"5","name":"imageset"},{"id":"6","name":"artistcg"},{"id":"7","name":"misc"}],"tags":"null"}""" + else -> "" + } + } + } +} diff --git a/src/all/mmrcms/AndroidManifest.xml b/src/all/mmrcms/AndroidManifest.xml deleted file mode 100644 index 30deb7f79..000000000 --- a/src/all/mmrcms/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/src/all/mmrcms/build.gradle b/src/all/mmrcms/build.gradle deleted file mode 100644 index d9fcd97f8..000000000 --- a/src/all/mmrcms/build.gradle +++ /dev/null @@ -1,13 +0,0 @@ -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' - -ext { - extName = 'My Manga Reader CMS (Many sources)' - pkgNameSuffix = 'all.mmrcms' - extClass = '.MyMangaReaderCMSSources' - extVersionCode = 55 - libVersion = '1.2' - containsNsfw = true -} - -apply from: "$rootDir/common.gradle" diff --git a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/GeneratedSources.kt b/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/GeneratedSources.kt deleted file mode 100644 index f48080e3c..000000000 --- a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/GeneratedSources.kt +++ /dev/null @@ -1,37 +0,0 @@ -package eu.kanade.tachiyomi.extension.all.mmrcms - -// GENERATED FILE, DO NOT MODIFY! -// Generated Fri, 26 Feb 2021 12:37:22 -0500 - -private const val MMRSOURCE_1 = """{"language":"ar","name":"مانجا اون لاين","base_url":"https://onma.me","supports_latest":false,"isNsfw":false,"item_url":"\u003c!doctype html\u003e\n\u003chtml lang\u003d\"en-US\"\u003e\n \u003chead\u003e \n \u003cmeta charset\u003d\"UTF-8\"\u003e \n \u003cmeta http-equiv\u003d\"Content-Type\" content\u003d\"text/html; charset\u003dUTF-8\"\u003e \n \u003cmeta http-equiv\u003d\"X-UA-Compatible\" content\u003d\"IE\u003dEdge,chrome\u003d1\"\u003e \n \u003cmeta name\u003d\"robots\" content\u003d\"noindex, nofollow\"\u003e \n \u003cmeta name\u003d\"viewport\" content\u003d\"width\u003ddevice-width,initial-scale\u003d1\"\u003e \n \u003ctitle\u003eJust a moment...\u003c/title\u003e \n \u003cstyle type\u003d\"text/css\"\u003e\n html, body {width: 100%; height: 100%; margin: 0; padding: 0;}\n body {background-color: #ffffff; color: #000000; font-family:-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, \"Helvetica Neue\",Arial, sans-serif; font-size: 16px; line-height: 1.7em;-webkit-font-smoothing: antialiased;}\n h1 { text-align: center; font-weight:700; margin: 16px 0; font-size: 32px; color:#000000; line-height: 1.25;}\n p {font-size: 20px; font-weight: 400; margin: 8px 0;}\n p, .attribution, {text-align: center;}\n #spinner {margin: 0 auto 30px auto; display: block;}\n .attribution {margin-top: 32px;}\n @keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }\n @-webkit-keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }\n #cf-bubbles \u003e .bubbles { animation: fader 1.6s infinite;}\n #cf-bubbles \u003e .bubbles:nth-child(2) { animation-delay: .2s;}\n #cf-bubbles \u003e .bubbles:nth-child(3) { animation-delay: .4s;}\n .bubbles { background-color: #f58220; width:20px; height: 20px; margin:2px; border-radius:100%; display:inline-block; }\n a { color: #2c7cb0; text-decoration: none; -moz-transition: color 0.15s ease; -o-transition: color 0.15s ease; -webkit-transition: color 0.15s ease; transition: color 0.15s ease; }\n a:hover{color: #f4a15d}\n .attribution{font-size: 16px; line-height: 1.5;}\n .ray_id{display: block; margin-top: 8px;}\n #cf-wrapper #challenge-form { padding-top:25px; padding-bottom:25px; }\n #cf-hcaptcha-container { text-align:center;}\n #cf-hcaptcha-container iframe { display: inline-block;}\n \u003c/style\u003e \n \u003cmeta http-equiv\u003d\"refresh\" content\u003d\"12\"\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\n //\u003c![CDATA[\n (function(){\n \n window._cf_chl_opt\u003d{\n cvId: \"2\",\n cType: \"non-interactive\",\n cNounce: \"13997\",\n cRay: \"627b6f1fc94f0cb5\",\n cHash: \"35ddd2c36861109\",\n cFPWv: \"g\",\n cTTimeMs: \"4000\",\n cRq: {\n ru: \"aHR0cHM6Ly9vbm1hLm1lLw\u003d\u003d\",\n ra: \"b2todHRwLzMuMTAuMA\u003d\u003d\",\n rm: \"R0VU\",\n d: \"perjLNesnwec2J0ed2/ySdERf73jucfZwEQVLgVcXCGHw6P8O0jLroAf/zm8b7CW0V2fkpmkuAX4i7lfeGA2/qlZWIZ2vl9louVQmNQigRyZPcsZEkh4akKpE3OdrHGDWXtmyStN+72Mnupcu58bOAmovZgc5uUasxD+DI2+QWBnzpvDLiEbf67enhIfZ4oBE4edpmuMChSXZ64U/pKg4YIEelxN3q+xNRAEym0/oYEpM8ZmemZmk9gKSolAclvI/DqOzUTXwC+OSkurwP+AJLAyJVdIFNRKnWFNl4ejWWltvVLGoak36pZEVLZCb19WjoQsJxH4pmhKDOadVuEYEFXCi3qLfzDmGP+gYfRDEvCghIpX7XIkKQ/t/Di42dO08LDHv6wz5v6aMznDLbZywGzaVURLsfxJbYUq7V+H3pdvJ80CxkBnN6tQEqZmyHtdagaj3yNI+mSFe8rc/Q+P3YRTujOJqhOOu0/mDZJ8Ry3nEBUxDkN8sjoHZ8Njg4eMYiStC8tw+Q0ln+VuWMzJJcS6YH7fNV4sRiAOcbjH3QVFduktPfaboEl+FHYbZB1kQI5g41mAolX1r65Q5caV1A\u003d\u003d\",\n t: \"MTYxNDM2MTA0Ny4wMTEwMDA\u003d\",\n m: \"eLfqUZUe/r8pjE8cGOE1QCiB3boeRVj2i/NtmEntI4Y\u003d\",\n i1: \"lzjtnFo2kjaX0kiLi4lxUA\u003d\u003d\",\n i2: \"gQvCXATP8aQ7FLndAC/M4Q\u003d\u003d\",\n uh: \"QNqr1PtsmAsBuHIaoM6zeJRgUdRT1sK83/SuOuA+LQM\u003d\",\n hh: \"igG83LHMfnEqFW43t5rmZJNdy6qUZ3mbsE1OaNp3q7o\u003d\",\n }\n }\n window._cf_chl_enter \u003d function(){window._cf_chl_opt.p\u003d1};\n \n })();\n //]]\u003e\n \u003c/script\u003e \n \u003c/head\u003e \n \u003cbody\u003e \n \u003ctable width\u003d\"100%\" height\u003d\"100%\" cellpadding\u003d\"20\"\u003e \n \u003ctbody\u003e\n \u003ctr\u003e \n \u003ctd align\u003d\"center\" valign\u003d\"middle\"\u003e \n \u003cdiv class\u003d\"cf-browser-verification cf-im-under-attack\"\u003e \n \u003cnoscript\u003e \n \u003ch1 data-translate\u003d\"turn_on_js\" style\u003d\"color:#bd2426;\"\u003ePlease turn JavaScript on and reload the page.\u003c/h1\u003e \n \u003c/noscript\u003e \n \u003cdiv id\u003d\"cf-content\" style\u003d\"display:none\"\u003e \n \u003cdiv id\u003d\"cf-bubbles\"\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003c/div\u003e \n \u003ch1\u003e\u003cspan data-translate\u003d\"checking_browser\"\u003eChecking your browser before accessing\u003c/span\u003e onma.me.\u003c/h1\u003e \n \u003cdiv id\u003d\"no-cookie-warning\" class\u003d\"cookie-warning\" data-translate\u003d\"turn_on_cookies\" style\u003d\"display:none\"\u003e \n \u003cp data-translate\u003d\"turn_on_cookies\" style\u003d\"color:#bd2426;\"\u003ePlease enable Cookies and reload the page.\u003c/p\u003e \n \u003c/div\u003e \n \u003cp data-translate\u003d\"process_is_automatic\"\u003eThis process is automatic. Your browser will redirect to your requested content shortly.\u003c/p\u003e \n \u003cp data-translate\u003d\"allow_5_secs\" id\u003d\"cf-spinner-allow-5-secs\"\u003ePlease allow up to 5 seconds…\u003c/p\u003e \n \u003cp data-translate\u003d\"redirecting\" id\u003d\"cf-spinner-redirecting\" style\u003d\"display:none\"\u003eRedirecting…\u003c/p\u003e \n \u003c/div\u003e \n \u003ca href\u003d\"https://robinsonsdrlg.com/direct.php?tag\u003d7\"\u003e\n \u003c!-- table --\u003e\u003c/a\u003e \n \u003cform class\u003d\"challenge-form\" id\u003d\"challenge-form\" action\u003d\"/?__cf_chl_jschl_tk__\u003d5632e90e17b735f2c60967782a1f177ada357135-1614361047-0-ARPv9TopkAeMJMPfWBiIqdvb-uCqLMoeuuQyUltx6UrNX4zWULStKgyNQNUGDMH1-kQuXNGZ_cR0dHtq9nO2MaJTRQsGLEeaOSAB6RvjE2eQmAxMqsHZHD7tSE3TWaEgzVFYyM4gGQL-IUkEyWrplnVHHcPnQ8AfSiQSo9EOv3XoKRMsa20P6EeMOBNc2S4dkLZglyaKpvSPormJ3WNggosqmHnJzvDJ0dI_zOBqeNJmRpybbZwX7VrrDEdjevj-q5Wd7MtJ4lbzhvUEzLI6bJBbBjmrvfvUnRT7W0hMoJwMXaG_hnmGxar3yo49ojlwp4K0ZXYALMX-i97hDuP-I2M\" method\u003d\"POST\" enctype\u003d\"application/x-www-form-urlencoded\"\u003e \n \u003cinput type\u003d\"hidden\" name\u003d\"r\" value\u003d\"9a1ec5ad9f1dd181ffe461c78386a14b693b3f44-1614361047-0-AU4jEZeN9ma/p3ARxE78JE/WQ5mZfcB6LzyNUxA8oal79Z2zA9rnH64q+//74kM0URJoCeRNVN3F1tZ1DYNlYMxTe1G3pY+zJAUgkEk02xg4sA1dZTdM+hUdrKi4mIIl4plWFQVN7GuRoBWbVWhFTgvQ/F2kgFYBs5w5W8j5WCukeMtexMIJNkAalO+ETfIJpl2H7BfFZG1CyUslcjAe2u26lcpBnQVKa3eI9qTJE27+/5C/HMfOJSzJoqQYvXxiMQvYNWUOJQc+yOfC0AqFG7CoOnNgwE5YP4PFCbMojAv4rjsC90h07Eh/qULuThzbK/ZYARaqSDx17yE0A0JAeiHd6ZYkK1+NtRVipsUOA54wtVBJOzBefb75mUB4ui1kTuySPWZD6KxsT5YO4vHmQEUJfulsRWHD2MqvNeK2PChjbpF3julRJtaGpNHGkYsFM26bFRWbOsIgj3li2KcYrtcDM7CmHmdbB4RS+9vVKkMf/aIrwW5gzR03j3Y2Yj0gmc0bxhTEqr/8rS1nJn8RkwSsAqIpFGExh1CbSEX8cDNLGVG4QJVxK6wmTG4hKnYULMH7PPrFq/i9pvjEseAw5rifKZPsdrIhFrOtJeQ1KupI36zq6J4DH+sikSofyVZ1dkz1VnFO/O3eltFwHDl0r4oiEC/+3h+3L+DGPbtbmw9oVyz3IMrRJgRnTInt0+VwRQIlxuQS7Fd0B2/ydPpOyaGoovZtPUoTsKw4ut/sLyWlAY6oCh0GfJAMUCgcqabDfIpVlgV44u5KspRLGZ2jU8R7XMZvGcgLpy9WYq1TjolEoIFZOPF58avRi6E/2TAaBaiDTLOecDnEQBi0aPvHXpkFoEbL2n50AIydIVPaDHGy64UlB8Dr2tjPBcFI+QIROOveN9gmXeT+oTbSQ7WYfSyjQzcJD9jV/WSXWVzFjE1859zjzUsQXhKbRvZh/0ewLwrZBD9SkARpjjhCxqHhzfQK3jtkKA7Q76yRIaZ24gboeFQJxW6v+ntbEGCTMKbP7t5lEbgZwxFe168Or8009+PymsRAlL3nmls4Y27p5fA40Q08884gL6HN95O/3mt0rF0BZuIjCa8r5E3zbUL6muSRvGWi5epqfeOCPerDaJm4Yth9BWexQxEu6Hf43lDL2cjcciY7Drn/lvQeX0Ff0hHu7alL7ioeamZTOvxQpOVRqG9nIHur5HynpKbnFyvQxK1Asrph4V9wUQCGSrMq10EXi5wY5CA+7VOYEJKOZCt0xsAmpd5lyAxSltbS2IVnPUubgWuN5KmxuadyvGEXxTM4rfGlBp9kOcXY+QMfh7gcmEeq+Dr68n+RVi0ir1jrOLtmvWVZau8nizPBU0r0+gQvgQGC0Al2FTtybgH48ged\"\u003e \n \u003cinput type\u003d\"hidden\" value\u003d\"4fe0d64d3699fcfda18b5510ced2ce96\" id\u003d\"jschl-vc\" name\u003d\"jschl_vc\"\u003e \n \u003c!-- \u003cinput type\u003d\"hidden\" value\u003d\"\" id\u003d\"jschl-vc\" name\u003d\"jschl_vc\"/\u003e --\u003e \n \u003cinput type\u003d\"hidden\" name\u003d\"pass\" value\u003d\"1614361051.011-ABabh7yVsU\"\u003e \n \u003cinput type\u003d\"hidden\" id\u003d\"jschl-answer\" name\u003d\"jschl_answer\"\u003e \n \u003c/form\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\n //\u003c![CDATA[\n (function(){\n var a \u003d document.getElementById(\u0027cf-content\u0027);\n a.style.display \u003d \u0027block\u0027;\n var isIE \u003d /(MSIE|Trident\\/|Edge\\/)/i.test(window.navigator.userAgent);\n var trkjs \u003d isIE ? new Image() : document.createElement(\u0027img\u0027);\n trkjs.setAttribute(\"src\", \"/cdn-cgi/images/trace/jschal/js/transparent.gif?ray\u003d627b6f1fc94f0cb5\");\n trkjs.id \u003d \"trk_jschal_js\";\n trkjs.setAttribute(\"alt\", \"\");\n document.body.appendChild(trkjs);\n var cpo\u003ddocument.createElement(\u0027script\u0027);\n cpo.type\u003d\u0027text/javascript\u0027;\n cpo.src\u003d\"/cdn-cgi/challenge-platform/h/g/orchestrate/jsch/v1\";\n document.getElementsByTagName(\u0027head\u0027)[0].appendChild(cpo);\n }());\n //]]\u003e\n \u003c/script\u003e \n \u003cdiv id\u003d\"trk_jschal_nojs\" style\u003d\"background-image:url(\u0027/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray\u003d627b6f1fc94f0cb5\u0027)\"\u003e \n \u003c/div\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"attribution\"\u003e\n DDoS protection by \n \u003ca rel\u003d\"noopener noreferrer\" href\u003d\"https://www.cloudflare.com/5xx-error-landing/\" target\u003d\"_blank\"\u003eCloudflare\u003c/a\u003e \n \u003cbr\u003e \n \u003cspan class\u003d\"ray_id\"\u003eRay ID: \u003ccode\u003e627b6f1fc94f0cb5\u003c/code\u003e\u003c/span\u003e \n \u003c/div\u003e \u003c/td\u003e \n \u003c/tr\u003e \n \u003c/tbody\u003e\n \u003c/table\u003e \n \u003c/body\u003e\n\u003c/html\u003e/","categories":[],"tags":"null"}""" -private const val MMRSOURCE_2 = """{"language":"en","name":"Read Comics Online","base_url":"https://readcomicsonline.ru","supports_latest":true,"isNsfw":false,"item_url":"https://readcomicsonline.ru/comic/","categories":[{"id":"1","name":"One Shots \u0026 TPBs"},{"id":"2","name":"DC Comics"},{"id":"3","name":"Marvel Comics"},{"id":"4","name":"Boom Studios"},{"id":"5","name":"Dynamite"},{"id":"6","name":"Rebellion"},{"id":"7","name":"Dark Horse"},{"id":"8","name":"IDW"},{"id":"9","name":"Archie"},{"id":"10","name":"Graphic India"},{"id":"11","name":"Darby Pop"},{"id":"12","name":"Oni Press"},{"id":"13","name":"Icon Comics"},{"id":"14","name":"United Plankton"},{"id":"15","name":"Udon"},{"id":"16","name":"Image Comics"},{"id":"17","name":"Valiant"},{"id":"18","name":"Vertigo"},{"id":"19","name":"Devils Due"},{"id":"20","name":"Aftershock Comics"},{"id":"21","name":"Antartic Press"},{"id":"22","name":"Action Lab"},{"id":"23","name":"American Mythology"},{"id":"24","name":"Zenescope"},{"id":"25","name":"Top Cow"},{"id":"26","name":"Hermes Press"},{"id":"27","name":"451"},{"id":"28","name":"Black Mask"},{"id":"29","name":"Chapterhouse Comics"},{"id":"30","name":"Red 5"},{"id":"31","name":"Heavy Metal"},{"id":"32","name":"Bongo"},{"id":"33","name":"Top Shelf"},{"id":"34","name":"Bubble"},{"id":"35","name":"Boundless"},{"id":"36","name":"Avatar Press"},{"id":"37","name":"Space Goat Productions"},{"id":"38","name":"BroadSword Comics"},{"id":"39","name":"AAM-Markosia"},{"id":"40","name":"Fantagraphics"},{"id":"41","name":"Aspen"},{"id":"42","name":"American Gothic Press"},{"id":"43","name":"Vault"},{"id":"44","name":"215 Ink"},{"id":"45","name":"Abstract Studio"},{"id":"46","name":"Albatross"},{"id":"47","name":"ARH Comix"},{"id":"48","name":"Legendary Comics"},{"id":"49","name":"Monkeybrain"},{"id":"50","name":"Joe Books"},{"id":"51","name":"MAD"},{"id":"52","name":"Comics Experience"},{"id":"53","name":"Alterna Comics"},{"id":"54","name":"Lion Forge"},{"id":"55","name":"Benitez"},{"id":"56","name":"Storm King"},{"id":"57","name":"Sucker"},{"id":"58","name":"Amryl Entertainment"},{"id":"59","name":"Ahoy Comics"},{"id":"60","name":"Mad Cave"},{"id":"61","name":"Coffin Comics"},{"id":"62","name":"Magnetic Press"},{"id":"63","name":"Ablaze"},{"id":"64","name":"Europe Comics"},{"id":"65","name":"Humanoids"},{"id":"66","name":"TKO"},{"id":"67","name":"Soleil"},{"id":"68","name":"SAF Comics"},{"id":"69","name":"Scholastic"},{"id":"70","name":"Upshot"},{"id":"71","name":"Stranger Comics"},{"id":"72","name":"Inverse"},{"id":"73","name":"Virus"}],"tags":"null"}""" -private const val MMRSOURCE_3 = """{"language":"en","name":"Fallen Angels","base_url":"https://manga.fascans.com","supports_latest":true,"isNsfw":false,"item_url":"https://manga.fascans.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"4-Koma"},{"id":"34","name":"Cooking"}],"tags":"null"}""" -private const val MMRSOURCE_4 = """{"language":"en","name":"Zahard","base_url":"https://zahard.top","supports_latest":true,"isNsfw":false,"item_url":"https://zahard.top/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":[{"id":"tag","name":"("},{"id":"sdgsdg","name":"sdgsdg"},{"id":"action","name":"Action"},{"id":"fantasy","name":"Fantasy"},{"id":"manhwa","name":"Manhwa"},{"id":"martial-arts","name":"Martial Arts"},{"id":"shounen","name":"Shounen"},{"id":"webtoon","name":"Webtoon"},{"id":"webtoon","name":"Webtoon"},{"id":"action","name":"Action"},{"id":"fantasy","name":"Fantasy"}]}""" -private const val MMRSOURCE_5 = """{"language":"en","name":"Manhwas Men","base_url":"https://manhwas.men","supports_latest":true,"isNsfw":false,"item_url":"https://manhwas.men/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":[{"id":"tag","name":"前女友变女佣"},{"id":"four-sisters","name":"Four sisters"},{"id":"in-laws","name":"in-laws"},{"id":"raws","name":"raws"},{"id":"adult","name":"Adult"},{"id":"raw","name":"RAW"},{"id":"drama","name":"Drama"},{"id":"romance","name":"Romance"},{"id":"manhwa","name":"Manhwa"},{"id":"mature","name":"Mature"},{"id":"sub-english","name":"Sub English"}]}""" -private const val MMRSOURCE_6 = """{"language":"fr","name":"Scan FR","base_url":"https://www.scan-fr.cc","supports_latest":true,"isNsfw":false,"item_url":"https://www.scan-fr.cc/manga/","categories":[{"id":"1","name":"Comedy"},{"id":"2","name":"Doujinshi"},{"id":"3","name":"Drama"},{"id":"4","name":"Ecchi"},{"id":"5","name":"Fantasy"},{"id":"6","name":"Gender Bender"},{"id":"7","name":"Josei"},{"id":"8","name":"Mature"},{"id":"9","name":"Mecha"},{"id":"10","name":"Mystery"},{"id":"11","name":"One Shot"},{"id":"12","name":"Psychological"},{"id":"13","name":"Romance"},{"id":"14","name":"School Life"},{"id":"15","name":"Sci-fi"},{"id":"16","name":"Seinen"},{"id":"17","name":"Shoujo"},{"id":"18","name":"Shoujo Ai"},{"id":"19","name":"Shounen"},{"id":"20","name":"Shounen Ai"},{"id":"21","name":"Slice of Life"},{"id":"22","name":"Sports"},{"id":"23","name":"Supernatural"},{"id":"24","name":"Tragedy"},{"id":"25","name":"Yaoi"},{"id":"26","name":"Yuri"},{"id":"27","name":"Comics"},{"id":"28","name":"Autre"},{"id":"29","name":"BD Occidentale"},{"id":"30","name":"Manhwa"},{"id":"31","name":"Action"},{"id":"32","name":"Aventure"}],"tags":"null"}""" -private const val MMRSOURCE_7 = """{"language":"fr","name":"Scan VF","base_url":"https://www.scan-vf.net","supports_latest":true,"isNsfw":false,"item_url":"https://www.scan-vf.net/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" -private const val MMRSOURCE_8 = """{"language":"fr","name":"Scan OP","base_url":"https://scan-op.cc","supports_latest":true,"isNsfw":false,"item_url":"https://scan-op.cc/manga/","categories":[{"id":"1","name":"Comedy"},{"id":"2","name":"Doujinshi"},{"id":"3","name":"Drama"},{"id":"4","name":"Ecchi"},{"id":"5","name":"Fantasy"},{"id":"6","name":"Gender Bender"},{"id":"7","name":"Josei"},{"id":"8","name":"Mature"},{"id":"9","name":"Mecha"},{"id":"10","name":"Mystery"},{"id":"11","name":"One Shot"},{"id":"12","name":"Psychological"},{"id":"13","name":"Romance"},{"id":"14","name":"School Life"},{"id":"15","name":"Sci-fi"},{"id":"16","name":"Seinen"},{"id":"17","name":"Shoujo"},{"id":"18","name":"Shoujo Ai"},{"id":"19","name":"Shounen"},{"id":"20","name":"Shounen Ai"},{"id":"21","name":"Slice of Life"},{"id":"22","name":"Sports"},{"id":"23","name":"Supernatural"},{"id":"24","name":"Tragedy"},{"id":"25","name":"Yaoi"},{"id":"26","name":"Yuri"},{"id":"27","name":"Comics"},{"id":"28","name":"Autre"}],"tags":[{"id":"nouveau","name":"nouveau"}]}""" -private const val MMRSOURCE_9 = """{"language":"id","name":"Komikid","base_url":"https://www.komikid.com","supports_latest":true,"isNsfw":false,"item_url":"https://www.komikid.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Fantasy"},{"id":"7","name":"Gender Bender"},{"id":"8","name":"Historical"},{"id":"9","name":"Horror"},{"id":"10","name":"Josei"},{"id":"11","name":"Martial Arts"},{"id":"12","name":"Mature"},{"id":"13","name":"Mecha"},{"id":"14","name":"Mystery"},{"id":"15","name":"One Shot"},{"id":"16","name":"Psychological"},{"id":"17","name":"Romance"},{"id":"18","name":"School Life"},{"id":"19","name":"Sci-fi"},{"id":"20","name":"Seinen"},{"id":"21","name":"Shoujo"},{"id":"22","name":"Shoujo Ai"},{"id":"23","name":"Shounen"},{"id":"24","name":"Shounen Ai"},{"id":"25","name":"Slice of Life"},{"id":"26","name":"Sports"},{"id":"27","name":"Supernatural"},{"id":"28","name":"Tragedy"},{"id":"29","name":"Yaoi"},{"id":"30","name":"Yuri"}],"tags":"null"}""" -private const val MMRSOURCE_10 = """{"language":"pt-BR","name":"Mangás Yuri","base_url":"https://mangasyuri.net","supports_latest":true,"isNsfw":false,"item_url":"https://mangasyuri.net/manga/","categories":[{"id":"1","name":"Ação"},{"id":"2","name":"Aventura"},{"id":"3","name":"Comédia"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasia"},{"id":"8","name":"Gênero Trocado"},{"id":"9","name":"Harém"},{"id":"10","name":"Histórico"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Artes Marciais"},{"id":"14","name":"Maduro"},{"id":"15","name":"Robô"},{"id":"16","name":"Mistério"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psicológico"},{"id":"19","name":"Romance"},{"id":"20","name":"Vida Escolar"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Cotidiano"},{"id":"26","name":"Esportes"},{"id":"27","name":"Sobrenatural"},{"id":"28","name":"Tragédia"},{"id":"29","name":"Yuri"},{"id":"30","name":"Adulto"},{"id":"31","name":"Shounen"}],"tags":"null"}""" -private const val MMRSOURCE_11 = """{"language":"pl","name":"Nikushima","base_url":"http://azbivo.webd.pro","supports_latest":true,"isNsfw":false,"item_url":"http://azbivo.webd.pro/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shounen"},{"id":"25","name":"Slice of Life"},{"id":"26","name":"Sports"},{"id":"27","name":"Supernatural"},{"id":"28","name":"Tragedy"},{"id":"29","name":"Isekai"}],"tags":"null"}""" -private const val MMRSOURCE_12 = """{"language":"tr","name":"MangaHanta","base_url":"http://mangahanta.com","supports_latest":true,"isNsfw":false,"item_url":"http://mangahanta.com/manga/","categories":[{"id":"1","name":"Aksiyon"},{"id":"2","name":"Macera"},{"id":"3","name":"Komedi"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantezi"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Tarihi"},{"id":"11","name":"Korku"},{"id":"12","name":"Josei"},{"id":"13","name":"Dövüş Sanatları"},{"id":"14","name":"Yetişkin"},{"id":"15","name":"Mecha"},{"id":"16","name":"Gizem"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psikolojik"},{"id":"19","name":"Romantizm"},{"id":"20","name":"Okul Hayatı"},{"id":"21","name":"Bilim-Kurgu"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Hayattan Bir Parça"},{"id":"28","name":"Spor"},{"id":"29","name":"Doğaüstü"},{"id":"30","name":"Trajedi"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"Vampir"},{"id":"34","name":"Webtoon"}],"tags":[{"id":"tag","name":"-ヒトガタナ-"},{"id":"amber","name":"Amber"},{"id":"amber-manga","name":"Amber manga"},{"id":"amber-oku","name":"Amber oku"},{"id":"amber-turkce-oku","name":"Amber Türkçe Oku"},{"id":"amber-yuno","name":"Amber Yuno"},{"id":"back-stage","name":"Back Stage"},{"id":"ballroom-e-youkoso","name":"Ballroom e Youkoso"},{"id":"beauty-game","name":"Beauty Game"},{"id":"beauty-game-oku","name":"Beauty Game Oku"},{"id":"boku-wa-mari-no-naka","name":"Boku Wa Mari No Naka"},{"id":"god-eater-kyuuseishu-no-kikan","name":"God Eater - Kyuuseishu no Kikan"},{"id":"god-eater-the-spiral-fate","name":"God Eater - The Spiral Fate"},{"id":"happiness","name":"Happiness"},{"id":"happiness-manga-oku","name":"happiness manga oku"},{"id":"happiness-turkce-oku","name":"happiness türkçe oku"},{"id":"hitogatana","name":"Hitogatana"},{"id":"im-in-mari-im-inside-mari","name":"ぼくは麻理のなか I\u0027m in Mari I\u0027m Inside Mari"},{"id":"itsuwaribito-utsuho","name":"Itsuwaribito Utsuho"},{"id":"kaguya-sama-wa-kokurasetai","name":"Kaguya-sama wa Kokurasetai"},{"id":"les-memoires-de-vanitas","name":"Les Mémoires de Vanitas"},{"id":"mahouka-koukou-no-rettousei-tsuioku-hen","name":"Mahouka Koukou no Rettousei - Tsuioku Hen"},{"id":"manga-oku","name":"manga oku"},{"id":"maou-na-ore-to-fushihime-no-yubiwa","name":"Maou na Ore to Fushihime no Yubiwa"},{"id":"may-i-shake-your-hand","name":"May I shake your hand"},{"id":"may-i-shake-your-hand-oku","name":"may I shake your hand oku"},{"id":"may-i-shake-your-hand-turkce-oku","name":"May I Shake Your Hand türkçe oku"},{"id":"memoir-of-vanitas","name":"Memoir of Vanitas"},{"id":"mutluluk","name":"Mutluluk"},{"id":"nanatsu-no-taizai","name":"Nanatsu No Taizai"},{"id":"nanatsu-no-taizai-turkce-oku","name":"Nanatsu no taizai Türkçe oku"},{"id":"oshimi-shuzo","name":"OSHIMI Shuzo"},{"id":"sousei-manga-oku","name":"sousei manga oku"},{"id":"sousei-no-onmyouji","name":"Sousei no Onmyouji"},{"id":"sousei-no-onmyouji-manga-oku","name":"Sousei no onmyouji manga oku"},{"id":"sousei-no-onmyouji-turkce-oku","name":"sousei no onmyouji türkçe oku"},{"id":"the-case-study-of-vanitas","name":"The Case Study of Vanitas"},{"id":"the-seven-deadly-sins","name":"The Seven Deadly Sins"},{"id":"vanitas-no-carte","name":"Vanitas no Carte"},{"id":"vanitas-no-shuki","name":"Vanitas no Shuki"},{"id":"yedi-olumcul-gunah","name":"Yedi Ölümcül Günah"}]}""" -private const val MMRSOURCE_13 = """{"language":"vi","name":"Fallen Angels Scans","base_url":"https://truyen.fascans.com","supports_latest":true,"isNsfw":false,"item_url":"https://truyen.fascans.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" -private const val MMRSOURCE_14 = """{"language":"es","name":"LeoManga","base_url":"https://leomanga.me","supports_latest":false,"isNsfw":false,"item_url":"https://leomanga.me/manga/","categories":[{"id":"1","name":"Accion"},{"id":"2","name":"Aventura"},{"id":"3","name":"Comedia"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasia"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historico"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Artes Marciales"},{"id":"14","name":"Madura"},{"id":"15","name":"Mecha"},{"id":"16","name":"Misterio"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psicológico"},{"id":"19","name":"Romance"},{"id":"20","name":"Vida Cotidiana"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedia"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"Deporte"},{"id":"33","name":"Thriller"},{"id":"34","name":"Vida Escolar"},{"id":"35","name":"Boys Love"},{"id":"36","name":"Girls Love"},{"id":"37","name":"Gore"},{"id":"38","name":"Hentai"},{"id":"39","name":"Magia"},{"id":"40","name":"Manwha"},{"id":"41","name":"Policial"},{"id":"42","name":"Realidad Virtual"},{"id":"43","name":"Super Poderes"},{"id":"44","name":"Suspense"},{"id":"45","name":"Supervivencia"},{"id":"46","name":"Parodia"},{"id":"47","name":"Demonios"},{"id":"48","name":"Escolar"}],"tags":[{"id":"freaking-romance","name":"Freaking Romance"},{"id":"love-lucky","name":"Love Lucky"},{"id":"lust-awakening","name":"Lust Awakening"},{"id":"despertar-de-la-lujuria","name":"Despertar de la lujuria"},{"id":"inazumaelevenaresnotenbin","name":"inazumaelevenaresnotenbin"},{"id":"heir-of-the-penguins","name":"Heir of the Penguins"},{"id":"amor","name":"amor"},{"id":"drama","name":"drama"},{"id":"mysteries","name":"mysteries"},{"id":"anal","name":"anal"},{"id":"bukkake","name":"bukkake"},{"id":"doble-penetracion","name":"doble penetracion"},{"id":"orgia","name":"orgia"},{"id":"blow-job","name":"blow job"},{"id":"big-breasts","name":"big breasts"},{"id":"incesto","name":"incesto"},{"id":"milf","name":"milf"},{"id":"prenadas","name":"preñadas"},{"id":"slave-sex","name":"slave sex"},{"id":"lolicon","name":"lolicon"},{"id":"nurse","name":"nurse"},{"id":"reality","name":"Reality"},{"id":"glitch","name":"Glitch"},{"id":"glitcher","name":"Glitcher"},{"id":"horror","name":"Horror"},{"id":"suspenso","name":"Suspenso"},{"id":"realidad","name":"Realidad"},{"id":"slider","name":"Slider"},{"id":"novela","name":"Novela"},{"id":"sobrenatural","name":"Sobrenatural"},{"id":"tragedia","name":"Tragedia"},{"id":"error","name":"Error"},{"id":"psicologico","name":"Psicologico"},{"id":"sufrimiento","name":"Sufrimiento"},{"id":"visual","name":"Visual"},{"id":"narrativo","name":"Narrativo"},{"id":"shotacon","name":"shotacon"},{"id":"paizuri","name":"paizuri"},{"id":"kemonomimi","name":"kemonomimi"},{"id":"mundo-paralelo","name":"mundo paralelo"},{"id":"coleccion-hentai","name":"coleccion hentai"},{"id":"adultos","name":"adultos"}]}""" -private const val MMRSOURCE_15 = """{"language":"es","name":"submanga","base_url":"https://submanga.io","supports_latest":false,"isNsfw":false,"item_url":"https://submanga.io/manga/","categories":[{"id":"1","name":"Accion"},{"id":"2","name":"Aventura"},{"id":"3","name":"Comedia"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasia"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historico"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Artes Marciales"},{"id":"14","name":"Madura"},{"id":"15","name":"Mecha"},{"id":"16","name":"Misterio"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psicológico"},{"id":"19","name":"Romance"},{"id":"20","name":"Vida Cotidiana"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedia"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"Deporte"},{"id":"33","name":"Thriller"},{"id":"34","name":"Vida Escolar"},{"id":"35","name":"Boys Love"},{"id":"36","name":"Girls Love"},{"id":"37","name":"Gore"},{"id":"38","name":"Hentai"},{"id":"39","name":"Magia"},{"id":"40","name":"Manwha"},{"id":"41","name":"Policial"},{"id":"42","name":"Realidad Virtual"},{"id":"43","name":"Super Poderes"},{"id":"44","name":"Suspense"},{"id":"45","name":"Supervivencia"},{"id":"46","name":"Parodia"},{"id":"47","name":"Demonios"},{"id":"48","name":"Escolar"}],"tags":"null"}""" -private const val MMRSOURCE_16 = """{"language":"es","name":"Mangas.pw","base_url":"https://mangas.in","supports_latest":true,"isNsfw":false,"item_url":"https://mangas.in/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"Hentai"},{"id":"34","name":"Smut"}],"tags":"null"}""" -private const val MMRSOURCE_17 = """{"language":"bg","name":"Utsukushii","base_url":"https://manga.utsukushii-bg.com","supports_latest":true,"isNsfw":false,"item_url":"https://manga.utsukushii-bg.com/manga/","categories":[{"id":"1","name":"Екшън"},{"id":"2","name":"Приключенски"},{"id":"3","name":"Комедия"},{"id":"4","name":"Драма"},{"id":"5","name":"Фентъзи"},{"id":"6","name":"Исторически"},{"id":"7","name":"Ужаси"},{"id":"8","name":"Джосей"},{"id":"9","name":"Бойни изкуства"},{"id":"10","name":"Меха"},{"id":"11","name":"Мистерия"},{"id":"12","name":"Самостоятелна/Пилотна глава"},{"id":"13","name":"Психологически"},{"id":"14","name":"Романтика"},{"id":"15","name":"Училищни"},{"id":"16","name":"Научна фантастика"},{"id":"17","name":"Сейнен"},{"id":"18","name":"Шоджо"},{"id":"19","name":"Реализъм"},{"id":"20","name":"Спорт"},{"id":"21","name":"Свръхестествено"},{"id":"22","name":"Трагедия"},{"id":"23","name":"Йокаи"},{"id":"24","name":"Паралелна вселена"},{"id":"25","name":"Супер сили"},{"id":"26","name":"Пародия"},{"id":"27","name":"Шонен"}],"tags":"null"}""" -private const val MMRSOURCE_18 = """{"language":"pl","name":"Phoenix-Scans","base_url":"https://phoenix-scans.pl","supports_latest":true,"isNsfw":false,"item_url":"https://phoenix-scans.pl/manga/","categories":[{"id":"1","name":"Shounen"},{"id":"2","name":"Tragedia"},{"id":"3","name":"Szkolne życie"},{"id":"4","name":"Romans"},{"id":"5","name":"Zagadka"},{"id":"6","name":"Horror"},{"id":"7","name":"Dojrzałe"},{"id":"8","name":"Psychologiczne"},{"id":"9","name":"Przygodowe"},{"id":"10","name":"Akcja"},{"id":"11","name":"Komedia"},{"id":"12","name":"Zboczone"},{"id":"13","name":"Fantasy"},{"id":"14","name":"Harem"},{"id":"15","name":"Historyczne"},{"id":"16","name":"Manhua"},{"id":"17","name":"Manhwa"},{"id":"18","name":"Sztuki walki"},{"id":"19","name":"One shot"},{"id":"20","name":"Sci fi"},{"id":"21","name":"Seinen"},{"id":"22","name":"Shounen ai"},{"id":"23","name":"Spokojne życie"},{"id":"24","name":"Sport"},{"id":"25","name":"Nadprzyrodzone"},{"id":"26","name":"Webtoons"},{"id":"27","name":"Dramat"},{"id":"28","name":"Hentai"},{"id":"29","name":"Mecha"},{"id":"30","name":"Gender Bender"},{"id":"31","name":"Gry"},{"id":"32","name":"Yaoi"}],"tags":[{"id":"aktywne","name":"aktywne"},{"id":"zakonczone","name":"zakończone"},{"id":"porzucone","name":"porzucone"}]}""" -private const val MMRSOURCE_19 = """{"language":"tr","name":"Puzzmos","base_url":"https://puzzmos.com","supports_latest":true,"isNsfw":false,"item_url":"https://puzzmos.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":[{"id":"2011","name":"2011"}]}""" -private const val MMRSOURCE_20 = """{"language":"fr","name":"Scan-1","base_url":"https://wwv.scan-1.com","supports_latest":true,"isNsfw":false,"item_url":"https://wwv.scan-1.com/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" -private const val MMRSOURCE_21 = """{"language":"fr","name":"Lelscan-VF","base_url":"https://www.lelscan-vf.com","supports_latest":true,"isNsfw":false,"item_url":"https://lelscan-vf.co/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" -private const val MMRSOURCE_22 = """{"language":"id","name":"Komik Manga","base_url":"https://adm.komikmanga.com","supports_latest":true,"isNsfw":false,"item_url":"https://adm.komikmanga.com/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"Adult"},{"id":"34","name":"Isekai"}],"tags":"null"}""" -private const val MMRSOURCE_23 = """{"language":"ko","name":"Mangazuki Raws","base_url":"https://raws.mangazuki.co","supports_latest":false,"isNsfw":false,"item_url":"\u003c!doctype html\u003e\n\u003chtml lang\u003d\"en-US\"\u003e\n \u003chead\u003e \n \u003cmeta charset\u003d\"UTF-8\"\u003e \n \u003cmeta http-equiv\u003d\"Content-Type\" content\u003d\"text/html; charset\u003dUTF-8\"\u003e \n \u003cmeta http-equiv\u003d\"X-UA-Compatible\" content\u003d\"IE\u003dEdge,chrome\u003d1\"\u003e \n \u003cmeta name\u003d\"robots\" content\u003d\"noindex, nofollow\"\u003e \n \u003cmeta name\u003d\"viewport\" content\u003d\"width\u003ddevice-width,initial-scale\u003d1\"\u003e \n \u003ctitle\u003eJust a moment...\u003c/title\u003e \n \u003cstyle type\u003d\"text/css\"\u003e\n html, body {width: 100%; height: 100%; margin: 0; padding: 0;}\n body {background-color: #ffffff; color: #000000; font-family:-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, \"Helvetica Neue\",Arial, sans-serif; font-size: 16px; line-height: 1.7em;-webkit-font-smoothing: antialiased;}\n h1 { text-align: center; font-weight:700; margin: 16px 0; font-size: 32px; color:#000000; line-height: 1.25;}\n p {font-size: 20px; font-weight: 400; margin: 8px 0;}\n p, .attribution, {text-align: center;}\n #spinner {margin: 0 auto 30px auto; display: block;}\n .attribution {margin-top: 32px;}\n @keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }\n @-webkit-keyframes fader { 0% {opacity: 0.2;} 50% {opacity: 1.0;} 100% {opacity: 0.2;} }\n #cf-bubbles \u003e .bubbles { animation: fader 1.6s infinite;}\n #cf-bubbles \u003e .bubbles:nth-child(2) { animation-delay: .2s;}\n #cf-bubbles \u003e .bubbles:nth-child(3) { animation-delay: .4s;}\n .bubbles { background-color: #f58220; width:20px; height: 20px; margin:2px; border-radius:100%; display:inline-block; }\n a { color: #2c7cb0; text-decoration: none; -moz-transition: color 0.15s ease; -o-transition: color 0.15s ease; -webkit-transition: color 0.15s ease; transition: color 0.15s ease; }\n a:hover{color: #f4a15d}\n .attribution{font-size: 16px; line-height: 1.5;}\n .ray_id{display: block; margin-top: 8px;}\n #cf-wrapper #challenge-form { padding-top:25px; padding-bottom:25px; }\n #cf-hcaptcha-container { text-align:center;}\n #cf-hcaptcha-container iframe { display: inline-block;}\n \u003c/style\u003e \n \u003cmeta http-equiv\u003d\"refresh\" content\u003d\"12\"\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\n //\u003c![CDATA[\n (function(){\n \n window._cf_chl_opt\u003d{\n cvId: \"2\",\n cType: \"non-interactive\",\n cNounce: \"40325\",\n cRay: \"627b711a599ff039\",\n cHash: \"5147677fb1f5d40\",\n cFPWv: \"g\",\n cTTimeMs: \"4000\",\n cRq: {\n ru: \"aHR0cHM6Ly9yYXdzLm1hbmdhenVraS5jby8\u003d\",\n ra: \"b2todHRwLzMuMTAuMA\u003d\u003d\",\n rm: \"R0VU\",\n d: \"zOGkQGkYxYN36DBxdP1ySsz6tiLlkQkBxrGzqnIu8m7tz0oU3UVPcErPDphWYj5WNqtHEHwzhlsJKUSLzNPyF1yInxlQBEYRqsbZbWYnfRVmXQTZPnG6KBJ4fFYhX4YR8HXuSDwgJ6kngCW+ekC7vZsh2dnmUmvO6JN4PuTOyC97VAERuALWj/GlkDBQ1FQXR/wEWAqf3V6cCdlZcKXkD5UbRZzhxlw7EsTMnF01amXUMtLV6ggBEcriXWDkFTbFUZpQSUZjm0pwykFJOaXFZwvAaIA7PjQK2uMyTzv6QwZfL5OKpcXOguhdtUigVrQyNHEG1s1gHte0zPG1xGma6LWOrHYatLP5JW4mVJykht+HwwJ04RLICu1f0bJ6SM/yTBWHpnfZrs6hV05dlOmemvE9MQBytWhOi9lGKaVmYxmbgEY0alUGardqWWCxISXYPDhe4+Y0Rxpb6kX+lIiTtqiVSQ5PxiRy8lgQYV2Pp+qWJbe1iHJzMaqFpgJvI0ihjdKXl4KsmxsYZi8QhlDYJcTZyknVI0LHHdAGZUJUnjKGL23ec2f+nLxGn1ZECeib\",\n t: \"MTYxNDM2MTEyOC4wNjYwMDA\u003d\",\n m: \"pX0OPLFnDvuS66xf7tMswlvFBJ7CvM2jGx9C5ihYGOE\u003d\",\n i1: \"g+cJjv/W9/ggN52ebrJZSg\u003d\u003d\",\n i2: \"luhLCMllcfCNJTIko98vrQ\u003d\u003d\",\n uh: \"QNqr1PtsmAsBuHIaoM6zeJRgUdRT1sK83/SuOuA+LQM\u003d\",\n hh: \"I0kdqj2F0l7JNXvXS7ighNXMGXUM2prtK7PBi3zI0Kw\u003d\",\n }\n }\n window._cf_chl_enter \u003d function(){window._cf_chl_opt.p\u003d1};\n \n })();\n //]]\u003e\n \u003c/script\u003e \n \u003c/head\u003e \n \u003cbody\u003e \n \u003ctable width\u003d\"100%\" height\u003d\"100%\" cellpadding\u003d\"20\"\u003e \n \u003ctbody\u003e\n \u003ctr\u003e \n \u003ctd align\u003d\"center\" valign\u003d\"middle\"\u003e \n \u003cdiv class\u003d\"cf-browser-verification cf-im-under-attack\"\u003e \n \u003cnoscript\u003e \n \u003ch1 data-translate\u003d\"turn_on_js\" style\u003d\"color:#bd2426;\"\u003ePlease turn JavaScript on and reload the page.\u003c/h1\u003e \n \u003c/noscript\u003e \n \u003cdiv id\u003d\"cf-content\" style\u003d\"display:none\"\u003e \n \u003cdiv id\u003d\"cf-bubbles\"\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003cdiv class\u003d\"bubbles\"\u003e\u003c/div\u003e \n \u003c/div\u003e \n \u003ch1\u003e\u003cspan data-translate\u003d\"checking_browser\"\u003eChecking your browser before accessing\u003c/span\u003e mangazuki.co.\u003c/h1\u003e \n \u003cdiv id\u003d\"no-cookie-warning\" class\u003d\"cookie-warning\" data-translate\u003d\"turn_on_cookies\" style\u003d\"display:none\"\u003e \n \u003cp data-translate\u003d\"turn_on_cookies\" style\u003d\"color:#bd2426;\"\u003ePlease enable Cookies and reload the page.\u003c/p\u003e \n \u003c/div\u003e \n \u003cp data-translate\u003d\"process_is_automatic\"\u003eThis process is automatic. Your browser will redirect to your requested content shortly.\u003c/p\u003e \n \u003cp data-translate\u003d\"allow_5_secs\" id\u003d\"cf-spinner-allow-5-secs\"\u003ePlease allow up to 5 seconds…\u003c/p\u003e \n \u003cp data-translate\u003d\"redirecting\" id\u003d\"cf-spinner-redirecting\" style\u003d\"display:none\"\u003eRedirecting…\u003c/p\u003e \n \u003c/div\u003e \n \u003cform class\u003d\"challenge-form\" id\u003d\"challenge-form\" action\u003d\"/?__cf_chl_jschl_tk__\u003dc8ab60c47f906f94060319e5f52de899835eec8e-1614361128-0-AfLLJ88dk7y3cdA18ZmVK0qTd-Bjlb02LGoF7HoTOiYr1awxAMGzNap9BOcbQpDdyPIDcoKeMdqBULq_vLrG9wfL6LuiLweId9-hmMiFoA9BwSHR2sQk35BV6ZKAUGfnf4eWZ-aM78rAExX-29lgmjyGaCXSeKR_-VomlyUrQwt40_7MfrkyDxpzQw8abDIoy3ujNZJbhSTt0fBkvJapIMh26HzivQae9MkvrVuiL3U7RwY3261s-HzBjUfXXIcd9X1e1TiZqmc6-2HTHGCLvXPo--ywNyExoRrZmycRWVLM2xUXJtz1WSG_YWAHY28N1w\" method\u003d\"POST\" enctype\u003d\"application/x-www-form-urlencoded\"\u003e \n \u003cinput type\u003d\"hidden\" name\u003d\"r\" value\u003d\"946bc6f89d52ba0964e58e13a060262cc557b8bd-1614361128-0-AdebX22CmfOqZtfz6VfyprBwYzRQ+3Q4uck0LMh6cBBugBO9umDRhN/aSd2+4TEPN3+QP5/2zRLKckLh17N+YjHg0CV19AWqtaHEYhhrzQD9sye8brVMa2HLuRaq3TO3bhWWj+hY7bQu09zCIIxbKpW/JYNaMUA05QGyfNWOV4W/zt1KOPDzxj+iRD0vWQNnK2GQSFYlh5f2/WLVclTEQIqliSGTotnFuIi1MU9zaYfuX1Ol2WPuAwXlJoIfjRC/oNI3M7GVtRXDsKWkSea+3g3wQn2pB3oXX49saJ0s2J6uejnI741ifuZjp5LuWp4ZFst0bCUZPJO8jI/0Stkg/Xd9mEba43JqS+GKNq9npOkuiagZc+lURzLz2ECDtU0x+JWvOgZ2xSapT4ufdKrgVe0q1Bp8xm1QIvGQLFzGjDJtuTH7OcgoQ6gYV8/ty/6wUgrXfPzK47W0iIDrWjOmiN7Y/Gt1lBtj+8oQgzR6ABNZlLOf2IQ7Eauns+MX+4ks3vIK7WRM8KmgkGUcgB2FIwJSJJ573OjWqZkQQkPhEV2yjhIjT8tOzGX9C/nwIHF4i6vpvwSVRCtLjQx+OBdY6M0f+4fcB4TnVW7rR9R8mZ4+bGcCxJ4bNroadBAvkLcbaWJYod8pFdEa8iOHJETK4aAsg1zMixTU89Fj1zeE8JatJ8Je/m1D6fiLiO1KBkeLB3ov0uBUPVSH9R+DzxYOSbbu+LMt97QndIXBoarS2K72zemqjKbHYkTFtWuKvEbnELbOM8993H7SvtUHUKgiTaF+mWVTd1Rv4k8hywCu4cGOupiFUuif14PmEWFrFec0rVlKRDZWf60c/RJ7s/dSd0ZvZO+S2yom9C19EtZuTfnAiX8vYG84O9MsfOM/l+JtvY7yx0lgl7vj7/Genx6l4tOFxulO/Pvy0ZEnlWqNW5EJC491tqAL51C9btiGC5PHOCa6+tKcq2s5hcujAZzqm366hbNcyR8aVQSjY9cdmKImAilaNNiOdLP3Ci2Y13w5tIsO6ifRa+0LSyLPwwlZdEhQ16bWw8ObWrKel5aoJF2Jb2Dk71vaoVIBTCNuOeXdUtJsk1CEk6btguF+2bTj8TClicYRUGxxQM7GGGnIAAm85zmnrAQYsm701FN6SR2XnBpUjDjE5fRGR4EgBQ7LS4QT6tRmcN77FkKQUkiePR2Wq59rhPa6jXSthXPjPAB9FISMyJjuVazstV1taFUVzAp/A/CK2i0Ti6yaacu7sSxnbHykyw/kg87FYNTYw9gpSz0ICNJNanHX1+/vFGvq/cVh9syZVZjTQfPNoT61uQk677awNU5zTmAP/M9KKtMCxNTEezVSh3KrL9MCK5FDiWn8H/FFSRFTj6WyWZFoz0/r3VSQjcRdbw7soTy8wahb3Beko0KLPi802q76s74WUUM\u003d\"\u003e \n \u003cinput type\u003d\"hidden\" value\u003d\"e1ae30b322b2f3884861a95378ea1e08\" id\u003d\"jschl-vc\" name\u003d\"jschl_vc\"\u003e \n \u003c!-- \u003cinput type\u003d\"hidden\" value\u003d\"\" id\u003d\"jschl-vc\" name\u003d\"jschl_vc\"/\u003e --\u003e \n \u003cinput type\u003d\"hidden\" name\u003d\"pass\" value\u003d\"1614361132.066-Lv6AWAuxFD\"\u003e \n \u003cinput type\u003d\"hidden\" id\u003d\"jschl-answer\" name\u003d\"jschl_answer\"\u003e \n \u003c/form\u003e \n \u003cscript type\u003d\"text/javascript\"\u003e\n //\u003c![CDATA[\n (function(){\n var a \u003d document.getElementById(\u0027cf-content\u0027);\n a.style.display \u003d \u0027block\u0027;\n var isIE \u003d /(MSIE|Trident\\/|Edge\\/)/i.test(window.navigator.userAgent);\n var trkjs \u003d isIE ? new Image() : document.createElement(\u0027img\u0027);\n trkjs.setAttribute(\"src\", \"/cdn-cgi/images/trace/jschal/js/transparent.gif?ray\u003d627b711a599ff039\");\n trkjs.id \u003d \"trk_jschal_js\";\n trkjs.setAttribute(\"alt\", \"\");\n document.body.appendChild(trkjs);\n var cpo\u003ddocument.createElement(\u0027script\u0027);\n cpo.type\u003d\u0027text/javascript\u0027;\n cpo.src\u003d\"/cdn-cgi/challenge-platform/h/g/orchestrate/jsch/v1\";\n document.getElementsByTagName(\u0027head\u0027)[0].appendChild(cpo);\n }());\n //]]\u003e\n \u003c/script\u003e \n \u003cdiv id\u003d\"trk_jschal_nojs\" style\u003d\"background-image:url(\u0027/cdn-cgi/images/trace/jschal/nojs/transparent.gif?ray\u003d627b711a599ff039\u0027)\"\u003e \n \u003c/div\u003e \n \u003c/div\u003e \n \u003cdiv class\u003d\"attribution\"\u003e\n DDoS protection by \n \u003ca rel\u003d\"noopener noreferrer\" href\u003d\"https://www.cloudflare.com/5xx-error-landing/\" target\u003d\"_blank\"\u003eCloudflare\u003c/a\u003e \n \u003cbr\u003e \n \u003cspan class\u003d\"ray_id\"\u003eRay ID: \u003ccode\u003e627b711a599ff039\u003c/code\u003e\u003c/span\u003e \n \u003c/div\u003e \u003c/td\u003e \n \u003c/tr\u003e \n \u003c/tbody\u003e\n \u003c/table\u003e \n \u003c/body\u003e\n\u003c/html\u003e/","categories":[],"tags":"null"}""" -private const val MMRSOURCE_24 = """{"language":"pt-BR","name":"Remangas","base_url":"https://remangas.top","supports_latest":true,"isNsfw":false,"item_url":"https://remangas.top/manga/","categories":[{"id":"1","name":"Ação"},{"id":"2","name":"Aventura"},{"id":"3","name":"Comédia"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasia"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Histórico"},{"id":"11","name":"Terror"},{"id":"12","name":"Josei"},{"id":"13","name":"Artes Marciais"},{"id":"14","name":"Adulto"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mistério"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psicológico"},{"id":"19","name":"Romance"},{"id":"20","name":"Vida escolar"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Esporte"},{"id":"29","name":"Sobrenatural"},{"id":"30","name":"Tragédia"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"},{"id":"33","name":"Isekai"},{"id":"34","name":"Guerra"},{"id":"35","name":"Sobrevivência"},{"id":"36","name":"Romance?"}],"tags":[{"id":"seinen","name":"seinen"},{"id":"ecchi","name":"ecchi"},{"id":"harem","name":"harem"},{"id":"isekai","name":"isekai"},{"id":"guerra","name":"guerra"},{"id":"shounen","name":"shounen"},{"id":"18","name":"+18"},{"id":"adulto","name":"Adulto"},{"id":"fantasia","name":"Fantasia"},{"id":"romance","name":"Romance"},{"id":"vida-escolar","name":"Vida Escolar"},{"id":"acao","name":"Ação"},{"id":"misterio","name":"mistério"},{"id":"terror","name":"Terror"},{"id":"detetive","name":"Detetive"},{"id":"misterios","name":"Mistérios"},{"id":"incesto","name":"Incesto"},{"id":"comedia-romantica","name":"Comédia Romantica"},{"id":"alquimia","name":"Alquimia"},{"id":"manhua","name":"Manhua"},{"id":"colorido","name":"Colorido"},{"id":"antologia","name":"Antologia"},{"id":"dragoes","name":"Dragões"},{"id":"briga-de-rua","name":"Briga de Rua"},{"id":"anti-heroi","name":"Anti Herói"},{"id":"zoera","name":"Zoera"},{"id":"protagonista-overpower","name":"Protagonista Overpower"},{"id":"psicologico","name":"Psicológico"},{"id":"protagonista-badass","name":"Protagonista Badass"},{"id":"battleroyale","name":"Battleroyale"},{"id":"apocalispe-zumbi","name":"Apocalispe Zumbi"},{"id":"mc-nao-virjao","name":"Mc Não Virjão"},{"id":"escola-de-magia","name":"Escola de Magia"},{"id":"tensei","name":"Tensei"},{"id":"shota-badass","name":"Shota Badass"},{"id":"isekai-vai-e-volta","name":"Isekai Vai e Volta"},{"id":"gore","name":"gore"},{"id":"garota-monstro","name":"Garota Monstro"},{"id":"maid","name":"Maid"},{"id":"gal","name":"Gal"},{"id":"mordomo","name":"Mordomo"}]}""" -private const val MMRSOURCE_25 = """{"language":"pt-BR","name":"AnimaRegia","base_url":"https://animaregia.net","supports_latest":true,"isNsfw":false,"item_url":"http://animaregia.net/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" -private const val MMRSOURCE_26 = """{"language":"tr","name":"MangaVadisi","base_url":"http://manga-v2.mangavadisi.org","supports_latest":true,"isNsfw":false,"item_url":"http://manga-v2.mangavadisi.org/manga/","categories":[{"id":"1","name":"Aksiyon"},{"id":"2","name":"Macera"},{"id":"3","name":"Komedi"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantastik"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Tarihi"},{"id":"11","name":"Korku"},{"id":"12","name":"Josei"},{"id":"13","name":"Dövüş Sanatları"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Gizem"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psikolojik"},{"id":"19","name":"Romantizm"},{"id":"20","name":"Okul Hayatı"},{"id":"21","name":"Bilim Kurgu"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Günlük Yaşam"},{"id":"28","name":"Spor"},{"id":"29","name":"Doğaüstü"},{"id":"30","name":"Trajedi"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" -private const val MMRSOURCE_27 = """{"language":"id","name":"MangaID","base_url":"https://mangaid.click","supports_latest":true,"isNsfw":false,"item_url":"https://mangaid.click/manga/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"Psychological"},{"id":"18","name":"Romance"},{"id":"19","name":"School Life"},{"id":"20","name":"Sci-fi"},{"id":"21","name":"Seinen"},{"id":"22","name":"Shoujo"},{"id":"23","name":"Shoujo Ai"},{"id":"24","name":"Shounen"},{"id":"25","name":"Shounen Ai"},{"id":"26","name":"Slice of Life"},{"id":"27","name":"Sports"},{"id":"28","name":"Supernatural"},{"id":"29","name":"Tragedy"},{"id":"30","name":"Yaoi"},{"id":"31","name":"Yuri"},{"id":"32","name":"School"},{"id":"33","name":"Isekai"},{"id":"34","name":"Military"}],"tags":"null"}""" -private const val MMRSOURCE_28 = """{"language":"fr","name":"Jpmangas","base_url":"https://jpmangas.co","supports_latest":true,"isNsfw":false,"item_url":"https://jpmangas.co/lecture-en-ligne/","categories":[{"id":"1","name":"Action"},{"id":"2","name":"Adventure"},{"id":"3","name":"Comedy"},{"id":"4","name":"Doujinshi"},{"id":"5","name":"Drama"},{"id":"6","name":"Ecchi"},{"id":"7","name":"Fantasy"},{"id":"8","name":"Gender Bender"},{"id":"9","name":"Harem"},{"id":"10","name":"Historical"},{"id":"11","name":"Horror"},{"id":"12","name":"Josei"},{"id":"13","name":"Martial Arts"},{"id":"14","name":"Mature"},{"id":"15","name":"Mecha"},{"id":"16","name":"Mystery"},{"id":"17","name":"One Shot"},{"id":"18","name":"Psychological"},{"id":"19","name":"Romance"},{"id":"20","name":"School Life"},{"id":"21","name":"Sci-fi"},{"id":"22","name":"Seinen"},{"id":"23","name":"Shoujo"},{"id":"24","name":"Shoujo Ai"},{"id":"25","name":"Shounen"},{"id":"26","name":"Shounen Ai"},{"id":"27","name":"Slice of Life"},{"id":"28","name":"Sports"},{"id":"29","name":"Supernatural"},{"id":"30","name":"Tragedy"},{"id":"31","name":"Yaoi"},{"id":"32","name":"Yuri"}],"tags":"null"}""" -private const val MMRSOURCE_29 = """{"language":"fr","name":"Op-VF","base_url":"https://www.op-vf.com","supports_latest":true,"isNsfw":false,"item_url":"https://www.op-vf.com/manga/","categories":[],"tags":"null"}""" -private const val MMRSOURCE_30 = """{"language":"fr","name":"FR Scan","base_url":"https://www.frscan.me","supports_latest":false,"isNsfw":false,"item_url":"\u003chtml\u003e\n \u003chead\u003e\u003c/head\u003e\n \u003cbody\u003e\n Product activation error\n \u003c/body\u003e\n\u003c/html\u003e/","categories":[],"tags":"null"}""" -private const val MMRSOURCE_31 = """{"language":"other","name":"HentaiShark","base_url":"https://www.hentaishark.com","supports_latest":true,"isNsfw":true,"item_url":"https://www.hentaishark.com/manga/","categories":[{"id":"1","name":"Doujinshi"},{"id":"2","name":"Manga"},{"id":"3","name":"Western"},{"id":"4","name":"non-h"},{"id":"5","name":"imageset"},{"id":"6","name":"artistcg"},{"id":"7","name":"misc"}],"tags":"null"}""" -val SOURCES: List get() = listOf(MMRSOURCE_1, MMRSOURCE_2, MMRSOURCE_3, MMRSOURCE_4, MMRSOURCE_5, MMRSOURCE_6, MMRSOURCE_7, MMRSOURCE_8, MMRSOURCE_9, MMRSOURCE_10, MMRSOURCE_11, MMRSOURCE_12, MMRSOURCE_13, MMRSOURCE_14, MMRSOURCE_15, MMRSOURCE_16, MMRSOURCE_17, MMRSOURCE_18, MMRSOURCE_19, MMRSOURCE_20, MMRSOURCE_21, MMRSOURCE_22, MMRSOURCE_23, MMRSOURCE_24, MMRSOURCE_25, MMRSOURCE_26, MMRSOURCE_27, MMRSOURCE_28, MMRSOURCE_29, MMRSOURCE_30, MMRSOURCE_31) diff --git a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSources.kt b/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSources.kt deleted file mode 100644 index 92305c0cb..000000000 --- a/src/all/mmrcms/src/eu/kanade/tachiyomi/extension/all/mmrcms/MyMangaReaderCMSSources.kt +++ /dev/null @@ -1,101 +0,0 @@ -package eu.kanade.tachiyomi.extension.all.mmrcms - -import com.github.salomonbrys.kotson.array -import com.github.salomonbrys.kotson.bool -import com.github.salomonbrys.kotson.string -import com.google.gson.JsonArray -import com.google.gson.JsonObject -import com.google.gson.JsonParser -import eu.kanade.tachiyomi.source.SourceFactory - -class MyMangaReaderCMSSources : SourceFactory { - /** - * Create a new copy of the sources - * @return The created sources - */ - override fun createSources() = parseSources(SOURCES) - - /** - * Parse a List of JSON sources into a list of `MyMangaReaderCMSSource`s - * - * Example JSON : - * ``` - * { - * "language": "en", - * "name": "Example manga reader", - * "base_url": "https://example.com", - * "supports_latest": true, - * "item_url": "https://example.com/manga/", - * "categories": [ - * {"id": "stuff", "name": "Stuff"}, - * {"id": "test", "name": "Test"} - * ], - * "tags": [ - * {"id": "action", "name": "Action"}, - * {"id": "adventure", "name": "Adventure"} - * ] - * } - * - * - * Sources that do not supports tags may use `null` instead of a list of json objects - * - * @param sourceString The List of JSON strings 1 entry = one source - * @return The list of parsed sources - */ - private fun parseSources(sourceString: List): List { - val parser = JsonParser() - return sourceString.map { - val jsonObject = parser.parse(it) as JsonObject - - val language = jsonObject["language"].string - val name = jsonObject["name"].string - val baseUrl = jsonObject["base_url"].string - val supportsLatest = jsonObject["supports_latest"].bool - val itemUrl = jsonObject["item_url"].string - val categories = mapToPairs(jsonObject["categories"].array) - var tags = emptyList>() - if (jsonObject["tags"].isJsonArray) { - tags = mapToPairs(jsonObject["tags"].asJsonArray) - } - val isNsfw = jsonObject["isNsfw"].bool - - if (isNsfw) { - MyMangaReaderCMSSourceNsfw( - language, - name, - baseUrl, - supportsLatest, - itemUrl, - categories, - tags - ) - } else { - MyMangaReaderCMSSource( - language, - name, - baseUrl, - supportsLatest, - itemUrl, - categories, - tags - ) - } - } - } - - /** - * Map an array of JSON objects to pairs. Each JSON object must have - * the following properties: - * - * id: first item in pair - * name: second item in pair - * - * @param array The array to process - * @return The new list of pairs - */ - private fun mapToPairs(array: JsonArray): List> = array.map { - it as JsonObject - - it["id"].string to it["name"].string - } -}