diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanController.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanController.kt index 71e70093..291758b6 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanController.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/ChusanController.kt @@ -35,7 +35,7 @@ class ChusanController( val chusan: Chusan ): MeowApi({ api, resp -> if (resp is String) resp - else (if ("CM" in api) cmMapper else mapper).write(resp) + else (if ("CM" in api || api == "GetUserItemApi" ) cmMapper else mapper).write(resp) }) { val log = LoggerFactory.getLogger(ChusanController::class.java) diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt index 6116ed6b..a398f189 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/handler/ChusanCMApis.kt @@ -54,10 +54,31 @@ fun ChusanController.cmApiInit() { db.userGacha.save(it) } + //Set the hasCompleted to true + val printState = db.userCardPrintState.findByUserAndGachaIdAndHasCompleted(u, gachaId, false) + + if (printState.isEmpty()) return@api null + + printState.forEach { it.hasCompleted = true } + db.userCardPrintState.saveAll(printState) + + // Append the order ID to the response with the key "orderId" + val fullPrintState = printState.map { + mapOf( + "orderId" to it.id, + "hasCompleted" to it.hasCompleted, + "limitDate" to it.limitDate.toString(), + "placeId" to it.placeId, + "cardId" to it.cardId, + "gachaId" to it.gachaId, + "userId" to uid + ) + } + mapOf( "returnCode" to 1, "apiName" to "CMUpsertUserGachaApi", - "userCardPrintStateList" to db.userCardPrintState.findByUserAndGachaIdAndHasCompleted(u, gachaId, false) + "userCardPrintStateList" to fullPrintState ) } diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserData.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserData.kt index 06c1788e..8ad035c4 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserData.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/Chu3UserData.kt @@ -3,6 +3,10 @@ package icu.samnyan.aqua.sega.chusan.model.userdata import com.fasterxml.jackson.annotation.JsonIgnore import com.fasterxml.jackson.annotation.JsonInclude import com.fasterxml.jackson.annotation.JsonProperty +import com.fasterxml.jackson.core.JsonParser +import com.fasterxml.jackson.databind.DeserializationContext +import com.fasterxml.jackson.databind.JsonDeserializer +import com.fasterxml.jackson.databind.annotation.JsonDeserialize import com.fasterxml.jackson.databind.annotation.JsonSerialize import icu.samnyan.aqua.net.games.BaseEntity import icu.samnyan.aqua.net.games.IUserData @@ -10,8 +14,22 @@ import icu.samnyan.aqua.sega.chusan.model.request.UserEmoney import icu.samnyan.aqua.sega.general.model.Card import icu.samnyan.aqua.sega.util.jackson.AccessCodeSerializer import jakarta.persistence.* +import kotlinx.io.IOException import lombok.NoArgsConstructor import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + +class FlexibleDateTimeDeserializer : JsonDeserializer() { + @Throws(IOException::class) + public override fun deserialize(p: JsonParser, ctxt: DeserializationContext?): LocalDateTime { + return LocalDateTime.parse(p.getText(), FORMATTER) + } + + companion object { + // Card Maker needs the date ending with ".0" and chunithm sends the dates without it so we need a flexible parser + private val FORMATTER: DateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss[.S]") + } +} @Entity(name = "ChusanUserData") @Table(name = "chusan_user_data") @@ -50,12 +68,14 @@ class Chu3UserData : BaseEntity(), IUserData { var totalExpertHighScore: Long = 0 var totalMasterHighScore: Long = 0 var totalUltimaHighScore: Long = 0 + @JsonDeserialize(using = FlexibleDateTimeDeserializer::class) var eventWatchedDate: LocalDateTime = LocalDateTime.now() var friendCount = 0 var firstGameId: String = "" var firstRomVersion: String = "" var firstDataVersion: String = "" + @JsonDeserialize(using = FlexibleDateTimeDeserializer::class) override var firstPlayDate: LocalDateTime = LocalDateTime.now() var lastGameId: String = "" @@ -65,6 +85,7 @@ class Chu3UserData : BaseEntity(), IUserData { @JsonIgnore var lastLoginDate: LocalDateTime = LocalDateTime.now() + @JsonDeserialize(using = FlexibleDateTimeDeserializer::class) override var lastPlayDate: LocalDateTime = LocalDateTime.now() var lastPlaceId = 0 var lastPlaceName: String = "" diff --git a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserCardPrintState.kt b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserCardPrintState.kt index faa2e1d6..72f030f9 100644 --- a/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserCardPrintState.kt +++ b/src/main/java/icu/samnyan/aqua/sega/chusan/model/userdata/UserCardPrintState.kt @@ -1,5 +1,6 @@ package icu.samnyan.aqua.sega.chusan.model.userdata +import com.fasterxml.jackson.annotation.JsonIgnore import jakarta.persistence.Entity import jakarta.persistence.Table import java.time.LocalDateTime @@ -8,6 +9,8 @@ import java.time.LocalDateTime @Table(name = "chusan_user_print_state") class UserCardPrintState( var hasCompleted: Boolean = false, + + @JsonIgnore var limitDate: LocalDateTime = LocalDateTime.now(), var placeId: Int = 0, var cardId: Int = 0, diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiApis.kt b/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiApis.kt index 41bf4a8d..32e477a0 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiApis.kt +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiApis.kt @@ -9,6 +9,7 @@ fun OngekiController.ongekiInit() { fun List.staticLst(key: String) = mapOf("length" to size, key to this) initUser() + cmApiInit() initUpsertAll() // Has type, but type is always 1 diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiCMApis.kt b/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiCMApis.kt new file mode 100644 index 00000000..614f4013 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiCMApis.kt @@ -0,0 +1,345 @@ +package icu.samnyan.aqua.sega.ongeki + +import ext.asDateTime +import ext.empty +import ext.int +import ext.invoke +import ext.long +import ext.mapApply +import ext.minus +import ext.parsing +import icu.samnyan.aqua.sega.ongeki.model.* +import java.time.LocalDateTime + +fun OngekiController.cmApiInit() { + "CMGetUserData" { + val user = db.data.findByCard_ExtId(uid)() ?: (400 - "User not found") + mapOf("userId" to uid, "userData" to user) + } + + "PrinterLogin" { mapOf("returnCode" to 1) } + "PrinterLogout" { mapOf("returnCode" to 1) } + + "CMGetUserCard".unpaged("userCardList"){ + db.card.findByUser_Card_ExtId(uid).map { it.apply { printCount = 99 } } + } + + "CMGetUserCharacter".unpaged("userCharacterList") { db.character.findByUser_Card_ExtId(uid)} + + "CMGetUserItem" { + val kind = (parsing { data["nextIndex"]!!.long } / 10000000000L).toInt() + var dat = db.item.findByUser_Card_ExtIdAndItemKind(uid, kind) + + // Check if user have infinite kaika + if (kind == OgkItemType.KaikaItem.ordinal) { + val u = db.data.findByCard_ExtId(uid)() + u?.card?.aquaUser?.gameOptions?.let { + if (it.ongekiInfiniteKaika) { + dat = listOf(UserItem().apply { + user = u + itemKind = OgkItemType.KaikaItem.ordinal + itemId = 1 + stock = 999 + }) + } + } + } + + mapOf("userId" to uid, "length" to dat.size, "nextIndex" to -1, "itemKind" to kind, "userItemList" to dat) + } + + "GetGameGacha" { + gdb.gacha.findAll().let { + mapOf("length" to it.size, "gameGachaList" to it, "registIdList" to emptyList()) + } + } + + "GetGameGachaCardById" { + val gachaId = parsing { data["gachaId"]!!.long } + + gdb.gachaCard.findAllByGachaId(gachaId).let { + mapOf("gachaId" to gachaId, "length" to it.size, "isPickup" to false, "gameGachaCardList" to it, + "emissionList" to empty, "afterCalcList" to empty + ) + } + } + + "GetUserGacha" { + db.gacha.findByUser_Card_ExtId(uid).let{ + mapOf("userId" to uid, "length" to it.size, "nextIndex" to 0, "userGachaList" to it) + } + } + + "RollGacha" { + val (gachaId, tmpTimes) = parsing { data["gachaId"]!!.long to data["times"]!!.int } + var times = tmpTimes + + val user = db.data.findByCard_ExtId(uid)() ?: (400 - "User not found") + val foundGacha = gdb.gacha.findById(gachaId)() ?: (404 - "Gacha not found") + + val foundUserGacha = db.gacha.findByUserAndGachaId(user, gachaId) + + // Official gacha percentages: R 76% SR 21% SSR 3% + val probabilities = listOf(76, 21, 3) + var rarityResults: List = emptyList() + + // If this is the first x5 pull or any x11 pull, an SR is guaranteed + if(foundUserGacha != null && ((times == 5 && foundUserGacha.fiveGachaCnt==0) || times==11)){ + rarityResults = listOf(3) + times -= 1 + } + + rarityResults = rarityResults + List(times) { + val rand = (1..100).random() + when { + rand <= probabilities[0] -> 2 + rand <= probabilities[0] + probabilities[1] -> 3 + else -> 4 + } + } + + val pulledCards = if(foundGacha.kind==0 || foundGacha.kind==3) { + // If it is the free or the permanent gacha, include cards from the gacha itself + gdb.gachaCard.findAllByGachaId(gachaId).groupBy { it.rarity } + } else { + // If it is a normal gacha, include all cards from the permanent gacha + gdb.gachaCard.findAllByGachaIdAndPermanent(gachaId).groupBy { it.rarity } + } + + val finalPulls = rarityResults.map { rarity -> pulledCards[rarity]?.random()} + + mapOf("length" to finalPulls.size, "gameGachaCardList" to finalPulls) + } + + "CMUpsertUserGacha" api@ { + val all: OngekiCMUpsertUserGacha = mapper.convert(data["cmUpsertUserGacha"]!!) + val gacha = parsing { data["gachaId"]!!.long } + val pullCount = parsing { data["gachaCnt"]!!.int } + val earnedSelectPoints = parsing { data["selectPoint"]!!.int } + + // User data + val oldUser = db.data.findByCard_ExtId(uid)() + val u: UserData = all.userData?.get(0)?.apply { + id = oldUser?.id ?: 0 + card = oldUser?.card ?: us.cardRepo.findByExtId(uid)() ?: (404 - "Card not found") + + // Set eventWatchedDate with lastPlayDate, because client doesn't update it + cmEventWatchedDate = oldUser?.lastPlayDate ?: "" + db.data.save(this) + } ?: oldUser ?: return@api null + + db.gacha.findByUserAndGachaId(u, gacha)?.apply { + totalGachaCnt += pullCount + + // If the user pulled a select gacha increase the stats + if (earnedSelectPoints > 0) { + selectPoint += earnedSelectPoints + ceilingGachaCnt += pullCount + } + + // Stats related with the group of pulls the user makes + if (pullCount == 5) { + fiveGachaCnt += 1 + }else if (pullCount == 11) { + elevenGachaCnt+=1 + } + + // Update the daily gacha + val parsedDailyGachaDate = dailyGachaDate.asDateTime()!! + if ( + parsedDailyGachaDate.dayOfMonth != LocalDateTime.now().dayOfMonth || + parsedDailyGachaDate.monthValue != LocalDateTime.now().monthValue || + parsedDailyGachaDate.year != LocalDateTime.now().year + ) { + dailyGachaCnt += pullCount + dailyGachaDate = LocalDateTime.now().toString() + }else{ + dailyGachaCnt += pullCount + } + }?: UserGacha().apply { + user = u + gachaId = gacha + totalGachaCnt = pullCount + selectPoint = earnedSelectPoints + ceilingGachaCnt = if (earnedSelectPoints > 0) 1 else 0 + fiveGachaCnt = if (pullCount == 5) 1 else 0 + elevenGachaCnt = if (pullCount == 11) 1 else 0 + dailyGachaCnt = pullCount + + db.gacha.save(this) + } + + all.run { + // Set users + listOfNotNull( + userCharacterList, userCardList, userItemList + ).flatten().forEach { it.user = u } + + // UserCharacterList + userCharacterList?.let { list -> + db.character.saveAll(list.distinctBy { it.characterId }.mapApply { + id = db.character.findByUserAndCharacterId(u, characterId)()?.id ?: 0 + }) + } + + // UserCardList + userCardList?.let { list -> + db.card.saveAll(list.distinctBy { it.cardId }.mapApply { + id = db.card.findByUserAndCardId(u, cardId)()?.id ?: 0 + }) + } + + // UserItemList + userItemList?.let { list -> + db.item.saveAll(list.distinctBy { it.itemKind to it.itemId }.mapApply { + id = db.item.findByUserAndItemKindAndItemId(u, itemKind, itemId)()?.id ?: 0 + }) + } + } + + null + } + + "CMUpsertUserAll" api@{ + val all: OngekiCMUpsertAll = mapper.convert(data["cmUpsertUserAll"]!!) + + // User data + val oldUser = db.data.findByCard_ExtId(uid)() + val u: UserData = all.userData?.get(0)?.apply { + id = oldUser?.id ?: 0 + card = oldUser?.card ?: us.cardRepo.findByExtId(uid)() ?: (404 - "Card not found") + + // Set eventWatchedDate with lastPlayDate, because client doesn't update it + cmEventWatchedDate = oldUser?.lastPlayDate ?: "" + db.data.save(this) + } ?: oldUser ?: return@api null + + all.run { + // Set users + listOfNotNull( + userActivityList, userCharacterList, userCardList, userItemList + ).flatten().forEach { it.user = u } + + // UserActivityList + userActivityList?.let { list -> + db.activity.saveAll(list.distinctBy { it.activityId to it.kind }.mapApply { + id = db.activity.findByUserAndKindAndActivityId(u, kind, activityId)()?.id ?: 0 + }) + } + + + // UserCharacterList + userCharacterList?.let { list -> + db.character.saveAll(list.distinctBy { it.characterId }.mapApply { + id = db.character.findByUserAndCharacterId(u, characterId)()?.id ?: 0 + }) + } + + // UserCardList + userCardList?.let { list -> + db.card.saveAll(list.distinctBy { it.cardId }.mapApply { + id = db.card.findByUserAndCardId(u, cardId)()?.id ?: 0 + }) + } + + // UserItemList + userItemList?.let { list -> + db.item.saveAll(list.distinctBy { it.itemKind to it.itemId }.mapApply { + id = db.item.findByUserAndItemKindAndItemId(u, itemKind, itemId)()?.id ?: 0 + }) + } + } + + null + } + + "CMUpsertUserSelectGacha" api@ { + val all: OngekiCMUpsertUserSelectGacha = mapper.convert(data["cmUpsertUserSelectGacha"]!!) + val selectLog:List = mapper.convert(data["selectGachaLogList"]!!) + + // User data + val oldUser = db.data.findByCard_ExtId(uid)() + val u: UserData = all.userData?.get(0)?.apply { + id = oldUser?.id ?: 0 + card = oldUser?.card ?: us.cardRepo.findByExtId(uid)() ?: (404 - "Card not found") + + // Set eventWatchedDate with lastPlayDate, because client doesn't update it + cmEventWatchedDate = oldUser?.lastPlayDate ?: "" + db.data.save(this) + } ?: oldUser ?: return@api null + + if(selectLog.isNotEmpty()) { + val selectionInfo = selectLog.first() + + db.gacha.findByUserAndGachaId(u, selectionInfo.gachaId)?.apply { + // Total reset of selectPoints + selectPoint = 0 + + // Set the flag for the selection gacha so that the user cant use it anymore + useSelectPoint = 1 + + } ?: UserGacha().apply { + // It should be impossible to reach this + user = u + gachaId = selectionInfo.gachaId + + db.gacha.save(this) + } + } + + all.run { + // Set users + listOfNotNull( + userCharacterList, userCardList + ).flatten().forEach { it.user = u } + + + if (all.isNewCharacterList?.contains("1") ?: false) { + // UserCharacterList + userCharacterList?.let { list -> + db.character.saveAll(list.distinctBy { it.characterId }.mapApply { + id = db.character.findByUserAndCharacterId(u, characterId)()?.id ?: 0 + }) + } + } + + if (all.isNewCardList?.contains("1") ?: false) { + // UserCardList + userCardList?.let { list -> + db.card.saveAll(list.distinctBy { it.cardId }.mapApply { + id = db.card.findByUserAndCardId(u, cardId)()?.id ?: 0 + }) + } + } + } + + null + } + + "CMUpsertUserPrintPlaylog" api@ { + // User payment logs, useless + null + } + + "CMUpsertUserPrint" api@ { + // User print information, useless + null + } + + "CMUpsertUserPrintlog" api@ { + // User print logs, useless + null + } + + "CMGetUserGachaSupply" { + // Mock function, not sure of functionality + + mapOf("supplyId" to 0, "length" to 0, "supplyCardList" to emptyList()) + } + + "GetGameTheater" { + // Mock function, not sure of functionality + + mapOf("length" to 0, "gameTheaterList" to emptyList(), "registIdList" to emptyList()) + } +} \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiRepos.kt b/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiRepos.kt index e54cfc18..fb19d48f 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiRepos.kt +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/OngekiRepos.kt @@ -151,6 +151,19 @@ interface OgkUserRegionsRepo: OngekiUserLinked { fun findByUserAndRegionId(user: UserData, regionId: Int): UserRegions? } +interface OgkGameGachaCardRepo : JpaRepository { + fun findAllByGachaId(gachaId: Long): List + + @Query("SELECT g FROM OngekiGameGachaCard g WHERE g.gachaId = :gachaId OR g.gachaId = 1112") + fun findAllByGachaIdAndPermanent(gachaId: Long): List +} + +interface OgkGameGachaRepo : JpaRepository + +interface OgkUserGachaRepo : OngekiUserLinked { + fun findByUserAndGachaId(user: UserData, gachaId: Long): UserGacha? +} + // Re:Fresh interface OgkUserEventMapRepo : OngekiUserLinked interface OgkUserSkinRepo : OngekiUserLinked @@ -195,6 +208,7 @@ class OngekiUserRepos( val eventMap: OgkUserEventMapRepo, val skin: OgkUserSkinRepo, val regions: OgkUserRegionsRepo, + val gacha: OgkUserGachaRepo, ) @Component @@ -207,6 +221,8 @@ class OngekiGameRepos( val present: OgkGamePresentRepo, val reward: OgkGameRewardRepo, val skill: OgkGameSkillRepo, + val gachaCard: OgkGameGachaCardRepo, + val gacha:OgkGameGachaRepo ) @Component diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiGameEntities.kt b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiGameEntities.kt index b4ec50fe..6587d5fe 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiGameEntities.kt +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiGameEntities.kt @@ -1,6 +1,7 @@ package icu.samnyan.aqua.sega.ongeki.model import com.fasterxml.jackson.annotation.JsonIgnore +import com.fasterxml.jackson.annotation.JsonProperty import jakarta.persistence.* @Entity(name = "OngekiGameCard") @@ -112,3 +113,41 @@ class GameSkill { var category: String = "" var info: String = "" } + +@Entity(name = "OngekiGameGachaCard") +@Table(name = "ongeki_game_gacha_card") +class GameGachaCard { + @Id + var cardId: Long = 0 + var gachaId: Long = 0 + var rarity: Int = 0 + var weight: Int = 0 + + @JsonProperty("isPickup") + var isPickup: Boolean = false + + @JsonProperty("isSelect") + var isSelect: Boolean = false +} + +@Entity(name = "OngekiGameGacha") +@Table(name = "ongeki_game_gacha") +class GameGacha { + @Id + var gachaId: Long = 0 + var gachaName: String = "" + var type: Int = 0 + var kind: Int = 0 + var maxSelectPoint: Int = 0 + var ceilingCnt: Int = 0 + var changeRateCnt1: Int = 0 + var changeRateCnt2: Int = 0 + var startDate: String = "" + var endDate: String = "" + var noticeStartDate: String = "" + var noticeEndDate: String = "" + var convertEndDate: String = "" + + @JsonProperty("isCeiling") + var isCeiling: Boolean = false +} \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiUpsertCM.kt b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiUpsertCM.kt new file mode 100644 index 00000000..3a748532 --- /dev/null +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiUpsertCM.kt @@ -0,0 +1,44 @@ +package icu.samnyan.aqua.sega.ongeki.model + +class OngekiCMUpsertUserGacha { + var userData: List? = null + var userCharacterList: List? = null + var userCardList: List? = null + var gameGachaCardList: List? = null + var userItemList: List? = null + + // These are strings with as many 1s as new elements are present + var isNewCharacterList: String? = null + var isNewCardList: String? = null + var isNewItemList: String? = null +} + +class OngekiCMUpsertAll { + var userData: List? = null + var userActivityList: List? = null + var userCharacterList: List? = null + var userCardList: List? = null + var userItemList: List? = null + + // These are strings with as many 1s as new elements are given + var isNewCharacterList: String? = null + var isNewCardList: String? = null + var isNewItemList: String? = null +} + +class OngekiCMUpsertUserSelectGacha { + var userData: List? = null + var userCharacterList: List? = null + var userCardList: List? = null + + // These are strings with as many 1s as new elements are given + var isNewCharacterList: String? = null + var isNewCardList: String? = null +} + +class OngekiCMSelectGachaLog { + var gachaId: Long = 0 + var useSelectPoint: Int = 0 + var convertType: Int = 0 + var convertItem: Int = 0 +} \ No newline at end of file diff --git a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiUserEntities.kt b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiUserEntities.kt index 1e971d8d..b3b2fce8 100644 --- a/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiUserEntities.kt +++ b/src/main/java/icu/samnyan/aqua/sega/ongeki/model/OngekiUserEntities.kt @@ -8,6 +8,7 @@ import icu.samnyan.aqua.sega.general.model.Card import icu.samnyan.aqua.sega.util.jackson.AccessCodeSerializer import jakarta.persistence.* import java.time.LocalDate +import java.time.LocalDateTime @MappedSuperclass class OngekiUserEntity : BaseEntity(), IUserEntity { @@ -517,10 +518,27 @@ class UserSkin : OngekiUserEntity() { @Entity(name = "OngekiUserRegions") @Table( name = "ongeki_user_regions", - uniqueConstraints = [UniqueConstraint(columnNames = ["user_id", "regionId"])] + uniqueConstraints = [UniqueConstraint(columnNames = ["user_id", "region_id"])] ) class UserRegions : OngekiUserEntity() { var regionId = 0 var playCount = 1 var created: String = LocalDate.now().toString() +} + +@Entity(name="OngekiUserGacha") +@Table( + name = "ongeki_user_gacha", + uniqueConstraints = [UniqueConstraint(columnNames = ["user_id", "gacha_id"])] +) +class UserGacha : OngekiUserEntity() { + var gachaId:Long = 0 + var totalGachaCnt = 0 + var ceilingGachaCnt = 0 + var selectPoint = 0 + var useSelectPoint = 0 + var dailyGachaCnt = 0 + var fiveGachaCnt = 0 + var elevenGachaCnt = 0 + var dailyGachaDate: String = LocalDateTime.now().toString() } \ No newline at end of file diff --git a/src/main/resources/db/80/V1000_57__ongekicm.sql b/src/main/resources/db/80/V1000_57__ongekicm.sql new file mode 100644 index 00000000..1c10470b --- /dev/null +++ b/src/main/resources/db/80/V1000_57__ongekicm.sql @@ -0,0 +1,840 @@ +CREATE TABLE ongeki_game_gacha +( + gacha_id BIGINT AUTO_INCREMENT NOT NULL, + gacha_name VARCHAR(255) NOT NULL, + type INT NOT NULL, + kind INT NOT NULL, + is_ceiling BOOLEAN NOT NULL, + max_select_point INT NOT NULL, + ceiling_cnt INT NOT NULL, + change_rate_cnt1 INT NOT NULL, + change_rate_cnt2 INT NOT NULL, + start_date DATETIME NOT NULL, + end_date DATETIME NOT NULL, + notice_start_date DATETIME NOT NULL, + notice_end_date DATETIME NOT NULL, + convert_end_date DATETIME NOT NULL, + CONSTRAINT pk_ongk_gacha PRIMARY KEY (gacha_id) +); + +CREATE TABLE ongeki_game_gacha_card +( + card_id BIGINT AUTO_INCREMENT NOT NULL, + gacha_id BIGINT NOT NULL, + rarity INT NOT NULL, + weight INT NOT NULL, + is_pickup BOOLEAN NOT NULL, + is_select BOOLEAN NOT NULL, + CONSTRAINT pk_ongk_gacha_card PRIMARY KEY (card_id, gacha_id) +); + +ALTER TABLE ongeki_game_gacha_card + ADD CONSTRAINT FK_ONGEKI_GAME_GACHA_CARD_ON_GACHA FOREIGN KEY (gacha_id) REFERENCES ongeki_game_gacha (gacha_id ); + +CREATE TABLE ongeki_user_gacha +( + id BIGINT AUTO_INCREMENT NOT NULL, + user_id BIGINT NOT NULL, + gacha_id BIGINT NOT NULL, + total_gacha_cnt INT NOT NULL, + ceiling_gacha_cnt INT NOT NULL, + select_point INT NOT NULL, + use_select_point INT NOT NULL, + daily_gacha_cnt INT NOT NULL, + five_gacha_cnt INT NOT NULL, + eleven_gacha_cnt INT NOT NULL, + daily_gacha_date DATETIME NOT NULL, + CONSTRAINT pk_ongk_user_gacha PRIMARY KEY (id) +); + +ALTER TABLE ongeki_user_gacha + ADD CONSTRAINT FK_ONGEKI_USER_GACHA_ON_USER FOREIGN KEY (user_id) REFERENCES ongeki_user_data (id); +ALTER TABLE ongeki_user_gacha + ADD CONSTRAINT FK_ONGEKI_USER_GACHA_ON_GACHA FOREIGN KEY (gacha_id) REFERENCES ongeki_game_gacha (gacha_id); +ALTER TABLE ongeki_user_gacha + ADD CONSTRAINT unq_ongk_user_gacha UNIQUE (user_id, gacha_id); + +INSERT INTO ongeki_game_gacha (gacha_id, gacha_name, `type`, kind, is_ceiling, max_select_point, ceiling_cnt, change_rate_cnt1, change_rate_cnt2, start_date, end_date, notice_start_date, notice_end_date, convert_end_date) +VALUES + (1011, '無料ガチャ', 0, 3, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1012, '無料ガチャ(SR確定)', 0, 3, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1112, 'レギュラーガチャ', 0, 0, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1123, 'AQUA属性オンリーガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1128, 'bitter chocolate kiss ガチャ', 0, 4, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1135, 'オンゲキ bright 大感謝祭ガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1137, 'テアトル展開!プロジェクト奏坂ドールズリミテッドガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1138, 'WONDER SHOOTER EASTER ガチャ', 0, 4, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1139, 'ラスボス登場!?悪の侵略者ガチャ', 0, 4, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1140, 'カラフルアンブレラガチャ', 0, 4, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1141, 'It''s Showtime!ワンダフルサーカスガチャ', 0, 4, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1143, 'マーチングポケッツ ピックアップガチャ', 0, 4, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1144, 'bitter flavor ピックアップガチャ', 0, 4, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1145, '7EVENDAYS⇔HOLIDAYS ピックアップガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1146, '⊿TRiEDGE ピックアップガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1147, 'R.B.P. ピックアップガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1148, '皇城 セツナ ピックアップガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1149, 'ASTERISM ピックアップガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1151, 'スラッシュスキル ピックアップガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1152, '高瀬 梨緒オンリーガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1154, 'トラストスキル ピックアップガチャ', 0, 1, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1156, 'bright memory振り返りガチャ', 0, 2, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1159, 'オンゲキ&オンゲキ PLUS ピックアップガチャ', 0, 2, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1160, 'SUMMER & SUMMER PLUS ピックアップガチャ', 0, 2, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1161, 'R.E.D. & R.E.D. PLUS ピックアップガチャ', 0, 2, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1162, 'bright & bright MEMORY ピックアップガチャ', 0, 2, 0, 0, 0, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'), + (1167, '6周年記念!! 6rd Anniversaryセレクトガチャ', 0, 2, 1, 11, 11, 0, 0, '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2020-01-01 00:00:00.000', '2999-01-01 00:00:00.000', '2999-01-01 00:00:00.000'); + +INSERT INTO ongeki_game_gacha_card (card_id, gacha_id,rarity,weight,is_pickup,is_select) +VALUES + (100003, 1112, 2, 100, 0, 0), + (100003, 1149, 2, 100, 0, 0), + (100004, 1112, 2, 100, 0, 0), + (100004, 1149, 2, 100, 0, 0), + (100006, 1112, 3, 100, 0, 0), + (100006, 1159, 3, 100, 0, 0), + (100007, 1112, 3, 100, 0, 0), + (100007, 1159, 3, 100, 0, 0), + (100008, 1112, 4, 100, 0, 0), + (100008, 1159, 4, 100, 0, 0), + (100008, 1167, 4, 100, 0, 1), + (100012, 1112, 2, 100, 0, 0), + (100012, 1149, 2, 100, 0, 0), + (100013, 1112, 2, 100, 0, 0), + (100013, 1149, 2, 100, 0, 0), + (100015, 1112, 3, 100, 0, 0), + (100015, 1159, 3, 100, 0, 0), + (100016, 1112, 3, 100, 0, 0), + (100016, 1159, 3, 100, 0, 0), + (100017, 1112, 4, 100, 0, 0), + (100017, 1159, 4, 100, 0, 0), + (100017, 1167, 4, 100, 0, 1), + (100021, 1112, 2, 100, 0, 0), + (100021, 1149, 2, 100, 0, 0), + (100022, 1112, 2, 100, 0, 0), + (100022, 1149, 2, 100, 0, 0), + (100024, 1112, 3, 100, 0, 0), + (100024, 1159, 3, 100, 0, 0), + (100025, 1112, 3, 100, 0, 0), + (100025, 1159, 3, 100, 0, 0), + (100026, 1112, 4, 100, 0, 0), + (100026, 1159, 4, 100, 0, 0), + (100026, 1167, 4, 100, 0, 1), + (100030, 1112, 2, 100, 0, 0), + (100030, 1146, 2, 100, 0, 0), + (100030, 1152, 2, 100, 1, 0), + (100033, 1152, 3, 100, 1, 0), + (100033, 1159, 3, 100, 0, 0), + (100034, 1112, 4, 100, 0, 0), + (100034, 1152, 4, 100, 1, 0), + (100034, 1159, 4, 100, 0, 0), + (100034, 1167, 4, 100, 0, 1), + (100037, 1112, 2, 100, 0, 0), + (100037, 1146, 2, 100, 0, 0), + (100040, 1112, 3, 100, 0, 0), + (100040, 1159, 3, 100, 0, 0), + (100041, 1112, 4, 100, 0, 0), + (100041, 1159, 4, 100, 0, 0), + (100041, 1167, 4, 100, 0, 1), + (100044, 1112, 2, 100, 0, 0), + (100044, 1146, 2, 100, 0, 0), + (100047, 1112, 3, 100, 0, 0), + (100047, 1159, 3, 100, 0, 0), + (100048, 1112, 4, 100, 0, 0), + (100048, 1159, 4, 100, 0, 0), + (100048, 1167, 4, 100, 0, 1), + (100051, 1112, 2, 100, 0, 0), + (100051, 1144, 2, 100, 0, 0), + (100053, 1112, 3, 100, 0, 0), + (100053, 1144, 3, 100, 0, 0), + (100053, 1159, 3, 100, 0, 0), + (100054, 1112, 4, 100, 0, 0), + (100054, 1144, 4, 100, 0, 0), + (100054, 1159, 4, 100, 0, 0), + (100054, 1167, 4, 100, 0, 1), + (100057, 1112, 2, 100, 0, 0), + (100057, 1144, 2, 100, 0, 0), + (100059, 1112, 3, 100, 0, 0), + (100059, 1144, 3, 100, 0, 0), + (100059, 1159, 3, 100, 0, 0), + (100060, 1112, 4, 100, 0, 0), + (100060, 1144, 4, 100, 0, 0), + (100060, 1159, 4, 100, 0, 0), + (100060, 1167, 4, 100, 0, 1), + (100063, 1112, 2, 100, 0, 0), + (100063, 1147, 2, 100, 0, 0), + (100065, 1112, 3, 100, 0, 0), + (100065, 1147, 3, 100, 0, 0), + (100065, 1159, 3, 100, 0, 0), + (100066, 1112, 4, 100, 0, 0), + (100066, 1147, 4, 100, 0, 0), + (100066, 1159, 4, 100, 0, 0), + (100066, 1167, 4, 100, 0, 1), + (100069, 1112, 2, 100, 0, 0), + (100069, 1145, 2, 100, 0, 0), + (100071, 1112, 3, 100, 0, 0), + (100071, 1145, 3, 100, 0, 0), + (100071, 1159, 3, 100, 0, 0), + (100072, 1112, 4, 100, 0, 0), + (100072, 1145, 4, 100, 0, 0), + (100072, 1159, 4, 100, 0, 0), + (100072, 1167, 4, 100, 0, 1), + (100075, 1112, 2, 100, 0, 0), + (100075, 1145, 2, 100, 0, 0), + (100077, 1112, 3, 100, 0, 0), + (100077, 1145, 3, 100, 0, 0), + (100077, 1159, 3, 100, 0, 0), + (100078, 1112, 4, 100, 0, 0), + (100078, 1145, 4, 100, 0, 0), + (100078, 1159, 4, 100, 0, 0), + (100078, 1167, 4, 100, 0, 1), + (100081, 1112, 2, 100, 0, 0), + (100081, 1147, 2, 100, 0, 0), + (100083, 1112, 3, 100, 0, 0), + (100083, 1147, 3, 100, 0, 0), + (100083, 1159, 3, 100, 0, 0), + (100084, 1112, 4, 100, 0, 0), + (100084, 1147, 4, 100, 0, 0), + (100084, 1159, 4, 100, 0, 0), + (100084, 1167, 4, 100, 0, 1), + (100087, 1112, 2, 100, 0, 0), + (100087, 1147, 2, 100, 0, 0), + (100089, 1112, 3, 100, 0, 0), + (100089, 1147, 3, 100, 0, 0), + (100089, 1159, 3, 100, 0, 0), + (100090, 1112, 4, 100, 0, 0), + (100090, 1147, 4, 100, 0, 0), + (100090, 1159, 4, 100, 0, 0), + (100090, 1167, 4, 100, 0, 1), + (100173, 1112, 2, 100, 0, 0), + (100173, 1149, 2, 100, 0, 0), + (100174, 1112, 2, 100, 0, 0), + (100174, 1149, 2, 100, 0, 0), + (100175, 1112, 2, 100, 0, 0), + (100175, 1149, 2, 100, 0, 0), + (100176, 1112, 2, 100, 0, 0), + (100176, 1146, 2, 100, 0, 0), + (100176, 1152, 2, 100, 1, 0), + (100177, 1112, 2, 100, 0, 0), + (100177, 1146, 2, 100, 0, 0), + (100178, 1112, 2, 100, 0, 0), + (100178, 1146, 2, 100, 0, 0), + (100179, 1112, 2, 100, 0, 0), + (100179, 1144, 2, 100, 0, 0), + (100180, 1112, 2, 100, 0, 0), + (100180, 1144, 2, 100, 0, 0), + (100181, 1112, 2, 100, 0, 0), + (100181, 1147, 2, 100, 0, 0), + (100182, 1112, 2, 100, 0, 0), + (100182, 1145, 2, 100, 0, 0), + (100183, 1112, 2, 100, 0, 0), + (100183, 1145, 2, 100, 0, 0), + (100184, 1112, 2, 100, 0, 0), + (100184, 1147, 2, 100, 0, 0), + (100185, 1112, 2, 100, 0, 0), + (100185, 1147, 2, 100, 0, 0), + (100209, 1011, 2, 100, 0, 0), + (100223, 1112, 2, 100, 0, 0), + (100223, 1149, 2, 100, 0, 0), + (100224, 1112, 2, 100, 0, 0), + (100224, 1149, 2, 100, 0, 0), + (100225, 1112, 2, 100, 0, 0), + (100225, 1149, 2, 100, 0, 0), + (100226, 1112, 2, 100, 0, 0), + (100226, 1146, 2, 100, 0, 0), + (100226, 1152, 2, 100, 1, 0), + (100227, 1112, 2, 100, 0, 0), + (100227, 1146, 2, 100, 0, 0), + (100228, 1112, 2, 100, 0, 0), + (100228, 1146, 2, 100, 0, 0), + (100229, 1112, 2, 100, 0, 0), + (100229, 1144, 2, 100, 0, 0), + (100230, 1112, 2, 100, 0, 0), + (100230, 1144, 2, 100, 0, 0), + (100231, 1112, 2, 100, 0, 0), + (100231, 1147, 2, 100, 0, 0), + (100232, 1112, 2, 100, 0, 0), + (100232, 1145, 2, 100, 0, 0), + (100233, 1112, 2, 100, 0, 0), + (100233, 1145, 2, 100, 0, 0), + (100234, 1112, 2, 100, 0, 0), + (100234, 1147, 2, 100, 0, 0), + (100235, 1112, 2, 100, 0, 0), + (100235, 1147, 2, 100, 0, 0), + (100236, 1011, 3, 100, 0, 0), + (100236, 1012, 3, 100, 0, 0), + (100237, 1011, 3, 100, 0, 0), + (100237, 1012, 3, 100, 0, 0), + (100238, 1011, 3, 100, 0, 0), + (100238, 1012, 3, 100, 0, 0), + (100239, 1011, 3, 100, 0, 0), + (100239, 1012, 3, 100, 0, 0), + (100240, 1011, 3, 100, 0, 0), + (100240, 1012, 3, 100, 0, 0), + (100241, 1011, 3, 100, 0, 0), + (100241, 1012, 3, 100, 0, 0), + (100242, 1011, 3, 100, 0, 0), + (100242, 1012, 3, 100, 0, 0), + (100243, 1011, 3, 100, 0, 0), + (100243, 1012, 3, 100, 0, 0), + (100244, 1011, 3, 100, 0, 0), + (100244, 1012, 3, 100, 0, 0), + (100245, 1011, 3, 100, 0, 0), + (100245, 1012, 3, 100, 0, 0), + (100246, 1011, 3, 100, 0, 0), + (100246, 1012, 3, 100, 0, 0), + (100247, 1011, 3, 100, 0, 0), + (100247, 1012, 3, 100, 0, 0), + (100248, 1011, 3, 100, 0, 0), + (100248, 1012, 3, 100, 0, 0), + (100249, 1112, 3, 100, 0, 0), + (100249, 1159, 3, 100, 0, 0), + (100250, 1112, 3, 100, 0, 0), + (100250, 1159, 3, 100, 0, 0), + (100251, 1112, 3, 100, 0, 0), + (100251, 1159, 3, 100, 0, 0), + (100252, 1011, 3, 100, 0, 0), + (100252, 1012, 3, 100, 0, 0), + (100253, 1011, 3, 100, 0, 0), + (100253, 1012, 3, 100, 0, 0), + (100254, 1011, 3, 100, 0, 0), + (100254, 1012, 3, 100, 0, 0), + (100255, 1011, 3, 100, 0, 0), + (100255, 1012, 3, 100, 0, 0), + (100256, 1011, 3, 100, 0, 0), + (100256, 1012, 3, 100, 0, 0), + (100257, 1011, 3, 100, 0, 0), + (100257, 1012, 3, 100, 0, 0), + (100258, 1011, 3, 100, 0, 0), + (100258, 1012, 3, 100, 0, 0), + (100259, 1011, 3, 100, 0, 0), + (100259, 1012, 3, 100, 0, 0), + (100260, 1011, 3, 100, 0, 0), + (100260, 1012, 3, 100, 0, 0), + (100261, 1011, 3, 100, 0, 0), + (100261, 1012, 3, 100, 0, 0), + (100262, 1112, 3, 100, 0, 0), + (100262, 1159, 3, 100, 0, 0), + (100263, 1112, 3, 100, 0, 0), + (100263, 1159, 3, 100, 0, 0), + (100264, 1112, 3, 100, 0, 0), + (100264, 1159, 3, 100, 0, 0), + (100265, 1112, 3, 100, 0, 0), + (100265, 1152, 3, 100, 1, 0), + (100265, 1159, 3, 100, 0, 0), + (100266, 1112, 3, 100, 0, 0), + (100266, 1159, 3, 100, 0, 0), + (100267, 1112, 3, 100, 0, 0), + (100267, 1159, 3, 100, 0, 0), + (100268, 1112, 3, 100, 0, 0), + (100268, 1144, 3, 100, 0, 0), + (100268, 1159, 3, 100, 0, 0), + (100269, 1112, 3, 100, 0, 0), + (100269, 1144, 3, 100, 0, 0), + (100269, 1159, 3, 100, 0, 0), + (100270, 1112, 3, 100, 0, 0), + (100270, 1147, 3, 100, 0, 0), + (100270, 1159, 3, 100, 0, 0), + (100271, 1112, 3, 100, 0, 0), + (100271, 1145, 3, 100, 0, 0), + (100271, 1159, 3, 100, 0, 0), + (100272, 1112, 3, 100, 0, 0), + (100272, 1145, 3, 100, 0, 0), + (100272, 1159, 3, 100, 0, 0), + (100273, 1112, 3, 100, 0, 0), + (100273, 1147, 3, 100, 0, 0), + (100273, 1159, 3, 100, 0, 0), + (100274, 1112, 3, 100, 0, 0), + (100274, 1147, 3, 100, 0, 0), + (100274, 1159, 3, 100, 0, 0), + (100275, 1112, 4, 100, 0, 0), + (100275, 1159, 4, 100, 0, 0), + (100275, 1167, 4, 100, 0, 1), + (100276, 1112, 4, 100, 0, 0), + (100276, 1159, 4, 100, 0, 0), + (100276, 1167, 4, 100, 0, 1), + (100277, 1112, 4, 100, 0, 0), + (100277, 1159, 4, 100, 0, 0), + (100277, 1167, 4, 100, 0, 1), + (100278, 1112, 4, 100, 0, 0), + (100278, 1152, 4, 100, 1, 0), + (100278, 1159, 4, 100, 0, 0), + (100278, 1167, 4, 100, 0, 1), + (100280, 1112, 4, 100, 0, 0), + (100280, 1159, 4, 100, 0, 0), + (100280, 1167, 4, 100, 0, 1), + (100282, 1112, 4, 100, 0, 0), + (100282, 1144, 4, 100, 0, 0), + (100282, 1159, 4, 100, 0, 0), + (100282, 1167, 4, 100, 0, 1), + (100284, 1112, 4, 100, 0, 0), + (100284, 1145, 4, 100, 0, 0), + (100284, 1159, 4, 100, 0, 0), + (100284, 1167, 4, 100, 0, 1), + (100285, 1112, 4, 100, 0, 0), + (100285, 1145, 4, 100, 0, 0), + (100285, 1159, 4, 100, 0, 0), + (100285, 1167, 4, 100, 0, 1), + (100286, 1112, 4, 100, 0, 0), + (100286, 1147, 4, 100, 0, 0), + (100286, 1159, 4, 100, 0, 0), + (100286, 1167, 4, 100, 0, 1), + (100336, 1011, 3, 100, 0, 0), + (100336, 1012, 3, 100, 0, 0), + (100337, 1011, 3, 100, 0, 0), + (100337, 1012, 3, 100, 0, 0), + (100338, 1011, 3, 100, 0, 0), + (100338, 1012, 3, 100, 0, 0), + (100339, 1112, 2, 100, 0, 0), + (100339, 1149, 2, 100, 0, 0), + (100340, 1112, 2, 100, 0, 0), + (100340, 1149, 2, 100, 0, 0), + (100341, 1112, 2, 100, 0, 0), + (100341, 1149, 2, 100, 0, 0), + (100342, 1112, 2, 100, 0, 0), + (100342, 1146, 2, 100, 0, 0), + (100342, 1152, 2, 100, 1, 0), + (100343, 1112, 2, 100, 0, 0), + (100343, 1146, 2, 100, 0, 0), + (100344, 1112, 2, 100, 0, 0), + (100344, 1146, 2, 100, 0, 0), + (100345, 1112, 2, 100, 0, 0), + (100345, 1144, 2, 100, 0, 0), + (100346, 1112, 2, 100, 0, 0), + (100346, 1144, 2, 100, 0, 0), + (100347, 1112, 2, 100, 0, 0), + (100347, 1147, 2, 100, 0, 0), + (100348, 1112, 2, 100, 0, 0), + (100348, 1145, 2, 100, 0, 0), + (100349, 1112, 2, 100, 0, 0), + (100349, 1145, 2, 100, 0, 0), + (100350, 1112, 2, 100, 0, 0), + (100350, 1147, 2, 100, 0, 0), + (100351, 1112, 2, 100, 0, 0), + (100351, 1147, 2, 100, 0, 0), + (100407, 1112, 4, 100, 0, 0), + (100407, 1143, 4, 100, 0, 0), + (100407, 1160, 4, 100, 0, 0), + (100407, 1167, 4, 100, 0, 1), + (100411, 1112, 2, 100, 0, 0), + (100411, 1146, 2, 100, 0, 0), + (100411, 1152, 2, 100, 1, 0), + (100412, 1112, 2, 100, 0, 0), + (100412, 1146, 2, 100, 0, 0), + (100413, 1112, 2, 100, 0, 0), + (100413, 1146, 2, 100, 0, 0), + (100414, 1112, 2, 100, 0, 0), + (100415, 1112, 2, 100, 0, 0), + (100416, 1112, 2, 100, 0, 0), + (100417, 1112, 2, 100, 0, 0), + (100418, 1112, 3, 100, 0, 0), + (100418, 1149, 3, 100, 0, 0), + (100418, 1160, 3, 100, 0, 0), + (100419, 1112, 3, 100, 0, 0), + (100419, 1160, 3, 100, 0, 0), + (100420, 1112, 3, 100, 0, 0), + (100420, 1144, 3, 100, 0, 0), + (100421, 1147, 3, 100, 0, 0), + (100421, 1160, 3, 100, 0, 0), + (100422, 1112, 3, 100, 0, 0), + (100422, 1144, 3, 100, 0, 0), + (100422, 1160, 3, 100, 0, 0), + (100423, 1112, 3, 100, 0, 0), + (100423, 1160, 3, 100, 0, 0), + (100424, 1112, 3, 100, 0, 0), + (100424, 1143, 3, 100, 0, 0), + (100424, 1160, 3, 100, 0, 0), + (100425, 1112, 3, 100, 0, 0), + (100425, 1160, 3, 100, 0, 0), + (100426, 1112, 3, 100, 0, 0), + (100426, 1147, 3, 100, 0, 0), + (100426, 1160, 3, 100, 0, 0), + (100427, 1112, 3, 100, 0, 0), + (100427, 1160, 3, 100, 0, 0), + (100428, 1112, 3, 100, 0, 0), + (100428, 1160, 3, 100, 0, 0), + (100429, 1112, 3, 100, 0, 0), + (100429, 1160, 3, 100, 0, 0), + (100430, 1112, 3, 100, 0, 0), + (100430, 1160, 3, 100, 0, 0), + (100431, 1112, 4, 100, 0, 0), + (100431, 1143, 4, 100, 0, 0), + (100431, 1160, 4, 100, 0, 0), + (100431, 1167, 4, 100, 0, 1), + (100432, 1112, 4, 100, 0, 0), + (100432, 1143, 4, 100, 0, 0), + (100432, 1160, 4, 100, 0, 0), + (100432, 1167, 4, 100, 0, 1), + (100433, 1112, 4, 100, 0, 0), + (100433, 1160, 4, 100, 0, 0), + (100433, 1167, 4, 100, 0, 1), + (100434, 1112, 4, 100, 0, 0), + (100434, 1144, 4, 100, 0, 0), + (100434, 1160, 4, 100, 0, 0), + (100434, 1167, 4, 100, 0, 1), + (100435, 1112, 4, 100, 0, 0), + (100435, 1123, 4, 100, 0, 0), + (100435, 1147, 4, 100, 0, 0), + (100435, 1154, 4, 100, 0, 0), + (100435, 1160, 4, 100, 0, 0), + (100435, 1167, 4, 100, 0, 1), + (100436, 1112, 4, 100, 0, 0), + (100436, 1160, 4, 100, 0, 0), + (100436, 1167, 4, 100, 0, 1), + (100437, 1112, 4, 100, 0, 0), + (100437, 1160, 4, 100, 0, 0), + (100437, 1167, 4, 100, 0, 1), + (100438, 1112, 4, 100, 0, 0), + (100438, 1147, 4, 100, 0, 0), + (100438, 1160, 4, 100, 0, 0), + (100438, 1167, 4, 100, 0, 1), + (100439, 1112, 4, 100, 0, 0), + (100439, 1146, 4, 100, 0, 0), + (100439, 1152, 4, 100, 1, 0), + (100439, 1160, 4, 100, 0, 0), + (100439, 1167, 4, 100, 0, 1), + (100440, 1011, 2, 100, 0, 0), + (100441, 1011, 2, 100, 0, 0), + (100445, 1112, 2, 100, 0, 0), + (100445, 1143, 2, 100, 0, 0), + (100447, 1112, 2, 100, 0, 0), + (100447, 1143, 2, 100, 0, 0), + (100449, 1112, 2, 100, 0, 0), + (100449, 1143, 2, 100, 0, 0), + (100454, 1011, 4, 100, 0, 0), + (100606, 1112, 3, 100, 0, 0), + (100607, 1112, 3, 100, 0, 0), + (100608, 1112, 3, 100, 0, 0), + (100608, 1143, 3, 100, 0, 0), + (100608, 1160, 3, 100, 0, 0), + (100609, 1112, 3, 100, 0, 0), + (100609, 1143, 3, 100, 0, 0), + (100609, 1160, 3, 100, 0, 0), + (100610, 1112, 3, 100, 0, 0), + (100610, 1143, 3, 100, 0, 0), + (100610, 1160, 3, 100, 0, 0), + (100634, 1011, 3, 100, 0, 0), + (100634, 1012, 3, 100, 0, 0), + (100636, 1011, 3, 100, 0, 0), + (100636, 1012, 3, 100, 0, 0), + (100637, 1011, 3, 100, 0, 0), + (100637, 1012, 3, 100, 0, 0), + (100638, 1011, 3, 100, 0, 0), + (100638, 1012, 3, 100, 0, 0), + (100639, 1011, 3, 100, 0, 0), + (100639, 1012, 3, 100, 0, 0), + (100640, 1011, 3, 100, 0, 0), + (100640, 1012, 3, 100, 0, 0), + (100641, 1011, 3, 100, 0, 0), + (100641, 1012, 3, 100, 0, 0), + (100642, 1011, 3, 100, 0, 0), + (100642, 1012, 3, 100, 0, 0), + (100643, 1011, 3, 100, 0, 0), + (100643, 1012, 3, 100, 0, 0), + (100644, 1011, 3, 100, 0, 0), + (100644, 1012, 3, 100, 0, 0), + (100645, 1011, 3, 100, 0, 0), + (100645, 1012, 3, 100, 0, 0), + (100646, 1011, 3, 100, 0, 0), + (100646, 1012, 3, 100, 0, 0), + (100647, 1112, 2, 100, 0, 0), + (100648, 1112, 2, 100, 0, 0), + (100649, 1112, 2, 100, 0, 0), + (100650, 1011, 2, 100, 0, 0), + (100651, 1011, 2, 100, 0, 0), + (100652, 1011, 2, 100, 0, 0), + (100653, 1112, 2, 100, 0, 0), + (100653, 1143, 2, 100, 0, 0), + (100654, 1112, 2, 100, 0, 0), + (100654, 1143, 2, 100, 0, 0), + (100655, 1112, 2, 100, 0, 0), + (100655, 1143, 2, 100, 0, 0), + (100662, 1112, 2, 100, 0, 0), + (100665, 1011, 3, 100, 0, 0), + (100665, 1012, 3, 100, 0, 0), + (100666, 1011, 3, 100, 0, 0), + (100666, 1012, 3, 100, 0, 0), + (100667, 1011, 3, 100, 0, 0), + (100667, 1012, 3, 100, 0, 0), + (100692, 1112, 2, 100, 0, 0), + (100692, 1149, 2, 100, 0, 0), + (100693, 1112, 2, 100, 0, 0), + (100693, 1149, 2, 100, 0, 0), + (100694, 1112, 2, 100, 0, 0), + (100694, 1149, 2, 100, 0, 0), + (100701, 1112, 2, 100, 0, 0), + (100701, 1146, 2, 100, 0, 0), + (100701, 1152, 2, 100, 1, 0), + (100702, 1011, 2, 100, 0, 0), + (100703, 1011, 2, 100, 0, 0), + (100711, 1112, 3, 100, 0, 0), + (100711, 1161, 3, 100, 0, 0), + (100712, 1112, 3, 100, 0, 0), + (100712, 1161, 3, 100, 0, 0), + (100725, 1112, 4, 100, 0, 0), + (100725, 1146, 4, 100, 0, 0), + (100725, 1161, 4, 100, 0, 0), + (100725, 1167, 4, 100, 0, 1), + (100726, 1112, 4, 100, 0, 0), + (100726, 1161, 4, 100, 0, 0), + (100726, 1167, 4, 100, 0, 1), + (100755, 1112, 2, 100, 0, 0), + (100756, 1112, 2, 100, 0, 0), + (100757, 1112, 3, 100, 0, 0), + (100757, 1160, 3, 100, 0, 0), + (100758, 1112, 3, 100, 0, 0), + (100758, 1160, 3, 100, 0, 0), + (100759, 1112, 3, 100, 0, 0), + (100759, 1160, 3, 100, 0, 0), + (100760, 1112, 4, 100, 0, 0), + (100760, 1149, 4, 100, 0, 0), + (100760, 1160, 4, 100, 0, 0), + (100760, 1167, 4, 100, 0, 1), + (100761, 1112, 4, 100, 0, 0), + (100761, 1160, 4, 100, 0, 0), + (100761, 1167, 4, 100, 0, 1), + (100762, 1112, 3, 100, 0, 0), + (100762, 1160, 3, 100, 0, 0), + (100763, 1112, 3, 100, 0, 0), + (100763, 1160, 3, 100, 0, 0), + (100764, 1112, 3, 100, 0, 0), + (100764, 1160, 3, 100, 0, 0), + (100765, 1112, 3, 100, 0, 0), + (100765, 1160, 3, 100, 0, 0), + (100766, 1112, 3, 100, 0, 0), + (100766, 1146, 3, 100, 0, 0), + (100766, 1160, 3, 100, 0, 0), + (100767, 1112, 4, 100, 0, 0), + (100767, 1160, 4, 100, 0, 0), + (100767, 1167, 4, 100, 0, 1), + (100768, 1112, 4, 100, 0, 0), + (100768, 1160, 4, 100, 0, 0), + (100768, 1167, 4, 100, 0, 1), + (100771, 1112, 2, 100, 0, 0), + (100772, 1011, 3, 100, 0, 0), + (100772, 1012, 3, 100, 0, 0), + (100777, 1112, 3, 100, 0, 0), + (100777, 1146, 3, 100, 0, 0), + (100777, 1152, 3, 100, 1, 0), + (100777, 1160, 3, 100, 0, 0), + (100778, 1112, 3, 100, 0, 0), + (100778, 1160, 3, 100, 0, 0), + (100779, 1112, 4, 100, 0, 0), + (100779, 1154, 4, 100, 0, 0), + (100779, 1160, 4, 100, 0, 0), + (100779, 1167, 4, 100, 0, 1), + (100780, 1112, 4, 100, 0, 0), + (100780, 1149, 4, 100, 0, 0), + (100780, 1160, 4, 100, 0, 0), + (100780, 1167, 4, 100, 0, 1), + (100783, 1112, 3, 100, 0, 0), + (100783, 1160, 3, 100, 0, 0), + (100784, 1112, 4, 100, 0, 0), + (100784, 1160, 4, 100, 0, 0), + (100784, 1167, 4, 100, 0, 1), + (100785, 1112, 3, 100, 0, 0), + (100785, 1149, 3, 100, 0, 0), + (100785, 1151, 3, 100, 0, 0), + (100785, 1161, 3, 100, 0, 0), + (100786, 1112, 3, 100, 0, 0), + (100786, 1149, 3, 100, 0, 0), + (100786, 1151, 3, 100, 0, 0), + (100786, 1161, 3, 100, 0, 0), + (100787, 1112, 4, 100, 0, 0), + (100787, 1151, 4, 100, 0, 0), + (100787, 1161, 4, 100, 0, 0), + (100787, 1167, 4, 100, 0, 1), + (100805, 1112, 3, 100, 0, 0), + (100805, 1160, 3, 100, 0, 0), + (100842, 1112, 3, 100, 0, 0), + (100980, 1011, 4, 100, 0, 0), + (100982, 1112, 4, 100, 0, 0), + (100982, 1161, 4, 100, 0, 0), + (100982, 1167, 4, 100, 0, 1), + (100983, 1112, 4, 100, 0, 0), + (100983, 1161, 4, 100, 0, 0), + (100983, 1167, 4, 100, 0, 1), + (100984, 1137, 4, 100, 1, 0), + (100984, 1146, 4, 100, 0, 0), + (100984, 1167, 4, 100, 0, 1), + (100985, 1112, 4, 100, 0, 0), + (100985, 1161, 4, 100, 0, 0), + (100985, 1167, 4, 100, 0, 1), + (100986, 1137, 4, 100, 1, 0), + (100986, 1167, 4, 100, 0, 1), + (100987, 1112, 4, 100, 0, 0), + (100987, 1149, 4, 100, 0, 0), + (100987, 1154, 4, 100, 0, 0), + (100987, 1161, 4, 100, 0, 0), + (100987, 1167, 4, 100, 0, 1), + (100988, 1112, 4, 100, 0, 0), + (100988, 1154, 4, 100, 0, 0), + (100988, 1161, 4, 100, 0, 0), + (100988, 1167, 4, 100, 0, 1), + (100989, 1112, 4, 100, 0, 0), + (100989, 1123, 4, 100, 0, 0), + (100989, 1146, 4, 100, 0, 0), + (100989, 1152, 4, 100, 1, 0), + (100989, 1161, 4, 100, 0, 0), + (100989, 1167, 4, 100, 0, 1), + (100996, 1112, 3, 100, 0, 0), + (100996, 1161, 3, 100, 0, 0), + (100997, 1137, 3, 100, 1, 0), + (100998, 1137, 3, 100, 1, 0), + (100999, 1112, 3, 100, 0, 0), + (100999, 1161, 3, 100, 0, 0), + (101000, 1112, 3, 100, 0, 0), + (101000, 1161, 3, 100, 0, 0), + (101001, 1137, 3, 100, 1, 0), + (101002, 1137, 3, 100, 1, 0), + (101002, 1146, 3, 100, 0, 0), + (101003, 1112, 3, 100, 0, 0), + (101003, 1161, 3, 100, 0, 0), + (101004, 1112, 3, 100, 0, 0), + (101004, 1161, 3, 100, 0, 0), + (101005, 1112, 3, 100, 0, 0), + (101005, 1149, 3, 100, 0, 0), + (101005, 1161, 3, 100, 0, 0), + (101020, 1112, 2, 100, 0, 0), + (101020, 1149, 2, 100, 0, 0), + (101021, 1112, 2, 100, 0, 0), + (101021, 1146, 2, 100, 0, 0), + (101021, 1152, 2, 100, 1, 0), + (101022, 1112, 2, 100, 0, 0), + (101023, 1112, 2, 100, 0, 0), + (101023, 1146, 2, 100, 0, 0), + (101024, 1112, 2, 100, 0, 0), + (101024, 1146, 2, 100, 0, 0), + (101025, 1112, 2, 100, 0, 0), + (101025, 1149, 2, 100, 0, 0), + (101026, 1112, 2, 100, 0, 0), + (101293, 1112, 4, 100, 0, 0), + (101293, 1123, 4, 100, 0, 0), + (101293, 1137, 4, 100, 1, 0), + (101293, 1154, 4, 100, 0, 0), + (101293, 1161, 4, 100, 0, 0), + (101293, 1167, 4, 100, 0, 1), + (101294, 1112, 4, 100, 0, 0), + (101294, 1161, 4, 100, 0, 0), + (101294, 1167, 4, 100, 0, 1), + (101295, 1112, 4, 100, 0, 0), + (101295, 1123, 4, 100, 0, 0), + (101295, 1149, 4, 100, 0, 0), + (101295, 1161, 4, 100, 0, 0), + (101295, 1167, 4, 100, 0, 1), + (101296, 1112, 4, 100, 0, 0), + (101296, 1149, 4, 100, 0, 0), + (101296, 1151, 4, 100, 0, 0), + (101296, 1154, 4, 100, 0, 0), + (101296, 1161, 4, 100, 0, 0), + (101296, 1167, 4, 100, 0, 1), + (101297, 1137, 4, 100, 1, 0), + (101297, 1167, 4, 100, 0, 1), + (101298, 1112, 3, 100, 0, 0), + (101298, 1146, 3, 100, 0, 0), + (101298, 1161, 3, 100, 0, 0), + (101299, 1112, 3, 100, 0, 0), + (101299, 1161, 3, 100, 0, 0), + (101300, 1112, 3, 100, 0, 0), + (101300, 1151, 3, 100, 0, 0), + (101300, 1161, 3, 100, 0, 0), + (101301, 1137, 3, 100, 1, 0), + (101301, 1146, 3, 100, 0, 0), + (101301, 1152, 3, 100, 1, 0), + (101315, 1146, 2, 100, 0, 0), + (101315, 1151, 2, 100, 0, 0), + (101316, 1151, 2, 100, 0, 0), + (101320, 1112, 4, 100, 0, 0), + (101320, 1146, 4, 100, 0, 0), + (101320, 1161, 4, 100, 0, 0), + (101320, 1167, 4, 100, 0, 1), + (101321, 1112, 3, 100, 0, 0), + (101321, 1161, 3, 100, 0, 0), + (101553, 1011, 4, 100, 0, 0), + (101566, 1112, 3, 100, 0, 0), + (101566, 1135, 3, 100, 1, 0), + (101566, 1148, 3, 100, 0, 0), + (101566, 1162, 3, 100, 0, 0), + (101567, 1112, 4, 100, 0, 0), + (101567, 1135, 4, 100, 1, 0), + (101567, 1148, 4, 100, 0, 0), + (101567, 1151, 4, 100, 0, 0), + (101567, 1162, 4, 100, 0, 0), + (101567, 1167, 4, 100, 0, 1), + (101589, 1011, 2, 100, 0, 0), + (101592, 1112, 4, 100, 0, 0), + (101592, 1135, 4, 100, 1, 0), + (101592, 1149, 4, 100, 0, 0), + (101592, 1154, 4, 100, 0, 0), + (101592, 1162, 4, 100, 0, 0), + (101592, 1167, 4, 100, 0, 1), + (101593, 1137, 4, 100, 1, 0), + (101593, 1167, 4, 100, 0, 1), + (101594, 1112, 4, 100, 0, 0), + (101594, 1123, 4, 100, 0, 0), + (101594, 1135, 4, 100, 1, 0), + (101594, 1154, 4, 100, 0, 0), + (101594, 1162, 4, 100, 0, 0), + (101594, 1167, 4, 100, 0, 1), + (101595, 1112, 4, 100, 0, 0), + (101595, 1123, 4, 100, 0, 0), + (101595, 1128, 4, 100, 1, 0), + (101595, 1135, 4, 100, 1, 0), + (101595, 1167, 4, 100, 0, 1), + (101596, 1112, 4, 100, 0, 0), + (101596, 1138, 4, 100, 1, 0), + (101596, 1146, 4, 100, 0, 0), + (101596, 1154, 4, 100, 0, 0), + (101596, 1156, 4, 100, 1, 0), + (101596, 1162, 4, 100, 0, 0), + (101596, 1167, 4, 100, 0, 1), + (101597, 1112, 4, 100, 0, 0), + (101597, 1139, 4, 100, 1, 0), + (101597, 1156, 4, 100, 1, 0), + (101597, 1162, 4, 100, 0, 0), + (101597, 1167, 4, 100, 0, 1), + (101598, 1137, 4, 100, 1, 0), + (101598, 1148, 4, 100, 0, 0), + (101599, 1112, 4, 100, 0, 0), + (101599, 1140, 4, 100, 1, 0), + (101599, 1156, 4, 100, 1, 0), + (101599, 1162, 4, 100, 0, 0), + (101599, 1167, 4, 100, 0, 1), + (101600, 1112, 4, 100, 0, 0), + (101600, 1141, 4, 100, 1, 0), + (101600, 1156, 4, 100, 1, 0), + (101600, 1162, 4, 100, 0, 0), + (101600, 1167, 4, 100, 0, 1), + (101601, 1137, 3, 100, 1, 0), + (101602, 1112, 3, 100, 0, 0), + (101602, 1135, 3, 100, 1, 0), + (101602, 1149, 3, 100, 0, 0), + (101602, 1162, 3, 100, 0, 0), + (101603, 1112, 3, 100, 0, 0), + (101603, 1128, 3, 100, 1, 0), + (101603, 1135, 3, 100, 1, 0), + (101603, 1146, 3, 100, 0, 0), + (101603, 1162, 3, 100, 0, 0), + (101604, 1112, 3, 100, 0, 0), + (101604, 1138, 3, 100, 1, 0), + (101604, 1149, 3, 100, 0, 0), + (101604, 1156, 3, 100, 1, 0), + (101604, 1162, 3, 100, 0, 0), + (101605, 1112, 3, 100, 0, 0), + (101605, 1139, 3, 100, 1, 0), + (101605, 1156, 3, 100, 1, 0), + (101605, 1162, 3, 100, 0, 0), + (101606, 1137, 3, 100, 1, 0), + (101606, 1167, 3, 100, 0, 1), + (101607, 1112, 3, 100, 0, 0), + (101607, 1140, 3, 100, 1, 0), + (101607, 1156, 3, 100, 1, 0), + (101607, 1162, 3, 100, 0, 0), + (101608, 1112, 3, 100, 0, 0), + (101608, 1141, 3, 100, 1, 0), + (101608, 1156, 3, 100, 1, 0), + (101608, 1162, 3, 100, 0, 0), + (101619, 1112, 2, 100, 0, 0), + (101619, 1135, 2, 100, 1, 0), + (101619, 1148, 2, 100, 0, 0), + (101620, 1011, 2, 100, 0, 0), + (101627, 1011, 4, 100, 0, 0); \ No newline at end of file