diff --git a/.gitignore b/.gitignore index 70e1a6afe9..0e3d07e468 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,10 @@ /tools/MapleIdRetriever/dist/ /tools/MapleIdRetriever/nbproject/private/ +/tools/MapleMapInfoRetriever/build/ +/tools/MapleMapInfoRetriever/dist/ +/tools/MapleMapInfoRetriever/nbproject/private/ + /tools/MapleMesoFetcher/build/ /tools/MapleMesoFetcher/dist/ /tools/MapleMesoFetcher/nbproject/private/ @@ -31,6 +35,10 @@ /tools/MapleSkillMakerFetcher/dist/ /tools/MapleSkillMakerFetcher/nbproject/private/ +/tools/MapleSkillMakerReagentIndexer/build/ +/tools/MapleSkillMakerReagentIndexer/dist/ +/tools/MapleSkillMakerReagentIndexer/nbproject/private/ + /tools/MobBookIndexer/build/ /tools/MobBookIndexer/dist/ /tools/MobBookIndexer/nbproject/private/ @@ -38,7 +46,3 @@ /tools/MobBookUpdate/build/ /tools/MobBookUpdate/dist/ /tools/MobBookUpdate/nbproject/private/ - -/tools/MapleMapInfoRetriever/build/ -/tools/MapleMapInfoRetriever/dist/ -/tools/MapleMapInfoRetriever/nbproject/private/ diff --git a/dist/MapleSolaxia.jar b/dist/MapleSolaxia.jar index 488d5d75af..8397b7973c 100644 Binary files a/dist/MapleSolaxia.jar and b/dist/MapleSolaxia.jar differ diff --git a/docs/feature_list.txt b/docs/feature_list.txt index 3645f6b153..1bf5265e14 100644 --- a/docs/feature_list.txt +++ b/docs/feature_list.txt @@ -27,6 +27,10 @@ PQs: * BalrogPQ semi-functional. * Capt. Latanica remade as an event (parties can now fight the boss). +Skills: +* Maker skill features properly developed. +* Server is using heurisitics to calculate fee costs for the Maker (errors sums up to 8k mesos, reagent errors stacks up comformant with it's level). + Quests: * Doll house quest functional. * Quests can now reward properly items when matching a reward item with the player's job. diff --git a/docs/mychanges_ptbr.txt b/docs/mychanges_ptbr.txt index a16cad5301..2802aa79e5 100644 --- a/docs/mychanges_ptbr.txt +++ b/docs/mychanges_ptbr.txt @@ -685,4 +685,11 @@ Corrigido bug no ThreadTracker n 18 - 20 Novembro 2017, Implementado items sendo dropados de reatores intervaladamente, GMS-like. Adicionado informação ao jogador que tentar completar uma quest com item necessário equipado. -Nova ferramenta: MapleMapInfoRetriever. Detecção básica de mapas com sem nó de info em sua estrutura WZ. \ No newline at end of file +Nova ferramenta: MapleMapInfoRetriever. Detecção básica de mapas com sem nó de info em sua estrutura WZ. +Adicionado scripts para Power B. Fore npc. + +21 - 23 Novembro 2017, +Implementado Maker skill (métodos de packets pelo menos já existiam). +Corrigido bug em MapleSkillMakerFetcher, atualizado DB com as tabelas normalizadas. +Nova ferramenta: MapleSkillMakerReagentIndexer. Agrupa no banco de dados informação pertinente aos reagentes do Maker, para serem usados pelo server. +Quests nivelando/utilizando o Maker funcionam corretamente agora. \ No newline at end of file diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml index 3287222d26..315661112b 100644 --- a/nbproject/private/private.xml +++ b/nbproject/private/private.xml @@ -2,6 +2,9 @@ - + + file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/constants/ServerConstants.java + file:/C:/Nexon/MapleSolaxia/MapleSolaxiaV2/src/server/MakerItemFactory.java + diff --git a/scripts/npc/1012118.js b/scripts/npc/1012118.js index 0be137b223..38386a879f 100644 --- a/scripts/npc/1012118.js +++ b/scripts/npc/1012118.js @@ -3,9 +3,13 @@ var map = 910060000; var num = 5; var maxp = 5; +function start() { + action(1, 0, 0); +} + function action(mode, type, selection) { if (mode == 1) { - status++; + status++; } else { if (status <= 1) { cm.dispose(); @@ -14,10 +18,17 @@ function action(mode, type, selection) { status--; } if (status == 0) { - if (cm.isQuestStarted(22515) || cm.isQuestStarted(22516) || cm.isQuestStarted(22517) || cm.isQuestStarted(22518)) { + if(cm.getLevel() >= 20) { + cm.sendOk("This training ground is available only for those under level 20."); + cm.dispose(); + return; + } + + if (cm.isQuestActive(22515) || cm.isQuestActive(22516) || cm.isQuestActive(22517) || cm.isQuestActive(22518)) { cm.sendYesNo("Would you like to go in the special Spore Training Center?"); status = 1; } + var selStr = "Would you like to go into the Training Center?"; for (var i = 0; i < num; i++) { selStr += "\r\n#b#L" + i + "#Training Center " + i + " (" + cm.getPlayerCount(map + i) + "/" + maxp + ")#l#k"; @@ -34,7 +45,7 @@ function action(mode, type, selection) { cm.dispose(); } } else if (status == 2) { - cm.warp(910060100,0); - cm.dispose(); + cm.warp(910060100,0); + cm.dispose(); } } \ No newline at end of file diff --git a/scripts/npc/1012119.js b/scripts/npc/1012119.js index 0a06d9baed..8713b46c25 100644 --- a/scripts/npc/1012119.js +++ b/scripts/npc/1012119.js @@ -3,6 +3,10 @@ var map = 910060000; var num = 5; var maxp = 5; +function start() { + action(1, 0, 0); +} + function action(mode, type, selection) { if (mode == 1) { status++; @@ -14,10 +18,17 @@ function action(mode, type, selection) { status--; } if (status == 0) { - if (cm.isQuestStarted(22515) || cm.isQuestStarted(22516) || cm.isQuestStarted(22517) || cm.isQuestStarted(22518)) { + if(cm.getLevel() >= 20) { + cm.sendOk("This training ground is available only for those under level 20."); + cm.dispose(); + return; + } + + if (cm.isQuestActive(22515) || cm.isQuestActive(22516) || cm.isQuestActive(22517) || cm.isQuestActive(22518)) { cm.sendYesNo("Would you like to go in the special Spore Training Center?"); status = 1; } + var selStr = "Would you like to go into the Training Center?"; for (var i = 0; i < num; i++) { selStr += "\r\n#b#L" + i + "#Training Center " + i + " (" + cm.getPlayerCount(map + i) + "/" + maxp + ")#l#k"; diff --git a/scripts/npc/1022104.js b/scripts/npc/1022104.js new file mode 100644 index 0000000000..7b6a0c1ad4 --- /dev/null +++ b/scripts/npc/1022104.js @@ -0,0 +1,43 @@ +var status = -1; +var map = 910220000; +var num = 5; +var maxp = 5; + +function start() { + action(1, 0, 0); +} + +function action(mode, type, selection) { + if (mode == 1) { + status++; + } else { + if (status <= 1) { + cm.dispose(); + return; + } + status--; + } + if (status == 0) { + if(cm.getLevel() >= 20) { + cm.sendOk("This training ground is available only for those under level 20."); + cm.dispose(); + return; + } + + var selStr = "Would you like to go into the Training Center?"; + for (var i = 0; i < num; i++) { + selStr += "\r\n#b#L" + i + "#Training Center " + i + " (" + cm.getPlayerCount(map + i) + "/" + maxp + ")#l#k"; + } + cm.sendSimple(selStr); + } else if (status == 1) { + if (selection < 0 || selection >= num) { + cm.dispose(); + } else if (cm.getPlayerCount(map + selection) >= maxp) { + cm.sendNext("This training center is full."); + status = -1; + } else { + cm.warp(map + selection, 0); + cm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/npc/1022105.js b/scripts/npc/1022105.js index 9fe941cea6..7b6a0c1ad4 100644 --- a/scripts/npc/1022105.js +++ b/scripts/npc/1022105.js @@ -3,6 +3,10 @@ var map = 910220000; var num = 5; var maxp = 5; +function start() { + action(1, 0, 0); +} + function action(mode, type, selection) { if (mode == 1) { status++; @@ -14,6 +18,12 @@ function action(mode, type, selection) { status--; } if (status == 0) { + if(cm.getLevel() >= 20) { + cm.sendOk("This training ground is available only for those under level 20."); + cm.dispose(); + return; + } + var selStr = "Would you like to go into the Training Center?"; for (var i = 0; i < num; i++) { selStr += "\r\n#b#L" + i + "#Training Center " + i + " (" + cm.getPlayerCount(map + i) + "/" + maxp + ")#l#k"; diff --git a/scripts/npc/1032113.js b/scripts/npc/1032113.js new file mode 100644 index 0000000000..383ed474ac --- /dev/null +++ b/scripts/npc/1032113.js @@ -0,0 +1,43 @@ +var status = -1; +var map = 910120000; +var num = 5; +var maxp = 5; + +function start() { + action(1, 0, 0); +} + +function action(mode, type, selection) { + if (mode == 1) { + status++; + } else { + if (status <= 1) { + cm.dispose(); + return; + } + status--; + } + if (status == 0) { + if(cm.getLevel() >= 20) { + cm.sendOk("This training ground is available only for those under level 20."); + cm.dispose(); + return; + } + + var selStr = "Would you like to go into the Training Center?"; + for (var i = 0; i < num; i++) { + selStr += "\r\n#b#L" + i + "#Training Center " + i + " (" + cm.getPlayerCount(map + i) + "/" + maxp + ")#l#k"; + } + cm.sendSimple(selStr); + } else if (status == 1) { + if (selection < 0 || selection >= num) { + cm.dispose(); + } else if (cm.getPlayerCount(map + selection) >= maxp) { + cm.sendNext("This training center is full."); + status = -1; + } else { + cm.warp(map + selection, 0); + cm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/npc/1032114.js b/scripts/npc/1032114.js index 965f3c2257..383ed474ac 100644 --- a/scripts/npc/1032114.js +++ b/scripts/npc/1032114.js @@ -3,6 +3,10 @@ var map = 910120000; var num = 5; var maxp = 5; +function start() { + action(1, 0, 0); +} + function action(mode, type, selection) { if (mode == 1) { status++; @@ -14,6 +18,12 @@ function action(mode, type, selection) { status--; } if (status == 0) { + if(cm.getLevel() >= 20) { + cm.sendOk("This training ground is available only for those under level 20."); + cm.dispose(); + return; + } + var selStr = "Would you like to go into the Training Center?"; for (var i = 0; i < num; i++) { selStr += "\r\n#b#L" + i + "#Training Center " + i + " (" + cm.getPlayerCount(map + i) + "/" + maxp + ")#l#k"; diff --git a/scripts/npc/1052113.js b/scripts/npc/1052113.js new file mode 100644 index 0000000000..4ebe7e3544 --- /dev/null +++ b/scripts/npc/1052113.js @@ -0,0 +1,43 @@ +var status = -1; +var map = 910310000; +var num = 5; +var maxp = 5; + +function start() { + action(1, 0, 0); +} + +function action(mode, type, selection) { + if (mode == 1) { + status++; + } else { + if (status <= 1) { + cm.dispose(); + return; + } + status--; + } + if (status == 0) { + if(cm.getLevel() >= 20) { + cm.sendOk("This training ground is available only for those under level 20."); + cm.dispose(); + return; + } + + var selStr = "Would you like to go into the Training Center?"; + for (var i = 0; i < num; i++) { + selStr += "\r\n#b#L" + i + "#Training Center " + i + " (" + cm.getPlayerCount(map + i) + "/" + maxp + ")#l#k"; + } + cm.sendSimple(selStr); + } else if (status == 1) { + if (selection < 0 || selection >= num) { + cm.dispose(); + } else if (cm.getPlayerCount(map + selection) >= maxp) { + cm.sendNext("This training center is full."); + status = -1; + } else { + cm.warp(map + selection, 0); + cm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/npc/1052114.js b/scripts/npc/1052114.js new file mode 100644 index 0000000000..6062c957b3 --- /dev/null +++ b/scripts/npc/1052114.js @@ -0,0 +1,43 @@ +var status = -1; +var map = 910310000; +var num = 5; +var maxp = 5; + +function start() { + action(1, 0, 0); +} + +function action(mode, type, selection) { + if (mode == 1) { + status++; + } else { + if (status <= 1) { + cm.dispose(); + return; + } + status--; + } + if (status == 0) { + if(cm.getLevel() >= 20) { + cm.sendOk("This training ground is available only for those under level 20."); + cm.dispose(); + return; + } + + var selStr = "Would you like to go into the Training Center?"; + for (var i = 0; i < num; i++) { + selStr += "\r\n#b#L" + i + "#Training Center " + i + " (" + cm.getPlayerCount(map + i) + "/" + maxp + ")#l#k"; + } + cm.sendSimple(selStr); + } else if (status == 1) { + if (selection < 0 || selection >= num) { + cm.dispose(); + } else if (cm.getPlayerCount(map + selection) >= maxp) { + cm.sendNext("This training center is full."); + status = -1; + } else { + cm.warp(map + selection, 0); + cm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/npc/1095001.js b/scripts/npc/1095001.js index 0a080aa4be..98b861088f 100644 --- a/scripts/npc/1095001.js +++ b/scripts/npc/1095001.js @@ -3,6 +3,10 @@ var map = 912030000; var num = 5; var maxp = 5; +function start() { + action(1, 0, 0); +} + function action(mode, type, selection) { if (mode == 1) { status++; @@ -14,6 +18,12 @@ function action(mode, type, selection) { status--; } if (status == 0) { + if(cm.getLevel() >= 20) { + cm.sendOk("This training ground is available only for those under level 20."); + cm.dispose(); + return; + } + var selStr = "Would you like to go into the Training Center?"; for (var i = 0; i < num; i++) { selStr += "\r\n#b#L" + i + "#Training Center " + i + " (" + cm.getPlayerCount(map + i) + "/" + maxp + ")#l#k"; diff --git a/scripts/npc/1095002.js b/scripts/npc/1095002.js index 0a080aa4be..98b861088f 100644 --- a/scripts/npc/1095002.js +++ b/scripts/npc/1095002.js @@ -3,6 +3,10 @@ var map = 912030000; var num = 5; var maxp = 5; +function start() { + action(1, 0, 0); +} + function action(mode, type, selection) { if (mode == 1) { status++; @@ -14,6 +18,12 @@ function action(mode, type, selection) { status--; } if (status == 0) { + if(cm.getLevel() >= 20) { + cm.sendOk("This training ground is available only for those under level 20."); + cm.dispose(); + return; + } + var selStr = "Would you like to go into the Training Center?"; for (var i = 0; i < num; i++) { selStr += "\r\n#b#L" + i + "#Training Center " + i + " (" + cm.getPlayerCount(map + i) + "/" + maxp + ")#l#k"; diff --git a/scripts/portal/ariant_castle.js b/scripts/portal/ariant_castle.js index 9fca7a969c..0efbe4d049 100644 --- a/scripts/portal/ariant_castle.js +++ b/scripts/portal/ariant_castle.js @@ -32,7 +32,7 @@ function enter(pi) { if (pi.getPlayer().haveItem(4031582) == true) { pi.playPortalSound(); - pi.warp(260000301, 0); + pi.warp(260000301, 5); return true; } else { pi.playerMessage(5, "You can enter only if you have a Entry Pass to the Palace."); diff --git a/scripts/portal/ariant_queens.js b/scripts/portal/ariant_queens.js index fa4f07c190..554fb29d10 100644 --- a/scripts/portal/ariant_queens.js +++ b/scripts/portal/ariant_queens.js @@ -1,3 +1,4 @@ //some quest where you must use hidden portals function enter(pi) { + return false; } \ No newline at end of file diff --git a/scripts/quest/6030.js b/scripts/quest/6030.js new file mode 100644 index 0000000000..c2ebfe38c8 --- /dev/null +++ b/scripts/quest/6030.js @@ -0,0 +1,56 @@ +/* + This file is part of the MapleSolaxiaV2 Maple Story Server + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/* + Quest: Carson's Fundamentals of Alchemy + */ + +var status = -1; + +function end(mode, type, selection) { + if (mode == -1) { + qm.dispose(); + } else { + if(mode == 0 && type > 0) { + qm.dispose(); + return; + } + + if (mode == 1) + status++; + else + status--; + + if (status == 0) { + qm.sendNext("I am to teach you about the fundamentals of Alchemy."); + } else if (status == 1) { + qm.sendNextPrev("While science is good to take a look on the thoughtful side of the elements that compounds the items, it alone is not nearly enough to devise an item."); + } else if (status == 2) { + qm.sendNextPrev("In fact, to be able to 'tell the pieces' to become a whole, how should it be done? The rustic ways of the blacksmithing winds up dumbing down some latent potentials of the items."); + } else if (status == 3) { + qm.sendNextPrev("Alchemy can be employed for this task. Cleanly and swiftly, #rit merges the parts that forms an item with almost no drawbacks#k, making out the most of the process with almost no scrapover, if done right. It takes a while to master it, but once it is done, everything will run out neatly."); + } else if (status == 4) { + qm.sendNextPrev("And remember this: the maxima of #bExchange#k, the area of the fundamentals of Alchemy where the total amount of the material does not change, is that no item can be created from nothing. Understood?"); + } else if (status == 5) { + qm.gainMeso(-10000); + + qm.forceCompleteQuest(); + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/quest/6031.js b/scripts/quest/6031.js new file mode 100644 index 0000000000..9156b8237a --- /dev/null +++ b/scripts/quest/6031.js @@ -0,0 +1,56 @@ +/* + This file is part of the MapleSolaxiaV2 Maple Story Server + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/* + Quest: Hughes the Fuse's Basic of Theory of Science + */ + +var status = -1; + +function end(mode, type, selection) { + if (mode == -1) { + qm.dispose(); + } else { + if(mode == 0 && type > 0) { + qm.dispose(); + return; + } + + if (mode == 1) + status++; + else + status--; + + if (status == 0) { + qm.sendNext("I am to teach you about the basics of the Theory of Science."); + } else if (status == 1) { + qm.sendNextPrev("Science stages where the alchemy doesn't meet the requirements. All items have molecular constitutions. The #rnature of their arrangements and each intrinsic unit of matter#k defines the many properties an item will have."); + } else if (status == 2) { + qm.sendNextPrev("This makes true in the scenario of the #rMaker#k as well. One must be able to study the traces of each component that is being used to form the item, to be able to tell if the experiment will utmostly succeed of fail."); + } else if (status == 3) { + qm.sendNextPrev("Take that in mind: the main perspective of science, that one engine that makes it flows the strongest, whatever scenario it is, is the aspect of #bunderstanding the process#k that generates the results, not simply throwing away tries at will."); + } else if (status == 4) { + qm.sendNextPrev("That has been made clear, right? Good, then the class is over. Dismissed."); + } else if (status == 5) { + qm.gainMeso(-10000); + + qm.forceCompleteQuest(); + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/quest/6032.js b/scripts/quest/6032.js new file mode 100644 index 0000000000..94c54e6620 --- /dev/null +++ b/scripts/quest/6032.js @@ -0,0 +1,54 @@ +/* + This file is part of the MapleSolaxiaV2 Maple Story Server + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/* + Quest: Meren's Class on the Actual Practice + */ + +var status = -1; + +function end(mode, type, selection) { + if (mode == -1) { + qm.dispose(); + } else { + if(mode == 0 && type > 0) { + qm.dispose(); + return; + } + + if (mode == 1) + status++; + else + status--; + + if (status == 0) { + qm.sendNext("So you've come to attend my class, huh? Right, I'll make it fast."); + } else if (status == 1) { + qm.sendNextPrev("I will teach you the actual application of the #bMaker#k method. All you need to do is have an item in mind to make, gather all the ingredients from the receipt and mix them in a #rscientifically alchemisty way#k. Easy, isn't it?"); + } else if (status == 2) { + qm.sendNextPrev("Let's take producing the #bWeight Earrings#k as an example. There is a rather specific #rductility theory#k to generate it, as any other 'unique' items have, the name going around the #rmain physical force#k acting over the thing we are working on: on that case, the #bDuctility Theory of Gravity#k (as it is a 'Weighted Earrings', got it?)."); + } else if (status == 3) { + qm.sendNextPrev("Ok, now you need to hand me a fee, 10,000 mesos that is, for that information. The collected fee shall be used for acquiring the needed materials for your learning of the fine art of the #bMaker#k."); + } else if (status == 4) { + qm.gainMeso(-10000); + + qm.forceCompleteQuest(); + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/quest/6033.js b/scripts/quest/6033.js new file mode 100644 index 0000000000..86ca6ef901 --- /dev/null +++ b/scripts/quest/6033.js @@ -0,0 +1,60 @@ +/* + This file is part of the MapleSolaxiaV2 Maple Story Server + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/* Maker Skill + Moren's Second round of teaching + 2nd skill level + */ + +var status = -1; + +function end(mode, type, selection) { + if (mode == -1) { + qm.dispose(); + } else { + if(mode == 0 && type > 0) { + qm.dispose(); + return; + } + + if (mode == 1) + status++; + else + status--; + + if (status == 0) { + qm.sendNext("Hm, so you claim to have brought the #b#t4260003##k? Ok, let's take a look into it."); + } else if (status == 1) { + if(qm.getQuestProgress(6033) == 1 && qm.haveItem(4260003, 1)) { + qm.sendNext("You indeed have crafted a fine piece of Monster Crystal, I see. You passed! Now, I shall teach you the next steps of the Maker skill. Keep the monster crystal with you as well, it's your work."); + + var skillid = Math.floor(qm.getPlayer().getJob().getId() / 1000) * 10000000 + 1007; + qm.teachSkill(skillid, 2, 3, -1); + + qm.gainExp(230000 * qm.getPlayer().getExpRate()); + qm.forceCompleteQuest(); + + + } else { + qm.sendNext("Hey, what's wrong? I did tell you to make a monster crystal to pass my test, didn't I? Buying one or crafting before the start of the test is NOT part of the deal. Go craft me an #b#t4260003##k."); + } + + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/scripts/quest/6036.js b/scripts/quest/6036.js new file mode 100644 index 0000000000..7de598c8fb --- /dev/null +++ b/scripts/quest/6036.js @@ -0,0 +1,59 @@ +/* + This file is part of the MapleSolaxiaV2 Maple Story Server + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +/* Maker Skill + A Surprise Outcome + 3rd skill level + */ + +var status = -1; + +function end(mode, type, selection) { + if (mode == -1) { + qm.dispose(); + } else { + if(mode == 0 && type > 0) { + qm.dispose(); + return; + } + + if (mode == 1) + status++; + else + status--; + + if (status == 0) { + qm.sendNext("Bothering me again? What's it?"); + } else if (status == 1) { + if(qm.haveItem(4031980, 1)) { + qm.sendNext("You crafted a #b#t4031980##k?! How comes, how did you do it?? ... Well, that can't be helped, I guess. The student surpassed the teacher! Youth sure do wonders to one's perception capabilities.\r\n\r\nYou are now ready to take the last step on mastering the Maker skill, contemplate it at it's finest form!"); + qm.gainItem(4031980, -1); + + var skillid = Math.floor(qm.getPlayer().getJob().getId() / 1000) * 10000000 + 1007; + qm.teachSkill(skillid, 3, 3, -1); + + qm.gainExp(300000 * qm.getPlayer().getExpRate()); + qm.forceCompleteQuest(); + } else { + qm.sendNext("... Please step aside, I can't finish this work if I'm being distracted at every moment."); + } + + qm.dispose(); + } + } +} \ No newline at end of file diff --git a/sql/db_database.sql b/sql/db_database.sql index 3ad186ce8d..029d3f17f7 100644 --- a/sql/db_database.sql +++ b/sql/db_database.sql @@ -6986,7 +6986,7 @@ INSERT IGNORE INTO `temp_data` (`id`, `dropperid`, `itemid`, `minimum_quantity`, (6765, 8140002, 1462012, 1, 1, 0, 500), (6766, 8140002, 2070005, 1, 1, 0, 400), (6767, 8140002, 1032022, 1, 1, 0, 1000), -(6768, 8140002, 4000240, 1, 1, 0, 600000), +(6768, 8140002, 4000240, 1, 1, 0, 60000), (6769, 8140002, 1052125, 1, 1, 0, 700), (6770, 8140002, 2330003, 1, 1, 0, 500), (6771, 8140002, 2040026, 1, 1, 0, 300), @@ -13071,48 +13071,48 @@ CREATE TABLE IF NOT EXISTS `makerrewarddata` ( # updated with the MapleSkillMakerFetcher feature INSERT IGNORE INTO `makercreatedata` (`id`, `itemid`, `req_level`, `req_maker_level`, `req_meso`, `req_item`, `req_equip`, `catalyst`, `quantity`, `tuc`) VALUES - (0, 4250000, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250100, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250200, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250300, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250400, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250500, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250600, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250700, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250800, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250900, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4251000, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4251100, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4251300, 75, 2, 150000, 0, 0, 0, 1, 0), - (0, 4251400, 75, 2, 150000, 0, 0, 0, 1, 0), - (0, 4250001, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250101, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250201, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250301, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250401, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250501, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250601, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250701, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250801, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250901, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4251001, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4251101, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4251301, 75, 2, 450000, 0, 0, 0, 1, 0), - (0, 4251401, 75, 2, 450000, 0, 0, 0, 1, 0), - (0, 4250002, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250102, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250202, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250302, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250402, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250502, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250602, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250702, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250802, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250902, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4251002, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4251102, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4251302, 75, 3, 750000, 0, 0, 0, 1, 0), - (0, 4251402, 75, 3, 750000, 0, 0, 0, 1, 0), + (0, 4250000, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250100, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250200, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250300, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250400, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250500, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250600, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250700, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250800, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250900, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4251000, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4251100, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4251300, 75, 2, 164000, 0, 0, 0, 1, 0), + (0, 4251400, 75, 2, 164000, 0, 0, 0, 1, 0), + (0, 4250001, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4250101, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4250201, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4250301, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4250401, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4250501, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4250601, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4250701, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4250801, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4250901, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4251001, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4251101, 45, 1, 328000, 0, 0, 0, 1, 0), + (0, 4251301, 75, 2, 491000, 0, 0, 0, 1, 0), + (0, 4251401, 75, 2, 491000, 0, 0, 0, 1, 0), + (0, 4250002, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4250102, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4250202, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4250302, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4250402, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4250502, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4250602, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4250702, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4250802, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4250902, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4251002, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4251102, 45, 2, 546000, 0, 0, 0, 1, 0), + (0, 4251302, 75, 3, 819000, 0, 0, 0, 1, 0), + (0, 4251402, 75, 3, 819000, 0, 0, 0, 1, 0), (0, 4001174, 45, 1, 0, 4031966, 0, 0, 1, 0), (0, 4001175, 50, 1, 0, 4031967, 0, 0, 1, 0), (0, 4001176, 55, 1, 0, 4031968, 0, 0, 10, 0), @@ -13129,780 +13129,780 @@ INSERT IGNORE INTO `makercreatedata` (`id`, `itemid`, `req_level`, `req_maker_le (0, 4001186, 105, 3, 0, 4031978, 0, 0, 1, 0), (0, 4032334, 150, 1, 0, 0, 0, 0, 1, 0), (0, 4032312, 70, 1, 0, 0, 0, 0, 1, 0), - (0, 2041058, 50, 1, 50000, 0, 1122013, 0, 1, 0), - (0, 2040727, 50, 1, 50000, 0, 1122013, 0, 1, 0), - (1, 1002028, 45, 1, 50000, 0, 0, 4130018, 1, 1), - (1, 1002085, 45, 1, 45000, 0, 0, 4130018, 1, 1), - (1, 1002086, 45, 1, 37500, 0, 0, 4130018, 1, 1), - (1, 1002022, 50, 1, 55000, 0, 0, 4130018, 1, 1), - (1, 1002100, 50, 1, 55000, 0, 0, 4130018, 1, 1), - (1, 1002101, 50, 1, 55000, 0, 0, 4130018, 1, 1), - (1, 1002029, 55, 1, 75000, 0, 0, 4130018, 1, 1), - (1, 1002084, 55, 1, 75000, 0, 0, 4130018, 1, 1), - (1, 1002030, 65, 1, 85000, 0, 0, 4130018, 1, 1), - (1, 1002094, 65, 1, 85000, 0, 0, 4130018, 1, 1), - (1, 1002095, 65, 1, 85000, 0, 0, 4130018, 1, 1), - (1, 1002338, 75, 2, 133000, 0, 0, 4130018, 1, 2), - (1, 1002339, 75, 2, 133000, 0, 0, 4130018, 1, 2), - (1, 1002340, 75, 2, 133000, 0, 0, 4130018, 1, 2), - (1, 1002528, 85, 2, 147000, 0, 0, 4130018, 1, 2), - (1, 1002529, 85, 2, 147000, 0, 0, 4130018, 1, 2), - (1, 1002530, 85, 2, 147000, 0, 0, 4130018, 1, 2), - (1, 1002531, 85, 2, 147000, 0, 0, 4130018, 1, 2), - (1, 1002532, 85, 2, 147000, 0, 0, 4130018, 1, 2), - (1, 1002377, 95, 2, 168000, 0, 0, 4130018, 1, 2), - (1, 1002378, 95, 2, 168000, 0, 0, 4130018, 1, 2), - (1, 1002379, 95, 2, 168000, 0, 0, 4130018, 1, 2), - (1, 1002551, 105, 3, 280000, 0, 0, 4130018, 1, 3), - (1, 1002790, 115, 3, 320000, 0, 0, 4130018, 1, 3), - (1, 1002776, 115, 3, 320000, 0, 0, 4130018, 1, 3), - (1, 1040087, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1040088, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1040089, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1041087, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1041088, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1041089, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1040090, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1040091, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1040092, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1040093, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1041091, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1041092, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1041093, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1040102, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1040103, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1040104, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1041097, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1041098, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1041099, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1040111, 85, 2, 112000, 0, 0, 4130019, 1, 2), - (1, 1040112, 85, 2, 112000, 0, 0, 4130019, 1, 2), - (1, 1040113, 85, 2, 112000, 0, 0, 4130019, 1, 2), - (1, 1041119, 85, 2, 133000, 0, 0, 4130019, 1, 2), - (1, 1041120, 85, 2, 133000, 0, 0, 4130019, 1, 2), - (1, 1041121, 85, 2, 133000, 0, 0, 4130019, 1, 2), - (1, 1040120, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1040121, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1040122, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1041122, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1041123, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1041124, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1060076, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1060077, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1060078, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1061086, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1061087, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1061088, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1060079, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1060080, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1060081, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1060082, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1061090, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1061091, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1061092, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1060090, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1060091, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1060092, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1061096, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1061097, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1061098, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1060100, 85, 2, 98000, 0, 0, 4130020, 1, 2), - (1, 1060101, 85, 2, 98000, 0, 0, 4130020, 1, 2), - (1, 1060102, 85, 2, 98000, 0, 0, 4130020, 1, 2), - (1, 1061118, 85, 2, 119000, 0, 0, 4130020, 1, 2), - (1, 1061119, 85, 2, 119000, 0, 0, 4130020, 1, 2), - (1, 1061120, 85, 2, 119000, 0, 0, 4130020, 1, 2), - (1, 1060109, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1060110, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1060111, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1061121, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1061122, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1061123, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1050080, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1050081, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1050082, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1050083, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1051077, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1051078, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1051079, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1051080, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1052075, 105, 3, 320000, 0, 0, 4130021, 1, 3), - (1, 1052160, 115, 3, 380000, 0, 0, 4130021, 1, 3), - (1, 1052155, 115, 3, 380000, 0, 0, 4130021, 1, 3), - (1, 1072132, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (1, 1072133, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (1, 1072134, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (1, 1072135, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (1, 1072147, 55, 1, 35000, 0, 0, 4130001, 1, 1), - (1, 1072148, 55, 1, 35000, 0, 0, 4130001, 1, 1), - (1, 1072149, 55, 1, 35000, 0, 0, 4130001, 1, 1), - (1, 1072154, 65, 1, 42500, 0, 0, 4130001, 1, 1), - (1, 1072155, 65, 1, 42500, 0, 0, 4130001, 1, 1), - (1, 1072156, 65, 1, 42500, 0, 0, 4130001, 1, 1), - (1, 1072210, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (1, 1072211, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (1, 1072212, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (1, 1072196, 85, 2, 105000, 0, 0, 4130001, 1, 2), - (1, 1072197, 85, 2, 105000, 0, 0, 4130001, 1, 2), - (1, 1072198, 85, 2, 105000, 0, 0, 4130001, 1, 2), - (1, 1072220, 95, 2, 126000, 0, 0, 4130001, 1, 2), - (1, 1072221, 95, 2, 126000, 0, 0, 4130001, 1, 2), - (1, 1072222, 95, 2, 126000, 0, 0, 4130001, 1, 2), - (1, 1072273, 105, 3, 210000, 0, 0, 4130001, 1, 3), - (1, 1072361, 115, 3, 240000, 0, 0, 4130001, 1, 3), - (1, 1072355, 115, 3, 240000, 0, 0, 4130001, 1, 3), - (1, 1082009, 45, 1, 45000, 0, 0, 4130000, 1, 1), - (1, 1082010, 45, 1, 50000, 0, 0, 4130000, 1, 1), - (1, 1082011, 45, 1, 55000, 0, 0, 4130000, 1, 1), - (1, 1082059, 55, 1, 60000, 0, 0, 4130000, 1, 1), - (1, 1082060, 55, 1, 65000, 0, 0, 4130000, 1, 1), - (1, 1082061, 55, 1, 70000, 0, 0, 4130000, 1, 1), - (1, 1082103, 65, 1, 75000, 0, 0, 4130000, 1, 1), - (1, 1082104, 65, 1, 80000, 0, 0, 4130000, 1, 1), - (1, 1082105, 65, 1, 85000, 0, 0, 4130000, 1, 1), - (1, 1082114, 75, 2, 147000, 0, 0, 4130000, 1, 2), - (1, 1082115, 75, 2, 150500, 0, 0, 4130000, 1, 2), - (1, 1082116, 75, 2, 154000, 0, 0, 4130000, 1, 2), - (1, 1082117, 75, 2, 154000, 0, 0, 4130000, 1, 2), - (1, 1082128, 85, 2, 168000, 0, 0, 4130000, 1, 2), - (1, 1082129, 85, 2, 171500, 0, 0, 4130000, 1, 2), - (1, 1082130, 85, 2, 175000, 0, 0, 4130000, 1, 2), - (1, 1082139, 95, 2, 189000, 0, 0, 4130000, 1, 2), - (1, 1082140, 95, 2, 192500, 0, 0, 4130000, 1, 2), - (1, 1082141, 95, 2, 196000, 0, 0, 4130000, 1, 2), - (1, 1082168, 105, 3, 300000, 0, 0, 4130000, 1, 3), - (1, 1082239, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (1, 1082234, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (1, 1092004, 45, 1, 75000, 0, 0, 4130022, 1, 1), - (1, 1092009, 55, 1, 90000, 0, 0, 4130022, 1, 1), - (1, 1092010, 55, 1, 95000, 0, 0, 4130022, 1, 1), - (1, 1092011, 55, 1, 95000, 0, 0, 4130022, 1, 1), - (1, 1092015, 65, 1, 100000, 0, 0, 4130022, 1, 1), - (1, 1092016, 65, 1, 105000, 0, 0, 4130022, 1, 1), - (1, 1092017, 65, 1, 105000, 0, 0, 4130022, 1, 1), - (1, 1092023, 75, 2, 154000, 0, 0, 4130022, 1, 2), - (1, 1092024, 75, 2, 161000, 0, 0, 4130022, 1, 2), - (1, 1092025, 75, 2, 161000, 0, 0, 4130022, 1, 2), - (1, 1092026, 85, 2, 168000, 0, 0, 4130022, 1, 2), - (1, 1092027, 85, 2, 175000, 0, 0, 4130022, 1, 2), - (1, 1092028, 85, 2, 175000, 0, 0, 4130022, 1, 2), - (1, 1092036, 95, 2, 182000, 0, 0, 4130022, 1, 2), - (1, 1092037, 95, 2, 189000, 0, 0, 4130022, 1, 2), - (1, 1092038, 95, 2, 196000, 0, 0, 4130022, 1, 2), - (1, 1092060, 105, 3, 210000, 0, 0, 4130022, 1, 3), - (1, 1092058, 115, 3, 350000, 0, 0, 4130022, 1, 3), - (1, 1302010, 45, 1, 60000, 0, 0, 4130002, 1, 1), - (1, 1312008, 45, 1, 70000, 0, 0, 4130003, 1, 1), - (1, 1322017, 45, 1, 70000, 0, 0, 4130004, 1, 1), - (1, 1402003, 45, 1, 100000, 0, 0, 4130005, 1, 1), - (1, 1412003, 45, 1, 70000, 0, 0, 4130006, 1, 1), - (1, 1422005, 45, 1, 75000, 0, 0, 4130007, 1, 1), - (1, 1432004, 45, 1, 75000, 0, 0, 4130008, 1, 1), - (1, 1442005, 45, 1, 75000, 0, 0, 4130009, 1, 1), - (1, 1302011, 55, 1, 75000, 0, 0, 4130002, 1, 1), - (1, 1312009, 55, 1, 95000, 0, 0, 4130003, 1, 1), - (1, 1322018, 55, 1, 95000, 0, 0, 4130004, 1, 1), - (1, 1402011, 55, 1, 115000, 0, 0, 4130005, 1, 1), - (1, 1412007, 55, 1, 95000, 0, 0, 4130006, 1, 1), - (1, 1422009, 55, 1, 95000, 0, 0, 4130007, 1, 1), - (1, 1432006, 55, 1, 95000, 0, 0, 4130008, 1, 1), - (1, 1442010, 55, 1, 125000, 0, 0, 4130009, 1, 1), - (1, 1302012, 65, 1, 125000, 0, 0, 4130002, 1, 1), - (1, 1312010, 65, 1, 150000, 0, 0, 4130003, 1, 1), - (1, 1322019, 65, 1, 125000, 0, 0, 4130004, 1, 1), - (1, 1402012, 65, 1, 130000, 0, 0, 4130005, 1, 1), - (1, 1412008, 65, 1, 125000, 0, 0, 4130006, 1, 1), - (1, 1422010, 65, 1, 125000, 0, 0, 4130007, 1, 1), - (1, 1432007, 65, 1, 125000, 0, 0, 4130008, 1, 1), - (1, 1442008, 65, 1, 150000, 0, 0, 4130009, 1, 1), - (1, 1322020, 70, 1, 150000, 0, 0, 4130004, 1, 1), - (1, 1302018, 75, 2, 210000, 0, 0, 4130002, 1, 2), - (1, 1312011, 75, 2, 245000, 0, 0, 4130003, 1, 2), - (1, 1322028, 75, 2, 245000, 0, 0, 4130004, 1, 2), - (1, 1402004, 75, 2, 210000, 0, 0, 4130005, 1, 2), - (1, 1402015, 75, 2, 210000, 0, 0, 4130005, 1, 2), - (1, 1412009, 75, 2, 217000, 0, 0, 4130006, 1, 2), - (1, 1422012, 75, 2, 217000, 0, 0, 4130007, 1, 2), - (1, 1432010, 75, 2, 217000, 0, 0, 4130008, 1, 2), - (1, 1442019, 75, 2, 245000, 0, 0, 4130009, 1, 2), - (1, 1302023, 85, 2, 245000, 0, 0, 4130002, 1, 2), - (1, 1312015, 85, 2, 280000, 0, 0, 4130003, 1, 2), - (1, 1322029, 85, 2, 280000, 0, 0, 4130004, 1, 2), - (1, 1402005, 85, 2, 280000, 0, 0, 4130005, 1, 2), - (1, 1402016, 85, 2, 280000, 0, 0, 4130005, 1, 2), - (1, 1412010, 85, 2, 259000, 0, 0, 4130006, 1, 2), - (1, 1422013, 85, 2, 259000, 0, 0, 4130007, 1, 2), - (1, 1432011, 85, 2, 259000, 0, 0, 4130008, 1, 2), - (1, 1442020, 85, 2, 315000, 0, 0, 4130009, 1, 2), - (1, 1302056, 95, 2, 336000, 0, 0, 4130002, 1, 2), - (1, 1312030, 95, 2, 329000, 0, 0, 4130003, 1, 2), - (1, 1322045, 95, 2, 329000, 0, 0, 4130004, 1, 2), - (1, 1402035, 95, 2, 329000, 0, 0, 4130005, 1, 2), - (1, 1412021, 95, 2, 343000, 0, 0, 4130006, 1, 2), - (1, 1422027, 95, 2, 315000, 0, 0, 4130007, 1, 2), - (1, 1432030, 95, 2, 343000, 0, 0, 4130008, 1, 2), - (1, 1442044, 95, 2, 329000, 0, 0, 4130009, 1, 2), - (1, 1302059, 105, 3, 550000, 0, 0, 4130002, 1, 3), - (1, 1312031, 105, 3, 530000, 0, 0, 4130003, 1, 3), - (1, 1322052, 105, 3, 480000, 0, 0, 4130004, 1, 3), - (1, 1402036, 105, 3, 550000, 0, 0, 4130005, 1, 3), - (1, 1412026, 105, 3, 520000, 0, 0, 4130006, 1, 3), - (1, 1422028, 105, 3, 510000, 0, 0, 4130007, 1, 3), - (1, 1432038, 105, 3, 530000, 0, 0, 4130008, 1, 3), - (1, 1442045, 105, 3, 570000, 0, 0, 4130009, 1, 3), - (1, 1302086, 115, 3, 680000, 0, 0, 4130002, 1, 3), - (1, 1312038, 115, 3, 580000, 0, 0, 4130003, 1, 3), - (1, 1322061, 115, 3, 490000, 0, 0, 4130004, 1, 3), - (1, 1402047, 115, 3, 650000, 0, 0, 4130005, 1, 3), - (1, 1412034, 115, 3, 650000, 0, 0, 4130006, 1, 3), - (1, 1422038, 115, 3, 560000, 0, 0, 4130007, 1, 3), - (1, 1432049, 115, 3, 570000, 0, 0, 4130008, 1, 3), - (1, 1442067, 115, 3, 620000, 0, 0, 4130009, 1, 3), - (1, 1302081, 115, 3, 680000, 0, 0, 4130002, 1, 3), - (1, 1312037, 115, 3, 580000, 0, 0, 4130003, 1, 3), - (1, 1322060, 115, 3, 490000, 0, 0, 4130004, 1, 3), - (1, 1402046, 115, 3, 650000, 0, 0, 4130005, 1, 3), - (1, 1412033, 115, 3, 650000, 0, 0, 4130006, 1, 3), - (1, 1422037, 115, 3, 560000, 0, 0, 4130007, 1, 3), - (1, 1432047, 115, 3, 570000, 0, 0, 4130008, 1, 3), - (1, 1442063, 115, 3, 620000, 0, 0, 4130009, 1, 3), - (2, 1002215, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (2, 1002216, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (2, 1002217, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (2, 1002218, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (2, 1002242, 55, 1, 25000, 0, 0, 4130018, 1, 1), - (2, 1002243, 55, 1, 25000, 0, 0, 4130018, 1, 1), - (2, 1002244, 55, 1, 25000, 0, 0, 4130018, 1, 1), - (2, 1002245, 55, 1, 25000, 0, 0, 4130018, 1, 1), - (2, 1002246, 55, 1, 25000, 0, 0, 4130018, 1, 1), - (2, 1002252, 65, 1, 40000, 0, 0, 4130018, 1, 1), - (2, 1002253, 65, 1, 40000, 0, 0, 4130018, 1, 1), - (2, 1002254, 65, 1, 40000, 0, 0, 4130018, 1, 1), - (2, 1002271, 75, 2, 66500, 0, 0, 4130018, 1, 2), - (2, 1002272, 75, 2, 66500, 0, 0, 4130018, 1, 2), - (2, 1002273, 75, 2, 66500, 0, 0, 4130018, 1, 2), - (2, 1002274, 75, 2, 66500, 0, 0, 4130018, 1, 2), - (2, 1002363, 85, 2, 77000, 0, 0, 4130018, 1, 2), - (2, 1002364, 85, 2, 77000, 0, 0, 4130018, 1, 2), - (2, 1002365, 85, 2, 77000, 0, 0, 4130018, 1, 2), - (2, 1002366, 85, 2, 77000, 0, 0, 4130018, 1, 2), - (2, 1002398, 95, 2, 87500, 0, 0, 4130018, 1, 2), - (2, 1002399, 95, 2, 87500, 0, 0, 4130018, 1, 2), - (2, 1002400, 95, 2, 87500, 0, 0, 4130018, 1, 2), - (2, 1002401, 95, 2, 87500, 0, 0, 4130018, 1, 2), - (2, 1002773, 105, 3, 150000, 0, 0, 4130018, 1, 3), - (2, 1002791, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (2, 1002777, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (2, 1050045, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1050046, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1050047, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1050048, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1050049, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1051030, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1051031, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1051032, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1051033, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1051034, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1050053, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1050054, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1050055, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1050056, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1051044, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1051045, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1051046, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1051047, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1050067, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1050068, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1050069, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1050070, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1051052, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1051053, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1051054, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1051055, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1050072, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1050073, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1050074, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1051056, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1051057, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1051058, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1050092, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1050093, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1050094, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1050095, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1051094, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1051095, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1051096, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1051097, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1050102, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1050103, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1050104, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1050105, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1051101, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1051102, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1051103, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1051104, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1052076, 103, 3, 290000, 0, 0, 4130021, 1, 3), - (2, 1052161, 115, 3, 340000, 0, 0, 4130021, 1, 3), - (2, 1052156, 115, 3, 340000, 0, 0, 4130021, 1, 3), - (2, 1072140, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (2, 1072141, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (2, 1072142, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (2, 1072143, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (2, 1072136, 55, 1, 30000, 0, 0, 4130001, 1, 1), - (2, 1072137, 55, 1, 30000, 0, 0, 4130001, 1, 1), - (2, 1072138, 55, 1, 30000, 0, 0, 4130001, 1, 1), - (2, 1072139, 55, 1, 30000, 0, 0, 4130001, 1, 1), - (2, 1072157, 65, 1, 40000, 0, 0, 4130001, 1, 1), - (2, 1072158, 65, 1, 40000, 0, 0, 4130001, 1, 1), - (2, 1072159, 65, 1, 40000, 0, 0, 4130001, 1, 1), - (2, 1072160, 65, 1, 40000, 0, 0, 4130001, 1, 1), - (2, 1072177, 75, 2, 70000, 0, 0, 4130001, 1, 2), - (2, 1072178, 75, 2, 70000, 0, 0, 4130001, 1, 2), - (2, 1072179, 75, 2, 70000, 0, 0, 4130001, 1, 2), - (2, 1072206, 85, 2, 84000, 0, 0, 4130001, 1, 2), - (2, 1072207, 85, 2, 84000, 0, 0, 4130001, 1, 2), - (2, 1072208, 85, 2, 84000, 0, 0, 4130001, 1, 2), - (2, 1072209, 85, 2, 84000, 0, 0, 4130001, 1, 2), - (2, 1072223, 95, 2, 98000, 0, 0, 4130001, 1, 2), - (2, 1072224, 95, 2, 98000, 0, 0, 4130001, 1, 2), - (2, 1072225, 95, 2, 98000, 0, 0, 4130001, 1, 2), - (2, 1072226, 95, 2, 98000, 0, 0, 4130001, 1, 2), - (2, 1072268, 105, 3, 180000, 0, 0, 4130001, 1, 3), - (2, 1072362, 115, 3, 220000, 0, 0, 4130001, 1, 3), - (2, 1072356, 115, 3, 220000, 0, 0, 4130001, 1, 3), - (2, 1082080, 45, 1, 50000, 0, 0, 4130000, 1, 1), - (2, 1082081, 45, 1, 40000, 0, 0, 4130000, 1, 1), - (2, 1082082, 45, 1, 45000, 0, 0, 4130000, 1, 1), - (2, 1082086, 55, 1, 52500, 0, 0, 4130000, 1, 1), - (2, 1082087, 55, 1, 57500, 0, 0, 4130000, 1, 1), - (2, 1082088, 55, 1, 62500, 0, 0, 4130000, 1, 1), - (2, 1082098, 65, 1, 70000, 0, 0, 4130000, 1, 1), - (2, 1082099, 65, 1, 72500, 0, 0, 4130000, 1, 1), - (2, 1082100, 65, 1, 75000, 0, 0, 4130000, 1, 1), - (2, 1082121, 75, 2, 140000, 0, 0, 4130000, 1, 2), - (2, 1082122, 75, 2, 143500, 0, 0, 4130000, 1, 2), - (2, 1082123, 75, 2, 147000, 0, 0, 4130000, 1, 2), - (2, 1082131, 85, 2, 161000, 0, 0, 4130000, 1, 2), - (2, 1082132, 85, 2, 164500, 0, 0, 4130000, 1, 2), - (2, 1082133, 85, 2, 164500, 0, 0, 4130000, 1, 2), - (2, 1082134, 85, 2, 168000, 0, 0, 4130000, 1, 2), - (2, 1082151, 95, 2, 182000, 0, 0, 4130000, 1, 2), - (2, 1082152, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (2, 1082153, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (2, 1082154, 95, 2, 189000, 0, 0, 4130000, 1, 2), - (2, 1082164, 105, 3, 300000, 0, 0, 4130000, 1, 3), - (2, 1082240, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (2, 1082235, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (2, 1092057, 115, 3, 350000, 0, 0, 4130022, 1, 3), - (2, 1372007, 43, 1, 100000, 0, 0, 4130010, 1, 1), - (2, 1382006, 50, 1, 75000, 0, 0, 4130011, 1, 1), - (2, 1372014, 53, 1, 115000, 0, 0, 4130010, 1, 1), - (2, 1382007, 60, 1, 100000, 0, 0, 4130011, 1, 1), - (2, 1372015, 63, 1, 130000, 0, 0, 4130010, 1, 1), - (2, 1382010, 70, 1, 125000, 0, 0, 4130011, 1, 1), - (2, 1372016, 73, 2, 203000, 0, 0, 4130010, 1, 2), - (2, 1382008, 80, 2, 217000, 0, 0, 4130011, 1, 2), - (2, 1372009, 83, 2, 227500, 0, 0, 4130010, 1, 2), - (2, 1382035, 90, 2, 266000, 0, 0, 4130011, 1, 2), - (2, 1372010, 93, 2, 252000, 0, 0, 4130010, 1, 2), - (2, 1372032, 103, 3, 460000, 0, 0, 4130010, 1, 3), - (2, 1382036, 105, 3, 470000, 0, 0, 4130011, 1, 3), - (2, 1372045, 115, 3, 510000, 0, 0, 4130010, 1, 3), - (2, 1382059, 115, 3, 520000, 0, 0, 4130011, 1, 3), - (2, 1372044, 115, 3, 510000, 0, 0, 4130010, 1, 3), - (2, 1382057, 115, 3, 520000, 0, 0, 4130011, 1, 3), - (4, 1002211, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (4, 1002212, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (4, 1002213, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (4, 1002214, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (4, 1002267, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (4, 1002268, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (4, 1002269, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (4, 1002270, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (4, 1002286, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (4, 1002287, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (4, 1002288, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (4, 1002289, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (4, 1002275, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (4, 1002276, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (4, 1002277, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (4, 1002278, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (4, 1002402, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (4, 1002403, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (4, 1002404, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (4, 1002405, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (4, 1002406, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (4, 1002407, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (4, 1002408, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (4, 1002547, 105, 3, 150000, 0, 0, 4130018, 1, 3), - (4, 1002792, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (4, 1002778, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (4, 1050051, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (4, 1050052, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (4, 1051037, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (4, 1051038, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (4, 1051039, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (4, 1050058, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1050059, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1050060, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1051041, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1051042, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1051043, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1050061, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1050062, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1050063, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1050064, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1051062, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1051063, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1051064, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1051065, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1050075, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1050076, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1050077, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1050078, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1051066, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1051067, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1051068, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1051069, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1050088, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1050089, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1050090, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1050091, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1051082, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1051083, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1051084, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1051085, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1050106, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1050107, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1050108, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1051105, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1051106, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1051107, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1052071, 105, 3, 300000, 0, 0, 4130021, 1, 3), - (4, 1052162, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (4, 1052157, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (4, 1072122, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (4, 1072123, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (4, 1072124, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (4, 1072125, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (4, 1072144, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (4, 1072145, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (4, 1072146, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (4, 1072164, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (4, 1072165, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (4, 1072166, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (4, 1072167, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (4, 1072182, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (4, 1072183, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (4, 1072184, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (4, 1072185, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (4, 1072203, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (4, 1072204, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (4, 1072205, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (4, 1072227, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (4, 1072228, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (4, 1072229, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (4, 1072269, 105, 3, 180000, 0, 0, 4130001, 1, 3), - (4, 1072363, 115, 3, 200000, 0, 0, 4130001, 1, 3), - (4, 1072357, 115, 3, 200000, 0, 0, 4130001, 1, 3), - (4, 1082083, 45, 1, 52500, 0, 0, 4130000, 1, 1), - (4, 1082084, 45, 1, 42500, 0, 0, 4130000, 1, 1), - (4, 1082085, 45, 1, 47500, 0, 0, 4130000, 1, 1), - (4, 1082089, 55, 1, 55000, 0, 0, 4130000, 1, 1), - (4, 1082090, 55, 1, 60000, 0, 0, 4130000, 1, 1), - (4, 1082091, 55, 1, 65000, 0, 0, 4130000, 1, 1), - (4, 1082106, 65, 1, 70000, 0, 0, 4130000, 1, 1), - (4, 1082107, 65, 1, 75000, 0, 0, 4130000, 1, 1), - (4, 1082108, 65, 1, 80000, 0, 0, 4130000, 1, 1), - (4, 1082109, 75, 2, 140000, 0, 0, 4130000, 1, 2), - (4, 1082110, 75, 2, 143500, 0, 0, 4130000, 1, 2), - (4, 1082111, 75, 2, 143500, 0, 0, 4130000, 1, 2), - (4, 1082112, 75, 2, 147000, 0, 0, 4130000, 1, 2), - (4, 1082125, 85, 2, 161000, 0, 0, 4130000, 1, 2), - (4, 1082126, 85, 2, 164500, 0, 0, 4130000, 1, 2), - (4, 1082127, 85, 2, 168000, 0, 0, 4130000, 1, 2), - (4, 1082158, 95, 2, 182000, 0, 0, 4130000, 1, 2), - (4, 1082159, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (4, 1082160, 95, 2, 189000, 0, 0, 4130000, 1, 2), - (4, 1082163, 105, 3, 300000, 0, 0, 4130000, 1, 3), - (4, 1082241, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (4, 1082236, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (4, 1452008, 45, 1, 100000, 0, 0, 4130012, 1, 1), - (4, 1462007, 45, 1, 85000, 0, 0, 4130013, 1, 1), - (4, 1452004, 55, 1, 125000, 0, 0, 4130012, 1, 1), - (4, 1462008, 55, 1, 120000, 0, 0, 4130013, 1, 1), - (4, 1452009, 65, 1, 150000, 0, 0, 4130012, 1, 1), - (4, 1452010, 65, 1, 150000, 0, 0, 4130012, 1, 1), - (4, 1452011, 65, 1, 150000, 0, 0, 4130012, 1, 1), - (4, 1462009, 65, 1, 150000, 0, 0, 4130013, 1, 1), - (4, 1452012, 75, 2, 245000, 0, 0, 4130012, 1, 2), - (4, 1452013, 75, 2, 245000, 0, 0, 4130012, 1, 2), - (4, 1452014, 75, 2, 245000, 0, 0, 4130012, 1, 2), - (4, 1452015, 75, 2, 245000, 0, 0, 4130012, 1, 2), - (4, 1462010, 75, 2, 245000, 0, 0, 4130013, 1, 2), - (4, 1462011, 75, 2, 245000, 0, 0, 4130013, 1, 2), - (4, 1462012, 75, 2, 245000, 0, 0, 4130013, 1, 2), - (4, 1462013, 75, 2, 245000, 0, 0, 4130013, 1, 2), - (4, 1452017, 85, 2, 280000, 0, 0, 4130012, 1, 2), - (4, 1462018, 85, 2, 280000, 0, 0, 4130013, 1, 2), - (4, 1452019, 95, 2, 315000, 0, 0, 4130012, 1, 2), - (4, 1452020, 95, 2, 315000, 0, 0, 4130012, 1, 2), - (4, 1452021, 95, 2, 315000, 0, 0, 4130012, 1, 2), - (4, 1462015, 95, 2, 315000, 0, 0, 4130013, 1, 2), - (4, 1462016, 95, 2, 315000, 0, 0, 4130013, 1, 2), - (4, 1462017, 95, 2, 315000, 0, 0, 4130013, 1, 2), - (4, 1452044, 105, 3, 500000, 0, 0, 4130012, 1, 3), - (4, 1462039, 105, 3, 500000, 0, 0, 4130013, 1, 3), - (4, 1452059, 115, 3, 550000, 0, 0, 4130012, 1, 3), - (4, 1462051, 115, 3, 550000, 0, 0, 4130013, 1, 3), - (4, 1452057, 115, 3, 550000, 0, 0, 4130012, 1, 3), - (4, 1462050, 115, 3, 550000, 0, 0, 4130013, 1, 3), - (8, 1002207, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (8, 1002208, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (8, 1002209, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (8, 1002210, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (8, 1002247, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (8, 1002248, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (8, 1002249, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (8, 1002281, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (8, 1002282, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (8, 1002283, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (8, 1002284, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (8, 1002285, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (8, 1002327, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (8, 1002328, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (8, 1002329, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (8, 1002330, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (8, 1002323, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (8, 1002324, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (8, 1002325, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (8, 1002326, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (8, 1002380, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (8, 1002381, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (8, 1002382, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (8, 1002383, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (8, 1002550, 105, 3, 150000, 0, 0, 4130018, 1, 3), - (8, 1002793, 115, 3, 190000, 0, 0, 4130018, 1, 3), - (8, 1002779, 115, 3, 190000, 0, 0, 4130018, 1, 3), - (8, 1040094, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1040095, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1040096, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1040097, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1041077, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1041078, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1041079, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1041080, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1040098, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1040099, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1040100, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1041094, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1041095, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1041096, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1040105, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1040106, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1040107, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1041100, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1041101, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1041102, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1041103, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1040108, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1040109, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1040110, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1041105, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1041106, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1041107, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1040115, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1040116, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1040117, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1040118, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1041115, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1041116, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1041117, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1041118, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1060083, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1060084, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1060085, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1060086, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1061076, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1061077, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1061078, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1061079, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1060087, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1060088, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1060089, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1061093, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1061094, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1061095, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1060093, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1060094, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1060095, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1061099, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1061100, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1061101, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1061102, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1060097, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1060098, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1060099, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1061104, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1061105, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1061106, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1060104, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1060105, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1060106, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1060107, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1061114, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1061115, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1061116, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1061117, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1050096, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1050097, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1050098, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1050099, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1051090, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1051091, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1051092, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1051093, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1052072, 105, 3, 300000, 0, 0, 4130021, 1, 3), - (8, 1052163, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (8, 1052158, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (8, 1072128, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (8, 1072129, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (8, 1072130, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (8, 1072131, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (8, 1072150, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (8, 1072151, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (8, 1072152, 55, 1, 35000, 0, 0, 4130001, 1, 1), - (8, 1072161, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (8, 1072162, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (8, 1072163, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (8, 1072172, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (8, 1072173, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (8, 1072174, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (8, 1072192, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (8, 1072193, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (8, 1072194, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (8, 1072195, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (8, 1072213, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (8, 1072214, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (8, 1072215, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (8, 1072216, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (8, 1072272, 105, 3, 195000, 0, 0, 4130001, 1, 3), - (8, 1072364, 115, 3, 225000, 0, 0, 4130001, 1, 3), - (8, 1072358, 115, 3, 225000, 0, 0, 4130001, 1, 3), - (8, 1082065, 45, 1, 42500, 0, 0, 4130000, 1, 1), - (8, 1082066, 45, 1, 47500, 0, 0, 4130000, 1, 1), - (8, 1082067, 45, 1, 45000, 0, 0, 4130000, 1, 1), - (8, 1082092, 55, 1, 55000, 0, 0, 4130000, 1, 1), - (8, 1082093, 55, 1, 60000, 0, 0, 4130000, 1, 1), - (8, 1082094, 55, 1, 65000, 0, 0, 4130000, 1, 1), - (8, 1082095, 65, 1, 75000, 0, 0, 4130000, 1, 1), - (8, 1082096, 65, 1, 80000, 0, 0, 4130000, 1, 1), - (8, 1082097, 65, 1, 85000, 0, 0, 4130000, 1, 1), - (8, 1082118, 75, 2, 140000, 0, 0, 4130000, 1, 2), - (8, 1082119, 75, 2, 143500, 0, 0, 4130000, 1, 2), - (8, 1082120, 75, 2, 147000, 0, 0, 4130000, 1, 2), - (8, 1082142, 85, 2, 150500, 0, 0, 4130000, 1, 2), - (8, 1082143, 85, 2, 150500, 0, 0, 4130000, 1, 2), - (8, 1082144, 85, 2, 150500, 0, 0, 4130000, 1, 2), - (8, 1082135, 95, 2, 182000, 0, 0, 4130000, 1, 2), - (8, 1082136, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (8, 1082137, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (8, 1082138, 95, 2, 189000, 0, 0, 4130000, 1, 2), - (8, 1082167, 105, 3, 300000, 0, 0, 4130000, 1, 3), - (8, 1082242, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (8, 1082237, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (8, 1092059, 115, 3, 350000, 0, 0, 4130022, 1, 3), - (8, 1332003, 45, 1, 110000, 0, 0, 4130014, 1, 1), - (8, 1472018, 45, 1, 50000, 0, 0, 4130015, 1, 1), - (8, 1472019, 45, 1, 52500, 0, 0, 4130015, 1, 1), - (8, 1472020, 45, 1, 52500, 0, 0, 4130015, 1, 1), - (8, 1472021, 45, 1, 55000, 0, 0, 4130015, 1, 1), - (8, 1332016, 45, 1, 110000, 0, 0, 4130014, 1, 1), - (8, 1332015, 55, 1, 125000, 0, 0, 4130014, 1, 1), - (8, 1472022, 55, 1, 125000, 0, 0, 4130015, 1, 1), - (8, 1472023, 55, 1, 127500, 0, 0, 4130015, 1, 1), - (8, 1472024, 55, 1, 127500, 0, 0, 4130015, 1, 1), - (8, 1472025, 55, 1, 130000, 0, 0, 4130015, 1, 1), - (8, 1332017, 55, 1, 125000, 0, 0, 4130014, 1, 1), - (8, 1332018, 65, 1, 140000, 0, 0, 4130014, 1, 1), - (8, 1472026, 65, 1, 150000, 0, 0, 4130015, 1, 1), - (8, 1472027, 65, 1, 152500, 0, 0, 4130015, 1, 1), - (8, 1472028, 65, 1, 152500, 0, 0, 4130015, 1, 1), - (8, 1472029, 65, 1, 155000, 0, 0, 4130015, 1, 1), - (8, 1332019, 65, 1, 140000, 0, 0, 4130014, 1, 1), - (8, 1472031, 75, 2, 280000, 0, 0, 4130015, 1, 2), - (8, 1332022, 75, 2, 217000, 0, 0, 4130014, 1, 2), - (8, 1332023, 75, 2, 217000, 0, 0, 4130014, 1, 2), - (8, 1332027, 85, 2, 238000, 0, 0, 4130014, 1, 2), - (8, 1472033, 85, 2, 315000, 0, 0, 4130015, 1, 2), - (8, 1332026, 85, 2, 238000, 0, 0, 4130014, 1, 2), - (8, 1332052, 95, 2, 280000, 0, 0, 4130014, 1, 2), - (8, 1472053, 95, 2, 357000, 0, 0, 4130015, 1, 2), - (8, 1332051, 95, 2, 280000, 0, 0, 4130014, 1, 2), - (8, 1332050, 105, 3, 450000, 0, 0, 4130014, 1, 3), - (8, 1472051, 105, 3, 570000, 0, 0, 4130015, 1, 3), - (8, 1472052, 105, 3, 570000, 0, 0, 4130015, 1, 3), - (8, 1332049, 105, 3, 450000, 0, 0, 4130014, 1, 3), - (8, 1332075, 115, 3, 500000, 0, 0, 4130014, 1, 3), - (8, 1332076, 115, 3, 500000, 0, 0, 4130014, 1, 3), - (8, 1472071, 115, 3, 630000, 0, 0, 4130015, 1, 3), - (8, 1332073, 115, 3, 500000, 0, 0, 4130014, 1, 3), - (8, 1332074, 115, 3, 510000, 0, 0, 4130014, 1, 3), - (8, 1472068, 115, 3, 630000, 0, 0, 4130015, 1, 3), - (16, 1002631, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (16, 1002634, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (16, 1002637, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (16, 1002640, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (16, 1002643, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (16, 1002646, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (16, 1002649, 105, 3, 150000, 0, 0, 4130018, 1, 3), - (16, 1002794, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (16, 1002780, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (16, 1052116, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (16, 1052119, 55, 1, 50000, 0, 0, 4130021, 1, 1), - (16, 1052122, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (16, 1052125, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (16, 1052128, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (16, 1052131, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (16, 1052134, 105, 3, 300000, 0, 0, 4130021, 1, 3), - (16, 1052164, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (16, 1052159, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (16, 1072303, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (16, 1072306, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (16, 1072309, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (16, 1072312, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (16, 1072315, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (16, 1072318, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (16, 1072321, 105, 3, 180000, 0, 0, 4130001, 1, 3), - (16, 1072365, 115, 3, 200000, 0, 0, 4130001, 1, 3), - (16, 1072359, 115, 3, 200000, 0, 0, 4130001, 1, 3), - (16, 1082198, 45, 1, 42500, 0, 0, 4130000, 1, 1), - (16, 1082201, 55, 1, 55000, 0, 0, 4130000, 1, 1), - (16, 1082204, 65, 1, 75000, 0, 0, 4130000, 1, 1), - (16, 1082207, 75, 2, 140000, 0, 0, 4130000, 1, 2), - (16, 1082210, 85, 2, 161000, 0, 0, 4130000, 1, 2), - (16, 1082213, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (16, 1082216, 105, 3, 300000, 0, 0, 4130000, 1, 3), - (16, 1082243, 115, 3, 335000, 0, 0, 4130000, 1, 3), - (16, 1082238, 115, 3, 335000, 0, 0, 4130000, 1, 3), - (16, 1482007, 45, 1, 65000, 0, 0, 4130016, 1, 1), - (16, 1492007, 45, 1, 70000, 0, 0, 4130017, 1, 1), - (16, 1482008, 55, 1, 120000, 0, 0, 4130016, 1, 1), - (16, 1492008, 55, 1, 125000, 0, 0, 4130017, 1, 1), - (16, 1482009, 65, 1, 150000, 0, 0, 4130016, 1, 1), - (16, 1492009, 65, 1, 155000, 0, 0, 4130017, 1, 1), - (16, 1482010, 75, 2, 245000, 0, 0, 4130016, 1, 2), - (16, 1492010, 75, 2, 245000, 0, 0, 4130017, 1, 2), - (16, 1482011, 85, 2, 273000, 0, 0, 4130016, 1, 2), - (16, 1492011, 85, 2, 280000, 0, 0, 4130017, 1, 2), - (16, 1482012, 95, 2, 308000, 0, 0, 4130016, 1, 2), - (16, 1492012, 95, 2, 315000, 0, 0, 4130017, 1, 2), - (16, 1482013, 105, 3, 510000, 0, 0, 4130016, 1, 3), - (16, 1492013, 105, 3, 520000, 0, 0, 4130017, 1, 3), - (16, 1482024, 115, 3, 560000, 0, 0, 4130016, 1, 3), - (16, 1492025, 115, 3, 570000, 0, 0, 4130017, 1, 3), - (16, 1482023, 115, 3, 560000, 0, 0, 4130016, 1, 3), - (16, 1492023, 115, 3, 570000, 0, 0, 4130017, 1, 3); + (0, 2041058, 50, 1, 55000, 0, 1122013, 0, 1, 0), + (0, 2040727, 50, 1, 55000, 0, 1122013, 0, 1, 0), + (1, 1002028, 45, 1, 55000, 0, 0, 4130018, 1, 1), + (1, 1002085, 45, 1, 50000, 0, 0, 4130018, 1, 1), + (1, 1002086, 45, 1, 41000, 0, 0, 4130018, 1, 1), + (1, 1002022, 50, 1, 60000, 0, 0, 4130018, 1, 1), + (1, 1002100, 50, 1, 60000, 0, 0, 4130018, 1, 1), + (1, 1002101, 50, 1, 60000, 0, 0, 4130018, 1, 1), + (1, 1002029, 55, 1, 82000, 0, 0, 4130018, 1, 1), + (1, 1002084, 55, 1, 82000, 0, 0, 4130018, 1, 1), + (1, 1002030, 65, 1, 93000, 0, 0, 4130018, 1, 1), + (1, 1002094, 65, 1, 93000, 0, 0, 4130018, 1, 1), + (1, 1002095, 65, 1, 93000, 0, 0, 4130018, 1, 1), + (1, 1002338, 75, 2, 146000, 0, 0, 4130018, 1, 2), + (1, 1002339, 75, 2, 146000, 0, 0, 4130018, 1, 2), + (1, 1002340, 75, 2, 146000, 0, 0, 4130018, 1, 2), + (1, 1002528, 85, 2, 161000, 0, 0, 4130018, 1, 2), + (1, 1002529, 85, 2, 161000, 0, 0, 4130018, 1, 2), + (1, 1002530, 85, 2, 161000, 0, 0, 4130018, 1, 2), + (1, 1002531, 85, 2, 161000, 0, 0, 4130018, 1, 2), + (1, 1002532, 85, 2, 161000, 0, 0, 4130018, 1, 2), + (1, 1002377, 95, 2, 184000, 0, 0, 4130018, 1, 2), + (1, 1002378, 95, 2, 184000, 0, 0, 4130018, 1, 2), + (1, 1002379, 95, 2, 184000, 0, 0, 4130018, 1, 2), + (1, 1002551, 105, 3, 308000, 0, 0, 4130018, 1, 3), + (1, 1002790, 115, 3, 352000, 0, 0, 4130018, 1, 3), + (1, 1002776, 115, 3, 352000, 0, 0, 4130018, 1, 3), + (1, 1040087, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1040088, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1040089, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1041087, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1041088, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1041089, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1040090, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1040091, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1040092, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1040093, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1041091, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1041092, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1041093, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1040102, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1040103, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1040104, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1041097, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1041098, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1041099, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1040111, 85, 2, 123000, 0, 0, 4130019, 1, 2), + (1, 1040112, 85, 2, 123000, 0, 0, 4130019, 1, 2), + (1, 1040113, 85, 2, 123000, 0, 0, 4130019, 1, 2), + (1, 1041119, 85, 2, 146000, 0, 0, 4130019, 1, 2), + (1, 1041120, 85, 2, 146000, 0, 0, 4130019, 1, 2), + (1, 1041121, 85, 2, 146000, 0, 0, 4130019, 1, 2), + (1, 1040120, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1040121, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1040122, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1041122, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1041123, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1041124, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1060076, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1060077, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1060078, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1061086, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1061087, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1061088, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1060079, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1060080, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1060081, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1060082, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1061090, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1061091, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1061092, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1060090, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1060091, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1060092, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1061096, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1061097, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1061098, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1060100, 85, 2, 107000, 0, 0, 4130020, 1, 2), + (1, 1060101, 85, 2, 107000, 0, 0, 4130020, 1, 2), + (1, 1060102, 85, 2, 107000, 0, 0, 4130020, 1, 2), + (1, 1061118, 85, 2, 130000, 0, 0, 4130020, 1, 2), + (1, 1061119, 85, 2, 130000, 0, 0, 4130020, 1, 2), + (1, 1061120, 85, 2, 130000, 0, 0, 4130020, 1, 2), + (1, 1060109, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1060110, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1060111, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1061121, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1061122, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1061123, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1050080, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1050081, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1050082, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1050083, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1051077, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1051078, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1051079, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1051080, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1052075, 105, 3, 352000, 0, 0, 4130021, 1, 3), + (1, 1052160, 115, 3, 418000, 0, 0, 4130021, 1, 3), + (1, 1052155, 115, 3, 418000, 0, 0, 4130021, 1, 3), + (1, 1072132, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (1, 1072133, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (1, 1072134, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (1, 1072135, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (1, 1072147, 55, 1, 39000, 0, 0, 4130001, 1, 1), + (1, 1072148, 55, 1, 39000, 0, 0, 4130001, 1, 1), + (1, 1072149, 55, 1, 39000, 0, 0, 4130001, 1, 1), + (1, 1072154, 65, 1, 47000, 0, 0, 4130001, 1, 1), + (1, 1072155, 65, 1, 47000, 0, 0, 4130001, 1, 1), + (1, 1072156, 65, 1, 47000, 0, 0, 4130001, 1, 1), + (1, 1072210, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (1, 1072211, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (1, 1072212, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (1, 1072196, 85, 2, 115000, 0, 0, 4130001, 1, 2), + (1, 1072197, 85, 2, 115000, 0, 0, 4130001, 1, 2), + (1, 1072198, 85, 2, 115000, 0, 0, 4130001, 1, 2), + (1, 1072220, 95, 2, 138000, 0, 0, 4130001, 1, 2), + (1, 1072221, 95, 2, 138000, 0, 0, 4130001, 1, 2), + (1, 1072222, 95, 2, 138000, 0, 0, 4130001, 1, 2), + (1, 1072273, 105, 3, 231000, 0, 0, 4130001, 1, 3), + (1, 1072361, 115, 3, 264000, 0, 0, 4130001, 1, 3), + (1, 1072355, 115, 3, 264000, 0, 0, 4130001, 1, 3), + (1, 1082009, 45, 1, 50000, 0, 0, 4130000, 1, 1), + (1, 1082010, 45, 1, 55000, 0, 0, 4130000, 1, 1), + (1, 1082011, 45, 1, 60000, 0, 0, 4130000, 1, 1), + (1, 1082059, 55, 1, 66000, 0, 0, 4130000, 1, 1), + (1, 1082060, 55, 1, 71000, 0, 0, 4130000, 1, 1), + (1, 1082061, 55, 1, 77000, 0, 0, 4130000, 1, 1), + (1, 1082103, 65, 1, 82000, 0, 0, 4130000, 1, 1), + (1, 1082104, 65, 1, 88000, 0, 0, 4130000, 1, 1), + (1, 1082105, 65, 1, 93000, 0, 0, 4130000, 1, 1), + (1, 1082114, 75, 2, 161000, 0, 0, 4130000, 1, 2), + (1, 1082115, 75, 2, 165000, 0, 0, 4130000, 1, 2), + (1, 1082116, 75, 2, 168000, 0, 0, 4130000, 1, 2), + (1, 1082117, 75, 2, 168000, 0, 0, 4130000, 1, 2), + (1, 1082128, 85, 2, 184000, 0, 0, 4130000, 1, 2), + (1, 1082129, 85, 2, 188000, 0, 0, 4130000, 1, 2), + (1, 1082130, 85, 2, 191000, 0, 0, 4130000, 1, 2), + (1, 1082139, 95, 2, 207000, 0, 0, 4130000, 1, 2), + (1, 1082140, 95, 2, 210000, 0, 0, 4130000, 1, 2), + (1, 1082141, 95, 2, 214000, 0, 0, 4130000, 1, 2), + (1, 1082168, 105, 3, 330000, 0, 0, 4130000, 1, 3), + (1, 1082239, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (1, 1082234, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (1, 1092004, 45, 1, 82000, 0, 0, 4130022, 1, 1), + (1, 1092009, 55, 1, 99000, 0, 0, 4130022, 1, 1), + (1, 1092010, 55, 1, 104000, 0, 0, 4130022, 1, 1), + (1, 1092011, 55, 1, 104000, 0, 0, 4130022, 1, 1), + (1, 1092015, 65, 1, 110000, 0, 0, 4130022, 1, 1), + (1, 1092016, 65, 1, 115000, 0, 0, 4130022, 1, 1), + (1, 1092017, 65, 1, 115000, 0, 0, 4130022, 1, 1), + (1, 1092023, 75, 2, 168000, 0, 0, 4130022, 1, 2), + (1, 1092024, 75, 2, 176000, 0, 0, 4130022, 1, 2), + (1, 1092025, 75, 2, 176000, 0, 0, 4130022, 1, 2), + (1, 1092026, 85, 2, 184000, 0, 0, 4130022, 1, 2), + (1, 1092027, 85, 2, 191000, 0, 0, 4130022, 1, 2), + (1, 1092028, 85, 2, 191000, 0, 0, 4130022, 1, 2), + (1, 1092036, 95, 2, 199000, 0, 0, 4130022, 1, 2), + (1, 1092037, 95, 2, 207000, 0, 0, 4130022, 1, 2), + (1, 1092038, 95, 2, 214000, 0, 0, 4130022, 1, 2), + (1, 1092060, 105, 3, 231000, 0, 0, 4130022, 1, 3), + (1, 1092058, 115, 3, 385000, 0, 0, 4130022, 1, 3), + (1, 1302010, 45, 1, 66000, 0, 0, 4130002, 1, 1), + (1, 1312008, 45, 1, 77000, 0, 0, 4130003, 1, 1), + (1, 1322017, 45, 1, 77000, 0, 0, 4130004, 1, 1), + (1, 1402003, 45, 1, 110000, 0, 0, 4130005, 1, 1), + (1, 1412003, 45, 1, 77000, 0, 0, 4130006, 1, 1), + (1, 1422005, 45, 1, 82000, 0, 0, 4130007, 1, 1), + (1, 1432004, 45, 1, 82000, 0, 0, 4130008, 1, 1), + (1, 1442005, 45, 1, 82000, 0, 0, 4130009, 1, 1), + (1, 1302011, 55, 1, 82000, 0, 0, 4130002, 1, 1), + (1, 1312009, 55, 1, 104000, 0, 0, 4130003, 1, 1), + (1, 1322018, 55, 1, 104000, 0, 0, 4130004, 1, 1), + (1, 1402011, 55, 1, 126000, 0, 0, 4130005, 1, 1), + (1, 1412007, 55, 1, 104000, 0, 0, 4130006, 1, 1), + (1, 1422009, 55, 1, 104000, 0, 0, 4130007, 1, 1), + (1, 1432006, 55, 1, 104000, 0, 0, 4130008, 1, 1), + (1, 1442010, 55, 1, 137000, 0, 0, 4130009, 1, 1), + (1, 1302012, 65, 1, 137000, 0, 0, 4130002, 1, 1), + (1, 1312010, 65, 1, 165000, 0, 0, 4130003, 1, 1), + (1, 1322019, 65, 1, 137000, 0, 0, 4130004, 1, 1), + (1, 1402012, 65, 1, 143000, 0, 0, 4130005, 1, 1), + (1, 1412008, 65, 1, 137000, 0, 0, 4130006, 1, 1), + (1, 1422010, 65, 1, 137000, 0, 0, 4130007, 1, 1), + (1, 1432007, 65, 1, 137000, 0, 0, 4130008, 1, 1), + (1, 1442008, 65, 1, 165000, 0, 0, 4130009, 1, 1), + (1, 1322020, 70, 1, 165000, 0, 0, 4130004, 1, 1), + (1, 1302018, 75, 2, 231000, 0, 0, 4130002, 1, 2), + (1, 1312011, 75, 2, 269000, 0, 0, 4130003, 1, 2), + (1, 1322028, 75, 2, 269000, 0, 0, 4130004, 1, 2), + (1, 1402004, 75, 2, 231000, 0, 0, 4130005, 1, 2), + (1, 1402015, 75, 2, 231000, 0, 0, 4130005, 1, 2), + (1, 1412009, 75, 2, 238000, 0, 0, 4130006, 1, 2), + (1, 1422012, 75, 2, 238000, 0, 0, 4130007, 1, 2), + (1, 1432010, 75, 2, 238000, 0, 0, 4130008, 1, 2), + (1, 1442019, 75, 2, 269000, 0, 0, 4130009, 1, 2), + (1, 1302023, 85, 2, 269000, 0, 0, 4130002, 1, 2), + (1, 1312015, 85, 2, 308000, 0, 0, 4130003, 1, 2), + (1, 1322029, 85, 2, 308000, 0, 0, 4130004, 1, 2), + (1, 1402005, 85, 2, 308000, 0, 0, 4130005, 1, 2), + (1, 1402016, 85, 2, 308000, 0, 0, 4130005, 1, 2), + (1, 1412010, 85, 2, 284000, 0, 0, 4130006, 1, 2), + (1, 1422013, 85, 2, 284000, 0, 0, 4130007, 1, 2), + (1, 1432011, 85, 2, 284000, 0, 0, 4130008, 1, 2), + (1, 1442020, 85, 2, 346000, 0, 0, 4130009, 1, 2), + (1, 1302056, 95, 2, 369000, 0, 0, 4130002, 1, 2), + (1, 1312030, 95, 2, 361000, 0, 0, 4130003, 1, 2), + (1, 1322045, 95, 2, 361000, 0, 0, 4130004, 1, 2), + (1, 1402035, 95, 2, 361000, 0, 0, 4130005, 1, 2), + (1, 1412021, 95, 2, 377000, 0, 0, 4130006, 1, 2), + (1, 1422027, 95, 2, 346000, 0, 0, 4130007, 1, 2), + (1, 1432030, 95, 2, 377000, 0, 0, 4130008, 1, 2), + (1, 1442044, 95, 2, 361000, 0, 0, 4130009, 1, 2), + (1, 1302059, 105, 3, 605000, 0, 0, 4130002, 1, 3), + (1, 1312031, 105, 3, 583000, 0, 0, 4130003, 1, 3), + (1, 1322052, 105, 3, 528000, 0, 0, 4130004, 1, 3), + (1, 1402036, 105, 3, 605000, 0, 0, 4130005, 1, 3), + (1, 1412026, 105, 3, 572000, 0, 0, 4130006, 1, 3), + (1, 1422028, 105, 3, 561000, 0, 0, 4130007, 1, 3), + (1, 1432038, 105, 3, 583000, 0, 0, 4130008, 1, 3), + (1, 1442045, 105, 3, 627000, 0, 0, 4130009, 1, 3), + (1, 1302086, 115, 3, 748000, 0, 0, 4130002, 1, 3), + (1, 1312038, 115, 3, 638000, 0, 0, 4130003, 1, 3), + (1, 1322061, 115, 3, 539000, 0, 0, 4130004, 1, 3), + (1, 1402047, 115, 3, 715000, 0, 0, 4130005, 1, 3), + (1, 1412034, 115, 3, 715000, 0, 0, 4130006, 1, 3), + (1, 1422038, 115, 3, 616000, 0, 0, 4130007, 1, 3), + (1, 1432049, 115, 3, 627000, 0, 0, 4130008, 1, 3), + (1, 1442067, 115, 3, 682000, 0, 0, 4130009, 1, 3), + (1, 1302081, 115, 3, 748000, 0, 0, 4130002, 1, 3), + (1, 1312037, 115, 3, 638000, 0, 0, 4130003, 1, 3), + (1, 1322060, 115, 3, 539000, 0, 0, 4130004, 1, 3), + (1, 1402046, 115, 3, 715000, 0, 0, 4130005, 1, 3), + (1, 1412033, 115, 3, 715000, 0, 0, 4130006, 1, 3), + (1, 1422037, 115, 3, 616000, 0, 0, 4130007, 1, 3), + (1, 1432047, 115, 3, 627000, 0, 0, 4130008, 1, 3), + (1, 1442063, 115, 3, 682000, 0, 0, 4130009, 1, 3), + (2, 1002215, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (2, 1002216, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (2, 1002217, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (2, 1002218, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (2, 1002242, 55, 1, 28000, 0, 0, 4130018, 1, 1), + (2, 1002243, 55, 1, 28000, 0, 0, 4130018, 1, 1), + (2, 1002244, 55, 1, 28000, 0, 0, 4130018, 1, 1), + (2, 1002245, 55, 1, 28000, 0, 0, 4130018, 1, 1), + (2, 1002246, 55, 1, 28000, 0, 0, 4130018, 1, 1), + (2, 1002252, 65, 1, 44000, 0, 0, 4130018, 1, 1), + (2, 1002253, 65, 1, 44000, 0, 0, 4130018, 1, 1), + (2, 1002254, 65, 1, 44000, 0, 0, 4130018, 1, 1), + (2, 1002271, 75, 2, 73000, 0, 0, 4130018, 1, 2), + (2, 1002272, 75, 2, 73000, 0, 0, 4130018, 1, 2), + (2, 1002273, 75, 2, 73000, 0, 0, 4130018, 1, 2), + (2, 1002274, 75, 2, 73000, 0, 0, 4130018, 1, 2), + (2, 1002363, 85, 2, 84000, 0, 0, 4130018, 1, 2), + (2, 1002364, 85, 2, 84000, 0, 0, 4130018, 1, 2), + (2, 1002365, 85, 2, 84000, 0, 0, 4130018, 1, 2), + (2, 1002366, 85, 2, 84000, 0, 0, 4130018, 1, 2), + (2, 1002398, 95, 2, 96000, 0, 0, 4130018, 1, 2), + (2, 1002399, 95, 2, 96000, 0, 0, 4130018, 1, 2), + (2, 1002400, 95, 2, 96000, 0, 0, 4130018, 1, 2), + (2, 1002401, 95, 2, 96000, 0, 0, 4130018, 1, 2), + (2, 1002773, 105, 3, 165000, 0, 0, 4130018, 1, 3), + (2, 1002791, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (2, 1002777, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (2, 1050045, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1050046, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1050047, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1050048, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1050049, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1051030, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1051031, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1051032, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1051033, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1051034, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1050053, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1050054, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1050055, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1050056, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1051044, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1051045, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1051046, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1051047, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1050067, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1050068, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1050069, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1050070, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1051052, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1051053, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1051054, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1051055, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1050072, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1050073, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1050074, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1051056, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1051057, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1051058, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1050092, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1050093, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1050094, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1050095, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1051094, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1051095, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1051096, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1051097, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1050102, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1050103, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1050104, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1050105, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1051101, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1051102, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1051103, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1051104, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1052076, 103, 3, 319000, 0, 0, 4130021, 1, 3), + (2, 1052161, 115, 3, 374000, 0, 0, 4130021, 1, 3), + (2, 1052156, 115, 3, 374000, 0, 0, 4130021, 1, 3), + (2, 1072140, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (2, 1072141, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (2, 1072142, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (2, 1072143, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (2, 1072136, 55, 1, 33000, 0, 0, 4130001, 1, 1), + (2, 1072137, 55, 1, 33000, 0, 0, 4130001, 1, 1), + (2, 1072138, 55, 1, 33000, 0, 0, 4130001, 1, 1), + (2, 1072139, 55, 1, 33000, 0, 0, 4130001, 1, 1), + (2, 1072157, 65, 1, 44000, 0, 0, 4130001, 1, 1), + (2, 1072158, 65, 1, 44000, 0, 0, 4130001, 1, 1), + (2, 1072159, 65, 1, 44000, 0, 0, 4130001, 1, 1), + (2, 1072160, 65, 1, 44000, 0, 0, 4130001, 1, 1), + (2, 1072177, 75, 2, 77000, 0, 0, 4130001, 1, 2), + (2, 1072178, 75, 2, 77000, 0, 0, 4130001, 1, 2), + (2, 1072179, 75, 2, 77000, 0, 0, 4130001, 1, 2), + (2, 1072206, 85, 2, 92000, 0, 0, 4130001, 1, 2), + (2, 1072207, 85, 2, 92000, 0, 0, 4130001, 1, 2), + (2, 1072208, 85, 2, 92000, 0, 0, 4130001, 1, 2), + (2, 1072209, 85, 2, 92000, 0, 0, 4130001, 1, 2), + (2, 1072223, 95, 2, 107000, 0, 0, 4130001, 1, 2), + (2, 1072224, 95, 2, 107000, 0, 0, 4130001, 1, 2), + (2, 1072225, 95, 2, 107000, 0, 0, 4130001, 1, 2), + (2, 1072226, 95, 2, 107000, 0, 0, 4130001, 1, 2), + (2, 1072268, 105, 3, 198000, 0, 0, 4130001, 1, 3), + (2, 1072362, 115, 3, 242000, 0, 0, 4130001, 1, 3), + (2, 1072356, 115, 3, 242000, 0, 0, 4130001, 1, 3), + (2, 1082080, 45, 1, 55000, 0, 0, 4130000, 1, 1), + (2, 1082081, 45, 1, 44000, 0, 0, 4130000, 1, 1), + (2, 1082082, 45, 1, 50000, 0, 0, 4130000, 1, 1), + (2, 1082086, 55, 1, 58000, 0, 0, 4130000, 1, 1), + (2, 1082087, 55, 1, 63000, 0, 0, 4130000, 1, 1), + (2, 1082088, 55, 1, 69000, 0, 0, 4130000, 1, 1), + (2, 1082098, 65, 1, 77000, 0, 0, 4130000, 1, 1), + (2, 1082099, 65, 1, 80000, 0, 0, 4130000, 1, 1), + (2, 1082100, 65, 1, 82000, 0, 0, 4130000, 1, 1), + (2, 1082121, 75, 2, 153000, 0, 0, 4130000, 1, 2), + (2, 1082122, 75, 2, 157000, 0, 0, 4130000, 1, 2), + (2, 1082123, 75, 2, 161000, 0, 0, 4130000, 1, 2), + (2, 1082131, 85, 2, 176000, 0, 0, 4130000, 1, 2), + (2, 1082132, 85, 2, 180000, 0, 0, 4130000, 1, 2), + (2, 1082133, 85, 2, 180000, 0, 0, 4130000, 1, 2), + (2, 1082134, 85, 2, 184000, 0, 0, 4130000, 1, 2), + (2, 1082151, 95, 2, 199000, 0, 0, 4130000, 1, 2), + (2, 1082152, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (2, 1082153, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (2, 1082154, 95, 2, 207000, 0, 0, 4130000, 1, 2), + (2, 1082164, 105, 3, 330000, 0, 0, 4130000, 1, 3), + (2, 1082240, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (2, 1082235, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (2, 1092057, 115, 3, 385000, 0, 0, 4130022, 1, 3), + (2, 1372007, 43, 1, 110000, 0, 0, 4130010, 1, 1), + (2, 1382006, 50, 1, 82000, 0, 0, 4130011, 1, 1), + (2, 1372014, 53, 1, 126000, 0, 0, 4130010, 1, 1), + (2, 1382007, 60, 1, 110000, 0, 0, 4130011, 1, 1), + (2, 1372015, 63, 1, 143000, 0, 0, 4130010, 1, 1), + (2, 1382010, 70, 1, 137000, 0, 0, 4130011, 1, 1), + (2, 1372016, 73, 2, 223000, 0, 0, 4130010, 1, 2), + (2, 1382008, 80, 2, 238000, 0, 0, 4130011, 1, 2), + (2, 1372009, 83, 2, 250000, 0, 0, 4130010, 1, 2), + (2, 1382035, 90, 2, 292000, 0, 0, 4130011, 1, 2), + (2, 1372010, 93, 2, 277000, 0, 0, 4130010, 1, 2), + (2, 1372032, 103, 3, 506000, 0, 0, 4130010, 1, 3), + (2, 1382036, 105, 3, 517000, 0, 0, 4130011, 1, 3), + (2, 1372045, 115, 3, 561000, 0, 0, 4130010, 1, 3), + (2, 1382059, 115, 3, 572000, 0, 0, 4130011, 1, 3), + (2, 1372044, 115, 3, 561000, 0, 0, 4130010, 1, 3), + (2, 1382057, 115, 3, 572000, 0, 0, 4130011, 1, 3), + (4, 1002211, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (4, 1002212, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (4, 1002213, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (4, 1002214, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (4, 1002267, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (4, 1002268, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (4, 1002269, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (4, 1002270, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (4, 1002286, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (4, 1002287, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (4, 1002288, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (4, 1002289, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (4, 1002275, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (4, 1002276, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (4, 1002277, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (4, 1002278, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (4, 1002402, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (4, 1002403, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (4, 1002404, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (4, 1002405, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (4, 1002406, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (4, 1002407, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (4, 1002408, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (4, 1002547, 105, 3, 165000, 0, 0, 4130018, 1, 3), + (4, 1002792, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (4, 1002778, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (4, 1050051, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (4, 1050052, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (4, 1051037, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (4, 1051038, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (4, 1051039, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (4, 1050058, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1050059, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1050060, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1051041, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1051042, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1051043, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1050061, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1050062, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1050063, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1050064, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1051062, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1051063, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1051064, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1051065, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1050075, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1050076, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1050077, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1050078, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1051066, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1051067, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1051068, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1051069, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1050088, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1050089, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1050090, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1050091, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1051082, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1051083, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1051084, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1051085, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1050106, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1050107, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1050108, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1051105, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1051106, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1051107, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1052071, 105, 3, 330000, 0, 0, 4130021, 1, 3), + (4, 1052162, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (4, 1052157, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (4, 1072122, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (4, 1072123, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (4, 1072124, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (4, 1072125, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (4, 1072144, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (4, 1072145, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (4, 1072146, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (4, 1072164, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (4, 1072165, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (4, 1072166, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (4, 1072167, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (4, 1072182, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (4, 1072183, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (4, 1072184, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (4, 1072185, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (4, 1072203, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (4, 1072204, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (4, 1072205, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (4, 1072227, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (4, 1072228, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (4, 1072229, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (4, 1072269, 105, 3, 198000, 0, 0, 4130001, 1, 3), + (4, 1072363, 115, 3, 220000, 0, 0, 4130001, 1, 3), + (4, 1072357, 115, 3, 220000, 0, 0, 4130001, 1, 3), + (4, 1082083, 45, 1, 58000, 0, 0, 4130000, 1, 1), + (4, 1082084, 45, 1, 47000, 0, 0, 4130000, 1, 1), + (4, 1082085, 45, 1, 52000, 0, 0, 4130000, 1, 1), + (4, 1082089, 55, 1, 60000, 0, 0, 4130000, 1, 1), + (4, 1082090, 55, 1, 66000, 0, 0, 4130000, 1, 1), + (4, 1082091, 55, 1, 71000, 0, 0, 4130000, 1, 1), + (4, 1082106, 65, 1, 77000, 0, 0, 4130000, 1, 1), + (4, 1082107, 65, 1, 82000, 0, 0, 4130000, 1, 1), + (4, 1082108, 65, 1, 88000, 0, 0, 4130000, 1, 1), + (4, 1082109, 75, 2, 153000, 0, 0, 4130000, 1, 2), + (4, 1082110, 75, 2, 157000, 0, 0, 4130000, 1, 2), + (4, 1082111, 75, 2, 157000, 0, 0, 4130000, 1, 2), + (4, 1082112, 75, 2, 161000, 0, 0, 4130000, 1, 2), + (4, 1082125, 85, 2, 176000, 0, 0, 4130000, 1, 2), + (4, 1082126, 85, 2, 180000, 0, 0, 4130000, 1, 2), + (4, 1082127, 85, 2, 184000, 0, 0, 4130000, 1, 2), + (4, 1082158, 95, 2, 199000, 0, 0, 4130000, 1, 2), + (4, 1082159, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (4, 1082160, 95, 2, 207000, 0, 0, 4130000, 1, 2), + (4, 1082163, 105, 3, 330000, 0, 0, 4130000, 1, 3), + (4, 1082241, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (4, 1082236, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (4, 1452008, 45, 1, 110000, 0, 0, 4130012, 1, 1), + (4, 1462007, 45, 1, 93000, 0, 0, 4130013, 1, 1), + (4, 1452004, 55, 1, 137000, 0, 0, 4130012, 1, 1), + (4, 1462008, 55, 1, 132000, 0, 0, 4130013, 1, 1), + (4, 1452009, 65, 1, 165000, 0, 0, 4130012, 1, 1), + (4, 1452010, 65, 1, 165000, 0, 0, 4130012, 1, 1), + (4, 1452011, 65, 1, 165000, 0, 0, 4130012, 1, 1), + (4, 1462009, 65, 1, 165000, 0, 0, 4130013, 1, 1), + (4, 1452012, 75, 2, 269000, 0, 0, 4130012, 1, 2), + (4, 1452013, 75, 2, 269000, 0, 0, 4130012, 1, 2), + (4, 1452014, 75, 2, 269000, 0, 0, 4130012, 1, 2), + (4, 1452015, 75, 2, 269000, 0, 0, 4130012, 1, 2), + (4, 1462010, 75, 2, 269000, 0, 0, 4130013, 1, 2), + (4, 1462011, 75, 2, 269000, 0, 0, 4130013, 1, 2), + (4, 1462012, 75, 2, 269000, 0, 0, 4130013, 1, 2), + (4, 1462013, 75, 2, 269000, 0, 0, 4130013, 1, 2), + (4, 1452017, 85, 2, 308000, 0, 0, 4130012, 1, 2), + (4, 1462018, 85, 2, 308000, 0, 0, 4130013, 1, 2), + (4, 1452019, 95, 2, 346000, 0, 0, 4130012, 1, 2), + (4, 1452020, 95, 2, 346000, 0, 0, 4130012, 1, 2), + (4, 1452021, 95, 2, 346000, 0, 0, 4130012, 1, 2), + (4, 1462015, 95, 2, 346000, 0, 0, 4130013, 1, 2), + (4, 1462016, 95, 2, 346000, 0, 0, 4130013, 1, 2), + (4, 1462017, 95, 2, 346000, 0, 0, 4130013, 1, 2), + (4, 1452044, 105, 3, 550000, 0, 0, 4130012, 1, 3), + (4, 1462039, 105, 3, 550000, 0, 0, 4130013, 1, 3), + (4, 1452059, 115, 3, 605000, 0, 0, 4130012, 1, 3), + (4, 1462051, 115, 3, 605000, 0, 0, 4130013, 1, 3), + (4, 1452057, 115, 3, 605000, 0, 0, 4130012, 1, 3), + (4, 1462050, 115, 3, 605000, 0, 0, 4130013, 1, 3), + (8, 1002207, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (8, 1002208, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (8, 1002209, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (8, 1002210, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (8, 1002247, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (8, 1002248, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (8, 1002249, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (8, 1002281, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (8, 1002282, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (8, 1002283, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (8, 1002284, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (8, 1002285, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (8, 1002327, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (8, 1002328, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (8, 1002329, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (8, 1002330, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (8, 1002323, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (8, 1002324, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (8, 1002325, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (8, 1002326, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (8, 1002380, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (8, 1002381, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (8, 1002382, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (8, 1002383, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (8, 1002550, 105, 3, 165000, 0, 0, 4130018, 1, 3), + (8, 1002793, 115, 3, 209000, 0, 0, 4130018, 1, 3), + (8, 1002779, 115, 3, 209000, 0, 0, 4130018, 1, 3), + (8, 1040094, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1040095, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1040096, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1040097, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1041077, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1041078, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1041079, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1041080, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1040098, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1040099, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1040100, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1041094, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1041095, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1041096, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1040105, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1040106, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1040107, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1041100, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1041101, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1041102, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1041103, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1040108, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1040109, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1040110, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1041105, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1041106, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1041107, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1040115, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1040116, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1040117, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1040118, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1041115, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1041116, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1041117, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1041118, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1060083, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1060084, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1060085, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1060086, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1061076, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1061077, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1061078, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1061079, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1060087, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1060088, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1060089, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1061093, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1061094, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1061095, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1060093, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1060094, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1060095, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1061099, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1061100, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1061101, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1061102, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1060097, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1060098, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1060099, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1061104, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1061105, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1061106, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1060104, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1060105, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1060106, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1060107, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1061114, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1061115, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1061116, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1061117, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1050096, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1050097, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1050098, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1050099, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1051090, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1051091, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1051092, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1051093, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1052072, 105, 3, 330000, 0, 0, 4130021, 1, 3), + (8, 1052163, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (8, 1052158, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (8, 1072128, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (8, 1072129, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (8, 1072130, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (8, 1072131, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (8, 1072150, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (8, 1072151, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (8, 1072152, 55, 1, 39000, 0, 0, 4130001, 1, 1), + (8, 1072161, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (8, 1072162, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (8, 1072163, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (8, 1072172, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (8, 1072173, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (8, 1072174, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (8, 1072192, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (8, 1072193, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (8, 1072194, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (8, 1072195, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (8, 1072213, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (8, 1072214, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (8, 1072215, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (8, 1072216, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (8, 1072272, 105, 3, 215000, 0, 0, 4130001, 1, 3), + (8, 1072364, 115, 3, 248000, 0, 0, 4130001, 1, 3), + (8, 1072358, 115, 3, 248000, 0, 0, 4130001, 1, 3), + (8, 1082065, 45, 1, 47000, 0, 0, 4130000, 1, 1), + (8, 1082066, 45, 1, 52000, 0, 0, 4130000, 1, 1), + (8, 1082067, 45, 1, 50000, 0, 0, 4130000, 1, 1), + (8, 1082092, 55, 1, 60000, 0, 0, 4130000, 1, 1), + (8, 1082093, 55, 1, 66000, 0, 0, 4130000, 1, 1), + (8, 1082094, 55, 1, 71000, 0, 0, 4130000, 1, 1), + (8, 1082095, 65, 1, 82000, 0, 0, 4130000, 1, 1), + (8, 1082096, 65, 1, 88000, 0, 0, 4130000, 1, 1), + (8, 1082097, 65, 1, 93000, 0, 0, 4130000, 1, 1), + (8, 1082118, 75, 2, 153000, 0, 0, 4130000, 1, 2), + (8, 1082119, 75, 2, 157000, 0, 0, 4130000, 1, 2), + (8, 1082120, 75, 2, 161000, 0, 0, 4130000, 1, 2), + (8, 1082142, 85, 2, 165000, 0, 0, 4130000, 1, 2), + (8, 1082143, 85, 2, 165000, 0, 0, 4130000, 1, 2), + (8, 1082144, 85, 2, 165000, 0, 0, 4130000, 1, 2), + (8, 1082135, 95, 2, 199000, 0, 0, 4130000, 1, 2), + (8, 1082136, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (8, 1082137, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (8, 1082138, 95, 2, 207000, 0, 0, 4130000, 1, 2), + (8, 1082167, 105, 3, 330000, 0, 0, 4130000, 1, 3), + (8, 1082242, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (8, 1082237, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (8, 1092059, 115, 3, 385000, 0, 0, 4130022, 1, 3), + (8, 1332003, 45, 1, 121000, 0, 0, 4130014, 1, 1), + (8, 1472018, 45, 1, 55000, 0, 0, 4130015, 1, 1), + (8, 1472019, 45, 1, 57000, 0, 0, 4130015, 1, 1), + (8, 1472020, 45, 1, 57000, 0, 0, 4130015, 1, 1), + (8, 1472021, 45, 1, 60000, 0, 0, 4130015, 1, 1), + (8, 1332016, 45, 1, 121000, 0, 0, 4130014, 1, 1), + (8, 1332015, 55, 1, 137000, 0, 0, 4130014, 1, 1), + (8, 1472022, 55, 1, 137000, 0, 0, 4130015, 1, 1), + (8, 1472023, 55, 1, 140000, 0, 0, 4130015, 1, 1), + (8, 1472024, 55, 1, 140000, 0, 0, 4130015, 1, 1), + (8, 1472025, 55, 1, 143000, 0, 0, 4130015, 1, 1), + (8, 1332017, 55, 1, 137000, 0, 0, 4130014, 1, 1), + (8, 1332018, 65, 1, 154000, 0, 0, 4130014, 1, 1), + (8, 1472026, 65, 1, 165000, 0, 0, 4130015, 1, 1), + (8, 1472027, 65, 1, 167000, 0, 0, 4130015, 1, 1), + (8, 1472028, 65, 1, 167000, 0, 0, 4130015, 1, 1), + (8, 1472029, 65, 1, 170000, 0, 0, 4130015, 1, 1), + (8, 1332019, 65, 1, 154000, 0, 0, 4130014, 1, 1), + (8, 1472031, 75, 2, 308000, 0, 0, 4130015, 1, 2), + (8, 1332022, 75, 2, 238000, 0, 0, 4130014, 1, 2), + (8, 1332023, 75, 2, 238000, 0, 0, 4130014, 1, 2), + (8, 1332027, 85, 2, 261000, 0, 0, 4130014, 1, 2), + (8, 1472033, 85, 2, 346000, 0, 0, 4130015, 1, 2), + (8, 1332026, 85, 2, 261000, 0, 0, 4130014, 1, 2), + (8, 1332052, 95, 2, 308000, 0, 0, 4130014, 1, 2), + (8, 1472053, 95, 2, 392000, 0, 0, 4130015, 1, 2), + (8, 1332051, 95, 2, 308000, 0, 0, 4130014, 1, 2), + (8, 1332050, 105, 3, 495000, 0, 0, 4130014, 1, 3), + (8, 1472051, 105, 3, 627000, 0, 0, 4130015, 1, 3), + (8, 1472052, 105, 3, 627000, 0, 0, 4130015, 1, 3), + (8, 1332049, 105, 3, 495000, 0, 0, 4130014, 1, 3), + (8, 1332075, 115, 3, 550000, 0, 0, 4130014, 1, 3), + (8, 1332076, 115, 3, 550000, 0, 0, 4130014, 1, 3), + (8, 1472071, 115, 3, 693000, 0, 0, 4130015, 1, 3), + (8, 1332073, 115, 3, 550000, 0, 0, 4130014, 1, 3), + (8, 1332074, 115, 3, 561000, 0, 0, 4130014, 1, 3), + (8, 1472068, 115, 3, 693000, 0, 0, 4130015, 1, 3), + (16, 1002631, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (16, 1002634, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (16, 1002637, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (16, 1002640, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (16, 1002643, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (16, 1002646, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (16, 1002649, 105, 3, 165000, 0, 0, 4130018, 1, 3), + (16, 1002794, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (16, 1002780, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (16, 1052116, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (16, 1052119, 55, 1, 55000, 0, 0, 4130021, 1, 1), + (16, 1052122, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (16, 1052125, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (16, 1052128, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (16, 1052131, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (16, 1052134, 105, 3, 330000, 0, 0, 4130021, 1, 3), + (16, 1052164, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (16, 1052159, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (16, 1072303, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (16, 1072306, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (16, 1072309, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (16, 1072312, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (16, 1072315, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (16, 1072318, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (16, 1072321, 105, 3, 198000, 0, 0, 4130001, 1, 3), + (16, 1072365, 115, 3, 220000, 0, 0, 4130001, 1, 3), + (16, 1072359, 115, 3, 220000, 0, 0, 4130001, 1, 3), + (16, 1082198, 45, 1, 47000, 0, 0, 4130000, 1, 1), + (16, 1082201, 55, 1, 60000, 0, 0, 4130000, 1, 1), + (16, 1082204, 65, 1, 82000, 0, 0, 4130000, 1, 1), + (16, 1082207, 75, 2, 153000, 0, 0, 4130000, 1, 2), + (16, 1082210, 85, 2, 176000, 0, 0, 4130000, 1, 2), + (16, 1082213, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (16, 1082216, 105, 3, 330000, 0, 0, 4130000, 1, 3), + (16, 1082243, 115, 3, 369000, 0, 0, 4130000, 1, 3), + (16, 1082238, 115, 3, 369000, 0, 0, 4130000, 1, 3), + (16, 1482007, 45, 1, 71000, 0, 0, 4130016, 1, 1), + (16, 1492007, 45, 1, 77000, 0, 0, 4130017, 1, 1), + (16, 1482008, 55, 1, 132000, 0, 0, 4130016, 1, 1), + (16, 1492008, 55, 1, 137000, 0, 0, 4130017, 1, 1), + (16, 1482009, 65, 1, 165000, 0, 0, 4130016, 1, 1), + (16, 1492009, 65, 1, 170000, 0, 0, 4130017, 1, 1), + (16, 1482010, 75, 2, 269000, 0, 0, 4130016, 1, 2), + (16, 1492010, 75, 2, 269000, 0, 0, 4130017, 1, 2), + (16, 1482011, 85, 2, 300000, 0, 0, 4130016, 1, 2), + (16, 1492011, 85, 2, 308000, 0, 0, 4130017, 1, 2), + (16, 1482012, 95, 2, 338000, 0, 0, 4130016, 1, 2), + (16, 1492012, 95, 2, 346000, 0, 0, 4130017, 1, 2), + (16, 1482013, 105, 3, 561000, 0, 0, 4130016, 1, 3), + (16, 1492013, 105, 3, 572000, 0, 0, 4130017, 1, 3), + (16, 1482024, 115, 3, 616000, 0, 0, 4130016, 1, 3), + (16, 1492025, 115, 3, 627000, 0, 0, 4130017, 1, 3), + (16, 1482023, 115, 3, 616000, 0, 0, 4130016, 1, 3), + (16, 1492023, 115, 3, 627000, 0, 0, 4130017, 1, 3); INSERT IGNORE INTO `makerrecipedata` (`itemid`, `req_item`, `count`) VALUES (4250000, 4021007, 1), @@ -15928,6 +15928,62 @@ INSERT IGNORE INTO `makerrewarddata` (`itemid`, `rewardid`, `quantity`, `prob`) (4251402, 4251402, 1, 1), (4251402, 4251401, 9, 4); +# generated with the MapleSkillMakerReagentIndexer feature + +CREATE TABLE IF NOT EXISTS `makerreagentdata` ( + `itemid` int(11) NOT NULL, + `stat` varchar(20) NOT NULL, + `value` smallint(6) NOT NULL, + PRIMARY KEY (`itemid`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +INSERT IGNORE INTO `makerreagentdata` (`itemid`, `stat`, `value`) VALUES + (4250000, "incPAD", 1), + (4250001, "incPAD", 2), + (4250002, "incPAD", 3), + (4250100, "incMAD", 1), + (4250101, "incMAD", 2), + (4250102, "incMAD", 3), + (4250200, "incACC", 2), + (4250201, "incACC", 3), + (4250202, "incACC", 5), + (4250300, "incEVA", 2), + (4250301, "incEVA", 3), + (4250302, "incEVA", 5), + (4250400, "incSpeed", 2), + (4250401, "incSpeed", 3), + (4250402, "incSpeed", 5), + (4250500, "incJump", 1), + (4250501, "incJump", 2), + (4250502, "incJump", 3), + (4250600, "incMaxHP", 10), + (4250601, "incMaxHP", 20), + (4250602, "incMaxHP", 30), + (4250700, "incMaxMP", 10), + (4250701, "incMaxMP", 20), + (4250702, "incMaxMP", 30), + (4250800, "incSTR", 2), + (4250801, "incSTR", 3), + (4250802, "incSTR", 5), + (4250900, "incINT", 2), + (4250901, "incINT", 3), + (4250902, "incINT", 5), + (4251000, "incLUK", 2), + (4251001, "incLUK", 3), + (4251002, "incLUK", 5), + (4251100, "incDEX", 2), + (4251101, "incDEX", 3), + (4251102, "incDEX", 5), + (4251200, "incReqLevel", -1), + (4251201, "incReqLevel", -2), + (4251202, "incReqLevel", -3), + (4251300, "randOption", 1), + (4251301, "randOption", 2), + (4251302, "randOption", 3), + (4251400, "randStat", 2), + (4251401, "randStat", 3), + (4251402, "randStat", 5); + CREATE TABLE IF NOT EXISTS `marriages` ( `marriageid` int(10) unsigned NOT NULL AUTO_INCREMENT, `husbandid` int(10) unsigned NOT NULL DEFAULT '0', diff --git a/sql/db_drops.sql b/sql/db_drops.sql index 516f64d68d..3b8b53bbc0 100644 --- a/sql/db_drops.sql +++ b/sql/db_drops.sql @@ -14125,8 +14125,8 @@ USE `maplesolaxia`; (7140000, 1002640, 1, 1, 0, 700), (9300322, 1002640, 1, 1, 0, 40000), (9301004, 1002640, 1, 1, 0, 700), -(8140002, 4000240, 1, 1, 0, 200000), -(9500163, 4000240, 1, 1, 0, 200000), +(8140002, 4000240, 1, 1, 0, 60000), +(9500163, 4000240, 1, 1, 0, 60000), (8140002, 2070005, 1, 1, 0, 400), (9500163, 2070005, 1, 1, 0, 400), (8140002, 2040707, 1, 1, 0, 750), @@ -18142,13 +18142,13 @@ USE `maplesolaxia`; (8820012, 2290106, 1, 1, 0, 1000), (8820013, 2290106, 1, 1, 0, 1000), (8820014, 2290106, 1, 1, 0, 1000), -(8820000, 4021010, 1, 1, 0, 7000), -(8820001, 4021010, 1, 1, 0, 7000), -(8820010, 4021010, 1, 1, 0, 7000), -(8820011, 4021010, 1, 1, 0, 7000), -(8820012, 4021010, 1, 1, 0, 7000), -(8820013, 4021010, 1, 1, 0, 7000), -(8820014, 4021010, 1, 1, 0, 7000), +(8820000, 4021010, 1, 1, 0, 40000), +(8820001, 4021010, 1, 1, 0, 40000), +(8820010, 4021010, 1, 1, 0, 40000), +(8820011, 4021010, 1, 1, 0, 40000), +(8820012, 4021010, 1, 1, 0, 40000), +(8820013, 4021010, 1, 1, 0, 40000), +(8820014, 4021010, 1, 1, 0, 40000), (8820000, 1122011, 1, 1, 0, 40000), (8820001, 1122011, 1, 1, 0, 40000), (8820010, 1122011, 1, 1, 0, 700), @@ -19569,7 +19569,7 @@ USE `maplesolaxia`; (9400583, 4030012, 1, 1, 0, 300), (9400583, 4010006, 1, 1, 0, 40000), (9400583, 4020007, 1, 1, 0, 40000), -(9400583, 4007004, 1, 1, 0, 40000), +(9400583, 4007004, 1, 1, 0, 10000), (9400583, 2000003, 1, 1, 0, 40000), (9400583, 2000005, 1, 1, 0, 20000), (9400583, 2050004, 1, 1, 0, 20000), @@ -19597,8 +19597,8 @@ USE `maplesolaxia`; (9400549, 0, 2000, 3000, 0, 400000), (9400638, 0, 100, 200, 0, 400000), (9400638, 4011007, 1, 1, 0, 1000), -(9400638, 4007001, 1, 1, 0, 40000), -(9400638, 4007000, 1, 1, 0, 40000), +(9400638, 4007001, 1, 1, 0, 10000), +(9400638, 4007000, 1, 1, 0, 10000), (9400638, 2000001, 1, 1, 0, 40000), (9400638, 2022244, 1, 1, 0, 40000), (9400638, 2010003, 1, 1, 0, 40000), @@ -19608,9 +19608,9 @@ USE `maplesolaxia`; (9400638, 1041008, 1, 1, 0, 2000), (9400639, 0, 200, 250, 0, 400000), (9400639, 4000018, 1, 1, 0, 400000), -(9400639, 4130018, 1, 1, 0, 40000), -(9400639, 4130009, 1, 1, 0, 40000), -(9400639, 4007003, 1, 1, 0, 40000), +(9400639, 4130018, 1, 1, 0, 5000), +(9400639, 4130009, 1, 1, 0, 5000), +(9400639, 4007003, 1, 1, 0, 10000), (9400639, 2000002, 1, 1, 0, 40000), (9400639, 2000006, 1, 1, 0, 40000), (9400639, 2000002, 1, 1, 0, 40000), diff --git a/src/client/command/Commands.java b/src/client/command/Commands.java index c6c33e124a..afc55f628b 100644 --- a/src/client/command/Commands.java +++ b/src/client/command/Commands.java @@ -1665,17 +1665,27 @@ public class Commands { break; case "givenx": - if (sub.length < 3){ - player.yellowMessage("Syntax: !givenx "); + if (sub.length < 2){ + player.yellowMessage("Syntax: !givenx [] "); break; } + + String recv; + int value; + if(sub.length > 2) { + recv = sub[1]; + value = Integer.parseInt(sub[2]); + } else { + recv = c.getPlayer().getName(); + value = Integer.parseInt(sub[1]); + } - victim = cserv.getPlayerStorage().getCharacterByName(sub[1]); + victim = cserv.getPlayerStorage().getCharacterByName(recv); if(victim != null) { - victim.getCashShop().gainCash(1, Integer.parseInt(sub[2])); + victim.getCashShop().gainCash(1, value); player.message("NX given."); } else { - player.message("Player '" + sub[1] + "' could not be found on this channel."); + player.message("Player '" + recv + "' could not be found on this channel."); } break; @@ -1695,17 +1705,27 @@ public class Commands { break; case "givems": - if (sub.length < 3){ - player.yellowMessage("Syntax: !givems "); + if (sub.length < 2){ + player.yellowMessage("Syntax: !givems [] "); break; } - victim = cserv.getPlayerStorage().getCharacterByName(sub[1]); + String recv_; + int value_; + if(sub.length > 2) { + recv_ = sub[1]; + value_ = Integer.parseInt(sub[2]); + } else { + recv_ = c.getPlayer().getName(); + value_ = Integer.parseInt(sub[1]); + } + + victim = cserv.getPlayerStorage().getCharacterByName(recv_); if(victim != null) { - victim.gainMeso(Integer.parseInt(sub[2]), true); + victim.gainMeso(value_, true); player.message("MESO given."); } else { - player.message("Player '" + sub[1] + "' could not be found on this channel."); + player.message("Player '" + recv_ + "' could not be found on this channel."); } break; diff --git a/src/constants/EquipType.java b/src/constants/EquipType.java new file mode 100644 index 0000000000..1c839e718d --- /dev/null +++ b/src/constants/EquipType.java @@ -0,0 +1,94 @@ +/* + * This file is part of the MapleSolaxiaV2 Maple Story Server + * + * Copyright (C) 2017 RonanLana + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package constants; + +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author RonanLana + */ +public enum EquipType { + UNDEFINED(-1), + ACCESSORY(0), + CAP(100), + CAPE(110), + COAT(104), + FACE(2), + GLOVES(108), + HAIR(3), + LONGCOAT(105), + PANTS(106), + PET_EQUIP(180), + PET_EQUIP_FIELD(181), + PET_EQUIP_LABEL(182), + PET_EQUIP_QUOTE(183), + RING(111), + SHIELD(109), + SHOES(107), + TAMING(190), + TAMING_SADDLE(191), + SWORD(1302), + AXE(1312), + MACE(1322), + DAGGER(1332), + WAND(1372), + STAFF(1382), + SWORD_2H(1402), + AXE_2H(1412), + MACE_2H(1422), + SPEAR(1432), + POLEARM(1442), + BOW(1452), + CROSSBOW(1462), + CLAW(1472), + KNUCKLER(1482), + PISTOL(1492); + + private final int i; + private static final Map map = new HashMap(34); + + private EquipType(int val) { + this.i = val; + } + + public int getValue() { + return i; + } + + static { + for (EquipType eqEnum : EquipType.values()) { + map.put(eqEnum.i, eqEnum); + } + } + + public static EquipType getEquipTypeById(int itemid) { + EquipType ret; + int val = itemid / 100000; + + if(val == 13 || val == 14) { + ret = map.get(itemid / 1000); + } else { + ret = map.get(itemid / 10000); + } + + return (ret != null) ? ret : EquipType.UNDEFINED; + } +} \ No newline at end of file diff --git a/src/constants/ItemConstants.java b/src/constants/ItemConstants.java index 80347f53cf..3584662c6b 100644 --- a/src/constants/ItemConstants.java +++ b/src/constants/ItemConstants.java @@ -89,6 +89,10 @@ public final class ItemConstants { return itemId / 1000 == 5000; } + public static boolean isAccessory(int itemId) { + return itemId >= 1110000 && itemId < 1140000; + } + public static boolean isTownScroll(int itemId) { return itemId >= 2030000 && itemId < 2030021; } @@ -135,4 +139,16 @@ public final class ItemConstants { } return MapleInventoryType.getByType(type); } + + public static boolean isMakerReagent(int itemId) { + return itemId / 10000 == 425; + } + + public static boolean isOverall(int itemId) { + return itemId / 10000 == 105; + } + + public static boolean isWeapon(int itemId) { + return itemId >= 1302000 && itemId < 1492024; + } } diff --git a/src/constants/ServerConstants.java b/src/constants/ServerConstants.java index 2dc24b1934..788250fd3c 100644 --- a/src/constants/ServerConstants.java +++ b/src/constants/ServerConstants.java @@ -65,6 +65,7 @@ public class ServerConstants { public static final boolean USE_ERASE_UNTRADEABLE_DROP = true; //Forces flagged untradeable items to disappear when dropped. public static final boolean USE_ERASE_PET_ON_EXPIRATION = false;//Forces pets to be removed from inventory when expire time comes, rather than converting it to a doll. public static final boolean USE_BUFF_MOST_SIGNIFICANT = true; //When applying buffs, the player will stick with the highest stat boost among the listed, rather than overwriting stats. + public static final boolean USE_MAKER_FEE_HEURISTICS = true; //Apply compiled values for stimulants and reagents into the Maker fee calculations (max error revolves around 50k mesos). Set false to use basic constant values instead (results are never higher than requested by the client-side). //Server Rates And Experience public static final int EXP_RATE = 10; @@ -86,7 +87,7 @@ public class ServerConstants { public static final long BLOCK_NPC_RACE_CONDT = (long)(0.5 * 1000); //Time the player client must wait before reopening a conversation with an NPC. public static final long PET_LOOT_UPON_ATTACK = (long)(0.7 * 1000); //Time the pet must wait before trying to pick items up. - //Dangling Items Configuration + //Dangling Items/Locks Configuration public static final int ITEM_EXPIRE_TIME = 3 * 60 * 1000; //Time before items start disappearing. Recommended to be set up to 3 minutes. public static final int ITEM_MONITOR_TIME = 5 * 60 * 1000; //Interval between item monitoring tasks on maps, which checks for dangling (null) item objects on the map item history. public static final int LOCK_MONITOR_TIME = 30 * 1000; //Waiting time for a lock to be released. If it reach timed out, a critical server deadlock has made present. @@ -98,7 +99,7 @@ public class ServerConstants { public static final boolean USE_PERFECT_GM_SCROLL = true; //Scrolls from GMs never uses up slots nor fails. public static final boolean USE_PERFECT_SCROLLING = true; //Scrolls doesn't use slots upon failure. public static final boolean USE_ENHANCED_CHSCROLL = true; //Equips even more powerful with chaos upgrade. - public static final boolean USE_ENHANCED_CRAFTING = true; //Applys chaos scroll on every equip crafted. + public static final boolean USE_ENHANCED_CRAFTING = true; //Apply chaos scroll on every equip crafted. public static final int SCROLL_CHANCE_RATE = 0; //Number of rolls for success on a scroll, set 0 for default. public static final int CHSCROLL_STAT_RANGE = 6; //Stat upgrade range (-N, N) on chaos scrolls. @@ -118,10 +119,12 @@ public class ServerConstants { public static final boolean USE_EQUIPMNT_LVLUP_SLOTS = true;//Equips can upgrade slots at level up. public static final boolean USE_EQUIPMNT_LVLUP_POWER = true;//Enable more powerful stat upgrades at equip level up. public static final boolean USE_SPIKES_AVOID_BANISH = true; //Shoes equipped with spikes prevents mobs from banishing wearer. - public static final boolean USE_CHAIR_EXTRAHEAL = true; //Enable map chairs to further recover player's HP and MP (player must have the Chair Mastery skill). public static final int MAX_EQUIPMNT_LVLUP_STAT_UP = 10000; //Max stat upgrade an equipment can have on a levelup. public static final int MAX_EQUIPMNT_STAT = 32767; //Max stat on an equipment by leveling up. public static final int USE_EQUIPMNT_LVLUP = 7; //All equips lvlup at max level of N, set 1 to disable. + + //Map-Chair Configuration + public static final boolean USE_CHAIR_EXTRAHEAL = true; //Enable map chairs to further recover player's HP and MP (player must have the Chair Mastery skill). public static final byte CHAIR_EXTRA_HEAL_HP = 70; //Each chair extra heal proc increasing HP. public static final byte CHAIR_EXTRA_HEAL_MP = 42; //Each chair extra heal proc increasing MP. diff --git a/src/net/server/channel/handlers/MakerSkillHandler.java b/src/net/server/channel/handlers/MakerSkillHandler.java index cad5ca2c6e..8f5b448560 100644 --- a/src/net/server/channel/handlers/MakerSkillHandler.java +++ b/src/net/server/channel/handlers/MakerSkillHandler.java @@ -21,12 +21,27 @@ */ package net.server.channel.handlers; +import java.util.LinkedList; +import java.util.List; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; + +import constants.ItemConstants; import client.MapleClient; +import client.inventory.Equip; +import client.inventory.Item; +import client.inventory.MapleInventoryType; +import constants.EquipType; +import constants.ServerConstants; +import java.text.DecimalFormat; +import java.text.NumberFormat; import net.AbstractMaplePacketHandler; import server.MapleInventoryManipulator; import server.MapleItemInformationProvider; import server.MakerItemFactory; import server.MakerItemFactory.MakerItemCreateEntry; +import tools.FilePrinter; import tools.Pair; import tools.MaplePacketCreator; import tools.data.input.SeekableLittleEndianAccessor; @@ -36,50 +51,317 @@ import tools.data.input.SeekableLittleEndianAccessor; * @author Jay Estrella, Ronan */ public final class MakerSkillHandler extends AbstractMaplePacketHandler { - private MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); - + private static MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); + @Override public final void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) { - slea.readInt(); + int type = slea.readInt(); int toCreate = slea.readInt(); + int toDisassemble = -1, pos = -1; + boolean makerSucceeded = true; + + MakerItemCreateEntry recipe; + Map reagentids = new LinkedHashMap<>(); + int stimulantid = -1; + + if(type == 3) { // building monster crystal + int fromLeftover = toCreate; + toCreate = ii.getMakerCrystalFromLeftover(toCreate); + if(toCreate == -1) { + c.announce(MaplePacketCreator.serverNotice(1, ii.getName(toCreate) + " is unavailable for Monster Crystal conversion.")); + return; + } + + recipe = MakerItemFactory.generateLeftoverCrystalEntry(fromLeftover); + } else if(type == 4) { // disassembling + slea.readInt(); // 1... probably inventory type + pos = slea.readInt(); + + Item it = c.getPlayer().getInventory(MapleInventoryType.EQUIP).getItem((short) pos); + if(it != null && it.getItemId() == toCreate) { + Pair p; + + if((p = generateDisassemblyInfo(toCreate)) != null) { + recipe = MakerItemFactory.generateDisassemblyCrystalEntry(p.getLeft(), p.getRight()); + toDisassemble = toCreate; + toCreate = ii.getMakerCrystalFromEquip(toCreate); + } else { + c.announce(MaplePacketCreator.serverNotice(1, ii.getName(toCreate) + " is unavailable for Monster Crystal disassembly.")); + return; + } + } else { + c.announce(MaplePacketCreator.serverNotice(1, "An unknown error occurred when trying to apply that item for disassembly.")); + return; + } + } else { + if(toCreate < 2000000) { // only equips uses stimulant and reagents + if(slea.readByte() != 0) { // stimulant + stimulantid = getMakerStimulant(toCreate); + if(!c.getAbstractPlayerInteraction().haveItem(stimulantid)) { + stimulantid = -1; + } + } + + int reagents = Math.min(slea.readInt(), getMakerReagentSlots(toCreate)); + for(int i = 0; i < reagents; i++) { // crystals + int reagentid = slea.readInt(); + if(ItemConstants.isMakerReagent(reagentid)) { + Short r = reagentids.get(reagentid); + if(r == null) { + reagentids.put(reagentid, (short) 1); + } else { + reagentids.put(reagentid, (short) (r + 1)); + } + } + } + + List> toUpdate = new LinkedList<>(); + for(Entry r : reagentids.entrySet()) { + int qty = c.getAbstractPlayerInteraction().getItemQuantity(r.getKey()); + + if(qty < r.getValue()) { + toUpdate.add(new Pair<>(r.getKey(), (short) qty)); + } + } + + // remove those not present on player inventory + if(!toUpdate.isEmpty()) { + for(Pair r : toUpdate) { + if(r.getRight() > 0) { + reagentids.put(r.getLeft(), r.getRight()); + } else { + reagentids.remove(r.getLeft()); + } + } + } + + if(!reagentids.isEmpty()) removeOddMakerReagents(toCreate, reagentids); + } + + recipe = MakerItemFactory.getItemCreateEntry(toCreate, stimulantid, reagentids); + } - MakerItemCreateEntry recipe = MakerItemFactory.getItemCreateEntry(toCreate); short createStatus = getCreateStatus(c, recipe); switch(createStatus) { - case 4: // no req skill level - c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough Maker level to complete this operation.")); + case -1:// non-available for Maker itemid has been tried to forge + FilePrinter.printError(FilePrinter.EXPLOITS, "Player " + c.getPlayer().getName() + " tried to craft itemid " + toCreate + " using the Maker skill."); + c.announce(MaplePacketCreator.serverNotice(1, "The requested item could not be crafted on this operation.")); break; - - case 3: // no meso - c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough mesos to complete this operation.")); - break; - - case 2: // no req level - c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough level to complete this operation.")); - break; - + case 1: // no items c.announce(MaplePacketCreator.serverNotice(1, "You don't have all required items in your inventory to make " + recipe.getRewardAmount() + " " + ii.getName(toCreate) + ".")); break; + case 2: // no meso + NumberFormat nf = new DecimalFormat("#,###,###,###"); + c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough mesos (" + nf.format(recipe.getCost()) + ") to complete this operation.")); + break; + + case 3: // no req level + c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough level to complete this operation.")); + break; + + case 4: // no req skill level + c.announce(MaplePacketCreator.serverNotice(1, "You don't have enough Maker level to complete this operation.")); + break; + default: - if (!c.getPlayer().getInventory(ii.getInventoryType(toCreate)).isFull()) { + if (MapleInventoryManipulator.checkSpace(c, toCreate, (short) recipe.getRewardAmount(), "")) { for (Pair p : recipe.getReqItems()) { - int toRemove = p.getLeft(); - MapleInventoryManipulator.removeById(c, ii.getInventoryType(toRemove), toRemove, p.getRight(), false, false); + c.getAbstractPlayerInteraction().gainItem(p.getLeft(), (short) -p.getRight()); + } + + if(toDisassemble != -1) { + MapleInventoryManipulator.removeFromSlot(c, MapleInventoryType.EQUIP, (short) pos, (short) 1, false); + c.announce(MaplePacketCreator.getShowItemGain(toDisassemble, (short) -1, true)); + } + + int cost = recipe.getCost(); + if(stimulantid == -1 && reagentids.isEmpty()) { + if(cost > 0) c.getPlayer().gainMeso(-cost); + + c.getPlayer().setCS(true); + c.getAbstractPlayerInteraction().gainItem(toCreate, (short) recipe.getRewardAmount()); + c.getPlayer().setCS(false); + } else { + if(stimulantid != -1) c.getAbstractPlayerInteraction().gainItem(stimulantid, (short) -1); + if(!reagentids.isEmpty()) { + for(Entry r : reagentids.entrySet()) { + c.getAbstractPlayerInteraction().gainItem(r.getKey(), (short) (-1 * r.getValue())); + } + } + + if(cost > 0) c.getPlayer().gainMeso(-cost); + makerSucceeded = addBoostedMakerItem(c, toCreate, stimulantid, reagentids); + } + + if(makerSucceeded) c.announce(MaplePacketCreator.serverNotice(1, "You have successfully created " + recipe.getRewardAmount() + " " + ii.getName(toCreate) + ".")); + else c.getPlayer().dropMessage(5, "The Maker skill lights up, but the skill winds up as if nothing happened."); + + c.announce(MaplePacketCreator.showMakerEffect(makerSucceeded)); + c.getPlayer().getMap().broadcastMessage(c.getPlayer(), MaplePacketCreator.showForeignMakerEffect(c.getPlayer().getId(), makerSucceeded), false); + + if(toCreate == 4260003 && c.getPlayer().getQuestStatus(6033) == 1) { + c.getAbstractPlayerInteraction().setQuestProgress(6033, 1); } - MapleInventoryManipulator.addById(c, toCreate, (short) recipe.getRewardAmount()); - - c.announce(MaplePacketCreator.serverNotice(1, "You have created " + recipe.getRewardAmount() + " " + ii.getName(toCreate) + ".")); - c.announce(MaplePacketCreator.showMakerEffect()); } else { c.announce(MaplePacketCreator.serverNotice(1, "Your inventory is full.")); } } } - private short getCreateStatus(MapleClient c, MakerItemCreateEntry recipe) { + // checks and prevents hackers from PE'ing Maker operations with invalid operations + private static void removeOddMakerReagents(int toCreate, Map reagentids) { + Map reagentType = new LinkedHashMap<>(); + List toRemove = new LinkedList<>(); + + boolean isWeapon = ItemConstants.isWeapon(toCreate); + + for(Entry r : reagentids.entrySet()) { + int curRid = r.getKey(); + int type = r.getKey() / 100; + + if(type < 42502 && !isWeapon) { // only weapons should gain w.att/m.att from these. + toRemove.add(curRid); + } else { + Integer tableRid = reagentType.get(type); + + if(tableRid != null) { + if(tableRid < curRid) { + toRemove.add(tableRid); + reagentType.put(type, curRid); + } else { + toRemove.add(curRid); + } + } else { + reagentType.put(type, curRid); + } + } + } + + // removing less effective gems of repeated type + for(Integer i : toRemove) { + reagentids.remove(i); + } + + // only quantity 1 of each gem will be accepted by the Maker skill + for(Integer i : reagentids.keySet()) { + reagentids.put(i, (short) 1); + } + } + + private static int getMakerReagentSlots(int itemId) { + try { + int eqpLevel = ii.getEquipStats(itemId).get("reqLevel"); + + if(eqpLevel < 78) { + return 1; + } else if(eqpLevel >= 78 && eqpLevel < 108) { + return 2; + } else { + return 3; + } + } catch(NullPointerException npe) { + return 0; + } + } + + private static int getMakerStimulant(int itemId) { + EquipType et = EquipType.getEquipTypeById(itemId); + + switch(et) { + case GLOVES: + return 4130000; + + case SHOES: + return 4130001; + + case SWORD: + return 4130002; + + case AXE: + return 4130003; + + case MACE: + return 4130004; + + case SWORD_2H: + return 4130005; + + case AXE_2H: + return 4130006; + + case MACE_2H: + return 4130007; + + case SPEAR: + return 4130008; + + case POLEARM: + return 4130009; + + case WAND: + return 4130010; + + case STAFF: + return 4130011; + + case BOW: + return 4130012; + + case CROSSBOW: + return 4130013; + + case DAGGER: + return 4130014; + + case CLAW: + return 4130015; + + case KNUCKLER: + return 4130016; + + case PISTOL: + return 4130017; + + case CAP: + return 4130018; + + case COAT: + return 4130019; + + case PANTS: + return 4130020; + + case LONGCOAT: + return 4130021; + + case SHIELD: + return 4130022; + + default: + return -1; + } + } + + private static Pair generateDisassemblyInfo(int itemId) { + int recvFee = ii.getMakerDisassembledFee(itemId); + if(recvFee > -1) { + int recvQty = ii.getMakerDisassembledQuantity(itemId); + if(recvQty > 0) { + return new Pair<>(recvFee, recvQty); + } + } + + return null; + } + + private static short getCreateStatus(MapleClient c, MakerItemCreateEntry recipe) { + if(recipe == null) { + return -1; + } + if(!hasItems(c, recipe)) { return 1; } @@ -99,7 +381,7 @@ public final class MakerSkillHandler extends AbstractMaplePacketHandler { return 0; } - private boolean hasItems(MapleClient c, MakerItemCreateEntry recipe) { + private static boolean hasItems(MapleClient c, MakerItemCreateEntry recipe) { for (Pair p : recipe.getReqItems()) { int itemId = p.getLeft(); if (c.getPlayer().getInventory(ii.getInventoryType(itemId)).countById(itemId) < p.getRight()) { @@ -108,4 +390,84 @@ public final class MakerSkillHandler extends AbstractMaplePacketHandler { } return true; } + + private static boolean addBoostedMakerItem(MapleClient c, int itemid, int stimulantid, Map reagentids) { + if(stimulantid != -1 && !ii.rollSuccessChance(90.0)) { + return false; + } + + Item item = ii.getEquipById(itemid); + if(item == null) return false; + + Equip eqp = (Equip)item; + if(ItemConstants.isAccessory(item.getItemId()) && eqp.getUpgradeSlots() <= 0) eqp.setUpgradeSlots(3); + + if(ServerConstants.USE_ENHANCED_CRAFTING == true) { + if(!(c.getPlayer().isGM() && ServerConstants.USE_PERFECT_GM_SCROLL)) { + eqp.setUpgradeSlots((byte)(eqp.getUpgradeSlots() + 1)); + } + item = MapleItemInformationProvider.getInstance().scrollEquipWithId(eqp, 2049100, true, 0, c.getPlayer().isGM()); + } + + if(!reagentids.isEmpty()) { + Map stats = new LinkedHashMap<>(); + List randOption = new LinkedList<>(); + List randStat = new LinkedList<>(); + + for(Entry r : reagentids.entrySet()) { + Pair reagentBuff = ii.getMakerReagentStatUpgrade(r.getKey()); + + if(reagentBuff != null) { + String s = reagentBuff.getLeft(); + + if(s.substring(0, 4).contains("rand")) { + if(s.substring(4).equals("Stat")) { + randStat.add((short) (reagentBuff.getRight() * r.getValue())); + } else { + randOption.add((short) (reagentBuff.getRight() * r.getValue())); + } + } else { + String stat = s.substring(3); + + if(!stat.equals("ReqLevel")) { // improve req level... really? + switch (stat) { + case "MaxHP": + stat = "MHP"; + break; + + case "MaxMP": + stat = "MMP"; + break; + } + + Integer d = stats.get(stat); + if(d == null) { + stats.put(stat, reagentBuff.getRight() * r.getValue()); + } else { + stats.put(stat, d + (reagentBuff.getRight() * r.getValue())); + } + } + } + } + } + + ii.improveEquipStats(eqp, stats); + + for(Short s : randStat) { + ii.scrollOptionEquipWithChaos(eqp, s, false); + } + + for(Short s : randOption) { + ii.scrollOptionEquipWithChaos(eqp, s, true); + } + } + + if(stimulantid != -1) { + eqp = ii.randomizeUpgradeStats(eqp); + } + + MapleInventoryManipulator.addFromDrop(c, item, false, -1); + c.announce(MaplePacketCreator.getShowItemGain(itemid, (short) 1, true)); + return true; + } } diff --git a/src/scripting/AbstractPlayerInteraction.java b/src/scripting/AbstractPlayerInteraction.java index 381e5c8c53..91cd1d41ba 100644 --- a/src/scripting/AbstractPlayerInteraction.java +++ b/src/scripting/AbstractPlayerInteraction.java @@ -342,14 +342,9 @@ public class AbstractPlayerInteraction { public Item evolvePet(byte slot, int afterId) { MaplePet evolved = null; - MaplePet target = null; - Item tmp; + MaplePet target; - long period = 90; //refreshes expiration date: 90 days - period *= 24; - period *= 60; - period *= 60; - period *= 1000; + long period = 90 * 24 * 60 * 60 * 1000; //refreshes expiration date: 90 days target = getPlayer().getPet(slot); if(target == null) { @@ -357,7 +352,7 @@ public class AbstractPlayerInteraction { return(null); } - tmp = gainItem(afterId, (short)1, false, true, period, target); + Item tmp = gainItem(afterId, (short) 1, false, true, period, target); getPlayer().unequipPet(target, true, false); /* @@ -410,18 +405,13 @@ public class AbstractPlayerInteraction { return gainItem(id, quantity, randomStats, showMessage, expires, null); } - private boolean isAccessory(int id) { - int val = id / 10000; - return(val >= 111 && val <= 113); - } - - public Item gainItem(int id, short quantity, boolean randomStats, boolean showMessage, long expires, MaplePet from) { + public Item gainItem(int id, short quantity, boolean randomStats, boolean showMessage, long expires, MaplePet from) { Item item = null; - MaplePet evolved = null; + MaplePet evolved; int petId = -1; if (quantity >= 0) { - if (id >= 5000000 && id <= 5000100) { + if (ItemConstants.isPet(id)) { petId = MaplePet.createPet(id); if(from != null) { @@ -451,12 +441,13 @@ public class AbstractPlayerInteraction { if(item != null) { Equip it = (Equip)item; - if(isAccessory(item.getItemId()) && it.getUpgradeSlots() <= 0) it.setUpgradeSlots(3); + if(ItemConstants.isAccessory(item.getItemId()) && it.getUpgradeSlots() <= 0) it.setUpgradeSlots(3); if(ServerConstants.USE_ENHANCED_CRAFTING == true && c.getPlayer().getCS() == true) { Equip eqp = (Equip)item; - eqp.setUpgradeSlots((byte)(eqp.getUpgradeSlots() + 1)); - + if(!(c.getPlayer().isGM() && ServerConstants.USE_PERFECT_GM_SCROLL)) { + eqp.setUpgradeSlots((byte)(eqp.getUpgradeSlots() + 1)); + } item = MapleItemInformationProvider.getInstance().scrollEquipWithId(item, 2049100, true, 0, c.getPlayer().isGM()); } } diff --git a/src/server/CashShop.java b/src/server/CashShop.java index f21a14cae5..6160ea93e8 100644 --- a/src/server/CashShop.java +++ b/src/server/CashShop.java @@ -104,8 +104,18 @@ public class CashShop { } if (ItemConstants.EXPIRING_ITEMS) { - if(itemId == 5211048 || itemId == 5360042) { // 4 Hour 2X coupons, the period is 1, but we don't want them to last a day. - item.setExpiration(System.currentTimeMillis() + (1000 * 60 * 60 * 4)); + if(period == 1) { + if(itemId == 5211048 || itemId == 5360042) { // 4 Hour 2X coupons, the period is 1, but we don't want them to last a day. + item.setExpiration(System.currentTimeMillis() + (1000 * 60 * 60 * 4)); + /* + } else if(itemId == 5211047 || itemId == 5360014) { // 3 Hour 2X coupons, unused as of now + item.setExpiration(System.currentTimeMillis() + (1000 * 60 * 60 * 3)); + */ + } else if(itemId == 5211060) { // 2 Hour 3X coupons. + item.setExpiration(System.currentTimeMillis() + (1000 * 60 * 60 * 2)); + } else { + item.setExpiration(System.currentTimeMillis() + (1000 * 60 * 60 * 24)); + } } else { item.setExpiration(System.currentTimeMillis() + (1000 * 60 * 60 * 24 * period)); } diff --git a/src/server/MakerItemFactory.java b/src/server/MakerItemFactory.java index f920e88cb3..c30a8d84e2 100644 --- a/src/server/MakerItemFactory.java +++ b/src/server/MakerItemFactory.java @@ -21,75 +21,147 @@ */ package server; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; +import constants.EquipType; +import constants.ServerConstants; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; -import tools.DatabaseConnection; +import java.util.Map.Entry; import tools.Pair; /** * - * @author Jay Estrella + * @author Jay Estrella, Ronan */ public class MakerItemFactory { - private static Map createCache = new HashMap(); - - public static MakerItemCreateEntry getItemCreateEntry(int toCreate) { - if (createCache.get(toCreate) != null) { - return createCache.get(toCreate); - } else { - try { - Connection con = DatabaseConnection.getConnection(); - PreparedStatement ps = con.prepareStatement("SELECT req_level, req_maker_level, req_meso, quantity FROM makercreatedata WHERE itemid = ?"); - ps.setInt(1, toCreate); - ResultSet rs = ps.executeQuery(); - int reqLevel = 0; - int reqMakerLevel = 0; - int cost = 0; - int toGive = 0; - if (rs.next()) { - reqLevel = rs.getInt("req_level"); - reqMakerLevel = rs.getInt("req_maker_level"); - cost = rs.getInt("req_meso"); - toGive = rs.getInt("quantity"); - } - ps.close(); - rs.close(); - MakerItemCreateEntry ret = new MakerItemCreateEntry(cost, reqLevel, reqMakerLevel, toGive); - ps = con.prepareStatement("SELECT req_item, count FROM makerrecipedata WHERE itemid = ?"); - ps.setInt(1, toCreate); - rs = ps.executeQuery(); - while (rs.next()) { - ret.addReqItem(rs.getInt("req_item"), rs.getInt("count")); - } - rs.close(); - ps.close(); - con.close(); - createCache.put(toCreate, ret); - } catch (SQLException sqle) { - sqle.printStackTrace(); + private static MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); + + public static MakerItemCreateEntry getItemCreateEntry(int toCreate, int stimulantid, Map reagentids) { + MakerItemCreateEntry makerEntry = ii.getMakerItemEntry(toCreate); + if(makerEntry == null) { + return null; + } + + // THEY DECIDED FOR SOME BIZARRE PATTERN ON THE FEE THING, ALMOST RANDOMIZED. + if(stimulantid != -1) { + makerEntry.addCost(getMakerStimulantFee(toCreate)); + } + + if(!reagentids.isEmpty()) { + for(Entry r : reagentids.entrySet()) { + makerEntry.addCost((getMakerReagentFee(toCreate, ((r.getKey() % 10) + 1))) * r.getValue()); } } - return createCache.get(toCreate); + + makerEntry.trimCost(); // "commit" the real cost of the recipe. + return makerEntry; + } + + public static MakerItemCreateEntry generateLeftoverCrystalEntry(int fromLeftoverid) { + MakerItemCreateEntry ret = new MakerItemCreateEntry(0, 0, 1, 1); + ret.addReqItem(fromLeftoverid, 100); + return ret; } + public static MakerItemCreateEntry generateDisassemblyCrystalEntry(int cost, int crystalGain) { // equipment at specific position already taken + MakerItemCreateEntry ret = new MakerItemCreateEntry(cost, 0, 1, crystalGain); + return ret; + } + + private static double getMakerStimulantFee(int itemid) { + if(ServerConstants.USE_MAKER_FEE_HEURISTICS) { + EquipType et = EquipType.getEquipTypeById(itemid); + int eqpLevel = ii.getEquipStats(itemid).get("reqLevel"); + + switch(et) { + case CAP: + return 1145.736246 * Math.exp(0.03336832546 * eqpLevel); + + case LONGCOAT: + return 2117.469118 * Math.exp(0.03355349137 * eqpLevel); + + case SHOES: + return 1218.624674 * Math.exp(0.0342266043 * eqpLevel); + + case GLOVES: + return 2129.531152 * Math.exp(0.03421778102 * eqpLevel); + + case COAT: + return 1770.630579 * Math.exp(0.03359768677 * eqpLevel); + + case PANTS: + return 1442.98837 * Math.exp(0.03444783295 * eqpLevel); + + case SHIELD: + return 6312.40136 * Math.exp(0.0237929527 * eqpLevel); + + default: // weapons + return 4313.581428 * Math.exp(0.03147837094 * eqpLevel); + } + } else { + return 14000; + } + } + + private static double getMakerReagentFee(int itemid, int reagentLevel) { + if(ServerConstants.USE_MAKER_FEE_HEURISTICS) { + EquipType et = EquipType.getEquipTypeById(itemid); + int eqpLevel = ii.getEquipStats(itemid).get("reqLevel"); + + switch(et) { + case CAP: + return 5592.01613 * Math.exp(0.02914576018 * eqpLevel) * reagentLevel; + + case LONGCOAT: + return 3405.23441 * Math.exp(0.03413001038 * eqpLevel) * reagentLevel; + + case SHOES: + return 2115.697484 * Math.exp(0.0354881705 * eqpLevel) * reagentLevel; + + case GLOVES: + return 4684.040894 * Math.exp(0.03166500585 * eqpLevel) * reagentLevel; + + case COAT: + return 2955.89017 * Math.exp(0.0339948456 * eqpLevel) * reagentLevel; + + case PANTS: + return 1774.722181 * Math.exp(0.03854321409 * eqpLevel) * reagentLevel; + + case SHIELD: + return 12014.11296 * Math.exp(0.02185471162 * eqpLevel) * reagentLevel; + + default: // weapons + return 4538.650247 * Math.exp(0.0371980303 * eqpLevel) * reagentLevel; + } + } else { + return 8000 * reagentLevel; + } + } + public static class MakerItemCreateEntry { private int reqLevel, reqMakerLevel; - private int cost; - private List> reqItems = new ArrayList>(); // itemId / amount + private double cost; + private int reqCost; + private List> reqItems = new ArrayList<>(); // itemId / amount private int toGive; - private MakerItemCreateEntry(int cost, int reqLevel, int reqMakerLevel, int toGive) { + public MakerItemCreateEntry(int cost, int reqLevel, int reqMakerLevel, int toGive) { this.cost = cost; this.reqLevel = reqLevel; this.reqMakerLevel = reqMakerLevel; this.toGive = toGive; } + + public MakerItemCreateEntry(MakerItemCreateEntry mi) { + this.cost = mi.cost; + this.reqLevel = mi.reqLevel; + this.reqMakerLevel = mi.reqMakerLevel; + this.toGive = mi.toGive; + + for(Pair p : mi.reqItems) { + reqItems.add(p); + } + } public int getRewardAmount() { return toGive; @@ -108,11 +180,20 @@ public class MakerItemFactory { } public int getCost() { - return cost; + return reqCost; + } + + public void addCost(double amount) { + cost += amount; } protected void addReqItem(int itemId, int amount) { reqItems.add(new Pair<>(itemId, amount)); } + + public void trimCost() { + reqCost = (int) (cost / 1000); + reqCost *= 1000; + } } } diff --git a/src/server/MapleInventoryManipulator.java b/src/server/MapleInventoryManipulator.java index a8e4c9b2e1..5b128fc0be 100644 --- a/src/server/MapleInventoryManipulator.java +++ b/src/server/MapleInventoryManipulator.java @@ -410,7 +410,7 @@ public class MapleInventoryManipulator { } if (dst == -6) { // unequip the overall Item top = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((short) -5); - if (top != null && isOverall(top.getItemId())) { + if (top != null && ItemConstants.isOverall(top.getItemId())) { if (c.getPlayer().getInventory(MapleInventoryType.EQUIP).isFull()) { c.announce(MaplePacketCreator.getInventoryFull()); c.announce(MaplePacketCreator.getShowInventoryFull()); @@ -420,7 +420,7 @@ public class MapleInventoryManipulator { } } else if (dst == -5) { final Item bottom = c.getPlayer().getInventory(MapleInventoryType.EQUIPPED).getItem((short) -6); - if (bottom != null && isOverall(source.getItemId())) { + if (bottom != null && ItemConstants.isOverall(source.getItemId())) { if (c.getPlayer().getInventory(MapleInventoryType.EQUIP).isFull()) { c.announce(MaplePacketCreator.getInventoryFull()); c.announce(MaplePacketCreator.getShowInventoryFull()); @@ -477,7 +477,7 @@ public class MapleInventoryManipulator { target.setPosition(src); c.getPlayer().getInventory(MapleInventoryType.EQUIP).addFromDB(target); } - if (c.getPlayer().getBuffedValue(MapleBuffStat.BOOSTER) != null && isWeapon(source.getItemId())) { + if (c.getPlayer().getBuffedValue(MapleBuffStat.BOOSTER) != null && ItemConstants.isWeapon(source.getItemId())) { c.getPlayer().cancelBuffStats(MapleBuffStat.BOOSTER); } @@ -590,12 +590,4 @@ public class MapleInventoryManipulator { private static boolean isDroppedItemRestricted(Item it) { return ServerConstants.USE_ERASE_UNTRADEABLE_DROP && ((it.getFlag() & ItemConstants.UNTRADEABLE) == ItemConstants.UNTRADEABLE); } - - private static boolean isOverall(int itemId) { - return itemId / 10000 == 105; - } - - private static boolean isWeapon(int itemId) { - return itemId >= 1302000 && itemId < 1492024; - } } diff --git a/src/server/MapleItemInformationProvider.java b/src/server/MapleItemInformationProvider.java index c7e78eecd4..6c8c6935a3 100644 --- a/src/server/MapleItemInformationProvider.java +++ b/src/server/MapleItemInformationProvider.java @@ -66,7 +66,9 @@ import constants.skills.Assassin; import constants.skills.Gunslinger; import constants.skills.NightWalker; import java.sql.Connection; +import server.MakerItemFactory.MakerItemCreateEntry; import server.life.MapleMonsterInformationProvider; +import server.life.MapleLifeFactory; /** * @@ -111,6 +113,10 @@ public class MapleItemInformationProvider { protected Map isQuestItemCache = new HashMap<>(); protected Map equipmentSlotCache = new HashMap<>(); protected Map noCancelMouseCache = new HashMap<>(); + protected Map mobCrystalMakerCache = new HashMap<>(); + protected Map> statUpgradeMakerCache = new HashMap<>(); + protected Map makerItemCache = new HashMap<>(); + private MapleItemInformationProvider() { loadCardIdData(); @@ -575,11 +581,77 @@ public class MapleItemInformationProvider { return (short)Math.min(Short.MAX_VALUE, value); } - private static short chscrollRandomizedStat() { - return (short) Randomizer.rand(-ServerConstants.CHSCROLL_STAT_RANGE, ServerConstants.CHSCROLL_STAT_RANGE); + private static short chscrollRandomizedStat(int range) { + return (short) Randomizer.rand(-range, range); } - private void scrollEquipWithChaos(Equip nEquip) { + public void scrollOptionEquipWithChaos(Equip nEquip, int range, boolean option) { + // option: watk, matk, wdef, mdef, spd, jump, hp, mp + // stat: dex, luk, str, int, avoid, acc + + if(!option) { + if (nEquip.getStr() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setStr(getMaximumShortMaxIfOverflow(nEquip.getStr(), (nEquip.getStr() + chscrollRandomizedStat(range)))); + else nEquip.setStr(getMaximumShortMaxIfOverflow(0, (nEquip.getStr() + chscrollRandomizedStat(range)))); + } + if (nEquip.getDex() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setDex(getMaximumShortMaxIfOverflow(nEquip.getDex(), (nEquip.getDex() + chscrollRandomizedStat(range)))); + else nEquip.setDex(getMaximumShortMaxIfOverflow(0, (nEquip.getDex() + chscrollRandomizedStat(range)))); + } + if (nEquip.getInt() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setInt(getMaximumShortMaxIfOverflow(nEquip.getInt(), (nEquip.getInt() + chscrollRandomizedStat(range)))); + else nEquip.setInt(getMaximumShortMaxIfOverflow(0, (nEquip.getInt() + chscrollRandomizedStat(range)))); + } + if (nEquip.getLuk() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setLuk(getMaximumShortMaxIfOverflow(nEquip.getLuk(), (nEquip.getLuk() + chscrollRandomizedStat(range)))); + else nEquip.setLuk(getMaximumShortMaxIfOverflow(0, (nEquip.getLuk() + chscrollRandomizedStat(range)))); + } + if (nEquip.getAcc() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setAcc(getMaximumShortMaxIfOverflow(nEquip.getAcc(), (nEquip.getAcc() + chscrollRandomizedStat(range)))); + else nEquip.setAcc(getMaximumShortMaxIfOverflow(0, (nEquip.getAcc() + chscrollRandomizedStat(range)))); + } + if (nEquip.getAvoid() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setAvoid(getMaximumShortMaxIfOverflow(nEquip.getAvoid(), (nEquip.getAvoid() + chscrollRandomizedStat(range)))); + else nEquip.setAvoid(getMaximumShortMaxIfOverflow(0, (nEquip.getAvoid() + chscrollRandomizedStat(range)))); + } + } else { + if (nEquip.getWatk() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setWatk(getMaximumShortMaxIfOverflow(nEquip.getWatk(), (nEquip.getWatk() + chscrollRandomizedStat(range)))); + else nEquip.setWatk(getMaximumShortMaxIfOverflow(0, (nEquip.getWatk() + chscrollRandomizedStat(range)))); + } + if (nEquip.getWdef() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setWdef(getMaximumShortMaxIfOverflow(nEquip.getWdef(), (nEquip.getWdef() + chscrollRandomizedStat(range)))); + else nEquip.setWdef(getMaximumShortMaxIfOverflow(0, (nEquip.getWdef() + chscrollRandomizedStat(range)))); + } + if (nEquip.getMatk() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setMatk(getMaximumShortMaxIfOverflow(nEquip.getMatk(), (nEquip.getMatk() + chscrollRandomizedStat(range)))); + else nEquip.setMatk(getMaximumShortMaxIfOverflow(0, (nEquip.getMatk() + chscrollRandomizedStat(range)))); + } + if (nEquip.getMdef() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setMdef(getMaximumShortMaxIfOverflow(nEquip.getMdef(), (nEquip.getMdef() + chscrollRandomizedStat(range)))); + else nEquip.setMdef(getMaximumShortMaxIfOverflow(0, (nEquip.getMdef() + chscrollRandomizedStat(range)))); + } + + if (nEquip.getSpeed() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setSpeed(getMaximumShortMaxIfOverflow(nEquip.getSpeed(), (nEquip.getSpeed() + chscrollRandomizedStat(range)))); + else nEquip.setSpeed(getMaximumShortMaxIfOverflow(0, (nEquip.getSpeed() + chscrollRandomizedStat(range)))); + } + if (nEquip.getJump() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setJump(getMaximumShortMaxIfOverflow(nEquip.getJump(), (nEquip.getJump() + chscrollRandomizedStat(range)))); + else nEquip.setJump(getMaximumShortMaxIfOverflow(0, (nEquip.getJump() + chscrollRandomizedStat(range)))); + } + if (nEquip.getHp() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setHp(getMaximumShortMaxIfOverflow(nEquip.getHp(), (nEquip.getHp() + chscrollRandomizedStat(range)))); + else nEquip.setHp(getMaximumShortMaxIfOverflow(0, (nEquip.getHp() + chscrollRandomizedStat(range)))); + } + if (nEquip.getMp() > 0) { + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setMp(getMaximumShortMaxIfOverflow(nEquip.getMp(), (nEquip.getMp() + chscrollRandomizedStat(range)))); + else nEquip.setMp(getMaximumShortMaxIfOverflow(0, (nEquip.getMp() + chscrollRandomizedStat(range)))); + } + } + } + + private void scrollEquipWithChaos(Equip nEquip, int range) { if(ServerConstants.SCROLL_CHANCE_RATE > 0) { int temp; short curStr, curDex, curInt, curLuk, curWatk, curWdef, curMatk, curMdef, curAcc, curAvoid, curSpeed, curJump, curHp, curMp; @@ -618,99 +690,99 @@ public class MapleItemInformationProvider { for(int i = 0; i < ServerConstants.SCROLL_CHANCE_RATE; i++) { if (nEquip.getStr() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curStr + chscrollRandomizedStat(); - else temp = nEquip.getStr() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curStr + chscrollRandomizedStat(range); + else temp = nEquip.getStr() + chscrollRandomizedStat(range); curStr = getMaximumShortMaxIfOverflow(temp, curStr); } if (nEquip.getDex() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curDex + chscrollRandomizedStat(); - else temp = nEquip.getDex() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curDex + chscrollRandomizedStat(range); + else temp = nEquip.getDex() + chscrollRandomizedStat(range); curDex = getMaximumShortMaxIfOverflow(temp, curDex); } if (nEquip.getInt() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curInt + chscrollRandomizedStat(); - else temp = nEquip.getInt() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curInt + chscrollRandomizedStat(range); + else temp = nEquip.getInt() + chscrollRandomizedStat(range); curInt = getMaximumShortMaxIfOverflow(temp, curInt); } if (nEquip.getLuk() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curLuk + chscrollRandomizedStat(); - else temp = nEquip.getLuk() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curLuk + chscrollRandomizedStat(range); + else temp = nEquip.getLuk() + chscrollRandomizedStat(range); curLuk = getMaximumShortMaxIfOverflow(temp, curLuk); } if (nEquip.getWatk() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curWatk + chscrollRandomizedStat(); - else temp = nEquip.getWatk() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curWatk + chscrollRandomizedStat(range); + else temp = nEquip.getWatk() + chscrollRandomizedStat(range); curWatk = getMaximumShortMaxIfOverflow(temp, curWatk); } if (nEquip.getWdef() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curWdef + chscrollRandomizedStat(); - else temp = nEquip.getWdef() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curWdef + chscrollRandomizedStat(range); + else temp = nEquip.getWdef() + chscrollRandomizedStat(range); curWdef = getMaximumShortMaxIfOverflow(temp, curWdef); } if (nEquip.getMatk() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curMatk + chscrollRandomizedStat(); - else temp = nEquip.getMatk() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curMatk + chscrollRandomizedStat(range); + else temp = nEquip.getMatk() + chscrollRandomizedStat(range); curMatk = getMaximumShortMaxIfOverflow(temp, curMatk); } if (nEquip.getMdef() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curMdef + chscrollRandomizedStat(); - else temp = nEquip.getMdef() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curMdef + chscrollRandomizedStat(range); + else temp = nEquip.getMdef() + chscrollRandomizedStat(range); curMdef = getMaximumShortMaxIfOverflow(temp, curMdef); } if (nEquip.getAcc() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curAcc + chscrollRandomizedStat(); - else temp = nEquip.getAcc() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curAcc + chscrollRandomizedStat(range); + else temp = nEquip.getAcc() + chscrollRandomizedStat(range); curAcc = getMaximumShortMaxIfOverflow(temp, curAcc); } if (nEquip.getAvoid() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curAvoid + chscrollRandomizedStat(); - else temp = nEquip.getAvoid() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curAvoid + chscrollRandomizedStat(range); + else temp = nEquip.getAvoid() + chscrollRandomizedStat(range); curAvoid = getMaximumShortMaxIfOverflow(temp, curAvoid); } if (nEquip.getSpeed() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curSpeed + chscrollRandomizedStat(); - else temp = nEquip.getSpeed() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curSpeed + chscrollRandomizedStat(range); + else temp = nEquip.getSpeed() + chscrollRandomizedStat(range); curSpeed = getMaximumShortMaxIfOverflow(temp, curSpeed); } if (nEquip.getJump() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curJump + chscrollRandomizedStat(); - else temp = nEquip.getJump() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curJump + chscrollRandomizedStat(range); + else temp = nEquip.getJump() + chscrollRandomizedStat(range); curJump = getMaximumShortMaxIfOverflow(temp, curJump); } if (nEquip.getHp() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curHp + chscrollRandomizedStat(); - else temp = nEquip.getHp() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curHp + chscrollRandomizedStat(range); + else temp = nEquip.getHp() + chscrollRandomizedStat(range); curHp = getMaximumShortMaxIfOverflow(temp, curHp); } if (nEquip.getMp() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curMp + chscrollRandomizedStat(); - else temp = nEquip.getMp() + chscrollRandomizedStat(); + if(ServerConstants.USE_ENHANCED_CHSCROLL) temp = curMp + chscrollRandomizedStat(range); + else temp = nEquip.getMp() + chscrollRandomizedStat(range); curMp = getMaximumShortMaxIfOverflow(temp, curMp); } @@ -734,60 +806,60 @@ public class MapleItemInformationProvider { else { if (nEquip.getStr() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setStr(getMaximumShortMaxIfOverflow(nEquip.getStr(), (nEquip.getStr() + chscrollRandomizedStat()))); - else nEquip.setStr(getMaximumShortMaxIfOverflow(0, (nEquip.getStr() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setStr(getMaximumShortMaxIfOverflow(nEquip.getStr(), (nEquip.getStr() + chscrollRandomizedStat(range)))); + else nEquip.setStr(getMaximumShortMaxIfOverflow(0, (nEquip.getStr() + chscrollRandomizedStat(range)))); } if (nEquip.getDex() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setDex(getMaximumShortMaxIfOverflow(nEquip.getDex(), (nEquip.getDex() + chscrollRandomizedStat()))); - else nEquip.setDex(getMaximumShortMaxIfOverflow(0, (nEquip.getDex() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setDex(getMaximumShortMaxIfOverflow(nEquip.getDex(), (nEquip.getDex() + chscrollRandomizedStat(range)))); + else nEquip.setDex(getMaximumShortMaxIfOverflow(0, (nEquip.getDex() + chscrollRandomizedStat(range)))); } if (nEquip.getInt() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setInt(getMaximumShortMaxIfOverflow(nEquip.getInt(), (nEquip.getInt() + chscrollRandomizedStat()))); - else nEquip.setInt(getMaximumShortMaxIfOverflow(0, (nEquip.getInt() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setInt(getMaximumShortMaxIfOverflow(nEquip.getInt(), (nEquip.getInt() + chscrollRandomizedStat(range)))); + else nEquip.setInt(getMaximumShortMaxIfOverflow(0, (nEquip.getInt() + chscrollRandomizedStat(range)))); } if (nEquip.getLuk() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setLuk(getMaximumShortMaxIfOverflow(nEquip.getLuk(), (nEquip.getLuk() + chscrollRandomizedStat()))); - else nEquip.setLuk(getMaximumShortMaxIfOverflow(0, (nEquip.getLuk() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setLuk(getMaximumShortMaxIfOverflow(nEquip.getLuk(), (nEquip.getLuk() + chscrollRandomizedStat(range)))); + else nEquip.setLuk(getMaximumShortMaxIfOverflow(0, (nEquip.getLuk() + chscrollRandomizedStat(range)))); } if (nEquip.getWatk() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setWatk(getMaximumShortMaxIfOverflow(nEquip.getWatk(), (nEquip.getWatk() + chscrollRandomizedStat()))); - else nEquip.setWatk(getMaximumShortMaxIfOverflow(0, (nEquip.getWatk() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setWatk(getMaximumShortMaxIfOverflow(nEquip.getWatk(), (nEquip.getWatk() + chscrollRandomizedStat(range)))); + else nEquip.setWatk(getMaximumShortMaxIfOverflow(0, (nEquip.getWatk() + chscrollRandomizedStat(range)))); } if (nEquip.getWdef() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setWdef(getMaximumShortMaxIfOverflow(nEquip.getWdef(), (nEquip.getWdef() + chscrollRandomizedStat()))); - else nEquip.setWdef(getMaximumShortMaxIfOverflow(0, (nEquip.getWdef() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setWdef(getMaximumShortMaxIfOverflow(nEquip.getWdef(), (nEquip.getWdef() + chscrollRandomizedStat(range)))); + else nEquip.setWdef(getMaximumShortMaxIfOverflow(0, (nEquip.getWdef() + chscrollRandomizedStat(range)))); } if (nEquip.getMatk() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setMatk(getMaximumShortMaxIfOverflow(nEquip.getMatk(), (nEquip.getMatk() + chscrollRandomizedStat()))); - else nEquip.setMatk(getMaximumShortMaxIfOverflow(0, (nEquip.getMatk() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setMatk(getMaximumShortMaxIfOverflow(nEquip.getMatk(), (nEquip.getMatk() + chscrollRandomizedStat(range)))); + else nEquip.setMatk(getMaximumShortMaxIfOverflow(0, (nEquip.getMatk() + chscrollRandomizedStat(range)))); } if (nEquip.getMdef() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setMdef(getMaximumShortMaxIfOverflow(nEquip.getMdef(), (nEquip.getMdef() + chscrollRandomizedStat()))); - else nEquip.setMdef(getMaximumShortMaxIfOverflow(0, (nEquip.getMdef() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setMdef(getMaximumShortMaxIfOverflow(nEquip.getMdef(), (nEquip.getMdef() + chscrollRandomizedStat(range)))); + else nEquip.setMdef(getMaximumShortMaxIfOverflow(0, (nEquip.getMdef() + chscrollRandomizedStat(range)))); } if (nEquip.getAcc() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setAcc(getMaximumShortMaxIfOverflow(nEquip.getAcc(), (nEquip.getAcc() + chscrollRandomizedStat()))); - else nEquip.setAcc(getMaximumShortMaxIfOverflow(0, (nEquip.getAcc() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setAcc(getMaximumShortMaxIfOverflow(nEquip.getAcc(), (nEquip.getAcc() + chscrollRandomizedStat(range)))); + else nEquip.setAcc(getMaximumShortMaxIfOverflow(0, (nEquip.getAcc() + chscrollRandomizedStat(range)))); } if (nEquip.getAvoid() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setAvoid(getMaximumShortMaxIfOverflow(nEquip.getAvoid(), (nEquip.getAvoid() + chscrollRandomizedStat()))); - else nEquip.setAvoid(getMaximumShortMaxIfOverflow(0, (nEquip.getAvoid() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setAvoid(getMaximumShortMaxIfOverflow(nEquip.getAvoid(), (nEquip.getAvoid() + chscrollRandomizedStat(range)))); + else nEquip.setAvoid(getMaximumShortMaxIfOverflow(0, (nEquip.getAvoid() + chscrollRandomizedStat(range)))); } if (nEquip.getSpeed() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setSpeed(getMaximumShortMaxIfOverflow(nEquip.getSpeed(), (nEquip.getSpeed() + chscrollRandomizedStat()))); - else nEquip.setSpeed(getMaximumShortMaxIfOverflow(0, (nEquip.getSpeed() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setSpeed(getMaximumShortMaxIfOverflow(nEquip.getSpeed(), (nEquip.getSpeed() + chscrollRandomizedStat(range)))); + else nEquip.setSpeed(getMaximumShortMaxIfOverflow(0, (nEquip.getSpeed() + chscrollRandomizedStat(range)))); } if (nEquip.getJump() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setJump(getMaximumShortMaxIfOverflow(nEquip.getJump(), (nEquip.getJump() + chscrollRandomizedStat()))); - else nEquip.setJump(getMaximumShortMaxIfOverflow(0, (nEquip.getJump() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setJump(getMaximumShortMaxIfOverflow(nEquip.getJump(), (nEquip.getJump() + chscrollRandomizedStat(range)))); + else nEquip.setJump(getMaximumShortMaxIfOverflow(0, (nEquip.getJump() + chscrollRandomizedStat(range)))); } if (nEquip.getHp() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setHp(getMaximumShortMaxIfOverflow(nEquip.getHp(), (nEquip.getHp() + chscrollRandomizedStat()))); - else nEquip.setHp(getMaximumShortMaxIfOverflow(0, (nEquip.getHp() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setHp(getMaximumShortMaxIfOverflow(nEquip.getHp(), (nEquip.getHp() + chscrollRandomizedStat(range)))); + else nEquip.setHp(getMaximumShortMaxIfOverflow(0, (nEquip.getHp() + chscrollRandomizedStat(range)))); } if (nEquip.getMp() > 0) { - if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setMp(getMaximumShortMaxIfOverflow(nEquip.getMp(), (nEquip.getMp() + chscrollRandomizedStat()))); - else nEquip.setMp(getMaximumShortMaxIfOverflow(0, (nEquip.getMp() + chscrollRandomizedStat()))); + if(ServerConstants.USE_ENHANCED_CHSCROLL) nEquip.setMp(getMaximumShortMaxIfOverflow(nEquip.getMp(), (nEquip.getMp() + chscrollRandomizedStat(range)))); + else nEquip.setMp(getMaximumShortMaxIfOverflow(0, (nEquip.getMp() + chscrollRandomizedStat(range)))); } } } @@ -831,58 +903,11 @@ public class MapleItemInformationProvider { case 2049100: case 2049101: case 2049102: - scrollEquipWithChaos(nEquip); + scrollEquipWithChaos(nEquip, ServerConstants.CHSCROLL_STAT_RANGE); break; default: - for (Entry stat : stats.entrySet()) { - switch (stat.getKey()) { - case "STR": - nEquip.setStr(getShortMaxIfOverflow(nEquip.getStr() + stat.getValue().intValue())); - break; - case "DEX": - nEquip.setDex(getShortMaxIfOverflow(nEquip.getDex() + stat.getValue().intValue())); - break; - case "INT": - nEquip.setInt(getShortMaxIfOverflow(nEquip.getInt() + stat.getValue().intValue())); - break; - case "LUK": - nEquip.setLuk(getShortMaxIfOverflow(nEquip.getLuk() + stat.getValue().intValue())); - break; - case "PAD": - nEquip.setWatk(getShortMaxIfOverflow(nEquip.getWatk() + stat.getValue().intValue())); - break; - case "PDD": - nEquip.setWdef(getShortMaxIfOverflow(nEquip.getWdef() + stat.getValue().intValue())); - break; - case "MAD": - nEquip.setMatk(getShortMaxIfOverflow(nEquip.getMatk() + stat.getValue().intValue())); - break; - case "MDD": - nEquip.setMdef(getShortMaxIfOverflow(nEquip.getMdef() + stat.getValue().intValue())); - break; - case "ACC": - nEquip.setAcc(getShortMaxIfOverflow(nEquip.getAcc() + stat.getValue().intValue())); - break; - case "EVA": - nEquip.setAvoid(getShortMaxIfOverflow(nEquip.getAvoid() + stat.getValue().intValue())); - break; - case "Speed": - nEquip.setSpeed(getShortMaxIfOverflow(nEquip.getSpeed() + stat.getValue().intValue())); - break; - case "Jump": - nEquip.setJump(getShortMaxIfOverflow(nEquip.getJump() + stat.getValue().intValue())); - break; - case "MHP": - nEquip.setHp(getShortMaxIfOverflow(nEquip.getHp() + stat.getValue().intValue())); - break; - case "MMP": - nEquip.setMp(getShortMaxIfOverflow(nEquip.getMp() + stat.getValue().intValue())); - break; - case "afterImage": - break; - } - } + improveEquipStats(nEquip, stats); break; } if (!ItemConstants.isCleanSlate(scrollId)) { @@ -903,6 +928,57 @@ public class MapleItemInformationProvider { } return equip; } + + public static void improveEquipStats(Equip nEquip, Map stats) { + for (Entry stat : stats.entrySet()) { + switch (stat.getKey()) { + case "STR": + nEquip.setStr(getShortMaxIfOverflow(nEquip.getStr() + stat.getValue().intValue())); + break; + case "DEX": + nEquip.setDex(getShortMaxIfOverflow(nEquip.getDex() + stat.getValue().intValue())); + break; + case "INT": + nEquip.setInt(getShortMaxIfOverflow(nEquip.getInt() + stat.getValue().intValue())); + break; + case "LUK": + nEquip.setLuk(getShortMaxIfOverflow(nEquip.getLuk() + stat.getValue().intValue())); + break; + case "PAD": + nEquip.setWatk(getShortMaxIfOverflow(nEquip.getWatk() + stat.getValue().intValue())); + break; + case "PDD": + nEquip.setWdef(getShortMaxIfOverflow(nEquip.getWdef() + stat.getValue().intValue())); + break; + case "MAD": + nEquip.setMatk(getShortMaxIfOverflow(nEquip.getMatk() + stat.getValue().intValue())); + break; + case "MDD": + nEquip.setMdef(getShortMaxIfOverflow(nEquip.getMdef() + stat.getValue().intValue())); + break; + case "ACC": + nEquip.setAcc(getShortMaxIfOverflow(nEquip.getAcc() + stat.getValue().intValue())); + break; + case "EVA": + nEquip.setAvoid(getShortMaxIfOverflow(nEquip.getAvoid() + stat.getValue().intValue())); + break; + case "Speed": + nEquip.setSpeed(getShortMaxIfOverflow(nEquip.getSpeed() + stat.getValue().intValue())); + break; + case "Jump": + nEquip.setJump(getShortMaxIfOverflow(nEquip.getJump() + stat.getValue().intValue())); + break; + case "MHP": + nEquip.setHp(getShortMaxIfOverflow(nEquip.getHp() + stat.getValue().intValue())); + break; + case "MMP": + nEquip.setMp(getShortMaxIfOverflow(nEquip.getMp() + stat.getValue().intValue())); + break; + case "afterImage": + break; + } + } + } public Item getEquipById(int equipId) { return getEquipById(equipId, -1); @@ -986,6 +1062,31 @@ public class MapleItemInformationProvider { return equip; } + private static short getRandUpgradedStat(short defaultValue, int maxRange) { + if (defaultValue == 0) { + return 0; + } + int lMaxRange = maxRange; + return (short) (defaultValue + Math.floor(Randomizer.nextDouble() * (lMaxRange + 1))); + } + + public Equip randomizeUpgradeStats(Equip equip) { + equip.setStr(getRandUpgradedStat(equip.getStr(), 2)); + equip.setDex(getRandUpgradedStat(equip.getDex(), 2)); + equip.setInt(getRandUpgradedStat(equip.getInt(), 2)); + equip.setLuk(getRandUpgradedStat(equip.getLuk(), 2)); + equip.setMatk(getRandUpgradedStat(equip.getMatk(), 2)); + equip.setWatk(getRandUpgradedStat(equip.getWatk(), 2)); + equip.setAcc(getRandUpgradedStat(equip.getAcc(), 2)); + equip.setAvoid(getRandUpgradedStat(equip.getAvoid(), 2)); + equip.setJump(getRandUpgradedStat(equip.getJump(), 2)); + equip.setWdef(getRandUpgradedStat(equip.getWdef(), 5)); + equip.setMdef(getRandUpgradedStat(equip.getMdef(), 5)); + equip.setHp(getRandUpgradedStat(equip.getHp(), 5)); + equip.setMp(getRandUpgradedStat(equip.getMp(), 5)); + return equip; + } + public MapleStatEffect getItemEffect(int itemId) { MapleStatEffect ret = itemEffects.get(Integer.valueOf(itemId)); if (ret == null) { @@ -1503,6 +1604,212 @@ public class MapleItemInformationProvider { return list; } + private static int getCrystalForLevel(int level) { + int range = (level - 1) / 10; + + if(range < 5) { + return 4260000; + } else if(range > 11) { + return 4260008; + } else { + switch(range) { + case 5: + return 4260001; + + case 6: + return 4260002; + + case 7: + return 4260003; + + case 8: + return 4260004; + + case 9: + return 4260005; + + case 10: + return 4260006; + + default: + return 4260007; + } + } + } + + public Pair getMakerReagentStatUpgrade(int itemId) { + try { + Pair statUpgd = statUpgradeMakerCache.get(itemId); + if(statUpgd != null) { + return statUpgd; + } else if(statUpgradeMakerCache.containsKey(itemId)) { + return null; + } + + Connection con = DatabaseConnection.getConnection(); + PreparedStatement ps = con.prepareStatement("SELECT stat, value FROM makerreagentdata WHERE itemid = ?"); + ps.setInt(1, itemId); + ResultSet rs = ps.executeQuery(); + if(rs.next()) { + String statType = rs.getString("stat"); + int statGain = rs.getInt("value"); + + statUpgd = new Pair<>(statType, statGain); + } + rs.close(); + ps.close(); + con.close(); + + statUpgradeMakerCache.put(itemId, statUpgd); + return statUpgd; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public int getMakerCrystalFromLeftover(Integer leftoverId) { + try { + Integer itemid = mobCrystalMakerCache.get(leftoverId); + if(itemid != null) { + return itemid; + } + + itemid = -1; + + Connection con = DatabaseConnection.getConnection(); + PreparedStatement ps = con.prepareStatement("SELECT dropperid FROM drop_data WHERE itemid = ? ORDER BY dropperid;"); + ps.setInt(1, leftoverId); + ResultSet rs = ps.executeQuery(); + if(rs.next()) { + int dropperid = rs.getInt("dropperid"); + itemid = getCrystalForLevel(MapleLifeFactory.getMonsterLevel(dropperid) - 1); + } + rs.close(); + ps.close(); + con.close(); + + mobCrystalMakerCache.put(leftoverId, itemid); + return itemid; + } catch (Exception e) { + e.printStackTrace(); + } + + return -1; + } + + public MakerItemCreateEntry getMakerItemEntry(int toCreate) { + MakerItemCreateEntry makerEntry; + + if ((makerEntry = makerItemCache.get(toCreate)) != null) { + return new MakerItemCreateEntry(makerEntry); + } else { + try { + Connection con = DatabaseConnection.getConnection(); + PreparedStatement ps = con.prepareStatement("SELECT req_level, req_maker_level, req_meso, quantity FROM makercreatedata WHERE itemid = ?"); + ps.setInt(1, toCreate); + ResultSet rs = ps.executeQuery(); + int reqLevel = 0; + int reqMakerLevel = 0; + int cost = 0; + int toGive = 0; + if (rs.next()) { + reqLevel = rs.getInt("req_level"); + reqMakerLevel = rs.getInt("req_maker_level"); + cost = rs.getInt("req_meso"); + toGive = rs.getInt("quantity"); + } + ps.close(); + rs.close(); + makerEntry = new MakerItemCreateEntry(cost, reqLevel, reqMakerLevel, toGive); + ps = con.prepareStatement("SELECT req_item, count FROM makerrecipedata WHERE itemid = ?"); + ps.setInt(1, toCreate); + rs = ps.executeQuery(); + while (rs.next()) { + makerEntry.addReqItem(rs.getInt("req_item"), rs.getInt("count")); + } + rs.close(); + ps.close(); + con.close(); + makerItemCache.put(toCreate, new MakerItemCreateEntry(makerEntry)); + } catch (SQLException sqle) { + sqle.printStackTrace(); + makerEntry = null; + } + } + + return makerEntry; + } + + public int getMakerCrystalFromEquip(Integer equipId) { + try { + Map stats = getEquipStats(equipId); + return getCrystalForLevel(stats.get("reqLevel")); + } catch (Exception e) { + e.printStackTrace(); + } + + return -1; + } + + public int getMakerStimulantFromEquip(Integer equipId) { + try { + return getCrystalForLevel(getEquipStats(equipId).get("reqLevel")); + } catch (Exception e) { + e.printStackTrace(); + } + + return -1; + } + + public int getMakerDisassembledQuantity(Integer itemId) { + int avail = 0; + Connection con; + try { + con = DatabaseConnection.getConnection(); + PreparedStatement ps = con.prepareStatement("SELECT count FROM makerrecipedata WHERE itemid = ? AND req_item >= 4260000 AND req_item <= 4260008 ORDER BY count DESC"); + ps.setInt(1, itemId); + ResultSet rs = ps.executeQuery(); + + if(rs.next()) { + avail = (int) Math.ceil(rs.getInt("count") / 2); // return to the player half of the crystals needed + } + + rs.close(); + ps.close(); + con.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + return avail; + } + + public int getMakerDisassembledFee(Integer itemId) { + int fee = -1; + Connection con; + try { + con = DatabaseConnection.getConnection(); + PreparedStatement ps = con.prepareStatement("SELECT req_meso FROM makercreatedata WHERE itemid = ?"); + ps.setInt(1, itemId); + ResultSet rs = ps.executeQuery(); + + if(rs.next()) { // cost is 13.6363~ % of the original value trimmed by 1000. + float val = (float) (rs.getInt("req_meso") * 0.13636363636364); + fee = (int) (val / 1000); + fee *= 1000; + } + + rs.close(); + ps.close(); + con.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + return fee; + } + public Set getWhoDrops(Integer itemId) { Set list = new HashSet<>(); Connection con = null; diff --git a/src/server/life/MapleLifeFactory.java b/src/server/life/MapleLifeFactory.java index 045a3dfa88..b39005682f 100644 --- a/src/server/life/MapleLifeFactory.java +++ b/src/server/life/MapleLifeFactory.java @@ -157,6 +157,27 @@ public class MapleLifeFactory { return null; } } + + public static int getMonsterLevel(int mid) { + try { + MapleMonsterStats stats = monsterStats.get(Integer.valueOf(mid)); + if (stats == null) { + MapleData monsterData = data.getData(StringUtil.getLeftPaddedStr(Integer.toString(mid) + ".img", '0', 11)); + if (monsterData == null) { + return -1; + } + MapleData monsterInfoData = monsterData.getChildByPath("info"); + return MapleDataTool.getIntConvert("level", monsterInfoData); + } else { + return stats.getLevel(); + } + } catch(NullPointerException npe) { + System.out.println("[SEVERE] MOB " + mid + " failed to load. Issue: " + npe.getMessage() + "\n\n"); + npe.printStackTrace(); + } + + return -1; + } private static void decodeElementalString(MapleMonsterStats stats, String elemAttr) { for (int i = 0; i < elemAttr.length(); i += 2) { diff --git a/src/tools/MaplePacketCreator.java b/src/tools/MaplePacketCreator.java index 6a6ba7b6d4..d4e6420f4d 100644 --- a/src/tools/MaplePacketCreator.java +++ b/src/tools/MaplePacketCreator.java @@ -5887,14 +5887,23 @@ public class MaplePacketCreator { return mplew.getPacket(); } - public static byte[] showMakerEffect() { + public static byte[] showMakerEffect(boolean makerSucceeded) { final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); mplew.writeShort(SendOpcode.SHOW_ITEM_GAIN_INCHAT.getValue()); mplew.write(16); - mplew.writeInt(0); + mplew.writeInt(makerSucceeded ? 0 : 1); return mplew.getPacket(); } - + + public static byte[] showForeignMakerEffect(int cid, boolean makerSucceeded) { + final MaplePacketLittleEndianWriter mplew = new MaplePacketLittleEndianWriter(); + mplew.writeShort(SendOpcode.SHOW_FOREIGN_EFFECT.getValue()); + mplew.writeInt(cid); + mplew.write(16); + mplew.writeInt(makerSucceeded ? 0 : 1); + return mplew.getPacket(); + } + public static byte[] showForeignEffect(int effect) { return showForeignEffect(-1, effect); } diff --git a/src/tools/locks/MonitoredLockType.java b/src/tools/locks/MonitoredLockType.java index 2c3fc4cd50..099abaa47f 100644 --- a/src/tools/locks/MonitoredLockType.java +++ b/src/tools/locks/MonitoredLockType.java @@ -66,7 +66,7 @@ public enum MonitoredLockType { MAP_OBJS(37), MAP_FACTORY(38), MAP_ITEM(39), - MAP_BOUNDS(41), + MAP_BOUNDS(40), MINIDUNGEON(41), REACTOR(42); diff --git a/tools/MapleSkillMakerFetcher/lib/ItemMake.img.xml b/tools/MapleSkillMakerFetcher/lib/ItemMake.img.xml deleted file mode 100644 index 498a33ef8b..0000000000 --- a/tools/MapleSkillMakerFetcher/lib/ItemMake.img.xml +++ /dev/null @@ -1,16559 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/MapleSkillMakerFetcher/lib/MakerData.sql b/tools/MapleSkillMakerFetcher/lib/MakerData.sql index 5c22487771..5100226037 100644 --- a/tools/MapleSkillMakerFetcher/lib/MakerData.sql +++ b/tools/MapleSkillMakerFetcher/lib/MakerData.sql @@ -2,48 +2,48 @@ # Generated data is conformant with the ItemMake.img.xml file used to compile this. INSERT IGNORE INTO `makercreatedata` (`id`, `itemid`, `req_level`, `req_maker_level`, `req_meso`, `req_item`, `req_equip`, `catalyst`, `quantity`, `tuc`) VALUES - (0, 4250000, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250100, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250200, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250300, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250400, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250500, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250600, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250700, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250800, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4250900, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4251000, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4251100, 45, 1, 100000, 0, 0, 0, 1, 0), - (0, 4251300, 75, 2, 150000, 0, 0, 0, 1, 0), - (0, 4251400, 75, 2, 150000, 0, 0, 0, 1, 0), - (0, 4250001, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250101, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250201, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250301, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250401, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250501, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250601, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250701, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250801, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4250901, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4251001, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4251101, 45, 1, 300000, 0, 0, 0, 1, 0), - (0, 4251301, 75, 2, 450000, 0, 0, 0, 1, 0), - (0, 4251401, 75, 2, 450000, 0, 0, 0, 1, 0), - (0, 4250002, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250102, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250202, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250302, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250402, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250502, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250602, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250702, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250802, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4250902, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4251002, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4251102, 45, 2, 500000, 0, 0, 0, 1, 0), - (0, 4251302, 75, 3, 750000, 0, 0, 0, 1, 0), - (0, 4251402, 75, 3, 750000, 0, 0, 0, 1, 0), + (0, 4250000, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250100, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250200, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250300, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250400, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250500, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250600, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250700, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250800, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4250900, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4251000, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4251100, 45, 1, 110000, 0, 0, 0, 1, 0), + (0, 4251300, 75, 2, 165000, 0, 0, 0, 1, 0), + (0, 4251400, 75, 2, 165000, 0, 0, 0, 1, 0), + (0, 4250001, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4250101, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4250201, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4250301, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4250401, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4250501, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4250601, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4250701, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4250801, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4250901, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4251001, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4251101, 45, 1, 330000, 0, 0, 0, 1, 0), + (0, 4251301, 75, 2, 495000, 0, 0, 0, 1, 0), + (0, 4251401, 75, 2, 495000, 0, 0, 0, 1, 0), + (0, 4250002, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4250102, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4250202, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4250302, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4250402, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4250502, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4250602, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4250702, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4250802, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4250902, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4251002, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4251102, 45, 2, 550000, 0, 0, 0, 1, 0), + (0, 4251302, 75, 3, 825000, 0, 0, 0, 1, 0), + (0, 4251402, 75, 3, 825000, 0, 0, 0, 1, 0), (0, 4001174, 45, 1, 0, 4031966, 0, 0, 1, 0), (0, 4001175, 50, 1, 0, 4031967, 0, 0, 1, 0), (0, 4001176, 55, 1, 0, 4031968, 0, 0, 10, 0), @@ -60,780 +60,780 @@ INSERT IGNORE INTO `makercreatedata` (`id`, `itemid`, `req_level`, `req_maker_le (0, 4001186, 105, 3, 0, 4031978, 0, 0, 1, 0), (0, 4032334, 150, 1, 0, 0, 0, 0, 1, 0), (0, 4032312, 70, 1, 0, 0, 0, 0, 1, 0), - (0, 2041058, 50, 1, 50000, 0, 1122013, 0, 1, 0), - (0, 2040727, 50, 1, 50000, 0, 1122013, 0, 1, 0), - (1, 1002028, 45, 1, 50000, 0, 0, 4130018, 1, 1), - (1, 1002085, 45, 1, 45000, 0, 0, 4130018, 1, 1), - (1, 1002086, 45, 1, 37500, 0, 0, 4130018, 1, 1), - (1, 1002022, 50, 1, 55000, 0, 0, 4130018, 1, 1), - (1, 1002100, 50, 1, 55000, 0, 0, 4130018, 1, 1), - (1, 1002101, 50, 1, 55000, 0, 0, 4130018, 1, 1), - (1, 1002029, 55, 1, 75000, 0, 0, 4130018, 1, 1), - (1, 1002084, 55, 1, 75000, 0, 0, 4130018, 1, 1), - (1, 1002030, 65, 1, 85000, 0, 0, 4130018, 1, 1), - (1, 1002094, 65, 1, 85000, 0, 0, 4130018, 1, 1), - (1, 1002095, 65, 1, 85000, 0, 0, 4130018, 1, 1), - (1, 1002338, 75, 2, 133000, 0, 0, 4130018, 1, 2), - (1, 1002339, 75, 2, 133000, 0, 0, 4130018, 1, 2), - (1, 1002340, 75, 2, 133000, 0, 0, 4130018, 1, 2), - (1, 1002528, 85, 2, 147000, 0, 0, 4130018, 1, 2), - (1, 1002529, 85, 2, 147000, 0, 0, 4130018, 1, 2), - (1, 1002530, 85, 2, 147000, 0, 0, 4130018, 1, 2), - (1, 1002531, 85, 2, 147000, 0, 0, 4130018, 1, 2), - (1, 1002532, 85, 2, 147000, 0, 0, 4130018, 1, 2), - (1, 1002377, 95, 2, 168000, 0, 0, 4130018, 1, 2), - (1, 1002378, 95, 2, 168000, 0, 0, 4130018, 1, 2), - (1, 1002379, 95, 2, 168000, 0, 0, 4130018, 1, 2), - (1, 1002551, 105, 3, 280000, 0, 0, 4130018, 1, 3), - (1, 1002790, 115, 3, 320000, 0, 0, 4130018, 1, 3), - (1, 1002776, 115, 3, 320000, 0, 0, 4130018, 1, 3), - (1, 1040087, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1040088, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1040089, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1041087, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1041088, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1041089, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (1, 1040090, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1040091, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1040092, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1040093, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1041091, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1041092, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1041093, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (1, 1040102, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1040103, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1040104, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1041097, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1041098, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1041099, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (1, 1040111, 85, 2, 112000, 0, 0, 4130019, 1, 2), - (1, 1040112, 85, 2, 112000, 0, 0, 4130019, 1, 2), - (1, 1040113, 85, 2, 112000, 0, 0, 4130019, 1, 2), - (1, 1041119, 85, 2, 133000, 0, 0, 4130019, 1, 2), - (1, 1041120, 85, 2, 133000, 0, 0, 4130019, 1, 2), - (1, 1041121, 85, 2, 133000, 0, 0, 4130019, 1, 2), - (1, 1040120, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1040121, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1040122, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1041122, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1041123, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1041124, 95, 2, 140000, 0, 0, 4130019, 1, 2), - (1, 1060076, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1060077, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1060078, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1061086, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1061087, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1061088, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (1, 1060079, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1060080, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1060081, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1060082, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1061090, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1061091, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1061092, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (1, 1060090, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1060091, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1060092, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1061096, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1061097, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1061098, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (1, 1060100, 85, 2, 98000, 0, 0, 4130020, 1, 2), - (1, 1060101, 85, 2, 98000, 0, 0, 4130020, 1, 2), - (1, 1060102, 85, 2, 98000, 0, 0, 4130020, 1, 2), - (1, 1061118, 85, 2, 119000, 0, 0, 4130020, 1, 2), - (1, 1061119, 85, 2, 119000, 0, 0, 4130020, 1, 2), - (1, 1061120, 85, 2, 119000, 0, 0, 4130020, 1, 2), - (1, 1060109, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1060110, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1060111, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1061121, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1061122, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1061123, 95, 2, 126000, 0, 0, 4130020, 1, 2), - (1, 1050080, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1050081, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1050082, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1050083, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1051077, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1051078, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1051079, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1051080, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (1, 1052075, 105, 3, 320000, 0, 0, 4130021, 1, 3), - (1, 1052160, 115, 3, 380000, 0, 0, 4130021, 1, 3), - (1, 1052155, 115, 3, 380000, 0, 0, 4130021, 1, 3), - (1, 1072132, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (1, 1072133, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (1, 1072134, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (1, 1072135, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (1, 1072147, 55, 1, 35000, 0, 0, 4130001, 1, 1), - (1, 1072148, 55, 1, 35000, 0, 0, 4130001, 1, 1), - (1, 1072149, 55, 1, 35000, 0, 0, 4130001, 1, 1), - (1, 1072154, 65, 1, 42500, 0, 0, 4130001, 1, 1), - (1, 1072155, 65, 1, 42500, 0, 0, 4130001, 1, 1), - (1, 1072156, 65, 1, 42500, 0, 0, 4130001, 1, 1), - (1, 1072210, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (1, 1072211, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (1, 1072212, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (1, 1072196, 85, 2, 105000, 0, 0, 4130001, 1, 2), - (1, 1072197, 85, 2, 105000, 0, 0, 4130001, 1, 2), - (1, 1072198, 85, 2, 105000, 0, 0, 4130001, 1, 2), - (1, 1072220, 95, 2, 126000, 0, 0, 4130001, 1, 2), - (1, 1072221, 95, 2, 126000, 0, 0, 4130001, 1, 2), - (1, 1072222, 95, 2, 126000, 0, 0, 4130001, 1, 2), - (1, 1072273, 105, 3, 210000, 0, 0, 4130001, 1, 3), - (1, 1072361, 115, 3, 240000, 0, 0, 4130001, 1, 3), - (1, 1072355, 115, 3, 240000, 0, 0, 4130001, 1, 3), - (1, 1082009, 45, 1, 45000, 0, 0, 4130000, 1, 1), - (1, 1082010, 45, 1, 50000, 0, 0, 4130000, 1, 1), - (1, 1082011, 45, 1, 55000, 0, 0, 4130000, 1, 1), - (1, 1082059, 55, 1, 60000, 0, 0, 4130000, 1, 1), - (1, 1082060, 55, 1, 65000, 0, 0, 4130000, 1, 1), - (1, 1082061, 55, 1, 70000, 0, 0, 4130000, 1, 1), - (1, 1082103, 65, 1, 75000, 0, 0, 4130000, 1, 1), - (1, 1082104, 65, 1, 80000, 0, 0, 4130000, 1, 1), - (1, 1082105, 65, 1, 85000, 0, 0, 4130000, 1, 1), - (1, 1082114, 75, 2, 147000, 0, 0, 4130000, 1, 2), - (1, 1082115, 75, 2, 150500, 0, 0, 4130000, 1, 2), - (1, 1082116, 75, 2, 154000, 0, 0, 4130000, 1, 2), - (1, 1082117, 75, 2, 154000, 0, 0, 4130000, 1, 2), - (1, 1082128, 85, 2, 168000, 0, 0, 4130000, 1, 2), - (1, 1082129, 85, 2, 171500, 0, 0, 4130000, 1, 2), - (1, 1082130, 85, 2, 175000, 0, 0, 4130000, 1, 2), - (1, 1082139, 95, 2, 189000, 0, 0, 4130000, 1, 2), - (1, 1082140, 95, 2, 192500, 0, 0, 4130000, 1, 2), - (1, 1082141, 95, 2, 196000, 0, 0, 4130000, 1, 2), - (1, 1082168, 105, 3, 300000, 0, 0, 4130000, 1, 3), - (1, 1082239, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (1, 1082234, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (1, 1092004, 45, 1, 75000, 0, 0, 4130022, 1, 1), - (1, 1092009, 55, 1, 90000, 0, 0, 4130022, 1, 1), - (1, 1092010, 55, 1, 95000, 0, 0, 4130022, 1, 1), - (1, 1092011, 55, 1, 95000, 0, 0, 4130022, 1, 1), - (1, 1092015, 65, 1, 100000, 0, 0, 4130022, 1, 1), - (1, 1092016, 65, 1, 105000, 0, 0, 4130022, 1, 1), - (1, 1092017, 65, 1, 105000, 0, 0, 4130022, 1, 1), - (1, 1092023, 75, 2, 154000, 0, 0, 4130022, 1, 2), - (1, 1092024, 75, 2, 161000, 0, 0, 4130022, 1, 2), - (1, 1092025, 75, 2, 161000, 0, 0, 4130022, 1, 2), - (1, 1092026, 85, 2, 168000, 0, 0, 4130022, 1, 2), - (1, 1092027, 85, 2, 175000, 0, 0, 4130022, 1, 2), - (1, 1092028, 85, 2, 175000, 0, 0, 4130022, 1, 2), - (1, 1092036, 95, 2, 182000, 0, 0, 4130022, 1, 2), - (1, 1092037, 95, 2, 189000, 0, 0, 4130022, 1, 2), - (1, 1092038, 95, 2, 196000, 0, 0, 4130022, 1, 2), - (1, 1092060, 105, 3, 210000, 0, 0, 4130022, 1, 3), - (1, 1092058, 115, 3, 350000, 0, 0, 4130022, 1, 3), - (1, 1302010, 45, 1, 60000, 0, 0, 4130002, 1, 1), - (1, 1312008, 45, 1, 70000, 0, 0, 4130003, 1, 1), - (1, 1322017, 45, 1, 70000, 0, 0, 4130004, 1, 1), - (1, 1402003, 45, 1, 100000, 0, 0, 4130005, 1, 1), - (1, 1412003, 45, 1, 70000, 0, 0, 4130006, 1, 1), - (1, 1422005, 45, 1, 75000, 0, 0, 4130007, 1, 1), - (1, 1432004, 45, 1, 75000, 0, 0, 4130008, 1, 1), - (1, 1442005, 45, 1, 75000, 0, 0, 4130009, 1, 1), - (1, 1302011, 55, 1, 75000, 0, 0, 4130002, 1, 1), - (1, 1312009, 55, 1, 95000, 0, 0, 4130003, 1, 1), - (1, 1322018, 55, 1, 95000, 0, 0, 4130004, 1, 1), - (1, 1402011, 55, 1, 115000, 0, 0, 4130005, 1, 1), - (1, 1412007, 55, 1, 95000, 0, 0, 4130006, 1, 1), - (1, 1422009, 55, 1, 95000, 0, 0, 4130007, 1, 1), - (1, 1432006, 55, 1, 95000, 0, 0, 4130008, 1, 1), - (1, 1442010, 55, 1, 125000, 0, 0, 4130009, 1, 1), - (1, 1302012, 65, 1, 125000, 0, 0, 4130002, 1, 1), - (1, 1312010, 65, 1, 150000, 0, 0, 4130003, 1, 1), - (1, 1322019, 65, 1, 125000, 0, 0, 4130004, 1, 1), - (1, 1402012, 65, 1, 130000, 0, 0, 4130005, 1, 1), - (1, 1412008, 65, 1, 125000, 0, 0, 4130006, 1, 1), - (1, 1422010, 65, 1, 125000, 0, 0, 4130007, 1, 1), - (1, 1432007, 65, 1, 125000, 0, 0, 4130008, 1, 1), - (1, 1442008, 65, 1, 150000, 0, 0, 4130009, 1, 1), - (1, 1322020, 70, 1, 150000, 0, 0, 4130004, 1, 1), - (1, 1302018, 75, 2, 210000, 0, 0, 4130002, 1, 2), - (1, 1312011, 75, 2, 245000, 0, 0, 4130003, 1, 2), - (1, 1322028, 75, 2, 245000, 0, 0, 4130004, 1, 2), - (1, 1402004, 75, 2, 210000, 0, 0, 4130005, 1, 2), - (1, 1402015, 75, 2, 210000, 0, 0, 4130005, 1, 2), - (1, 1412009, 75, 2, 217000, 0, 0, 4130006, 1, 2), - (1, 1422012, 75, 2, 217000, 0, 0, 4130007, 1, 2), - (1, 1432010, 75, 2, 217000, 0, 0, 4130008, 1, 2), - (1, 1442019, 75, 2, 245000, 0, 0, 4130009, 1, 2), - (1, 1302023, 85, 2, 245000, 0, 0, 4130002, 1, 2), - (1, 1312015, 85, 2, 280000, 0, 0, 4130003, 1, 2), - (1, 1322029, 85, 2, 280000, 0, 0, 4130004, 1, 2), - (1, 1402005, 85, 2, 280000, 0, 0, 4130005, 1, 2), - (1, 1402016, 85, 2, 280000, 0, 0, 4130005, 1, 2), - (1, 1412010, 85, 2, 259000, 0, 0, 4130006, 1, 2), - (1, 1422013, 85, 2, 259000, 0, 0, 4130007, 1, 2), - (1, 1432011, 85, 2, 259000, 0, 0, 4130008, 1, 2), - (1, 1442020, 85, 2, 315000, 0, 0, 4130009, 1, 2), - (1, 1302056, 95, 2, 336000, 0, 0, 4130002, 1, 2), - (1, 1312030, 95, 2, 329000, 0, 0, 4130003, 1, 2), - (1, 1322045, 95, 2, 329000, 0, 0, 4130004, 1, 2), - (1, 1402035, 95, 2, 329000, 0, 0, 4130005, 1, 2), - (1, 1412021, 95, 2, 343000, 0, 0, 4130006, 1, 2), - (1, 1422027, 95, 2, 315000, 0, 0, 4130007, 1, 2), - (1, 1432030, 95, 2, 343000, 0, 0, 4130008, 1, 2), - (1, 1442044, 95, 2, 329000, 0, 0, 4130009, 1, 2), - (1, 1302059, 105, 3, 550000, 0, 0, 4130002, 1, 3), - (1, 1312031, 105, 3, 530000, 0, 0, 4130003, 1, 3), - (1, 1322052, 105, 3, 480000, 0, 0, 4130004, 1, 3), - (1, 1402036, 105, 3, 550000, 0, 0, 4130005, 1, 3), - (1, 1412026, 105, 3, 520000, 0, 0, 4130006, 1, 3), - (1, 1422028, 105, 3, 510000, 0, 0, 4130007, 1, 3), - (1, 1432038, 105, 3, 530000, 0, 0, 4130008, 1, 3), - (1, 1442045, 105, 3, 570000, 0, 0, 4130009, 1, 3), - (1, 1302086, 115, 3, 680000, 0, 0, 4130002, 1, 3), - (1, 1312038, 115, 3, 580000, 0, 0, 4130003, 1, 3), - (1, 1322061, 115, 3, 490000, 0, 0, 4130004, 1, 3), - (1, 1402047, 115, 3, 650000, 0, 0, 4130005, 1, 3), - (1, 1412034, 115, 3, 650000, 0, 0, 4130006, 1, 3), - (1, 1422038, 115, 3, 560000, 0, 0, 4130007, 1, 3), - (1, 1432049, 115, 3, 570000, 0, 0, 4130008, 1, 3), - (1, 1442067, 115, 3, 620000, 0, 0, 4130009, 1, 3), - (1, 1302081, 115, 3, 680000, 0, 0, 4130002, 1, 3), - (1, 1312037, 115, 3, 580000, 0, 0, 4130003, 1, 3), - (1, 1322060, 115, 3, 490000, 0, 0, 4130004, 1, 3), - (1, 1402046, 115, 3, 650000, 0, 0, 4130005, 1, 3), - (1, 1412033, 115, 3, 650000, 0, 0, 4130006, 1, 3), - (1, 1422037, 115, 3, 560000, 0, 0, 4130007, 1, 3), - (1, 1432047, 115, 3, 570000, 0, 0, 4130008, 1, 3), - (1, 1442063, 115, 3, 620000, 0, 0, 4130009, 1, 3), - (2, 1002215, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (2, 1002216, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (2, 1002217, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (2, 1002218, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (2, 1002242, 55, 1, 25000, 0, 0, 4130018, 1, 1), - (2, 1002243, 55, 1, 25000, 0, 0, 4130018, 1, 1), - (2, 1002244, 55, 1, 25000, 0, 0, 4130018, 1, 1), - (2, 1002245, 55, 1, 25000, 0, 0, 4130018, 1, 1), - (2, 1002246, 55, 1, 25000, 0, 0, 4130018, 1, 1), - (2, 1002252, 65, 1, 40000, 0, 0, 4130018, 1, 1), - (2, 1002253, 65, 1, 40000, 0, 0, 4130018, 1, 1), - (2, 1002254, 65, 1, 40000, 0, 0, 4130018, 1, 1), - (2, 1002271, 75, 2, 66500, 0, 0, 4130018, 1, 2), - (2, 1002272, 75, 2, 66500, 0, 0, 4130018, 1, 2), - (2, 1002273, 75, 2, 66500, 0, 0, 4130018, 1, 2), - (2, 1002274, 75, 2, 66500, 0, 0, 4130018, 1, 2), - (2, 1002363, 85, 2, 77000, 0, 0, 4130018, 1, 2), - (2, 1002364, 85, 2, 77000, 0, 0, 4130018, 1, 2), - (2, 1002365, 85, 2, 77000, 0, 0, 4130018, 1, 2), - (2, 1002366, 85, 2, 77000, 0, 0, 4130018, 1, 2), - (2, 1002398, 95, 2, 87500, 0, 0, 4130018, 1, 2), - (2, 1002399, 95, 2, 87500, 0, 0, 4130018, 1, 2), - (2, 1002400, 95, 2, 87500, 0, 0, 4130018, 1, 2), - (2, 1002401, 95, 2, 87500, 0, 0, 4130018, 1, 2), - (2, 1002773, 105, 3, 150000, 0, 0, 4130018, 1, 3), - (2, 1002791, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (2, 1002777, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (2, 1050045, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1050046, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1050047, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1050048, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1050049, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1051030, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1051031, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1051032, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1051033, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1051034, 43, 1, 45000, 0, 0, 4130021, 1, 1), - (2, 1050053, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1050054, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1050055, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1050056, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1051044, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1051045, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1051046, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1051047, 53, 1, 50000, 0, 0, 4130021, 1, 1), - (2, 1050067, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1050068, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1050069, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1050070, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1051052, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1051053, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1051054, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1051055, 63, 1, 60000, 0, 0, 4130021, 1, 1), - (2, 1050072, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1050073, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1050074, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1051056, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1051057, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1051058, 73, 2, 112000, 0, 0, 4130021, 1, 2), - (2, 1050092, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1050093, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1050094, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1050095, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1051094, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1051095, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1051096, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1051097, 83, 2, 140000, 0, 0, 4130021, 1, 2), - (2, 1050102, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1050103, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1050104, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1050105, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1051101, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1051102, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1051103, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1051104, 93, 2, 168000, 0, 0, 4130021, 1, 2), - (2, 1052076, 103, 3, 290000, 0, 0, 4130021, 1, 3), - (2, 1052161, 115, 3, 340000, 0, 0, 4130021, 1, 3), - (2, 1052156, 115, 3, 340000, 0, 0, 4130021, 1, 3), - (2, 1072140, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (2, 1072141, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (2, 1072142, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (2, 1072143, 45, 1, 27500, 0, 0, 4130001, 1, 1), - (2, 1072136, 55, 1, 30000, 0, 0, 4130001, 1, 1), - (2, 1072137, 55, 1, 30000, 0, 0, 4130001, 1, 1), - (2, 1072138, 55, 1, 30000, 0, 0, 4130001, 1, 1), - (2, 1072139, 55, 1, 30000, 0, 0, 4130001, 1, 1), - (2, 1072157, 65, 1, 40000, 0, 0, 4130001, 1, 1), - (2, 1072158, 65, 1, 40000, 0, 0, 4130001, 1, 1), - (2, 1072159, 65, 1, 40000, 0, 0, 4130001, 1, 1), - (2, 1072160, 65, 1, 40000, 0, 0, 4130001, 1, 1), - (2, 1072177, 75, 2, 70000, 0, 0, 4130001, 1, 2), - (2, 1072178, 75, 2, 70000, 0, 0, 4130001, 1, 2), - (2, 1072179, 75, 2, 70000, 0, 0, 4130001, 1, 2), - (2, 1072206, 85, 2, 84000, 0, 0, 4130001, 1, 2), - (2, 1072207, 85, 2, 84000, 0, 0, 4130001, 1, 2), - (2, 1072208, 85, 2, 84000, 0, 0, 4130001, 1, 2), - (2, 1072209, 85, 2, 84000, 0, 0, 4130001, 1, 2), - (2, 1072223, 95, 2, 98000, 0, 0, 4130001, 1, 2), - (2, 1072224, 95, 2, 98000, 0, 0, 4130001, 1, 2), - (2, 1072225, 95, 2, 98000, 0, 0, 4130001, 1, 2), - (2, 1072226, 95, 2, 98000, 0, 0, 4130001, 1, 2), - (2, 1072268, 105, 3, 180000, 0, 0, 4130001, 1, 3), - (2, 1072362, 115, 3, 220000, 0, 0, 4130001, 1, 3), - (2, 1072356, 115, 3, 220000, 0, 0, 4130001, 1, 3), - (2, 1082080, 45, 1, 50000, 0, 0, 4130000, 1, 1), - (2, 1082081, 45, 1, 40000, 0, 0, 4130000, 1, 1), - (2, 1082082, 45, 1, 45000, 0, 0, 4130000, 1, 1), - (2, 1082086, 55, 1, 52500, 0, 0, 4130000, 1, 1), - (2, 1082087, 55, 1, 57500, 0, 0, 4130000, 1, 1), - (2, 1082088, 55, 1, 62500, 0, 0, 4130000, 1, 1), - (2, 1082098, 65, 1, 70000, 0, 0, 4130000, 1, 1), - (2, 1082099, 65, 1, 72500, 0, 0, 4130000, 1, 1), - (2, 1082100, 65, 1, 75000, 0, 0, 4130000, 1, 1), - (2, 1082121, 75, 2, 140000, 0, 0, 4130000, 1, 2), - (2, 1082122, 75, 2, 143500, 0, 0, 4130000, 1, 2), - (2, 1082123, 75, 2, 147000, 0, 0, 4130000, 1, 2), - (2, 1082131, 85, 2, 161000, 0, 0, 4130000, 1, 2), - (2, 1082132, 85, 2, 164500, 0, 0, 4130000, 1, 2), - (2, 1082133, 85, 2, 164500, 0, 0, 4130000, 1, 2), - (2, 1082134, 85, 2, 168000, 0, 0, 4130000, 1, 2), - (2, 1082151, 95, 2, 182000, 0, 0, 4130000, 1, 2), - (2, 1082152, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (2, 1082153, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (2, 1082154, 95, 2, 189000, 0, 0, 4130000, 1, 2), - (2, 1082164, 105, 3, 300000, 0, 0, 4130000, 1, 3), - (2, 1082240, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (2, 1082235, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (2, 1092057, 115, 3, 350000, 0, 0, 4130022, 1, 3), - (2, 1372007, 43, 1, 100000, 0, 0, 4130010, 1, 1), - (2, 1382006, 50, 1, 75000, 0, 0, 4130011, 1, 1), - (2, 1372014, 53, 1, 115000, 0, 0, 4130010, 1, 1), - (2, 1382007, 60, 1, 100000, 0, 0, 4130011, 1, 1), - (2, 1372015, 63, 1, 130000, 0, 0, 4130010, 1, 1), - (2, 1382010, 70, 1, 125000, 0, 0, 4130011, 1, 1), - (2, 1372016, 73, 2, 203000, 0, 0, 4130010, 1, 2), - (2, 1382008, 80, 2, 217000, 0, 0, 4130011, 1, 2), - (2, 1372009, 83, 2, 227500, 0, 0, 4130010, 1, 2), - (2, 1382035, 90, 2, 266000, 0, 0, 4130011, 1, 2), - (2, 1372010, 93, 2, 252000, 0, 0, 4130010, 1, 2), - (2, 1372032, 103, 3, 460000, 0, 0, 4130010, 1, 3), - (2, 1382036, 105, 3, 470000, 0, 0, 4130011, 1, 3), - (2, 1372045, 115, 3, 510000, 0, 0, 4130010, 1, 3), - (2, 1382059, 115, 3, 520000, 0, 0, 4130011, 1, 3), - (2, 1372044, 115, 3, 510000, 0, 0, 4130010, 1, 3), - (2, 1382057, 115, 3, 520000, 0, 0, 4130011, 1, 3), - (4, 1002211, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (4, 1002212, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (4, 1002213, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (4, 1002214, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (4, 1002267, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (4, 1002268, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (4, 1002269, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (4, 1002270, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (4, 1002286, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (4, 1002287, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (4, 1002288, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (4, 1002289, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (4, 1002275, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (4, 1002276, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (4, 1002277, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (4, 1002278, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (4, 1002402, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (4, 1002403, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (4, 1002404, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (4, 1002405, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (4, 1002406, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (4, 1002407, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (4, 1002408, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (4, 1002547, 105, 3, 150000, 0, 0, 4130018, 1, 3), - (4, 1002792, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (4, 1002778, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (4, 1050051, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (4, 1050052, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (4, 1051037, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (4, 1051038, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (4, 1051039, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (4, 1050058, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1050059, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1050060, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1051041, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1051042, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1051043, 55, 1, 52500, 0, 0, 4130021, 1, 1), - (4, 1050061, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1050062, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1050063, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1050064, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1051062, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1051063, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1051064, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1051065, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (4, 1050075, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1050076, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1050077, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1050078, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1051066, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1051067, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1051068, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1051069, 75, 2, 98000, 0, 0, 4130021, 1, 2), - (4, 1050088, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1050089, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1050090, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1050091, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1051082, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1051083, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1051084, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1051085, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (4, 1050106, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1050107, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1050108, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1051105, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1051106, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1051107, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (4, 1052071, 105, 3, 300000, 0, 0, 4130021, 1, 3), - (4, 1052162, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (4, 1052157, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (4, 1072122, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (4, 1072123, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (4, 1072124, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (4, 1072125, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (4, 1072144, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (4, 1072145, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (4, 1072146, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (4, 1072164, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (4, 1072165, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (4, 1072166, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (4, 1072167, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (4, 1072182, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (4, 1072183, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (4, 1072184, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (4, 1072185, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (4, 1072203, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (4, 1072204, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (4, 1072205, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (4, 1072227, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (4, 1072228, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (4, 1072229, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (4, 1072269, 105, 3, 180000, 0, 0, 4130001, 1, 3), - (4, 1072363, 115, 3, 200000, 0, 0, 4130001, 1, 3), - (4, 1072357, 115, 3, 200000, 0, 0, 4130001, 1, 3), - (4, 1082083, 45, 1, 52500, 0, 0, 4130000, 1, 1), - (4, 1082084, 45, 1, 42500, 0, 0, 4130000, 1, 1), - (4, 1082085, 45, 1, 47500, 0, 0, 4130000, 1, 1), - (4, 1082089, 55, 1, 55000, 0, 0, 4130000, 1, 1), - (4, 1082090, 55, 1, 60000, 0, 0, 4130000, 1, 1), - (4, 1082091, 55, 1, 65000, 0, 0, 4130000, 1, 1), - (4, 1082106, 65, 1, 70000, 0, 0, 4130000, 1, 1), - (4, 1082107, 65, 1, 75000, 0, 0, 4130000, 1, 1), - (4, 1082108, 65, 1, 80000, 0, 0, 4130000, 1, 1), - (4, 1082109, 75, 2, 140000, 0, 0, 4130000, 1, 2), - (4, 1082110, 75, 2, 143500, 0, 0, 4130000, 1, 2), - (4, 1082111, 75, 2, 143500, 0, 0, 4130000, 1, 2), - (4, 1082112, 75, 2, 147000, 0, 0, 4130000, 1, 2), - (4, 1082125, 85, 2, 161000, 0, 0, 4130000, 1, 2), - (4, 1082126, 85, 2, 164500, 0, 0, 4130000, 1, 2), - (4, 1082127, 85, 2, 168000, 0, 0, 4130000, 1, 2), - (4, 1082158, 95, 2, 182000, 0, 0, 4130000, 1, 2), - (4, 1082159, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (4, 1082160, 95, 2, 189000, 0, 0, 4130000, 1, 2), - (4, 1082163, 105, 3, 300000, 0, 0, 4130000, 1, 3), - (4, 1082241, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (4, 1082236, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (4, 1452008, 45, 1, 100000, 0, 0, 4130012, 1, 1), - (4, 1462007, 45, 1, 85000, 0, 0, 4130013, 1, 1), - (4, 1452004, 55, 1, 125000, 0, 0, 4130012, 1, 1), - (4, 1462008, 55, 1, 120000, 0, 0, 4130013, 1, 1), - (4, 1452009, 65, 1, 150000, 0, 0, 4130012, 1, 1), - (4, 1452010, 65, 1, 150000, 0, 0, 4130012, 1, 1), - (4, 1452011, 65, 1, 150000, 0, 0, 4130012, 1, 1), - (4, 1462009, 65, 1, 150000, 0, 0, 4130013, 1, 1), - (4, 1452012, 75, 2, 245000, 0, 0, 4130012, 1, 2), - (4, 1452013, 75, 2, 245000, 0, 0, 4130012, 1, 2), - (4, 1452014, 75, 2, 245000, 0, 0, 4130012, 1, 2), - (4, 1452015, 75, 2, 245000, 0, 0, 4130012, 1, 2), - (4, 1462010, 75, 2, 245000, 0, 0, 4130013, 1, 2), - (4, 1462011, 75, 2, 245000, 0, 0, 4130013, 1, 2), - (4, 1462012, 75, 2, 245000, 0, 0, 4130013, 1, 2), - (4, 1462013, 75, 2, 245000, 0, 0, 4130013, 1, 2), - (4, 1452017, 85, 2, 280000, 0, 0, 4130012, 1, 2), - (4, 1462018, 85, 2, 280000, 0, 0, 4130013, 1, 2), - (4, 1452019, 95, 2, 315000, 0, 0, 4130012, 1, 2), - (4, 1452020, 95, 2, 315000, 0, 0, 4130012, 1, 2), - (4, 1452021, 95, 2, 315000, 0, 0, 4130012, 1, 2), - (4, 1462015, 95, 2, 315000, 0, 0, 4130013, 1, 2), - (4, 1462016, 95, 2, 315000, 0, 0, 4130013, 1, 2), - (4, 1462017, 95, 2, 315000, 0, 0, 4130013, 1, 2), - (4, 1452044, 105, 3, 500000, 0, 0, 4130012, 1, 3), - (4, 1462039, 105, 3, 500000, 0, 0, 4130013, 1, 3), - (4, 1452059, 115, 3, 550000, 0, 0, 4130012, 1, 3), - (4, 1462051, 115, 3, 550000, 0, 0, 4130013, 1, 3), - (4, 1452057, 115, 3, 550000, 0, 0, 4130012, 1, 3), - (4, 1462050, 115, 3, 550000, 0, 0, 4130013, 1, 3), - (8, 1002207, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (8, 1002208, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (8, 1002209, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (8, 1002210, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (8, 1002247, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (8, 1002248, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (8, 1002249, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (8, 1002281, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (8, 1002282, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (8, 1002283, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (8, 1002284, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (8, 1002285, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (8, 1002327, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (8, 1002328, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (8, 1002329, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (8, 1002330, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (8, 1002323, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (8, 1002324, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (8, 1002325, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (8, 1002326, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (8, 1002380, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (8, 1002381, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (8, 1002382, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (8, 1002383, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (8, 1002550, 105, 3, 150000, 0, 0, 4130018, 1, 3), - (8, 1002793, 115, 3, 190000, 0, 0, 4130018, 1, 3), - (8, 1002779, 115, 3, 190000, 0, 0, 4130018, 1, 3), - (8, 1040094, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1040095, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1040096, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1040097, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1041077, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1041078, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1041079, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1041080, 45, 1, 37500, 0, 0, 4130019, 1, 1), - (8, 1040098, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1040099, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1040100, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1041094, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1041095, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1041096, 55, 1, 45000, 0, 0, 4130019, 1, 1), - (8, 1040105, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1040106, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1040107, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1041100, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1041101, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1041102, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1041103, 65, 1, 50000, 0, 0, 4130019, 1, 1), - (8, 1040108, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1040109, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1040110, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1041105, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1041106, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1041107, 75, 2, 98000, 0, 0, 4130019, 1, 2), - (8, 1040115, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1040116, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1040117, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1040118, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1041115, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1041116, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1041117, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1041118, 85, 2, 126000, 0, 0, 4130019, 1, 2), - (8, 1060083, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1060084, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1060085, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1060086, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1061076, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1061077, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1061078, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1061079, 45, 1, 30000, 0, 0, 4130020, 1, 1), - (8, 1060087, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1060088, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1060089, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1061093, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1061094, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1061095, 55, 1, 37500, 0, 0, 4130020, 1, 1), - (8, 1060093, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1060094, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1060095, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1061099, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1061100, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1061101, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1061102, 65, 1, 45000, 0, 0, 4130020, 1, 1), - (8, 1060097, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1060098, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1060099, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1061104, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1061105, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1061106, 75, 2, 84000, 0, 0, 4130020, 1, 2), - (8, 1060104, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1060105, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1060106, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1060107, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1061114, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1061115, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1061116, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1061117, 85, 2, 112000, 0, 0, 4130020, 1, 2), - (8, 1050096, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1050097, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1050098, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1050099, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1051090, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1051091, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1051092, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1051093, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (8, 1052072, 105, 3, 300000, 0, 0, 4130021, 1, 3), - (8, 1052163, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (8, 1052158, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (8, 1072128, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (8, 1072129, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (8, 1072130, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (8, 1072131, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (8, 1072150, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (8, 1072151, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (8, 1072152, 55, 1, 35000, 0, 0, 4130001, 1, 1), - (8, 1072161, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (8, 1072162, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (8, 1072163, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (8, 1072172, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (8, 1072173, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (8, 1072174, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (8, 1072192, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (8, 1072193, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (8, 1072194, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (8, 1072195, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (8, 1072213, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (8, 1072214, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (8, 1072215, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (8, 1072216, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (8, 1072272, 105, 3, 195000, 0, 0, 4130001, 1, 3), - (8, 1072364, 115, 3, 225000, 0, 0, 4130001, 1, 3), - (8, 1072358, 115, 3, 225000, 0, 0, 4130001, 1, 3), - (8, 1082065, 45, 1, 42500, 0, 0, 4130000, 1, 1), - (8, 1082066, 45, 1, 47500, 0, 0, 4130000, 1, 1), - (8, 1082067, 45, 1, 45000, 0, 0, 4130000, 1, 1), - (8, 1082092, 55, 1, 55000, 0, 0, 4130000, 1, 1), - (8, 1082093, 55, 1, 60000, 0, 0, 4130000, 1, 1), - (8, 1082094, 55, 1, 65000, 0, 0, 4130000, 1, 1), - (8, 1082095, 65, 1, 75000, 0, 0, 4130000, 1, 1), - (8, 1082096, 65, 1, 80000, 0, 0, 4130000, 1, 1), - (8, 1082097, 65, 1, 85000, 0, 0, 4130000, 1, 1), - (8, 1082118, 75, 2, 140000, 0, 0, 4130000, 1, 2), - (8, 1082119, 75, 2, 143500, 0, 0, 4130000, 1, 2), - (8, 1082120, 75, 2, 147000, 0, 0, 4130000, 1, 2), - (8, 1082142, 85, 2, 150500, 0, 0, 4130000, 1, 2), - (8, 1082143, 85, 2, 150500, 0, 0, 4130000, 1, 2), - (8, 1082144, 85, 2, 150500, 0, 0, 4130000, 1, 2), - (8, 1082135, 95, 2, 182000, 0, 0, 4130000, 1, 2), - (8, 1082136, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (8, 1082137, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (8, 1082138, 95, 2, 189000, 0, 0, 4130000, 1, 2), - (8, 1082167, 105, 3, 300000, 0, 0, 4130000, 1, 3), - (8, 1082242, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (8, 1082237, 115, 3, 330000, 0, 0, 4130000, 1, 3), - (8, 1092059, 115, 3, 350000, 0, 0, 4130022, 1, 3), - (8, 1332003, 45, 1, 110000, 0, 0, 4130014, 1, 1), - (8, 1472018, 45, 1, 50000, 0, 0, 4130015, 1, 1), - (8, 1472019, 45, 1, 52500, 0, 0, 4130015, 1, 1), - (8, 1472020, 45, 1, 52500, 0, 0, 4130015, 1, 1), - (8, 1472021, 45, 1, 55000, 0, 0, 4130015, 1, 1), - (8, 1332016, 45, 1, 110000, 0, 0, 4130014, 1, 1), - (8, 1332015, 55, 1, 125000, 0, 0, 4130014, 1, 1), - (8, 1472022, 55, 1, 125000, 0, 0, 4130015, 1, 1), - (8, 1472023, 55, 1, 127500, 0, 0, 4130015, 1, 1), - (8, 1472024, 55, 1, 127500, 0, 0, 4130015, 1, 1), - (8, 1472025, 55, 1, 130000, 0, 0, 4130015, 1, 1), - (8, 1332017, 55, 1, 125000, 0, 0, 4130014, 1, 1), - (8, 1332018, 65, 1, 140000, 0, 0, 4130014, 1, 1), - (8, 1472026, 65, 1, 150000, 0, 0, 4130015, 1, 1), - (8, 1472027, 65, 1, 152500, 0, 0, 4130015, 1, 1), - (8, 1472028, 65, 1, 152500, 0, 0, 4130015, 1, 1), - (8, 1472029, 65, 1, 155000, 0, 0, 4130015, 1, 1), - (8, 1332019, 65, 1, 140000, 0, 0, 4130014, 1, 1), - (8, 1472031, 75, 2, 280000, 0, 0, 4130015, 1, 2), - (8, 1332022, 75, 2, 217000, 0, 0, 4130014, 1, 2), - (8, 1332023, 75, 2, 217000, 0, 0, 4130014, 1, 2), - (8, 1332027, 85, 2, 238000, 0, 0, 4130014, 1, 2), - (8, 1472033, 85, 2, 315000, 0, 0, 4130015, 1, 2), - (8, 1332026, 85, 2, 238000, 0, 0, 4130014, 1, 2), - (8, 1332052, 95, 2, 280000, 0, 0, 4130014, 1, 2), - (8, 1472053, 95, 2, 357000, 0, 0, 4130015, 1, 2), - (8, 1332051, 95, 2, 280000, 0, 0, 4130014, 1, 2), - (8, 1332050, 105, 3, 450000, 0, 0, 4130014, 1, 3), - (8, 1472051, 105, 3, 570000, 0, 0, 4130015, 1, 3), - (8, 1472052, 105, 3, 570000, 0, 0, 4130015, 1, 3), - (8, 1332049, 105, 3, 450000, 0, 0, 4130014, 1, 3), - (8, 1332075, 115, 3, 500000, 0, 0, 4130014, 1, 3), - (8, 1332076, 115, 3, 500000, 0, 0, 4130014, 1, 3), - (8, 1472071, 115, 3, 630000, 0, 0, 4130015, 1, 3), - (8, 1332073, 115, 3, 500000, 0, 0, 4130014, 1, 3), - (8, 1332074, 115, 3, 510000, 0, 0, 4130014, 1, 3), - (8, 1472068, 115, 3, 630000, 0, 0, 4130015, 1, 3), - (16, 1002631, 45, 1, 20000, 0, 0, 4130018, 1, 1), - (16, 1002634, 55, 1, 27500, 0, 0, 4130018, 1, 1), - (16, 1002637, 65, 1, 42500, 0, 0, 4130018, 1, 1), - (16, 1002640, 75, 2, 70000, 0, 0, 4130018, 1, 2), - (16, 1002643, 85, 2, 80500, 0, 0, 4130018, 1, 2), - (16, 1002646, 95, 2, 91000, 0, 0, 4130018, 1, 2), - (16, 1002649, 105, 3, 150000, 0, 0, 4130018, 1, 3), - (16, 1002794, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (16, 1002780, 115, 3, 170000, 0, 0, 4130018, 1, 3), - (16, 1052116, 45, 1, 47500, 0, 0, 4130021, 1, 1), - (16, 1052119, 55, 1, 50000, 0, 0, 4130021, 1, 1), - (16, 1052122, 65, 1, 57500, 0, 0, 4130021, 1, 1), - (16, 1052125, 75, 2, 126000, 0, 0, 4130021, 1, 2), - (16, 1052128, 85, 2, 140000, 0, 0, 4130021, 1, 2), - (16, 1052131, 95, 2, 168000, 0, 0, 4130021, 1, 2), - (16, 1052134, 105, 3, 300000, 0, 0, 4130021, 1, 3), - (16, 1052164, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (16, 1052159, 115, 3, 360000, 0, 0, 4130021, 1, 3), - (16, 1072303, 45, 1, 25000, 0, 0, 4130001, 1, 1), - (16, 1072306, 55, 1, 32500, 0, 0, 4130001, 1, 1), - (16, 1072309, 65, 1, 45000, 0, 0, 4130001, 1, 1), - (16, 1072312, 75, 2, 77000, 0, 0, 4130001, 1, 2), - (16, 1072315, 85, 2, 98000, 0, 0, 4130001, 1, 2), - (16, 1072318, 95, 2, 119000, 0, 0, 4130001, 1, 2), - (16, 1072321, 105, 3, 180000, 0, 0, 4130001, 1, 3), - (16, 1072365, 115, 3, 200000, 0, 0, 4130001, 1, 3), - (16, 1072359, 115, 3, 200000, 0, 0, 4130001, 1, 3), - (16, 1082198, 45, 1, 42500, 0, 0, 4130000, 1, 1), - (16, 1082201, 55, 1, 55000, 0, 0, 4130000, 1, 1), - (16, 1082204, 65, 1, 75000, 0, 0, 4130000, 1, 1), - (16, 1082207, 75, 2, 140000, 0, 0, 4130000, 1, 2), - (16, 1082210, 85, 2, 161000, 0, 0, 4130000, 1, 2), - (16, 1082213, 95, 2, 185500, 0, 0, 4130000, 1, 2), - (16, 1082216, 105, 3, 300000, 0, 0, 4130000, 1, 3), - (16, 1082243, 115, 3, 335000, 0, 0, 4130000, 1, 3), - (16, 1082238, 115, 3, 335000, 0, 0, 4130000, 1, 3), - (16, 1482007, 45, 1, 65000, 0, 0, 4130016, 1, 1), - (16, 1492007, 45, 1, 70000, 0, 0, 4130017, 1, 1), - (16, 1482008, 55, 1, 120000, 0, 0, 4130016, 1, 1), - (16, 1492008, 55, 1, 125000, 0, 0, 4130017, 1, 1), - (16, 1482009, 65, 1, 150000, 0, 0, 4130016, 1, 1), - (16, 1492009, 65, 1, 155000, 0, 0, 4130017, 1, 1), - (16, 1482010, 75, 2, 245000, 0, 0, 4130016, 1, 2), - (16, 1492010, 75, 2, 245000, 0, 0, 4130017, 1, 2), - (16, 1482011, 85, 2, 273000, 0, 0, 4130016, 1, 2), - (16, 1492011, 85, 2, 280000, 0, 0, 4130017, 1, 2), - (16, 1482012, 95, 2, 308000, 0, 0, 4130016, 1, 2), - (16, 1492012, 95, 2, 315000, 0, 0, 4130017, 1, 2), - (16, 1482013, 105, 3, 510000, 0, 0, 4130016, 1, 3), - (16, 1492013, 105, 3, 520000, 0, 0, 4130017, 1, 3), - (16, 1482024, 115, 3, 560000, 0, 0, 4130016, 1, 3), - (16, 1492025, 115, 3, 570000, 0, 0, 4130017, 1, 3), - (16, 1482023, 115, 3, 560000, 0, 0, 4130016, 1, 3), - (16, 1492023, 115, 3, 570000, 0, 0, 4130017, 1, 3); + (0, 2041058, 50, 1, 55000, 0, 1122013, 0, 1, 0), + (0, 2040727, 50, 1, 55000, 0, 1122013, 0, 1, 0), + (1, 1002028, 45, 1, 55000, 0, 0, 4130018, 1, 1), + (1, 1002085, 45, 1, 50000, 0, 0, 4130018, 1, 1), + (1, 1002086, 45, 1, 41000, 0, 0, 4130018, 1, 1), + (1, 1002022, 50, 1, 60000, 0, 0, 4130018, 1, 1), + (1, 1002100, 50, 1, 60000, 0, 0, 4130018, 1, 1), + (1, 1002101, 50, 1, 60000, 0, 0, 4130018, 1, 1), + (1, 1002029, 55, 1, 82000, 0, 0, 4130018, 1, 1), + (1, 1002084, 55, 1, 82000, 0, 0, 4130018, 1, 1), + (1, 1002030, 65, 1, 93000, 0, 0, 4130018, 1, 1), + (1, 1002094, 65, 1, 93000, 0, 0, 4130018, 1, 1), + (1, 1002095, 65, 1, 93000, 0, 0, 4130018, 1, 1), + (1, 1002338, 75, 2, 146000, 0, 0, 4130018, 1, 2), + (1, 1002339, 75, 2, 146000, 0, 0, 4130018, 1, 2), + (1, 1002340, 75, 2, 146000, 0, 0, 4130018, 1, 2), + (1, 1002528, 85, 2, 161000, 0, 0, 4130018, 1, 2), + (1, 1002529, 85, 2, 161000, 0, 0, 4130018, 1, 2), + (1, 1002530, 85, 2, 161000, 0, 0, 4130018, 1, 2), + (1, 1002531, 85, 2, 161000, 0, 0, 4130018, 1, 2), + (1, 1002532, 85, 2, 161000, 0, 0, 4130018, 1, 2), + (1, 1002377, 95, 2, 184000, 0, 0, 4130018, 1, 2), + (1, 1002378, 95, 2, 184000, 0, 0, 4130018, 1, 2), + (1, 1002379, 95, 2, 184000, 0, 0, 4130018, 1, 2), + (1, 1002551, 105, 3, 308000, 0, 0, 4130018, 1, 3), + (1, 1002790, 115, 3, 352000, 0, 0, 4130018, 1, 3), + (1, 1002776, 115, 3, 352000, 0, 0, 4130018, 1, 3), + (1, 1040087, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1040088, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1040089, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1041087, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1041088, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1041089, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (1, 1040090, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1040091, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1040092, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1040093, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1041091, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1041092, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1041093, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (1, 1040102, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1040103, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1040104, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1041097, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1041098, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1041099, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (1, 1040111, 85, 2, 123000, 0, 0, 4130019, 1, 2), + (1, 1040112, 85, 2, 123000, 0, 0, 4130019, 1, 2), + (1, 1040113, 85, 2, 123000, 0, 0, 4130019, 1, 2), + (1, 1041119, 85, 2, 146000, 0, 0, 4130019, 1, 2), + (1, 1041120, 85, 2, 146000, 0, 0, 4130019, 1, 2), + (1, 1041121, 85, 2, 146000, 0, 0, 4130019, 1, 2), + (1, 1040120, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1040121, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1040122, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1041122, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1041123, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1041124, 95, 2, 153000, 0, 0, 4130019, 1, 2), + (1, 1060076, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1060077, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1060078, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1061086, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1061087, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1061088, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (1, 1060079, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1060080, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1060081, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1060082, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1061090, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1061091, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1061092, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (1, 1060090, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1060091, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1060092, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1061096, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1061097, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1061098, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (1, 1060100, 85, 2, 107000, 0, 0, 4130020, 1, 2), + (1, 1060101, 85, 2, 107000, 0, 0, 4130020, 1, 2), + (1, 1060102, 85, 2, 107000, 0, 0, 4130020, 1, 2), + (1, 1061118, 85, 2, 130000, 0, 0, 4130020, 1, 2), + (1, 1061119, 85, 2, 130000, 0, 0, 4130020, 1, 2), + (1, 1061120, 85, 2, 130000, 0, 0, 4130020, 1, 2), + (1, 1060109, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1060110, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1060111, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1061121, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1061122, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1061123, 95, 2, 138000, 0, 0, 4130020, 1, 2), + (1, 1050080, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1050081, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1050082, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1050083, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1051077, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1051078, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1051079, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1051080, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (1, 1052075, 105, 3, 352000, 0, 0, 4130021, 1, 3), + (1, 1052160, 115, 3, 418000, 0, 0, 4130021, 1, 3), + (1, 1052155, 115, 3, 418000, 0, 0, 4130021, 1, 3), + (1, 1072132, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (1, 1072133, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (1, 1072134, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (1, 1072135, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (1, 1072147, 55, 1, 39000, 0, 0, 4130001, 1, 1), + (1, 1072148, 55, 1, 39000, 0, 0, 4130001, 1, 1), + (1, 1072149, 55, 1, 39000, 0, 0, 4130001, 1, 1), + (1, 1072154, 65, 1, 47000, 0, 0, 4130001, 1, 1), + (1, 1072155, 65, 1, 47000, 0, 0, 4130001, 1, 1), + (1, 1072156, 65, 1, 47000, 0, 0, 4130001, 1, 1), + (1, 1072210, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (1, 1072211, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (1, 1072212, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (1, 1072196, 85, 2, 115000, 0, 0, 4130001, 1, 2), + (1, 1072197, 85, 2, 115000, 0, 0, 4130001, 1, 2), + (1, 1072198, 85, 2, 115000, 0, 0, 4130001, 1, 2), + (1, 1072220, 95, 2, 138000, 0, 0, 4130001, 1, 2), + (1, 1072221, 95, 2, 138000, 0, 0, 4130001, 1, 2), + (1, 1072222, 95, 2, 138000, 0, 0, 4130001, 1, 2), + (1, 1072273, 105, 3, 231000, 0, 0, 4130001, 1, 3), + (1, 1072361, 115, 3, 264000, 0, 0, 4130001, 1, 3), + (1, 1072355, 115, 3, 264000, 0, 0, 4130001, 1, 3), + (1, 1082009, 45, 1, 50000, 0, 0, 4130000, 1, 1), + (1, 1082010, 45, 1, 55000, 0, 0, 4130000, 1, 1), + (1, 1082011, 45, 1, 60000, 0, 0, 4130000, 1, 1), + (1, 1082059, 55, 1, 66000, 0, 0, 4130000, 1, 1), + (1, 1082060, 55, 1, 71000, 0, 0, 4130000, 1, 1), + (1, 1082061, 55, 1, 77000, 0, 0, 4130000, 1, 1), + (1, 1082103, 65, 1, 82000, 0, 0, 4130000, 1, 1), + (1, 1082104, 65, 1, 88000, 0, 0, 4130000, 1, 1), + (1, 1082105, 65, 1, 93000, 0, 0, 4130000, 1, 1), + (1, 1082114, 75, 2, 161000, 0, 0, 4130000, 1, 2), + (1, 1082115, 75, 2, 165000, 0, 0, 4130000, 1, 2), + (1, 1082116, 75, 2, 168000, 0, 0, 4130000, 1, 2), + (1, 1082117, 75, 2, 168000, 0, 0, 4130000, 1, 2), + (1, 1082128, 85, 2, 184000, 0, 0, 4130000, 1, 2), + (1, 1082129, 85, 2, 188000, 0, 0, 4130000, 1, 2), + (1, 1082130, 85, 2, 191000, 0, 0, 4130000, 1, 2), + (1, 1082139, 95, 2, 207000, 0, 0, 4130000, 1, 2), + (1, 1082140, 95, 2, 210000, 0, 0, 4130000, 1, 2), + (1, 1082141, 95, 2, 214000, 0, 0, 4130000, 1, 2), + (1, 1082168, 105, 3, 330000, 0, 0, 4130000, 1, 3), + (1, 1082239, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (1, 1082234, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (1, 1092004, 45, 1, 82000, 0, 0, 4130022, 1, 1), + (1, 1092009, 55, 1, 99000, 0, 0, 4130022, 1, 1), + (1, 1092010, 55, 1, 104000, 0, 0, 4130022, 1, 1), + (1, 1092011, 55, 1, 104000, 0, 0, 4130022, 1, 1), + (1, 1092015, 65, 1, 110000, 0, 0, 4130022, 1, 1), + (1, 1092016, 65, 1, 115000, 0, 0, 4130022, 1, 1), + (1, 1092017, 65, 1, 115000, 0, 0, 4130022, 1, 1), + (1, 1092023, 75, 2, 168000, 0, 0, 4130022, 1, 2), + (1, 1092024, 75, 2, 176000, 0, 0, 4130022, 1, 2), + (1, 1092025, 75, 2, 176000, 0, 0, 4130022, 1, 2), + (1, 1092026, 85, 2, 184000, 0, 0, 4130022, 1, 2), + (1, 1092027, 85, 2, 191000, 0, 0, 4130022, 1, 2), + (1, 1092028, 85, 2, 191000, 0, 0, 4130022, 1, 2), + (1, 1092036, 95, 2, 199000, 0, 0, 4130022, 1, 2), + (1, 1092037, 95, 2, 207000, 0, 0, 4130022, 1, 2), + (1, 1092038, 95, 2, 214000, 0, 0, 4130022, 1, 2), + (1, 1092060, 105, 3, 231000, 0, 0, 4130022, 1, 3), + (1, 1092058, 115, 3, 385000, 0, 0, 4130022, 1, 3), + (1, 1302010, 45, 1, 66000, 0, 0, 4130002, 1, 1), + (1, 1312008, 45, 1, 77000, 0, 0, 4130003, 1, 1), + (1, 1322017, 45, 1, 77000, 0, 0, 4130004, 1, 1), + (1, 1402003, 45, 1, 110000, 0, 0, 4130005, 1, 1), + (1, 1412003, 45, 1, 77000, 0, 0, 4130006, 1, 1), + (1, 1422005, 45, 1, 82000, 0, 0, 4130007, 1, 1), + (1, 1432004, 45, 1, 82000, 0, 0, 4130008, 1, 1), + (1, 1442005, 45, 1, 82000, 0, 0, 4130009, 1, 1), + (1, 1302011, 55, 1, 82000, 0, 0, 4130002, 1, 1), + (1, 1312009, 55, 1, 104000, 0, 0, 4130003, 1, 1), + (1, 1322018, 55, 1, 104000, 0, 0, 4130004, 1, 1), + (1, 1402011, 55, 1, 126000, 0, 0, 4130005, 1, 1), + (1, 1412007, 55, 1, 104000, 0, 0, 4130006, 1, 1), + (1, 1422009, 55, 1, 104000, 0, 0, 4130007, 1, 1), + (1, 1432006, 55, 1, 104000, 0, 0, 4130008, 1, 1), + (1, 1442010, 55, 1, 137000, 0, 0, 4130009, 1, 1), + (1, 1302012, 65, 1, 137000, 0, 0, 4130002, 1, 1), + (1, 1312010, 65, 1, 165000, 0, 0, 4130003, 1, 1), + (1, 1322019, 65, 1, 137000, 0, 0, 4130004, 1, 1), + (1, 1402012, 65, 1, 143000, 0, 0, 4130005, 1, 1), + (1, 1412008, 65, 1, 137000, 0, 0, 4130006, 1, 1), + (1, 1422010, 65, 1, 137000, 0, 0, 4130007, 1, 1), + (1, 1432007, 65, 1, 137000, 0, 0, 4130008, 1, 1), + (1, 1442008, 65, 1, 165000, 0, 0, 4130009, 1, 1), + (1, 1322020, 70, 1, 165000, 0, 0, 4130004, 1, 1), + (1, 1302018, 75, 2, 231000, 0, 0, 4130002, 1, 2), + (1, 1312011, 75, 2, 269000, 0, 0, 4130003, 1, 2), + (1, 1322028, 75, 2, 269000, 0, 0, 4130004, 1, 2), + (1, 1402004, 75, 2, 231000, 0, 0, 4130005, 1, 2), + (1, 1402015, 75, 2, 231000, 0, 0, 4130005, 1, 2), + (1, 1412009, 75, 2, 238000, 0, 0, 4130006, 1, 2), + (1, 1422012, 75, 2, 238000, 0, 0, 4130007, 1, 2), + (1, 1432010, 75, 2, 238000, 0, 0, 4130008, 1, 2), + (1, 1442019, 75, 2, 269000, 0, 0, 4130009, 1, 2), + (1, 1302023, 85, 2, 269000, 0, 0, 4130002, 1, 2), + (1, 1312015, 85, 2, 308000, 0, 0, 4130003, 1, 2), + (1, 1322029, 85, 2, 308000, 0, 0, 4130004, 1, 2), + (1, 1402005, 85, 2, 308000, 0, 0, 4130005, 1, 2), + (1, 1402016, 85, 2, 308000, 0, 0, 4130005, 1, 2), + (1, 1412010, 85, 2, 284000, 0, 0, 4130006, 1, 2), + (1, 1422013, 85, 2, 284000, 0, 0, 4130007, 1, 2), + (1, 1432011, 85, 2, 284000, 0, 0, 4130008, 1, 2), + (1, 1442020, 85, 2, 346000, 0, 0, 4130009, 1, 2), + (1, 1302056, 95, 2, 369000, 0, 0, 4130002, 1, 2), + (1, 1312030, 95, 2, 361000, 0, 0, 4130003, 1, 2), + (1, 1322045, 95, 2, 361000, 0, 0, 4130004, 1, 2), + (1, 1402035, 95, 2, 361000, 0, 0, 4130005, 1, 2), + (1, 1412021, 95, 2, 377000, 0, 0, 4130006, 1, 2), + (1, 1422027, 95, 2, 346000, 0, 0, 4130007, 1, 2), + (1, 1432030, 95, 2, 377000, 0, 0, 4130008, 1, 2), + (1, 1442044, 95, 2, 361000, 0, 0, 4130009, 1, 2), + (1, 1302059, 105, 3, 605000, 0, 0, 4130002, 1, 3), + (1, 1312031, 105, 3, 583000, 0, 0, 4130003, 1, 3), + (1, 1322052, 105, 3, 528000, 0, 0, 4130004, 1, 3), + (1, 1402036, 105, 3, 605000, 0, 0, 4130005, 1, 3), + (1, 1412026, 105, 3, 572000, 0, 0, 4130006, 1, 3), + (1, 1422028, 105, 3, 561000, 0, 0, 4130007, 1, 3), + (1, 1432038, 105, 3, 583000, 0, 0, 4130008, 1, 3), + (1, 1442045, 105, 3, 627000, 0, 0, 4130009, 1, 3), + (1, 1302086, 115, 3, 748000, 0, 0, 4130002, 1, 3), + (1, 1312038, 115, 3, 638000, 0, 0, 4130003, 1, 3), + (1, 1322061, 115, 3, 539000, 0, 0, 4130004, 1, 3), + (1, 1402047, 115, 3, 715000, 0, 0, 4130005, 1, 3), + (1, 1412034, 115, 3, 715000, 0, 0, 4130006, 1, 3), + (1, 1422038, 115, 3, 616000, 0, 0, 4130007, 1, 3), + (1, 1432049, 115, 3, 627000, 0, 0, 4130008, 1, 3), + (1, 1442067, 115, 3, 682000, 0, 0, 4130009, 1, 3), + (1, 1302081, 115, 3, 748000, 0, 0, 4130002, 1, 3), + (1, 1312037, 115, 3, 638000, 0, 0, 4130003, 1, 3), + (1, 1322060, 115, 3, 539000, 0, 0, 4130004, 1, 3), + (1, 1402046, 115, 3, 715000, 0, 0, 4130005, 1, 3), + (1, 1412033, 115, 3, 715000, 0, 0, 4130006, 1, 3), + (1, 1422037, 115, 3, 616000, 0, 0, 4130007, 1, 3), + (1, 1432047, 115, 3, 627000, 0, 0, 4130008, 1, 3), + (1, 1442063, 115, 3, 682000, 0, 0, 4130009, 1, 3), + (2, 1002215, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (2, 1002216, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (2, 1002217, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (2, 1002218, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (2, 1002242, 55, 1, 28000, 0, 0, 4130018, 1, 1), + (2, 1002243, 55, 1, 28000, 0, 0, 4130018, 1, 1), + (2, 1002244, 55, 1, 28000, 0, 0, 4130018, 1, 1), + (2, 1002245, 55, 1, 28000, 0, 0, 4130018, 1, 1), + (2, 1002246, 55, 1, 28000, 0, 0, 4130018, 1, 1), + (2, 1002252, 65, 1, 44000, 0, 0, 4130018, 1, 1), + (2, 1002253, 65, 1, 44000, 0, 0, 4130018, 1, 1), + (2, 1002254, 65, 1, 44000, 0, 0, 4130018, 1, 1), + (2, 1002271, 75, 2, 73000, 0, 0, 4130018, 1, 2), + (2, 1002272, 75, 2, 73000, 0, 0, 4130018, 1, 2), + (2, 1002273, 75, 2, 73000, 0, 0, 4130018, 1, 2), + (2, 1002274, 75, 2, 73000, 0, 0, 4130018, 1, 2), + (2, 1002363, 85, 2, 84000, 0, 0, 4130018, 1, 2), + (2, 1002364, 85, 2, 84000, 0, 0, 4130018, 1, 2), + (2, 1002365, 85, 2, 84000, 0, 0, 4130018, 1, 2), + (2, 1002366, 85, 2, 84000, 0, 0, 4130018, 1, 2), + (2, 1002398, 95, 2, 96000, 0, 0, 4130018, 1, 2), + (2, 1002399, 95, 2, 96000, 0, 0, 4130018, 1, 2), + (2, 1002400, 95, 2, 96000, 0, 0, 4130018, 1, 2), + (2, 1002401, 95, 2, 96000, 0, 0, 4130018, 1, 2), + (2, 1002773, 105, 3, 165000, 0, 0, 4130018, 1, 3), + (2, 1002791, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (2, 1002777, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (2, 1050045, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1050046, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1050047, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1050048, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1050049, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1051030, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1051031, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1051032, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1051033, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1051034, 43, 1, 50000, 0, 0, 4130021, 1, 1), + (2, 1050053, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1050054, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1050055, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1050056, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1051044, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1051045, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1051046, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1051047, 53, 1, 55000, 0, 0, 4130021, 1, 1), + (2, 1050067, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1050068, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1050069, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1050070, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1051052, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1051053, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1051054, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1051055, 63, 1, 66000, 0, 0, 4130021, 1, 1), + (2, 1050072, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1050073, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1050074, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1051056, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1051057, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1051058, 73, 2, 123000, 0, 0, 4130021, 1, 2), + (2, 1050092, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1050093, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1050094, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1050095, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1051094, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1051095, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1051096, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1051097, 83, 2, 153000, 0, 0, 4130021, 1, 2), + (2, 1050102, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1050103, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1050104, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1050105, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1051101, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1051102, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1051103, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1051104, 93, 2, 184000, 0, 0, 4130021, 1, 2), + (2, 1052076, 103, 3, 319000, 0, 0, 4130021, 1, 3), + (2, 1052161, 115, 3, 374000, 0, 0, 4130021, 1, 3), + (2, 1052156, 115, 3, 374000, 0, 0, 4130021, 1, 3), + (2, 1072140, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (2, 1072141, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (2, 1072142, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (2, 1072143, 45, 1, 30000, 0, 0, 4130001, 1, 1), + (2, 1072136, 55, 1, 33000, 0, 0, 4130001, 1, 1), + (2, 1072137, 55, 1, 33000, 0, 0, 4130001, 1, 1), + (2, 1072138, 55, 1, 33000, 0, 0, 4130001, 1, 1), + (2, 1072139, 55, 1, 33000, 0, 0, 4130001, 1, 1), + (2, 1072157, 65, 1, 44000, 0, 0, 4130001, 1, 1), + (2, 1072158, 65, 1, 44000, 0, 0, 4130001, 1, 1), + (2, 1072159, 65, 1, 44000, 0, 0, 4130001, 1, 1), + (2, 1072160, 65, 1, 44000, 0, 0, 4130001, 1, 1), + (2, 1072177, 75, 2, 77000, 0, 0, 4130001, 1, 2), + (2, 1072178, 75, 2, 77000, 0, 0, 4130001, 1, 2), + (2, 1072179, 75, 2, 77000, 0, 0, 4130001, 1, 2), + (2, 1072206, 85, 2, 92000, 0, 0, 4130001, 1, 2), + (2, 1072207, 85, 2, 92000, 0, 0, 4130001, 1, 2), + (2, 1072208, 85, 2, 92000, 0, 0, 4130001, 1, 2), + (2, 1072209, 85, 2, 92000, 0, 0, 4130001, 1, 2), + (2, 1072223, 95, 2, 107000, 0, 0, 4130001, 1, 2), + (2, 1072224, 95, 2, 107000, 0, 0, 4130001, 1, 2), + (2, 1072225, 95, 2, 107000, 0, 0, 4130001, 1, 2), + (2, 1072226, 95, 2, 107000, 0, 0, 4130001, 1, 2), + (2, 1072268, 105, 3, 198000, 0, 0, 4130001, 1, 3), + (2, 1072362, 115, 3, 242000, 0, 0, 4130001, 1, 3), + (2, 1072356, 115, 3, 242000, 0, 0, 4130001, 1, 3), + (2, 1082080, 45, 1, 55000, 0, 0, 4130000, 1, 1), + (2, 1082081, 45, 1, 44000, 0, 0, 4130000, 1, 1), + (2, 1082082, 45, 1, 50000, 0, 0, 4130000, 1, 1), + (2, 1082086, 55, 1, 58000, 0, 0, 4130000, 1, 1), + (2, 1082087, 55, 1, 63000, 0, 0, 4130000, 1, 1), + (2, 1082088, 55, 1, 69000, 0, 0, 4130000, 1, 1), + (2, 1082098, 65, 1, 77000, 0, 0, 4130000, 1, 1), + (2, 1082099, 65, 1, 80000, 0, 0, 4130000, 1, 1), + (2, 1082100, 65, 1, 82000, 0, 0, 4130000, 1, 1), + (2, 1082121, 75, 2, 153000, 0, 0, 4130000, 1, 2), + (2, 1082122, 75, 2, 157000, 0, 0, 4130000, 1, 2), + (2, 1082123, 75, 2, 161000, 0, 0, 4130000, 1, 2), + (2, 1082131, 85, 2, 176000, 0, 0, 4130000, 1, 2), + (2, 1082132, 85, 2, 180000, 0, 0, 4130000, 1, 2), + (2, 1082133, 85, 2, 180000, 0, 0, 4130000, 1, 2), + (2, 1082134, 85, 2, 184000, 0, 0, 4130000, 1, 2), + (2, 1082151, 95, 2, 199000, 0, 0, 4130000, 1, 2), + (2, 1082152, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (2, 1082153, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (2, 1082154, 95, 2, 207000, 0, 0, 4130000, 1, 2), + (2, 1082164, 105, 3, 330000, 0, 0, 4130000, 1, 3), + (2, 1082240, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (2, 1082235, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (2, 1092057, 115, 3, 385000, 0, 0, 4130022, 1, 3), + (2, 1372007, 43, 1, 110000, 0, 0, 4130010, 1, 1), + (2, 1382006, 50, 1, 82000, 0, 0, 4130011, 1, 1), + (2, 1372014, 53, 1, 126000, 0, 0, 4130010, 1, 1), + (2, 1382007, 60, 1, 110000, 0, 0, 4130011, 1, 1), + (2, 1372015, 63, 1, 143000, 0, 0, 4130010, 1, 1), + (2, 1382010, 70, 1, 137000, 0, 0, 4130011, 1, 1), + (2, 1372016, 73, 2, 223000, 0, 0, 4130010, 1, 2), + (2, 1382008, 80, 2, 238000, 0, 0, 4130011, 1, 2), + (2, 1372009, 83, 2, 250000, 0, 0, 4130010, 1, 2), + (2, 1382035, 90, 2, 292000, 0, 0, 4130011, 1, 2), + (2, 1372010, 93, 2, 277000, 0, 0, 4130010, 1, 2), + (2, 1372032, 103, 3, 506000, 0, 0, 4130010, 1, 3), + (2, 1382036, 105, 3, 517000, 0, 0, 4130011, 1, 3), + (2, 1372045, 115, 3, 561000, 0, 0, 4130010, 1, 3), + (2, 1382059, 115, 3, 572000, 0, 0, 4130011, 1, 3), + (2, 1372044, 115, 3, 561000, 0, 0, 4130010, 1, 3), + (2, 1382057, 115, 3, 572000, 0, 0, 4130011, 1, 3), + (4, 1002211, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (4, 1002212, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (4, 1002213, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (4, 1002214, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (4, 1002267, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (4, 1002268, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (4, 1002269, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (4, 1002270, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (4, 1002286, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (4, 1002287, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (4, 1002288, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (4, 1002289, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (4, 1002275, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (4, 1002276, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (4, 1002277, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (4, 1002278, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (4, 1002402, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (4, 1002403, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (4, 1002404, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (4, 1002405, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (4, 1002406, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (4, 1002407, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (4, 1002408, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (4, 1002547, 105, 3, 165000, 0, 0, 4130018, 1, 3), + (4, 1002792, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (4, 1002778, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (4, 1050051, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (4, 1050052, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (4, 1051037, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (4, 1051038, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (4, 1051039, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (4, 1050058, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1050059, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1050060, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1051041, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1051042, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1051043, 55, 1, 58000, 0, 0, 4130021, 1, 1), + (4, 1050061, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1050062, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1050063, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1050064, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1051062, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1051063, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1051064, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1051065, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (4, 1050075, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1050076, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1050077, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1050078, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1051066, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1051067, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1051068, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1051069, 75, 2, 107000, 0, 0, 4130021, 1, 2), + (4, 1050088, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1050089, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1050090, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1050091, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1051082, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1051083, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1051084, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1051085, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (4, 1050106, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1050107, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1050108, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1051105, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1051106, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1051107, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (4, 1052071, 105, 3, 330000, 0, 0, 4130021, 1, 3), + (4, 1052162, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (4, 1052157, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (4, 1072122, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (4, 1072123, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (4, 1072124, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (4, 1072125, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (4, 1072144, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (4, 1072145, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (4, 1072146, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (4, 1072164, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (4, 1072165, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (4, 1072166, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (4, 1072167, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (4, 1072182, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (4, 1072183, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (4, 1072184, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (4, 1072185, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (4, 1072203, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (4, 1072204, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (4, 1072205, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (4, 1072227, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (4, 1072228, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (4, 1072229, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (4, 1072269, 105, 3, 198000, 0, 0, 4130001, 1, 3), + (4, 1072363, 115, 3, 220000, 0, 0, 4130001, 1, 3), + (4, 1072357, 115, 3, 220000, 0, 0, 4130001, 1, 3), + (4, 1082083, 45, 1, 58000, 0, 0, 4130000, 1, 1), + (4, 1082084, 45, 1, 47000, 0, 0, 4130000, 1, 1), + (4, 1082085, 45, 1, 52000, 0, 0, 4130000, 1, 1), + (4, 1082089, 55, 1, 60000, 0, 0, 4130000, 1, 1), + (4, 1082090, 55, 1, 66000, 0, 0, 4130000, 1, 1), + (4, 1082091, 55, 1, 71000, 0, 0, 4130000, 1, 1), + (4, 1082106, 65, 1, 77000, 0, 0, 4130000, 1, 1), + (4, 1082107, 65, 1, 82000, 0, 0, 4130000, 1, 1), + (4, 1082108, 65, 1, 88000, 0, 0, 4130000, 1, 1), + (4, 1082109, 75, 2, 153000, 0, 0, 4130000, 1, 2), + (4, 1082110, 75, 2, 157000, 0, 0, 4130000, 1, 2), + (4, 1082111, 75, 2, 157000, 0, 0, 4130000, 1, 2), + (4, 1082112, 75, 2, 161000, 0, 0, 4130000, 1, 2), + (4, 1082125, 85, 2, 176000, 0, 0, 4130000, 1, 2), + (4, 1082126, 85, 2, 180000, 0, 0, 4130000, 1, 2), + (4, 1082127, 85, 2, 184000, 0, 0, 4130000, 1, 2), + (4, 1082158, 95, 2, 199000, 0, 0, 4130000, 1, 2), + (4, 1082159, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (4, 1082160, 95, 2, 207000, 0, 0, 4130000, 1, 2), + (4, 1082163, 105, 3, 330000, 0, 0, 4130000, 1, 3), + (4, 1082241, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (4, 1082236, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (4, 1452008, 45, 1, 110000, 0, 0, 4130012, 1, 1), + (4, 1462007, 45, 1, 93000, 0, 0, 4130013, 1, 1), + (4, 1452004, 55, 1, 137000, 0, 0, 4130012, 1, 1), + (4, 1462008, 55, 1, 132000, 0, 0, 4130013, 1, 1), + (4, 1452009, 65, 1, 165000, 0, 0, 4130012, 1, 1), + (4, 1452010, 65, 1, 165000, 0, 0, 4130012, 1, 1), + (4, 1452011, 65, 1, 165000, 0, 0, 4130012, 1, 1), + (4, 1462009, 65, 1, 165000, 0, 0, 4130013, 1, 1), + (4, 1452012, 75, 2, 269000, 0, 0, 4130012, 1, 2), + (4, 1452013, 75, 2, 269000, 0, 0, 4130012, 1, 2), + (4, 1452014, 75, 2, 269000, 0, 0, 4130012, 1, 2), + (4, 1452015, 75, 2, 269000, 0, 0, 4130012, 1, 2), + (4, 1462010, 75, 2, 269000, 0, 0, 4130013, 1, 2), + (4, 1462011, 75, 2, 269000, 0, 0, 4130013, 1, 2), + (4, 1462012, 75, 2, 269000, 0, 0, 4130013, 1, 2), + (4, 1462013, 75, 2, 269000, 0, 0, 4130013, 1, 2), + (4, 1452017, 85, 2, 308000, 0, 0, 4130012, 1, 2), + (4, 1462018, 85, 2, 308000, 0, 0, 4130013, 1, 2), + (4, 1452019, 95, 2, 346000, 0, 0, 4130012, 1, 2), + (4, 1452020, 95, 2, 346000, 0, 0, 4130012, 1, 2), + (4, 1452021, 95, 2, 346000, 0, 0, 4130012, 1, 2), + (4, 1462015, 95, 2, 346000, 0, 0, 4130013, 1, 2), + (4, 1462016, 95, 2, 346000, 0, 0, 4130013, 1, 2), + (4, 1462017, 95, 2, 346000, 0, 0, 4130013, 1, 2), + (4, 1452044, 105, 3, 550000, 0, 0, 4130012, 1, 3), + (4, 1462039, 105, 3, 550000, 0, 0, 4130013, 1, 3), + (4, 1452059, 115, 3, 605000, 0, 0, 4130012, 1, 3), + (4, 1462051, 115, 3, 605000, 0, 0, 4130013, 1, 3), + (4, 1452057, 115, 3, 605000, 0, 0, 4130012, 1, 3), + (4, 1462050, 115, 3, 605000, 0, 0, 4130013, 1, 3), + (8, 1002207, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (8, 1002208, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (8, 1002209, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (8, 1002210, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (8, 1002247, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (8, 1002248, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (8, 1002249, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (8, 1002281, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (8, 1002282, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (8, 1002283, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (8, 1002284, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (8, 1002285, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (8, 1002327, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (8, 1002328, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (8, 1002329, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (8, 1002330, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (8, 1002323, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (8, 1002324, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (8, 1002325, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (8, 1002326, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (8, 1002380, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (8, 1002381, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (8, 1002382, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (8, 1002383, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (8, 1002550, 105, 3, 165000, 0, 0, 4130018, 1, 3), + (8, 1002793, 115, 3, 209000, 0, 0, 4130018, 1, 3), + (8, 1002779, 115, 3, 209000, 0, 0, 4130018, 1, 3), + (8, 1040094, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1040095, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1040096, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1040097, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1041077, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1041078, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1041079, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1041080, 45, 1, 41000, 0, 0, 4130019, 1, 1), + (8, 1040098, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1040099, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1040100, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1041094, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1041095, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1041096, 55, 1, 50000, 0, 0, 4130019, 1, 1), + (8, 1040105, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1040106, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1040107, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1041100, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1041101, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1041102, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1041103, 65, 1, 55000, 0, 0, 4130019, 1, 1), + (8, 1040108, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1040109, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1040110, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1041105, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1041106, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1041107, 75, 2, 107000, 0, 0, 4130019, 1, 2), + (8, 1040115, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1040116, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1040117, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1040118, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1041115, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1041116, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1041117, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1041118, 85, 2, 138000, 0, 0, 4130019, 1, 2), + (8, 1060083, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1060084, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1060085, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1060086, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1061076, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1061077, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1061078, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1061079, 45, 1, 33000, 0, 0, 4130020, 1, 1), + (8, 1060087, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1060088, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1060089, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1061093, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1061094, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1061095, 55, 1, 41000, 0, 0, 4130020, 1, 1), + (8, 1060093, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1060094, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1060095, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1061099, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1061100, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1061101, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1061102, 65, 1, 50000, 0, 0, 4130020, 1, 1), + (8, 1060097, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1060098, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1060099, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1061104, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1061105, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1061106, 75, 2, 92000, 0, 0, 4130020, 1, 2), + (8, 1060104, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1060105, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1060106, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1060107, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1061114, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1061115, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1061116, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1061117, 85, 2, 123000, 0, 0, 4130020, 1, 2), + (8, 1050096, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1050097, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1050098, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1050099, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1051090, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1051091, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1051092, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1051093, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (8, 1052072, 105, 3, 330000, 0, 0, 4130021, 1, 3), + (8, 1052163, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (8, 1052158, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (8, 1072128, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (8, 1072129, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (8, 1072130, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (8, 1072131, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (8, 1072150, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (8, 1072151, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (8, 1072152, 55, 1, 39000, 0, 0, 4130001, 1, 1), + (8, 1072161, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (8, 1072162, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (8, 1072163, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (8, 1072172, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (8, 1072173, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (8, 1072174, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (8, 1072192, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (8, 1072193, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (8, 1072194, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (8, 1072195, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (8, 1072213, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (8, 1072214, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (8, 1072215, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (8, 1072216, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (8, 1072272, 105, 3, 215000, 0, 0, 4130001, 1, 3), + (8, 1072364, 115, 3, 248000, 0, 0, 4130001, 1, 3), + (8, 1072358, 115, 3, 248000, 0, 0, 4130001, 1, 3), + (8, 1082065, 45, 1, 47000, 0, 0, 4130000, 1, 1), + (8, 1082066, 45, 1, 52000, 0, 0, 4130000, 1, 1), + (8, 1082067, 45, 1, 50000, 0, 0, 4130000, 1, 1), + (8, 1082092, 55, 1, 60000, 0, 0, 4130000, 1, 1), + (8, 1082093, 55, 1, 66000, 0, 0, 4130000, 1, 1), + (8, 1082094, 55, 1, 71000, 0, 0, 4130000, 1, 1), + (8, 1082095, 65, 1, 82000, 0, 0, 4130000, 1, 1), + (8, 1082096, 65, 1, 88000, 0, 0, 4130000, 1, 1), + (8, 1082097, 65, 1, 93000, 0, 0, 4130000, 1, 1), + (8, 1082118, 75, 2, 153000, 0, 0, 4130000, 1, 2), + (8, 1082119, 75, 2, 157000, 0, 0, 4130000, 1, 2), + (8, 1082120, 75, 2, 161000, 0, 0, 4130000, 1, 2), + (8, 1082142, 85, 2, 165000, 0, 0, 4130000, 1, 2), + (8, 1082143, 85, 2, 165000, 0, 0, 4130000, 1, 2), + (8, 1082144, 85, 2, 165000, 0, 0, 4130000, 1, 2), + (8, 1082135, 95, 2, 199000, 0, 0, 4130000, 1, 2), + (8, 1082136, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (8, 1082137, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (8, 1082138, 95, 2, 207000, 0, 0, 4130000, 1, 2), + (8, 1082167, 105, 3, 330000, 0, 0, 4130000, 1, 3), + (8, 1082242, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (8, 1082237, 115, 3, 363000, 0, 0, 4130000, 1, 3), + (8, 1092059, 115, 3, 385000, 0, 0, 4130022, 1, 3), + (8, 1332003, 45, 1, 121000, 0, 0, 4130014, 1, 1), + (8, 1472018, 45, 1, 55000, 0, 0, 4130015, 1, 1), + (8, 1472019, 45, 1, 57000, 0, 0, 4130015, 1, 1), + (8, 1472020, 45, 1, 57000, 0, 0, 4130015, 1, 1), + (8, 1472021, 45, 1, 60000, 0, 0, 4130015, 1, 1), + (8, 1332016, 45, 1, 121000, 0, 0, 4130014, 1, 1), + (8, 1332015, 55, 1, 137000, 0, 0, 4130014, 1, 1), + (8, 1472022, 55, 1, 137000, 0, 0, 4130015, 1, 1), + (8, 1472023, 55, 1, 140000, 0, 0, 4130015, 1, 1), + (8, 1472024, 55, 1, 140000, 0, 0, 4130015, 1, 1), + (8, 1472025, 55, 1, 143000, 0, 0, 4130015, 1, 1), + (8, 1332017, 55, 1, 137000, 0, 0, 4130014, 1, 1), + (8, 1332018, 65, 1, 154000, 0, 0, 4130014, 1, 1), + (8, 1472026, 65, 1, 165000, 0, 0, 4130015, 1, 1), + (8, 1472027, 65, 1, 167000, 0, 0, 4130015, 1, 1), + (8, 1472028, 65, 1, 167000, 0, 0, 4130015, 1, 1), + (8, 1472029, 65, 1, 170000, 0, 0, 4130015, 1, 1), + (8, 1332019, 65, 1, 154000, 0, 0, 4130014, 1, 1), + (8, 1472031, 75, 2, 308000, 0, 0, 4130015, 1, 2), + (8, 1332022, 75, 2, 238000, 0, 0, 4130014, 1, 2), + (8, 1332023, 75, 2, 238000, 0, 0, 4130014, 1, 2), + (8, 1332027, 85, 2, 261000, 0, 0, 4130014, 1, 2), + (8, 1472033, 85, 2, 346000, 0, 0, 4130015, 1, 2), + (8, 1332026, 85, 2, 261000, 0, 0, 4130014, 1, 2), + (8, 1332052, 95, 2, 308000, 0, 0, 4130014, 1, 2), + (8, 1472053, 95, 2, 392000, 0, 0, 4130015, 1, 2), + (8, 1332051, 95, 2, 308000, 0, 0, 4130014, 1, 2), + (8, 1332050, 105, 3, 495000, 0, 0, 4130014, 1, 3), + (8, 1472051, 105, 3, 627000, 0, 0, 4130015, 1, 3), + (8, 1472052, 105, 3, 627000, 0, 0, 4130015, 1, 3), + (8, 1332049, 105, 3, 495000, 0, 0, 4130014, 1, 3), + (8, 1332075, 115, 3, 550000, 0, 0, 4130014, 1, 3), + (8, 1332076, 115, 3, 550000, 0, 0, 4130014, 1, 3), + (8, 1472071, 115, 3, 693000, 0, 0, 4130015, 1, 3), + (8, 1332073, 115, 3, 550000, 0, 0, 4130014, 1, 3), + (8, 1332074, 115, 3, 561000, 0, 0, 4130014, 1, 3), + (8, 1472068, 115, 3, 693000, 0, 0, 4130015, 1, 3), + (16, 1002631, 45, 1, 22000, 0, 0, 4130018, 1, 1), + (16, 1002634, 55, 1, 30000, 0, 0, 4130018, 1, 1), + (16, 1002637, 65, 1, 47000, 0, 0, 4130018, 1, 1), + (16, 1002640, 75, 2, 77000, 0, 0, 4130018, 1, 2), + (16, 1002643, 85, 2, 88000, 0, 0, 4130018, 1, 2), + (16, 1002646, 95, 2, 100000, 0, 0, 4130018, 1, 2), + (16, 1002649, 105, 3, 165000, 0, 0, 4130018, 1, 3), + (16, 1002794, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (16, 1002780, 115, 3, 187000, 0, 0, 4130018, 1, 3), + (16, 1052116, 45, 1, 52000, 0, 0, 4130021, 1, 1), + (16, 1052119, 55, 1, 55000, 0, 0, 4130021, 1, 1), + (16, 1052122, 65, 1, 63000, 0, 0, 4130021, 1, 1), + (16, 1052125, 75, 2, 138000, 0, 0, 4130021, 1, 2), + (16, 1052128, 85, 2, 153000, 0, 0, 4130021, 1, 2), + (16, 1052131, 95, 2, 184000, 0, 0, 4130021, 1, 2), + (16, 1052134, 105, 3, 330000, 0, 0, 4130021, 1, 3), + (16, 1052164, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (16, 1052159, 115, 3, 396000, 0, 0, 4130021, 1, 3), + (16, 1072303, 45, 1, 28000, 0, 0, 4130001, 1, 1), + (16, 1072306, 55, 1, 36000, 0, 0, 4130001, 1, 1), + (16, 1072309, 65, 1, 50000, 0, 0, 4130001, 1, 1), + (16, 1072312, 75, 2, 84000, 0, 0, 4130001, 1, 2), + (16, 1072315, 85, 2, 107000, 0, 0, 4130001, 1, 2), + (16, 1072318, 95, 2, 130000, 0, 0, 4130001, 1, 2), + (16, 1072321, 105, 3, 198000, 0, 0, 4130001, 1, 3), + (16, 1072365, 115, 3, 220000, 0, 0, 4130001, 1, 3), + (16, 1072359, 115, 3, 220000, 0, 0, 4130001, 1, 3), + (16, 1082198, 45, 1, 47000, 0, 0, 4130000, 1, 1), + (16, 1082201, 55, 1, 60000, 0, 0, 4130000, 1, 1), + (16, 1082204, 65, 1, 82000, 0, 0, 4130000, 1, 1), + (16, 1082207, 75, 2, 153000, 0, 0, 4130000, 1, 2), + (16, 1082210, 85, 2, 176000, 0, 0, 4130000, 1, 2), + (16, 1082213, 95, 2, 203000, 0, 0, 4130000, 1, 2), + (16, 1082216, 105, 3, 330000, 0, 0, 4130000, 1, 3), + (16, 1082243, 115, 3, 369000, 0, 0, 4130000, 1, 3), + (16, 1082238, 115, 3, 369000, 0, 0, 4130000, 1, 3), + (16, 1482007, 45, 1, 71000, 0, 0, 4130016, 1, 1), + (16, 1492007, 45, 1, 77000, 0, 0, 4130017, 1, 1), + (16, 1482008, 55, 1, 132000, 0, 0, 4130016, 1, 1), + (16, 1492008, 55, 1, 137000, 0, 0, 4130017, 1, 1), + (16, 1482009, 65, 1, 165000, 0, 0, 4130016, 1, 1), + (16, 1492009, 65, 1, 170000, 0, 0, 4130017, 1, 1), + (16, 1482010, 75, 2, 269000, 0, 0, 4130016, 1, 2), + (16, 1492010, 75, 2, 269000, 0, 0, 4130017, 1, 2), + (16, 1482011, 85, 2, 300000, 0, 0, 4130016, 1, 2), + (16, 1492011, 85, 2, 308000, 0, 0, 4130017, 1, 2), + (16, 1482012, 95, 2, 338000, 0, 0, 4130016, 1, 2), + (16, 1492012, 95, 2, 346000, 0, 0, 4130017, 1, 2), + (16, 1482013, 105, 3, 561000, 0, 0, 4130016, 1, 3), + (16, 1492013, 105, 3, 572000, 0, 0, 4130017, 1, 3), + (16, 1482024, 115, 3, 616000, 0, 0, 4130016, 1, 3), + (16, 1492025, 115, 3, 627000, 0, 0, 4130017, 1, 3), + (16, 1482023, 115, 3, 616000, 0, 0, 4130016, 1, 3), + (16, 1492023, 115, 3, 627000, 0, 0, 4130017, 1, 3); INSERT IGNORE INTO `makerrecipedata` (`itemid`, `req_item`, `count`) VALUES (4250000, 4021007, 1), @@ -2858,4 +2858,3 @@ INSERT IGNORE INTO `makerrewarddata` (`itemid`, `rewardid`, `quantity`, `prob`) (4251302, 4251301, 9, 4), (4251402, 4251402, 1, 1), (4251402, 4251401, 9, 4); - diff --git a/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleItemInformationProvider.java b/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleItemInformationProvider.java new file mode 100644 index 0000000000..da2278abd5 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleItemInformationProvider.java @@ -0,0 +1,201 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ +package mapleskillmakerfetcher; + +import java.io.File; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +import provider.MapleData; +import provider.MapleDataDirectoryEntry; +import provider.MapleDataFileEntry; +import provider.MapleDataProvider; +import provider.MapleDataProviderFactory; +import provider.MapleDataTool; +/** + * + * @author Ronan + * + */ +public class MapleItemInformationProvider { + private final static String wzPath = "../../wz"; + + private static MapleItemInformationProvider instance = null; + protected MapleDataProvider itemData; + protected MapleDataProvider equipData; + protected MapleDataProvider stringData; + protected MapleData eqpStringData; + + protected Map> equipStatsCache = new HashMap<>(); + protected Map nameCache = new HashMap<>(); + + private MapleItemInformationProvider() { + itemData = MapleDataProviderFactory.getDataProvider(new File(wzPath + "/Item.wz")); + equipData = MapleDataProviderFactory.getDataProvider(new File(wzPath + "/Character.wz")); + stringData = MapleDataProviderFactory.getDataProvider(new File(wzPath + "/String.wz")); + eqpStringData = stringData.getData("Eqp.img"); + } + + public static MapleItemInformationProvider getInstance() { + if (instance == null) { + instance = new MapleItemInformationProvider(); + } + return instance; + } + + private MapleData getItemData(int itemId) { + MapleData ret = null; + String idStr = "0" + String.valueOf(itemId); + MapleDataDirectoryEntry root = itemData.getRoot(); + for (MapleDataDirectoryEntry topDir : root.getSubdirectories()) { + for (MapleDataFileEntry iFile : topDir.getFiles()) { + if (iFile.getName().equals(idStr.substring(0, 4) + ".img")) { + ret = itemData.getData(topDir.getName() + "/" + iFile.getName()); + if (ret == null) { + return null; + } + ret = ret.getChildByPath(idStr); + return ret; + } else if (iFile.getName().equals(idStr.substring(1) + ".img")) { + return itemData.getData(topDir.getName() + "/" + iFile.getName()); + } + } + } + root = equipData.getRoot(); + for (MapleDataDirectoryEntry topDir : root.getSubdirectories()) { + for (MapleDataFileEntry iFile : topDir.getFiles()) { + if (iFile.getName().equals(idStr + ".img")) { + return equipData.getData(topDir.getName() + "/" + iFile.getName()); + } + } + } + return ret; + } + + public Map getEquipStats(int itemId) { + if (equipStatsCache.containsKey(itemId)) { + return equipStatsCache.get(itemId); + } + Map ret = new LinkedHashMap<>(); + MapleData item = getItemData(itemId); + if (item == null) { + return null; + } + MapleData info = item.getChildByPath("info"); + if (info == null) { + return null; + } + for (MapleData data : info.getChildren()) { + if (data.getName().startsWith("inc")) { + ret.put(data.getName().substring(3), MapleDataTool.getIntConvert(data)); + } + /*else if (data.getName().startsWith("req")) + ret.put(data.getName(), MapleDataTool.getInt(data.getName(), info, 0));*/ + } + ret.put("reqJob", MapleDataTool.getInt("reqJob", info, 0)); + ret.put("reqLevel", MapleDataTool.getInt("reqLevel", info, 0)); + ret.put("reqDEX", MapleDataTool.getInt("reqDEX", info, 0)); + ret.put("reqSTR", MapleDataTool.getInt("reqSTR", info, 0)); + ret.put("reqINT", MapleDataTool.getInt("reqINT", info, 0)); + ret.put("reqLUK", MapleDataTool.getInt("reqLUK", info, 0)); + ret.put("reqPOP", MapleDataTool.getInt("reqPOP", info, 0)); + ret.put("cash", MapleDataTool.getInt("cash", info, 0)); + ret.put("tuc", MapleDataTool.getInt("tuc", info, 0)); + ret.put("cursed", MapleDataTool.getInt("cursed", info, 0)); + ret.put("success", MapleDataTool.getInt("success", info, 0)); + ret.put("fs", MapleDataTool.getInt("fs", info, 0)); + equipStatsCache.put(itemId, ret); + return ret; + } + + private MapleData getStringData(int itemId) { + String cat = "null"; + MapleData theData; + if ((itemId >= 1010000 && itemId < 1040000) || (itemId >= 1122000 && itemId < 1123000) || (itemId >= 1132000 && itemId < 1133000) || (itemId >= 1142000 && itemId < 1143000)) { + theData = eqpStringData; + cat = "Eqp/Accessory"; + } else if (itemId >= 1000000 && itemId < 1010000) { + theData = eqpStringData; + cat = "Eqp/Cap"; + } else if (itemId >= 1102000 && itemId < 1103000) { + theData = eqpStringData; + cat = "Eqp/Cape"; + } else if (itemId >= 1040000 && itemId < 1050000) { + theData = eqpStringData; + cat = "Eqp/Coat"; + } else if (itemId >= 20000 && itemId < 22000) { + theData = eqpStringData; + cat = "Eqp/Face"; + } else if (itemId >= 1080000 && itemId < 1090000) { + theData = eqpStringData; + cat = "Eqp/Glove"; + } else if (itemId >= 30000 && itemId < 35000) { + theData = eqpStringData; + cat = "Eqp/Hair"; + } else if (itemId >= 1050000 && itemId < 1060000) { + theData = eqpStringData; + cat = "Eqp/Longcoat"; + } else if (itemId >= 1060000 && itemId < 1070000) { + theData = eqpStringData; + cat = "Eqp/Pants"; + } else if (itemId >= 1802000 && itemId < 1842000) { + theData = eqpStringData; + cat = "Eqp/PetEquip"; + } else if (itemId >= 1112000 && itemId < 1120000) { + theData = eqpStringData; + cat = "Eqp/Ring"; + } else if (itemId >= 1092000 && itemId < 1100000) { + theData = eqpStringData; + cat = "Eqp/Shield"; + } else if (itemId >= 1070000 && itemId < 1080000) { + theData = eqpStringData; + cat = "Eqp/Shoes"; + } else if (itemId >= 1900000 && itemId < 2000000) { + theData = eqpStringData; + cat = "Eqp/Taming"; + } else if (itemId >= 1300000 && itemId < 1800000) { + theData = eqpStringData; + cat = "Eqp/Weapon"; + } else { + return null; + } + if (cat.equalsIgnoreCase("null")) { + return theData.getChildByPath(String.valueOf(itemId)); + } else { + return theData.getChildByPath(cat + "/" + itemId); + } + } + + public String getName(int itemId) { + if (nameCache.containsKey(itemId)) { + return nameCache.get(itemId); + } + MapleData strings = getStringData(itemId); + if (strings == null) { + return null; + } + String ret = MapleDataTool.getString("name", strings, null); + nameCache.put(itemId, ret); + return ret; + } +} diff --git a/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleMakerItemEntry.java b/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleMakerItemEntry.java index 67c6346d77..e31f2e346e 100644 --- a/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleMakerItemEntry.java +++ b/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleMakerItemEntry.java @@ -46,7 +46,6 @@ public class MapleMakerItemEntry { this.id = id; this.itemid = itemid; this.reqLevel = reqLevel; - //System.out.println("id " + id + "rq" + reqLevel); this.reqMakerLevel = reqMakerLevel; this.reqItem = reqItem; this.reqMeso = reqMeso; diff --git a/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleSkillMakerFetcher.java b/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleSkillMakerFetcher.java index fd4b831d7f..724c08ee3c 100644 --- a/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleSkillMakerFetcher.java +++ b/tools/MapleSkillMakerFetcher/src/mapleskillmakerfetcher/MapleSkillMakerFetcher.java @@ -21,10 +21,9 @@ package mapleskillmakerfetcher; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.io.*; -import static mapleskillmakerfetcher.MapleSkillMakerFetcher.id; - /** * @author RonanLana @@ -41,7 +40,7 @@ public class MapleSkillMakerFetcher { static String username = "root"; static String password = ""; - static String fileName = "lib/ItemMake.img.xml"; + static String fileName = "../../wz/Etc.wz/ItemMake.img.xml"; static String newFile = "lib/MakerData.sql"; static PrintWriter printWriter = null; @@ -176,6 +175,7 @@ public class MapleSkillMakerFetcher { status -= 1; if(status == 2) { //close item maker data + generateUpdatedItemFee(); // for equipments, this will try to update reqMeso to be conformant with the client. makerList.add(new MapleMakerItemEntry(id, itemid, reqLevel, reqMakerLevel, reqItem, reqMeso, reqEquip, catalyst, quantity, tuc, recipeCount, recipeItem, recipeList, randomList)); resetMakerDataFields(); } else if(status == 4) { //close recipe/random item @@ -280,6 +280,40 @@ public class MapleSkillMakerFetcher { } } + private static void generateUpdatedItemFee() { + MapleItemInformationProvider ii = MapleItemInformationProvider.getInstance(); + float adjPrice = reqMeso; + + if(itemid < 2000000) { + Map stats = ii.getEquipStats(itemid); + if(stats != null) { + int val = itemid / 100000; + + if(val == 13 || val == 14) { // is weapon-type + adjPrice /= 10; + adjPrice += reqMeso; + + adjPrice /= 1000; + reqMeso = 1000 * (int) Math.floor(adjPrice); + } else { + adjPrice /= ((stats.get("reqLevel") >= 108) ? 10 : 11); + adjPrice += reqMeso; + + adjPrice /= 1000; + reqMeso = 1000 * (int) Math.ceil(adjPrice); + } + } else { + System.out.println("null stats for itemid " + itemid); + } + } else { + adjPrice /= 10; + adjPrice += reqMeso; + + adjPrice /= 1000; + reqMeso = 1000 * (int) Math.ceil(adjPrice); + } + } + private static void WriteMakerTableFile() { printWriter.println(" # SQL File autogenerated from the MapleSkillMakerFetcher feature by Ronan Lana."); printWriter.println(" # Generated data is conformant with the ItemMake.img.xml file used to compile this."); @@ -312,7 +346,7 @@ public class MapleSkillMakerFetcher { sb_recipe.append(";\r\n"); sb_reward.setLength(sb_reward.length() - 3); - sb_reward.append(";\r\n"); + sb_reward.append(";"); printWriter.println(sb_create); printWriter.println(sb_recipe); diff --git a/tools/MapleSkillMakerFetcher/src/provider/MapleCanvas.java b/tools/MapleSkillMakerFetcher/src/provider/MapleCanvas.java new file mode 100644 index 0000000000..10ab682196 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/MapleCanvas.java @@ -0,0 +1,30 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider; + +import java.awt.image.BufferedImage; + +public interface MapleCanvas { + int getHeight(); + int getWidth(); + BufferedImage getImage(); +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/MapleData.java b/tools/MapleSkillMakerFetcher/src/provider/MapleData.java new file mode 100644 index 0000000000..4d90a93804 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/MapleData.java @@ -0,0 +1,34 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider; + +import java.util.List; +import provider.wz.MapleDataType; + +public interface MapleData extends MapleDataEntity, Iterable { + @Override + public String getName(); + public MapleDataType getType(); + public List getChildren(); + public MapleData getChildByPath(String path); + public Object getData(); +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/MapleDataDirectoryEntry.java b/tools/MapleSkillMakerFetcher/src/provider/MapleDataDirectoryEntry.java new file mode 100644 index 0000000000..cb043e0c94 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/MapleDataDirectoryEntry.java @@ -0,0 +1,34 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider; + +import java.util.List; + +/** + * + * @author Matze + */ +public interface MapleDataDirectoryEntry extends MapleDataEntry { + public List getSubdirectories(); + public List getFiles(); + public MapleDataEntry getEntry(String name); +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/MapleDataEntity.java b/tools/MapleSkillMakerFetcher/src/provider/MapleDataEntity.java new file mode 100644 index 0000000000..03ff77649c --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/MapleDataEntity.java @@ -0,0 +1,31 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider; + +/** + * + * @author Matze + */ +public interface MapleDataEntity { + public String getName(); + public MapleDataEntity getParent(); +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/MapleDataEntry.java b/tools/MapleSkillMakerFetcher/src/provider/MapleDataEntry.java new file mode 100644 index 0000000000..62db6d0abe --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/MapleDataEntry.java @@ -0,0 +1,33 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider; + +/** + * + * @author Matze + */ +public interface MapleDataEntry extends MapleDataEntity { + public String getName(); + public int getSize(); + public int getChecksum(); + public int getOffset(); +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/MapleDataFileEntry.java b/tools/MapleSkillMakerFetcher/src/provider/MapleDataFileEntry.java new file mode 100644 index 0000000000..902130a612 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/MapleDataFileEntry.java @@ -0,0 +1,30 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider; + +/** + * + * @author Matze + */ +public interface MapleDataFileEntry extends MapleDataEntry { + public void setOffset(int offset); +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/MapleDataProvider.java b/tools/MapleSkillMakerFetcher/src/provider/MapleDataProvider.java new file mode 100644 index 0000000000..5237b7ac37 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/MapleDataProvider.java @@ -0,0 +1,27 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider; + +public interface MapleDataProvider { + MapleData getData(String path); + MapleDataDirectoryEntry getRoot(); +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/MapleDataProviderFactory.java b/tools/MapleSkillMakerFetcher/src/provider/MapleDataProviderFactory.java new file mode 100644 index 0000000000..5a397d8512 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/MapleDataProviderFactory.java @@ -0,0 +1,55 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider; + +import java.io.File; +import java.io.IOException; +import provider.wz.WZFile; +import provider.wz.XMLWZFile; + +public class MapleDataProviderFactory { + private final static String wzPath = "../../wz"; + + private static MapleDataProvider getWZ(File in, boolean provideImages) { + if (in.getName().toLowerCase().endsWith("wz") && !in.isDirectory()) { + try { + return new WZFile(in, provideImages); + } catch (IOException e) { + throw new RuntimeException("Loading WZ File failed", e); + } + } else { + return new XMLWZFile(in); + } + } + + public static MapleDataProvider getDataProvider(File in) { + return getWZ(in, false); + } + + public static MapleDataProvider getImageProvidingDataProvider(File in) { + return getWZ(in, true); + } + + public static File fileInWZPath(String filename) { + return new File(wzPath, filename); + } +} \ No newline at end of file diff --git a/tools/MapleSkillMakerFetcher/src/provider/MapleDataTool.java b/tools/MapleSkillMakerFetcher/src/provider/MapleDataTool.java new file mode 100644 index 0000000000..25f4c7f817 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/MapleDataTool.java @@ -0,0 +1,145 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider; + +import java.awt.Point; +import java.awt.image.BufferedImage; +import provider.wz.MapleDataType; + +public class MapleDataTool { + public static String getString(MapleData data) { + return ((String) data.getData()); + } + + public static String getString(MapleData data, String def) { + if (data == null || data.getData() == null) { + return def; + } else { + return ((String) data.getData()); + } + } + + public static String getString(String path, MapleData data) { + return getString(data.getChildByPath(path)); + } + + public static String getString(String path, MapleData data, String def) { + return getString(data.getChildByPath(path), def); + } + + public static double getDouble(MapleData data) { + return ((Double) data.getData()).doubleValue(); + } + + public static float getFloat(MapleData data) { + return ((Float) data.getData()).floatValue(); + } + + public static int getInt(MapleData data) { + if (data == null || data.getData() == null) { + return 0;// DEF? + } + return ((Integer) data.getData()).intValue(); + } + + public static int getInt(String path, MapleData data) { + return getInt(data.getChildByPath(path)); + } + + public static int getIntConvert(MapleData data) { + if (data.getType() == MapleDataType.STRING) { + return Integer.parseInt(getString(data)); + } else { + return getInt(data); + } + } + + public static int getIntConvert(String path, MapleData data) { + MapleData d = data.getChildByPath(path); + if (d.getType() == MapleDataType.STRING) { + return Integer.parseInt(getString(d)); + } else { + return getInt(d); + } + } + + public static int getInt(MapleData data, int def) { + if (data == null || data.getData() == null) { + return def; + } else if (data.getType() == MapleDataType.STRING) { + return Integer.parseInt(getString(data)); + } else { + return ((Integer) data.getData()).intValue(); + } + } + + public static int getInt(String path, MapleData data, int def) { + return getInt(data.getChildByPath(path), def); + } + + public static int getIntConvert(String path, MapleData data, int def) { + MapleData d = data.getChildByPath(path); + if (d == null) { + return def; + } + if (d.getType() == MapleDataType.STRING) { + try { + return Integer.parseInt(getString(d)); + } catch (NumberFormatException nfe) { + nfe.printStackTrace(); + return def; + } + } else { + return getInt(d, def); + } + } + + public static BufferedImage getImage(MapleData data) { + return ((MapleCanvas) data.getData()).getImage(); + } + + public static Point getPoint(MapleData data) { + return ((Point) data.getData()); + } + + public static Point getPoint(String path, MapleData data) { + return getPoint(data.getChildByPath(path)); + } + + public static Point getPoint(String path, MapleData data, Point def) { + final MapleData pointData = data.getChildByPath(path); + if (pointData == null) { + return def; + } + return getPoint(pointData); + } + + public static String getFullDataPath(MapleData data) { + String path = ""; + MapleDataEntity myData = data; + while (myData != null) { + path = myData.getName() + "/" + path; + myData = myData.getParent(); + } + return path.substring(0, path.length() - 1); + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/FileStoredPngMapleCanvas.java b/tools/MapleSkillMakerFetcher/src/provider/wz/FileStoredPngMapleCanvas.java new file mode 100644 index 0000000000..21736c2c16 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/FileStoredPngMapleCanvas.java @@ -0,0 +1,70 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import javax.imageio.ImageIO; +import provider.MapleCanvas; + +public class FileStoredPngMapleCanvas implements MapleCanvas { + private File file; + private int width; + private int height; + private BufferedImage image; + + public FileStoredPngMapleCanvas(int width, int height, File fileIn) { + this.width = width; + this.height = height; + this.file = fileIn; + } + + @Override + public int getHeight() { + return height; + } + + @Override + public int getWidth() { + return width; + } + + @Override + public BufferedImage getImage() { + loadImageIfNecessary(); + return image; + } + + private void loadImageIfNecessary() { + if (image == null) { + try { + image = ImageIO.read(file); + // replace the dimensions loaded from the wz by the REAL dimensions from the image - should be equal tho + width = image.getWidth(); + height = image.getHeight(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/ImgMapleSound.java b/tools/MapleSkillMakerFetcher/src/provider/wz/ImgMapleSound.java new file mode 100644 index 0000000000..8add2ccb36 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/ImgMapleSound.java @@ -0,0 +1,39 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +public class ImgMapleSound { + private int dataLength, offset; + + public ImgMapleSound(int dataLength, int offset) { + this.dataLength = dataLength; + this.offset = offset; + } + + public int getDataLength() { + return dataLength; + } + + public int getOffset() { + return offset; + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/ListWZFile.java b/tools/MapleSkillMakerFetcher/src/provider/wz/ListWZFile.java new file mode 100644 index 0000000000..1672a08c59 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/ListWZFile.java @@ -0,0 +1,86 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import provider.MapleDataProviderFactory; +import tools.data.input.GenericLittleEndianAccessor; +import tools.data.input.InputStreamByteStream; +import tools.data.input.LittleEndianAccessor; + +public class ListWZFile { + private LittleEndianAccessor lea; + private List entries = new ArrayList(); + private static Collection modernImgs = new HashSet(); + + public static byte[] xorBytes(byte[] a, byte[] b) { + byte[] wusched = new byte[a.length]; + for (int i = 0; i < a.length; i++) { + wusched[i] = (byte) (a[i] ^ b[i]); + } + return wusched; + } + + public ListWZFile(File listwz) throws FileNotFoundException { + lea = new GenericLittleEndianAccessor(new InputStreamByteStream(new BufferedInputStream(new FileInputStream(listwz)))); + while (lea.available() > 0) { + int l = lea.readInt() * 2; + byte[] chunk = new byte[l]; + for (int i = 0; i < chunk.length; i++) { + chunk[i] = lea.readByte(); + } + lea.readChar(); + final String value = String.valueOf(WZTool.readListString(chunk)); + entries.add(value); + } + entries = Collections.unmodifiableList(entries); + } + + public List getEntries() { + return entries; + } + + public static void init() { + final String listWz = System.getProperty("listwz"); + if (listWz != null) { + ListWZFile listwz; + try { + listwz = new ListWZFile(MapleDataProviderFactory.fileInWZPath("List.wz")); + modernImgs = new HashSet(listwz.getEntries()); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + } + + public static boolean isModernImgFile(String path) { + return modernImgs.contains(path); + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/MapleDataType.java b/tools/MapleSkillMakerFetcher/src/provider/wz/MapleDataType.java new file mode 100644 index 0000000000..e074d57d14 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/MapleDataType.java @@ -0,0 +1,26 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +public enum MapleDataType { + NONE, IMG_0x00, SHORT, INT, FLOAT, DOUBLE, STRING, EXTENDED, PROPERTY, CANVAS, VECTOR, CONVEX, SOUND, UOL, UNKNOWN_TYPE, UNKNOWN_EXTENDED_TYPE; +} \ No newline at end of file diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/PNGMapleCanvas.java b/tools/MapleSkillMakerFetcher/src/provider/wz/PNGMapleCanvas.java new file mode 100644 index 0000000000..97c2303804 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/PNGMapleCanvas.java @@ -0,0 +1,151 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import java.awt.Point; +import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferByte; +import java.awt.image.PixelInterleavedSampleModel; +import java.awt.image.Raster; +import java.awt.image.SampleModel; +import java.awt.image.WritableRaster; +import java.util.zip.DataFormatException; +import java.util.zip.Inflater; +import provider.MapleCanvas; + +public class PNGMapleCanvas implements MapleCanvas { + private static final int[] ZAHLEN = new int[]{2, 1, 0, 3}; + private int height; + private int width; + private int dataLength; + private int format; + private byte[] data; + + public PNGMapleCanvas(int width, int height, int dataLength, int format, byte[] data) { + super(); + this.height = height; + this.width = width; + this.dataLength = dataLength; + this.format = format; + this.data = data; + } + + public int getHeight() { + return height; + } + + public int getWidth() { + return width; + } + + public int getFormat() { + return format; + } + + private byte[] getData() { + return data; + } + + @Override + public BufferedImage getImage() { + int sizeUncompressed = 0; + int size8888 = 0; + int maxWriteBuf = 2; + int maxHeight = 3; + byte[] writeBuf = new byte[maxWriteBuf]; + @SuppressWarnings ("unused") + byte[] rowPointers = new byte[maxHeight]; + switch (getFormat()) { + case 1: + case 513: + sizeUncompressed = getHeight() * getWidth() * 4; + break; + case 2: + sizeUncompressed = getHeight() * getWidth() * 8; + break; + case 517: + sizeUncompressed = getHeight() * getWidth() / 128; + break; + } + size8888 = getHeight() * getWidth() * 8; + if (size8888 > maxWriteBuf) { + maxWriteBuf = size8888; + writeBuf = new byte[maxWriteBuf]; + } + if (getHeight() > maxHeight) { + maxHeight = getHeight(); + rowPointers = new byte[maxHeight]; + } + Inflater dec = new Inflater(); + dec.setInput(getData(), 0, dataLength); + int declen = 0; + byte[] uc = new byte[sizeUncompressed]; + try { + declen = dec.inflate(uc); + } catch (DataFormatException ex) { + throw new RuntimeException("zlib fucks", ex); + } + dec.end(); + if (getFormat() == 1) { + for (int i = 0; i < sizeUncompressed; i++) { + byte low = (byte) (uc[i] & 0x0F); + byte high = (byte) (uc[i] & 0xF0); + writeBuf[(i << 1)] = (byte) (((low << 4) | low) & 0xFF); + writeBuf[(i << 1) + 1] = (byte) (high | ((high >>> 4) & 0xF)); + } + } else if (getFormat() == 2) { + writeBuf = uc; + } else if (getFormat() == 513) { + for (int i = 0; i < declen; i += 2) { + byte bBits = (byte) ((uc[i] & 0x1F) << 3); + byte gBits = (byte) (((uc[i + 1] & 0x07) << 5) | ((uc[i] & 0xE0) >> 3)); + byte rBits = (byte) (uc[i + 1] & 0xF8); + writeBuf[(i << 1)] = (byte) (bBits | (bBits >> 5)); + writeBuf[(i << 1) + 1] = (byte) (gBits | (gBits >> 6)); + writeBuf[(i << 1) + 2] = (byte) (rBits | (rBits >> 5)); + writeBuf[(i << 1) + 3] = (byte) 0xFF; + } + } else if (getFormat() == 517) { + byte b = 0x00; + int pixelIndex = 0; + for (int i = 0; i < declen; i++) { + for (int j = 0; j < 8; j++) { + b = (byte) (((uc[i] & (0x01 << (7 - j))) >> (7 - j)) * 255); + for (int k = 0; k < 16; k++) { + pixelIndex = (i << 9) + (j << 6) + k * 2; + writeBuf[pixelIndex] = b; + writeBuf[pixelIndex + 1] = b; + writeBuf[pixelIndex + 2] = b; + writeBuf[pixelIndex + 3] = (byte) 0xFF; + } + } + } + } + DataBufferByte imgData = new DataBufferByte(writeBuf, sizeUncompressed); + SampleModel sm = new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE, getWidth(), getHeight(), 4, getWidth() * 4, ZAHLEN); + WritableRaster imgRaster = Raster.createWritableRaster(sm, imgData, new Point(0, 0)); + BufferedImage aa = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_ARGB); + aa.setData(imgRaster); + return aa; + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/WZDirectoryEntry.java b/tools/MapleSkillMakerFetcher/src/provider/wz/WZDirectoryEntry.java new file mode 100644 index 0000000000..d24b8cb2b9 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/WZDirectoryEntry.java @@ -0,0 +1,68 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import provider.MapleDataDirectoryEntry; +import provider.MapleDataEntity; +import provider.MapleDataEntry; +import provider.MapleDataFileEntry; + +public class WZDirectoryEntry extends WZEntry implements MapleDataDirectoryEntry { + private List subdirs = new ArrayList(); + private List files = new ArrayList(); + private Map entries = new HashMap(); + + public WZDirectoryEntry(String name, int size, int checksum, MapleDataEntity parent) { + super(name, size, checksum, parent); + } + + public WZDirectoryEntry() { + super(null, 0, 0, null); + } + + public void addDirectory(MapleDataDirectoryEntry dir) { + subdirs.add(dir); + entries.put(dir.getName(), dir); + } + + public void addFile(MapleDataFileEntry fileEntry) { + files.add(fileEntry); + entries.put(fileEntry.getName(), fileEntry); + } + + public List getSubdirectories() { + return Collections.unmodifiableList(subdirs); + } + + public List getFiles() { + return Collections.unmodifiableList(files); + } + + public MapleDataEntry getEntry(String name) { + return entries.get(name); + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/WZEntry.java b/tools/MapleSkillMakerFetcher/src/provider/wz/WZEntry.java new file mode 100644 index 0000000000..1e921b2082 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/WZEntry.java @@ -0,0 +1,61 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import provider.MapleDataEntity; +import provider.MapleDataEntry; + +public class WZEntry implements MapleDataEntry { + private String name; + private int size; + private int checksum; + private int offset; + private MapleDataEntity parent; + + public WZEntry(String name, int size, int checksum, MapleDataEntity parent) { + super(); + this.name = name; + this.size = size; + this.checksum = checksum; + this.parent = parent; + } + + public String getName() { + return name; + } + + public int getSize() { + return size; + } + + public int getChecksum() { + return checksum; + } + + public int getOffset() { + return offset; + } + + public MapleDataEntity getParent() { + return parent; + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/WZFile.java b/tools/MapleSkillMakerFetcher/src/provider/wz/WZFile.java new file mode 100644 index 0000000000..c6c0abf537 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/WZFile.java @@ -0,0 +1,154 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.RandomAccessFile; +import provider.MapleData; +import provider.MapleDataDirectoryEntry; +import provider.MapleDataFileEntry; +import provider.MapleDataProvider; +import tools.data.input.GenericLittleEndianAccessor; +import tools.data.input.GenericSeekableLittleEndianAccessor; +import tools.data.input.InputStreamByteStream; +import tools.data.input.LittleEndianAccessor; +import tools.data.input.RandomAccessByteStream; +import tools.data.input.SeekableLittleEndianAccessor; + +public class WZFile implements MapleDataProvider { + static { + ListWZFile.init(); + } + private File wzfile; + private LittleEndianAccessor lea; + private SeekableLittleEndianAccessor slea; + private int headerSize; + private WZDirectoryEntry root; + private boolean provideImages; + private int cOffset; + + public WZFile(File wzfile, boolean provideImages) throws IOException { + this.wzfile = wzfile; + lea = new GenericLittleEndianAccessor(new InputStreamByteStream(new BufferedInputStream(new FileInputStream(wzfile)))); + RandomAccessFile raf = new RandomAccessFile(wzfile, "r"); + slea = new GenericSeekableLittleEndianAccessor(new RandomAccessByteStream(raf)); + root = new WZDirectoryEntry(wzfile.getName(), 0, 0, null); + this.provideImages = provideImages; + load(); + } + + private void load() throws IOException { + lea.readAsciiString(4); + lea.readInt(); + lea.readInt(); + headerSize = lea.readInt(); + lea.readNullTerminatedAsciiString(); + lea.readShort(); + parseDirectory(root); + cOffset = (int) lea.getBytesRead(); + getOffsets(root); + } + + private void getOffsets(MapleDataDirectoryEntry dir) { + for (MapleDataFileEntry file : dir.getFiles()) { + file.setOffset(cOffset); + cOffset += file.getSize(); + } + for (MapleDataDirectoryEntry sdir : dir.getSubdirectories()) { + getOffsets(sdir); + } + } + + private void parseDirectory(WZDirectoryEntry dir) { + int entries = WZTool.readValue(lea); + for (int i = 0; i < entries; i++) { + byte marker = lea.readByte(); + String name = null; + int size, checksum; + switch (marker) { + case 0x02: + name = WZTool.readDecodedStringAtOffsetAndReset(slea, lea.readInt() + this.headerSize + 1); + size = WZTool.readValue(lea); + checksum = WZTool.readValue(lea); + lea.readInt(); //dummy int + dir.addFile(new WZFileEntry(name, size, checksum, dir)); + break; + case 0x03: + case 0x04: + name = WZTool.readDecodedString(lea); + size = WZTool.readValue(lea); + checksum = WZTool.readValue(lea); + lea.readInt(); //dummy int + if (marker == 3) { + dir.addDirectory(new WZDirectoryEntry(name, size, checksum, dir)); + } else { + dir.addFile(new WZFileEntry(name, size, checksum, dir)); + } + break; + default: + } + } + for (MapleDataDirectoryEntry idir : dir.getSubdirectories()) { + parseDirectory((WZDirectoryEntry) idir); + } + } + + public WZIMGFile getImgFile(String path) throws IOException { + String segments[] = path.split("/"); + WZDirectoryEntry dir = root; + for (int x = 0; x < segments.length - 1; x++) { + dir = (WZDirectoryEntry) dir.getEntry(segments[x]); + if (dir == null) { + return null; + } + } + WZFileEntry entry = (WZFileEntry) dir.getEntry(segments[segments.length - 1]); + if (entry == null) { + return null; + } + String fullPath = wzfile.getName().substring(0, wzfile.getName().length() - 3).toLowerCase() + "/" + path; + return new WZIMGFile(this.wzfile, entry, provideImages, ListWZFile.isModernImgFile(fullPath)); + } + + @Override + public synchronized MapleData getData(String path) { + try { + WZIMGFile imgFile = getImgFile(path); + if (imgFile == null) { + return null; + } + MapleData ret = imgFile.getRoot(); + return ret; + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + @Override + public MapleDataDirectoryEntry getRoot() { + return root; + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/WZFileEntry.java b/tools/MapleSkillMakerFetcher/src/provider/wz/WZFileEntry.java new file mode 100644 index 0000000000..792371d9cf --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/WZFileEntry.java @@ -0,0 +1,42 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import provider.MapleDataEntity; +import provider.MapleDataFileEntry; + +public class WZFileEntry extends WZEntry implements MapleDataFileEntry { + private int offset; + + public WZFileEntry(String name, int size, int checksum, MapleDataEntity parent) { + super(name, size, checksum, parent); + } + + @Override + public int getOffset() { + return offset; + } + + public void setOffset(int offset) { + this.offset = offset; + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/WZIMGEntry.java b/tools/MapleSkillMakerFetcher/src/provider/wz/WZIMGEntry.java new file mode 100644 index 0000000000..385d785183 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/WZIMGEntry.java @@ -0,0 +1,118 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import provider.MapleData; +import provider.MapleDataEntity; + +public class WZIMGEntry implements MapleData { + private String name; + private MapleDataType type; + private List children = new ArrayList(10); + private Object data; + private MapleDataEntity parent; + + public WZIMGEntry(MapleDataEntity parent) { + this.parent = parent; + } + + @Override + public String getName() { + return name; + } + + @Override + public MapleDataType getType() { + return type; + } + + @Override + public List getChildren() { + return Collections.unmodifiableList(children); + } + + @Override + public MapleData getChildByPath(String path) { + String segments[] = path.split("/"); + if (segments[0].equals("..")) { + return ((MapleData) getParent()).getChildByPath(path.substring(path.indexOf("/") + 1)); + } + MapleData ret = this; + for (int x = 0; x < segments.length; x++) { + boolean foundChild = false; + for (MapleData child : ret.getChildren()) { + if (child.getName().equals(segments[x])) { + ret = child; + foundChild = true; + break; + } + } + if (!foundChild) { + return null; + } + } + return ret; + } + + @Override + public Object getData() { + return data; + } + + public void setName(String name) { + this.name = name; + } + + public void setType(MapleDataType type) { + this.type = type; + } + + public void setData(Object data) { + this.data = data; + } + + public void addChild(WZIMGEntry entry) { + children.add(entry); + } + + @Override + public Iterator iterator() { + return getChildren().iterator(); + } + + @Override + public String toString() { + return getName() + ":" + getData(); + } + + public MapleDataEntity getParent() { + return parent; + } + + public void finish() { + ((ArrayList) children).trimToSize(); + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/WZIMGFile.java b/tools/MapleSkillMakerFetcher/src/provider/wz/WZIMGFile.java new file mode 100644 index 0000000000..bec06c78bd --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/WZIMGFile.java @@ -0,0 +1,227 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import java.awt.Point; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.io.RandomAccessFile; +import tools.data.input.GenericSeekableLittleEndianAccessor; +import tools.data.input.RandomAccessByteStream; +import tools.data.input.SeekableLittleEndianAccessor; + +public class WZIMGFile { + private WZFileEntry file; + private WZIMGEntry root; + private boolean provideImages; + @SuppressWarnings ("unused") + private boolean modernImg; + + public WZIMGFile(File wzfile, WZFileEntry file, boolean provideImages, boolean modernImg) throws IOException { + RandomAccessFile raf = new RandomAccessFile(wzfile, "r"); + SeekableLittleEndianAccessor slea = new GenericSeekableLittleEndianAccessor(new RandomAccessByteStream(raf)); + slea.seek(file.getOffset()); + this.file = file; + this.provideImages = provideImages; + root = new WZIMGEntry(file.getParent()); + root.setName(file.getName()); + root.setType(MapleDataType.EXTENDED); + this.modernImg = modernImg; + parseExtended(root, slea, 0); + root.finish(); + raf.close(); + } + + protected void dumpImg(OutputStream out, SeekableLittleEndianAccessor slea) throws IOException { + DataOutputStream os = new DataOutputStream(out); + long oldPos = slea.getPosition(); + slea.seek(file.getOffset()); + for (int x = 0; x < file.getSize(); x++) { + os.write(slea.readByte()); + } + slea.seek(oldPos); + } + + public WZIMGEntry getRoot() { + return root; + } + + private void parse(WZIMGEntry entry, SeekableLittleEndianAccessor slea) { + byte marker = slea.readByte(); + switch (marker) { + case 0: { + String name = WZTool.readDecodedString(slea); + entry.setName(name); + break; + } + case 1: { + String name = WZTool.readDecodedStringAtOffsetAndReset(slea, file.getOffset() + slea.readInt()); + entry.setName(name); + break; + } + default: + System.out.println("Unknown Image identifier: " + marker + " at offset " + (slea.getPosition() - file.getOffset())); + } + marker = slea.readByte(); + switch (marker) { + case 0: + entry.setType(MapleDataType.IMG_0x00); + break; + case 2: + case 11: //??? no idea, since 0.49 + entry.setType(MapleDataType.SHORT); + entry.setData(Short.valueOf(slea.readShort())); + break; + case 3: + entry.setType(MapleDataType.INT); + entry.setData(Integer.valueOf(WZTool.readValue(slea))); + break; + case 4: + entry.setType(MapleDataType.FLOAT); + entry.setData(Float.valueOf(WZTool.readFloatValue(slea))); + break; + case 5: + entry.setType(MapleDataType.DOUBLE); + entry.setData(Double.valueOf(slea.readDouble())); + break; + case 8: + entry.setType(MapleDataType.STRING); + byte iMarker = slea.readByte(); + if (iMarker == 0) { + entry.setData(WZTool.readDecodedString(slea)); + } else if (iMarker == 1) { + entry.setData(WZTool.readDecodedStringAtOffsetAndReset(slea, slea.readInt() + file.getOffset())); + } else { + System.out.println("Unknown String type " + iMarker); + } + break; + case 9: + entry.setType(MapleDataType.EXTENDED); + long endOfExtendedBlock = slea.readInt(); + endOfExtendedBlock += slea.getPosition(); + parseExtended(entry, slea, endOfExtendedBlock); + break; + default: + System.out.println("Unknown Image type " + marker); + } + } + + private void parseExtended(WZIMGEntry entry, SeekableLittleEndianAccessor slea, long endOfExtendedBlock) { + byte marker = slea.readByte(); + String type; + switch (marker) { + case 0x73: + type = WZTool.readDecodedString(slea); + break; + case 0x1B: + type = WZTool.readDecodedStringAtOffsetAndReset(slea, file.getOffset() + slea.readInt()); + break; + default: + throw new RuntimeException("Unknown extended image identifier: " + marker + " at offset " + + (slea.getPosition() - file.getOffset())); + } + if (type.equals("Property")) { + entry.setType(MapleDataType.PROPERTY); + slea.readByte(); + slea.readByte(); + int children = WZTool.readValue(slea); + for (int i = 0; i < children; i++) { + WZIMGEntry cEntry = new WZIMGEntry(entry); + parse(cEntry, slea); + cEntry.finish(); + entry.addChild(cEntry); + } + } else if (type.equals("Canvas")) { + entry.setType(MapleDataType.CANVAS); + slea.readByte(); + marker = slea.readByte(); + if (marker == 0) { + // do nothing + } else if (marker == 1) { + slea.readByte(); + slea.readByte(); + int children = WZTool.readValue(slea); + for (int i = 0; i < children; i++) { + WZIMGEntry child = new WZIMGEntry(entry); + parse(child, slea); + child.finish(); + entry.addChild(child); + } + } else { + System.out.println("Canvas marker != 1 (" + marker + ")"); + } + int width = WZTool.readValue(slea); + int height = WZTool.readValue(slea); + int format = WZTool.readValue(slea); + int format2 = slea.readByte(); + slea.readInt(); + int dataLength = slea.readInt() - 1; + slea.readByte(); + if (provideImages) { + byte[] pngdata = slea.read(dataLength); + entry.setData(new PNGMapleCanvas(width, height, dataLength, format + format2, pngdata)); + } else { + entry.setData(new PNGMapleCanvas(width, height, dataLength, format + format2, null)); + slea.skip(dataLength); + } + } else if (type.equals("Shape2D#Vector2D")) { + entry.setType(MapleDataType.VECTOR); + int x = WZTool.readValue(slea); + int y = WZTool.readValue(slea); + entry.setData(new Point(x, y)); + } else if (type.equals("Shape2D#Convex2D")) { + int children = WZTool.readValue(slea); + for (int i = 0; i < children; i++) { + WZIMGEntry cEntry = new WZIMGEntry(entry); + parseExtended(cEntry, slea, 0); + cEntry.finish(); + entry.addChild(cEntry); + } + } else if (type.equals("Sound_DX8")) { + entry.setType(MapleDataType.SOUND); + slea.readByte(); + int dataLength = WZTool.readValue(slea); + WZTool.readValue(slea); // no clue what this is + int offset = (int) slea.getPosition(); + entry.setData(new ImgMapleSound(dataLength, offset - file.getOffset())); + slea.seek(endOfExtendedBlock); + } else if (type.equals("UOL")) { + entry.setType(MapleDataType.UOL); + slea.readByte(); + byte uolmarker = slea.readByte(); + switch (uolmarker) { + case 0: + entry.setData(WZTool.readDecodedString(slea)); + break; + case 1: + entry.setData(WZTool.readDecodedStringAtOffsetAndReset(slea, file.getOffset() + slea.readInt())); + break; + default: + System.out.println("Unknown UOL marker: " + uolmarker + " " + entry.getName()); + } + } else { + throw new RuntimeException("Unhandled extended type: " + type); + } + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/WZTool.java b/tools/MapleSkillMakerFetcher/src/provider/wz/WZTool.java new file mode 100644 index 0000000000..85e1c8d90b --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/WZTool.java @@ -0,0 +1,187 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.SecretKeySpec; +import tools.data.input.LittleEndianAccessor; +import tools.data.input.SeekableLittleEndianAccessor; + +/* + * Ported Code, see WZFile.java for more info + */ +public class WZTool { + private static byte[] encKey; + + static { + byte[] iv = new byte[]{(byte) 0x4d, (byte) 0x23, (byte) 0xc7, (byte) 0x2b, + (byte) 0x4d, (byte) 0x23, (byte) 0xc7, (byte) 0x2b, + (byte) 0x4d, (byte) 0x23, (byte) 0xc7, (byte) 0x2b, + (byte) 0x4d, (byte) 0x23, (byte) 0xc7, (byte) 0x2b,}; + byte[] key = new byte[]{(byte) 0x13, 0x00, 0x00, 0x00, + (byte) 0x08, 0x00, 0x00, 0x00, + (byte) 0x06, 0x00, 0x00, 0x00, + (byte) 0xB4, 0x00, 0x00, 0x00, + (byte) 0x1B, 0x00, 0x00, 0x00, + (byte) 0x0F, 0x00, 0x00, 0x00, + (byte) 0x33, 0x00, 0x00, 0x00, + (byte) 0x52, 0x00, 0x00, 0x00 + }; + Cipher cipher = null; + SecretKeySpec skeySpec = new SecretKeySpec(key, "AES"); + try { + cipher = Cipher.getInstance("AES"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (NoSuchPaddingException e) { + e.printStackTrace(); + } + try { + cipher.init(Cipher.ENCRYPT_MODE, skeySpec); + } catch (InvalidKeyException e) { + e.printStackTrace(); + } + encKey = new byte[0xFFFF]; + for (int i = 0; i < (0xFFFF / 16); i++) { + try { + iv = cipher.doFinal(iv); + } catch (IllegalBlockSizeException e) { + e.printStackTrace(); + } catch (BadPaddingException e) { + e.printStackTrace(); + } + System.arraycopy(iv, 0, encKey, (i * 16), 16); + } + try { + iv = cipher.doFinal(iv); + } catch (IllegalBlockSizeException e) { + e.printStackTrace(); + } catch (BadPaddingException e) { + e.printStackTrace(); + } + System.arraycopy(iv, 0, encKey, 65520, 15); + } + + public static byte[] readListString(byte[] str) { + for (int i = 0; i < str.length; i++) { + str[i] = (byte) (str[i] ^ encKey[i]); + } + return str; + } + + public static String readDecodedString(LittleEndianAccessor llea) { + int strLength; + byte b = llea.readByte(); + if (b == 0x00) { + return ""; + } + if (b >= 0) { + if (b == 0x7F) { + strLength = llea.readInt(); + } else { + strLength = (int) b; + } + if (strLength < 0) { + return ""; + } + byte str[] = new byte[strLength * 2]; + for (int i = 0; i < strLength * 2; i++) { + str[i] = llea.readByte(); + } + return DecryptUnicodeStr(str); + } else { + if (b == -128) { + strLength = llea.readInt(); + } else { + strLength = -b; + } + if (strLength < 0) { + return ""; + } + byte str[] = new byte[strLength]; + for (int i = 0; i < strLength; i++) { + str[i] = llea.readByte(); + } + return DecryptAsciiStr(str); + } + } + + public static String DecryptAsciiStr(byte[] str) { + byte xorByte = (byte) 0xAA; + for (int i = 0; i < str.length; i++) { + str[i] = (byte) (str[i] ^ xorByte ^ encKey[i]); + xorByte++; + } + return new String(str); + } + + public static String DecryptUnicodeStr(byte[] str) { + int xorByte = 0xAAAA; + char[] charRet = new char[str.length / 2]; + for (int i = 0; i < str.length; i++) { + str[i] = (byte) (str[i] ^ encKey[i]); + } + for (int i = 0; i < (str.length / 2); i++) { + char toXor = (char) ((str[i] << 8) | str[i + 1]); + charRet[i] = (char) (toXor ^ xorByte); + xorByte++; + } + return String.valueOf(charRet); + } + + public static String readDecodedStringAtOffset(SeekableLittleEndianAccessor slea, int offset) { + slea.seek(offset); + return readDecodedString(slea); + } + + public static String readDecodedStringAtOffsetAndReset(SeekableLittleEndianAccessor slea, int offset) { + long pos = 0; + pos = slea.getPosition(); + slea.seek(offset); + String ret = readDecodedString(slea); + slea.seek(pos); + return ret; + } + + public static int readValue(LittleEndianAccessor lea) { + byte b = lea.readByte(); + if (b == -128) { + return lea.readInt(); + } else { + return ((int) b); + } + } + + public static float readFloatValue(LittleEndianAccessor lea) { + byte b = lea.readByte(); + if (b == -128) { + return lea.readFloat(); + } else { + return 0; + } + } +} \ No newline at end of file diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/XMLDomMapleData.java b/tools/MapleSkillMakerFetcher/src/provider/wz/XMLDomMapleData.java new file mode 100644 index 0000000000..151a04c2fd --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/XMLDomMapleData.java @@ -0,0 +1,219 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ +package provider.wz; + +import java.awt.Point; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.text.NumberFormat; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import provider.MapleData; +import provider.MapleDataEntity; +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +public class XMLDomMapleData implements MapleData { + private Node node; + private File imageDataDir; + private NumberFormat nf; + + public XMLDomMapleData(FileInputStream fis, File imageDataDir) { + try { + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); + Document document = documentBuilder.parse(fis); + this.node = document.getFirstChild(); + } catch (ParserConfigurationException e) { + throw new RuntimeException(e); + } catch (SAXException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + this.imageDataDir = imageDataDir; + this.nf = NumberFormat.getInstance(Locale.FRANCE); + } + + private XMLDomMapleData(Node node) { + this.node = node; + this.nf = NumberFormat.getInstance(Locale.FRANCE); + } + + @Override + public MapleData getChildByPath(String path) { + String segments[] = path.split("/"); + if (segments[0].equals("..")) { + return ((MapleData) getParent()).getChildByPath(path.substring(path.indexOf("/") + 1)); + } + + Node myNode = node; + for (int x = 0; x < segments.length; x++) { + NodeList childNodes = myNode.getChildNodes(); + boolean foundChild = false; + for (int i = 0; i < childNodes.getLength(); i++) { + Node childNode = childNodes.item(i); + if (childNode.getNodeType() == Node.ELEMENT_NODE && childNode.getAttributes().getNamedItem("name").getNodeValue().equals(segments[x])) { + myNode = childNode; + foundChild = true; + break; + } + } + if (!foundChild) { + return null; + } + } + XMLDomMapleData ret = new XMLDomMapleData(myNode); + ret.imageDataDir = new File(imageDataDir, getName() + "/" + path).getParentFile(); + return ret; + } + + @Override + public List getChildren() { + List ret = new ArrayList(); + NodeList childNodes = node.getChildNodes(); + for (int i = 0; i < childNodes.getLength(); i++) { + Node childNode = childNodes.item(i); + if (childNode.getNodeType() == Node.ELEMENT_NODE) { + XMLDomMapleData child = new XMLDomMapleData(childNode); + child.imageDataDir = new File(imageDataDir, getName()); + ret.add(child); + } + } + return ret; + } + + @Override + public Object getData() { + NamedNodeMap attributes = node.getAttributes(); + MapleDataType type = getType(); + switch (type) { + case DOUBLE: + case FLOAT: + case INT: + case SHORT: { + String value = attributes.getNamedItem("value").getNodeValue(); + Number nval; + + try { + nval = nf.parse(value); + } + catch(java.text.ParseException pe) { + pe.printStackTrace(); + nval = 0.0f; + } + + switch (type) { + case DOUBLE: + return nval.doubleValue(); + case FLOAT: + return nval.floatValue(); + case INT: + return nval.intValue(); + case SHORT: + return nval.shortValue(); + default: + return null; + } + } + case STRING: + case UOL: { + String value = attributes.getNamedItem("value").getNodeValue(); + return value; + } + case VECTOR: { + String x = attributes.getNamedItem("x").getNodeValue(); + String y = attributes.getNamedItem("y").getNodeValue(); + return new Point(Integer.parseInt(x), Integer.parseInt(y)); + } + case CANVAS: { + String width = attributes.getNamedItem("width").getNodeValue(); + String height = attributes.getNamedItem("height").getNodeValue(); + return new FileStoredPngMapleCanvas(Integer.parseInt(width), Integer.parseInt(height), new File( + imageDataDir, getName() + ".png")); + } + default: + return null; + } + } + + @Override + public MapleDataType getType() { + String nodeName = node.getNodeName(); + if (nodeName.equals("imgdir")) { + return MapleDataType.PROPERTY; + } else if (nodeName.equals("canvas")) { + return MapleDataType.CANVAS; + } else if (nodeName.equals("convex")) { + return MapleDataType.CONVEX; + } else if (nodeName.equals("sound")) { + return MapleDataType.SOUND; + } else if (nodeName.equals("uol")) { + return MapleDataType.UOL; + } else if (nodeName.equals("double")) { + return MapleDataType.DOUBLE; + } else if (nodeName.equals("float")) { + return MapleDataType.FLOAT; + } else if (nodeName.equals("int")) { + return MapleDataType.INT; + } else if (nodeName.equals("short")) { + return MapleDataType.SHORT; + } else if (nodeName.equals("string")) { + return MapleDataType.STRING; + } else if (nodeName.equals("vector")) { + return MapleDataType.VECTOR; + } else if (nodeName.equals("null")) { + return MapleDataType.IMG_0x00; + } + return null; + } + + @Override + public MapleDataEntity getParent() { + Node parentNode = node.getParentNode(); + if (parentNode.getNodeType() == Node.DOCUMENT_NODE) { + return null; + } + XMLDomMapleData parentData = new XMLDomMapleData(parentNode); + parentData.imageDataDir = imageDataDir.getParentFile(); + return parentData; + } + + @Override + public String getName() { + return node.getAttributes().getNamedItem("name").getNodeValue(); + } + + @Override + public Iterator iterator() { + return getChildren().iterator(); + } +} diff --git a/tools/MapleSkillMakerFetcher/src/provider/wz/XMLWZFile.java b/tools/MapleSkillMakerFetcher/src/provider/wz/XMLWZFile.java new file mode 100644 index 0000000000..2a7694fdc9 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/provider/wz/XMLWZFile.java @@ -0,0 +1,85 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package provider.wz; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import provider.MapleData; +import provider.MapleDataDirectoryEntry; +import provider.MapleDataProvider; + +public class XMLWZFile implements MapleDataProvider { + private File root; + private WZDirectoryEntry rootForNavigation; + + public XMLWZFile(File fileIn) { + root = fileIn; + rootForNavigation = new WZDirectoryEntry(fileIn.getName(), 0, 0, null); + fillMapleDataEntitys(root, rootForNavigation); + } + + private void fillMapleDataEntitys(File lroot, WZDirectoryEntry wzdir) { + for (File file : lroot.listFiles()) { + String fileName = file.getName(); + if (file.isDirectory() && !fileName.endsWith(".img")) { + WZDirectoryEntry newDir = new WZDirectoryEntry(fileName, 0, 0, wzdir); + wzdir.addDirectory(newDir); + fillMapleDataEntitys(file, newDir); + } else if (fileName.endsWith(".xml")) { + wzdir.addFile(new WZFileEntry(fileName.substring(0, fileName.length() - 4), 0, 0, wzdir)); + } + } + } + + @Override + public MapleData getData(String path) { + File dataFile = new File(root, path + ".xml"); + File imageDataDir = new File(root, path); + if (!dataFile.exists()) { + return null;//bitches + } + FileInputStream fis; + try { + fis = new FileInputStream(dataFile); + } catch (FileNotFoundException e) { + throw new RuntimeException("Datafile " + path + " does not exist in " + root.getAbsolutePath()); + } + final XMLDomMapleData domMapleData; + try { + domMapleData = new XMLDomMapleData(fis, imageDataDir.getParentFile()); + } finally { + try { + fis.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return domMapleData; + } + + @Override + public MapleDataDirectoryEntry getRoot() { + return rootForNavigation; + } +} diff --git a/tools/MapleSkillMakerFetcher/src/tools/HexTool.java b/tools/MapleSkillMakerFetcher/src/tools/HexTool.java new file mode 100644 index 0000000000..8cc0c8aa84 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/tools/HexTool.java @@ -0,0 +1,79 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package tools; + +import java.io.ByteArrayOutputStream; + +public class HexTool { + private static final char[] HEX = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + + private static String toString(byte byteValue) { + int tmp = byteValue << 8; + char[] retstr = new char[]{HEX[(tmp >> 12) & 0x0F], HEX[(tmp >> 8) & 0x0F]}; + return String.valueOf(retstr); + } + + public static String toString(byte[] bytes) { + StringBuilder hexed = new StringBuilder(); + for (int i = 0; i < bytes.length; i++) { + hexed.append(toString(bytes[i])); + hexed.append(' '); + } + return hexed.substring(0, hexed.length() - 1); + } + + public static byte[] getByteArrayFromHexString(String hex) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + int nexti = 0; + int nextb = 0; + boolean highoc = true; + outer: + for (;;) { + int number = -1; + while (number == -1) { + if (nexti == hex.length()) { + break outer; + } + char chr = hex.charAt(nexti); + if (chr >= '0' && chr <= '9') { + number = chr - '0'; + } else if (chr >= 'a' && chr <= 'f') { + number = chr - 'a' + 10; + } else if (chr >= 'A' && chr <= 'F') { + number = chr - 'A' + 10; + } else { + number = -1; + } + nexti++; + } + if (highoc) { + nextb = number << 4; + highoc = false; + } else { + nextb |= number; + highoc = true; + baos.write(nextb); + } + } + return baos.toByteArray(); + } +} diff --git a/tools/MapleSkillMakerFetcher/src/tools/data/input/ByteArrayByteStream.java b/tools/MapleSkillMakerFetcher/src/tools/data/input/ByteArrayByteStream.java new file mode 100644 index 0000000000..eac7de21ea --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/tools/data/input/ByteArrayByteStream.java @@ -0,0 +1,72 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package tools.data.input; + +import java.io.IOException; +import tools.HexTool; + +public class ByteArrayByteStream implements SeekableInputStreamBytestream { + private int pos = 0; + private long bytesRead = 0; + private byte[] arr; + + public ByteArrayByteStream(byte[] arr) { + this.arr = arr; + } + + @Override + public long getPosition() { + return pos; + } + + @Override + public void seek(long offset) throws IOException { + pos = (int) offset; + } + + @Override + public long getBytesRead() { + return bytesRead; + } + + @Override + public int readByte() { + bytesRead++; + return ((int) arr[pos++]) & 0xFF; + } + + @Override + public String toString() { + String nows = "kevintjuh93 pwns";//I lol'd + if (arr.length - pos > 0) { + byte[] now = new byte[arr.length - pos]; + System.arraycopy(arr, pos, now, 0, arr.length - pos); + nows = HexTool.toString(now); + } + return "All: " + HexTool.toString(arr) + "\nNow: " + nows; + } + + @Override + public long available() { + return arr.length - pos; + } +} diff --git a/tools/MapleSkillMakerFetcher/src/tools/data/input/ByteInputStream.java b/tools/MapleSkillMakerFetcher/src/tools/data/input/ByteInputStream.java new file mode 100644 index 0000000000..107f71843e --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/tools/data/input/ByteInputStream.java @@ -0,0 +1,35 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package tools.data.input; + +/** + * Represents an abstract stream of bytes. + * + * @author Frz + * @version 1.0 + * @since Revision 323 + */ +public interface ByteInputStream { + int readByte(); + long getBytesRead(); + long available(); +} diff --git a/tools/MapleSkillMakerFetcher/src/tools/data/input/GenericLittleEndianAccessor.java b/tools/MapleSkillMakerFetcher/src/tools/data/input/GenericLittleEndianAccessor.java new file mode 100644 index 0000000000..d08a9b8374 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/tools/data/input/GenericLittleEndianAccessor.java @@ -0,0 +1,239 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package tools.data.input; + +import java.awt.Point; +import java.io.ByteArrayOutputStream; + +/** + * Provides a generic interface to a Little Endian stream of bytes. + * + * @version 1.0 + * @author Frz + * @since Revision 323 + */ +public class GenericLittleEndianAccessor implements LittleEndianAccessor { + private ByteInputStream bs; + + /** + * Class constructor - Wraps the accessor around a stream of bytes. + * + * @param bs The byte stream to wrap the accessor around. + */ + public GenericLittleEndianAccessor(ByteInputStream bs) { + this.bs = bs; + } + + /** + * Read a single byte from the stream. + * + * @return The byte read. + * @see tools.data.input.ByteInputStream#readByte + */ + @Override + public byte readByte() { + return (byte) bs.readByte(); + } + + /** + * Reads an integer from the stream. + * + * @return The integer read. + */ + @Override + public int readInt() { + return bs.readByte() + (bs.readByte() << 8) + (bs.readByte() << 16) + (bs.readByte() << 24); + } + + /** + * Reads a short integer from the stream. + * + * @return The short read. + */ + @Override + public short readShort() { + return (short) (bs.readByte() + (bs.readByte() << 8)); + } + + /** + * Reads a single character from the stream. + * + * @return The character read. + */ + @Override + public char readChar() { + return (char) readShort(); + } + + /** + * Reads a long integer from the stream. + * + * @return The long integer read. + */ + @Override + public long readLong() { + long byte1 = bs.readByte(); + long byte2 = bs.readByte(); + long byte3 = bs.readByte(); + long byte4 = bs.readByte(); + long byte5 = bs.readByte(); + long byte6 = bs.readByte(); + long byte7 = bs.readByte(); + long byte8 = bs.readByte(); + return (byte8 << 56) + (byte7 << 48) + (byte6 << 40) + (byte5 << 32) + (byte4 << 24) + (byte3 << 16) + (byte2 << 8) + byte1; + } + + /** + * Reads a floating point integer from the stream. + * + * @return The float-type integer read. + */ + @Override + public float readFloat() { + return Float.intBitsToFloat(readInt()); + } + + /** + * Reads a double-precision integer from the stream. + * + * @return The double-type integer read. + */ + @Override + public double readDouble() { + return Double.longBitsToDouble(readLong()); + } + + /** + * Reads an ASCII string from the stream with length n. + * + * @param n Number of characters to read. + * @return The string read. + */ + public final String readAsciiString(int n) { + char ret[] = new char[n]; + for (int x = 0; x < n; x++) { + ret[x] = (char) readByte(); + } + return String.valueOf(ret); + } + + /** + * Reads a null-terminated string from the stream. + * + * @return The string read. + */ + public final String readNullTerminatedAsciiString() { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte b; + while (true) { + b = readByte(); + if (b == 0) { + break; + } + baos.write(b); + } + byte[] buf = baos.toByteArray(); + char[] chrBuf = new char[buf.length]; + for (int x = 0; x < buf.length; x++) { + chrBuf[x] = (char) buf[x]; + } + return String.valueOf(chrBuf); + } + + /** + * Gets the number of bytes read from the stream so far. + * + * @return A long integer representing the number of bytes read. + * @see tools.data.input.ByteInputStream#getBytesRead() + */ + public long getBytesRead() { + return bs.getBytesRead(); + } + + /** + * Reads a MapleStory convention lengthed ASCII string. + * This consists of a short integer telling the length of the string, + * then the string itself. + * + * @return The string read. + */ + @Override + public String readMapleAsciiString() { + return readAsciiString(readShort()); + } + + /** + * Reads num bytes off the stream. + * + * @param num The number of bytes to read. + * @return An array of bytes with the length of num + */ + @Override + public byte[] read(int num) { + byte[] ret = new byte[num]; + for (int x = 0; x < num; x++) { + ret[x] = readByte(); + } + return ret; + } + + /** + * Reads a MapleStory Position information. + * This consists of 2 short integer. + * + * @return The Position read. + */ + @Override + public final Point readPos() { + final int x = readShort(); + final int y = readShort(); + return new Point(x, y); + } + + /** + * Skips the current position of the stream num bytes ahead. + * + * @param num Number of bytes to skip. + */ + @Override + public void skip(int num) { + for (int x = 0; x < num; x++) { + readByte(); + } + } + + /** + * @see tools.data.input.ByteInputStream#available + */ + @Override + public long available() { + return bs.available(); + } + + /** + * @see java.lang.Object#toString + */ + @Override + public String toString() { + return bs.toString(); + } +} \ No newline at end of file diff --git a/tools/MapleSkillMakerFetcher/src/tools/data/input/GenericSeekableLittleEndianAccessor.java b/tools/MapleSkillMakerFetcher/src/tools/data/input/GenericSeekableLittleEndianAccessor.java new file mode 100644 index 0000000000..fdd147d796 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/tools/data/input/GenericSeekableLittleEndianAccessor.java @@ -0,0 +1,91 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package tools.data.input; + +import java.io.IOException; + +/** + * Provides an abstract accessor to a generic Little Endian byte stream. This + * accessor is seekable. + * + * @author Frz + * @version 1.0 + * @since Revision 323 + * @see tools.data.input.GenericLittleEndianAccessor + */ +public class GenericSeekableLittleEndianAccessor extends GenericLittleEndianAccessor implements SeekableLittleEndianAccessor { + private SeekableInputStreamBytestream bs; + + /** + * Class constructor + * Provide a seekable input stream to wrap this object around. + * + * @param bs The byte stream to wrap this around. + */ + public GenericSeekableLittleEndianAccessor(SeekableInputStreamBytestream bs) { + super(bs); + this.bs = bs; + } + + /** + * Seek the pointer to offset + * + * @param offset The offset to seek to. + * @see tools.data.input.SeekableInputStreamBytestream#seek + */ + @Override + public void seek(long offset) { + try { + bs.seek(offset); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("Seek failed " + e); + } + } + + /** + * Get the current position of the pointer. + * + * @return The current position of the pointer as a long integer. + * @see tools.data.input.SeekableInputStreamBytestream#getPosition + */ + @Override + public long getPosition() { + try { + return bs.getPosition(); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("getPosition failed" + e); + return -1; + } + } + + /** + * Skip num number of bytes in the stream. + * + * @param num The number of bytes to skip. + */ + @Override + public void skip(int num) { + seek(getPosition() + num); + } +} diff --git a/tools/MapleSkillMakerFetcher/src/tools/data/input/InputStreamByteStream.java b/tools/MapleSkillMakerFetcher/src/tools/data/input/InputStreamByteStream.java new file mode 100644 index 0000000000..70aef3489f --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/tools/data/input/InputStreamByteStream.java @@ -0,0 +1,93 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package tools.data.input; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Provides an abstract wrapper to a stream of bytes. + * + * @author Frz + * @version 1.0 + * @since Revision 323 + */ +public class InputStreamByteStream implements ByteInputStream { + private InputStream is; + private long read = 0; + + /** + * Class constructor. + * Provide an input stream to wrap this around. + * + * @param is The input stream to wrap this object around. + */ + public InputStreamByteStream(InputStream is) { + this.is = is; + } + + /** + * Reads the next byte from the stream. + * + * @return Then next byte in the stream. + */ + @Override + public int readByte() { + int temp; + try { + temp = is.read(); + if (temp == -1) { + throw new RuntimeException("EOF"); + } + read++; + return temp; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + /** + * Gets the number of bytes read from the stream. + * + * @return The number of bytes read as a long integer. + */ + @Override + public long getBytesRead() { + return read; + } + + /** + * Returns the number of bytes left in the stream. + * + * @return The number of bytes available for reading as a long integer. + */ + @Override + public long available() { + try { + return is.available(); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("ERROR" + e); + return 0; + } + } +} diff --git a/tools/MapleSkillMakerFetcher/src/tools/data/input/LittleEndianAccessor.java b/tools/MapleSkillMakerFetcher/src/tools/data/input/LittleEndianAccessor.java new file mode 100644 index 0000000000..f991dbf537 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/tools/data/input/LittleEndianAccessor.java @@ -0,0 +1,45 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package tools.data.input; + +import java.awt.Point; + +/** + * @author Frz + */ +public interface LittleEndianAccessor { + byte readByte(); + char readChar(); + short readShort(); + int readInt(); + Point readPos(); + long readLong(); + void skip(int num); + byte[] read(int num); + float readFloat(); + double readDouble(); + String readAsciiString(int n); + String readNullTerminatedAsciiString(); + String readMapleAsciiString(); + long getBytesRead(); + long available(); +} diff --git a/tools/MapleSkillMakerFetcher/src/tools/data/input/RandomAccessByteStream.java b/tools/MapleSkillMakerFetcher/src/tools/data/input/RandomAccessByteStream.java new file mode 100644 index 0000000000..c0004be17f --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/tools/data/input/RandomAccessByteStream.java @@ -0,0 +1,84 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package tools.data.input; + +import java.io.IOException; +import java.io.RandomAccessFile; + +/** + * Provides an abstract layer to a byte stream. This layer can be accessed + * randomly. + * + * @author Frz + * @version 1.0 + * @since Revision 323 + */ +public class RandomAccessByteStream implements SeekableInputStreamBytestream { + private RandomAccessFile raf; + private long read = 0; + + public RandomAccessByteStream(RandomAccessFile raf) { + super(); + this.raf = raf; + } + + @Override + public int readByte() { + int temp; + try { + temp = raf.read(); + if (temp == -1) { + throw new RuntimeException("EOF"); + } + read++; + return temp; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public void seek(long offset) throws IOException { + raf.seek(offset); + } + + @Override + public long getPosition() throws IOException { + return raf.getFilePointer(); + } + + @Override + public long getBytesRead() { + return read; + } + + @Override + public long available() { + try { + return raf.length() - raf.getFilePointer(); + } catch (IOException e) { + e.printStackTrace(); + System.out.println("ERROR " + e); + return 0; + } + } +} diff --git a/tools/MapleSkillMakerFetcher/src/tools/data/input/SeekableInputStreamBytestream.java b/tools/MapleSkillMakerFetcher/src/tools/data/input/SeekableInputStreamBytestream.java new file mode 100644 index 0000000000..f4922dc876 --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/tools/data/input/SeekableInputStreamBytestream.java @@ -0,0 +1,51 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package tools.data.input; + +import java.io.IOException; + +/** + * Provides an abstract interface to a stream of bytes. This stream can be + * seeked. + * + * @author Frz + * @version 1.0 + * @since 299 + */ +public interface SeekableInputStreamBytestream extends ByteInputStream { + /** + * Seeks the stream by the specified offset. + * + * @param offset + * Number of bytes to seek. + * @throws IOException + */ + void seek(long offset) throws IOException; + + /** + * Gets the current position of the stream. + * + * @return The stream position as a long integer. + * @throws IOException + */ + long getPosition() throws IOException; +} diff --git a/tools/MapleSkillMakerFetcher/src/tools/data/input/SeekableLittleEndianAccessor.java b/tools/MapleSkillMakerFetcher/src/tools/data/input/SeekableLittleEndianAccessor.java new file mode 100644 index 0000000000..16b2317f7a --- /dev/null +++ b/tools/MapleSkillMakerFetcher/src/tools/data/input/SeekableLittleEndianAccessor.java @@ -0,0 +1,27 @@ +/* + This file is part of the OdinMS Maple Story Server + Copyright (C) 2008 Patrick Huy + Matthias Butz + Jan Christian Meyer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation version 3 as published by + the Free Software Foundation. You may not use, modify or distribute + this program under any other version of the GNU Affero General Public + License. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ +package tools.data.input; + +public interface SeekableLittleEndianAccessor extends LittleEndianAccessor { + void seek(long offset); + long getPosition(); +} diff --git a/tools/MapleSkillMakerReagentIndexer/build.xml b/tools/MapleSkillMakerReagentIndexer/build.xml new file mode 100644 index 0000000000..3275f0ee69 --- /dev/null +++ b/tools/MapleSkillMakerReagentIndexer/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project MapleSkillMakerReagentIndexer. + + + diff --git a/tools/MapleSkillMakerReagentIndexer/lib/MakerReagentData.sql b/tools/MapleSkillMakerReagentIndexer/lib/MakerReagentData.sql new file mode 100644 index 0000000000..02c536569c --- /dev/null +++ b/tools/MapleSkillMakerReagentIndexer/lib/MakerReagentData.sql @@ -0,0 +1,56 @@ + # SQL File autogenerated from the MapleSkillMakerReagentIndexer feature by Ronan Lana. + # Generated data is conformant with the Item.wz folder used to compile this. + +CREATE TABLE IF NOT EXISTS `makerreagentdata` ( + `itemid` int(11) NOT NULL, + `stat` varchar(20) NOT NULL, + `value` smallint(6) NOT NULL, + PRIMARY KEY (`itemid`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +INSERT IGNORE INTO `makerreagentdata` (`itemid`, `stat`, `value`) VALUES + (4250000, "incPAD", 1), + (4250001, "incPAD", 2), + (4250002, "incPAD", 3), + (4250100, "incMAD", 1), + (4250101, "incMAD", 2), + (4250102, "incMAD", 3), + (4250200, "incACC", 2), + (4250201, "incACC", 3), + (4250202, "incACC", 5), + (4250300, "incEVA", 2), + (4250301, "incEVA", 3), + (4250302, "incEVA", 5), + (4250400, "incSpeed", 2), + (4250401, "incSpeed", 3), + (4250402, "incSpeed", 5), + (4250500, "incJump", 1), + (4250501, "incJump", 2), + (4250502, "incJump", 3), + (4250600, "incMaxHP", 10), + (4250601, "incMaxHP", 20), + (4250602, "incMaxHP", 30), + (4250700, "incMaxMP", 10), + (4250701, "incMaxMP", 20), + (4250702, "incMaxMP", 30), + (4250800, "incSTR", 2), + (4250801, "incSTR", 3), + (4250802, "incSTR", 5), + (4250900, "incINT", 2), + (4250901, "incINT", 3), + (4250902, "incINT", 5), + (4251000, "incLUK", 2), + (4251001, "incLUK", 3), + (4251002, "incLUK", 5), + (4251100, "incDEX", 2), + (4251101, "incDEX", 3), + (4251102, "incDEX", 5), + (4251200, "incReqLevel", -1), + (4251201, "incReqLevel", -2), + (4251202, "incReqLevel", -3), + (4251300, "randOption", 1), + (4251301, "randOption", 2), + (4251302, "randOption", 3), + (4251400, "randStat", 2), + (4251401, "randStat", 3), + (4251402, "randStat", 5); diff --git a/tools/MapleSkillMakerReagentIndexer/manifest.mf b/tools/MapleSkillMakerReagentIndexer/manifest.mf new file mode 100644 index 0000000000..328e8e5bc3 --- /dev/null +++ b/tools/MapleSkillMakerReagentIndexer/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/tools/MapleSkillMakerReagentIndexer/nbproject/build-impl.xml b/tools/MapleSkillMakerReagentIndexer/nbproject/build-impl.xml new file mode 100644 index 0000000000..773305a96f --- /dev/null +++ b/tools/MapleSkillMakerReagentIndexer/nbproject/build-impl.xml @@ -0,0 +1,1448 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set platform.home + Must set platform.bootcp + Must set platform.java + Must set platform.javac + + The J2SE Platform is not correctly set up. + Your active platform is: ${platform.active}, but the corresponding property "platforms.${platform.active}.home" is not found in the project's properties files. + Either open the project in the IDE and setup the Platform with the same name or add it manually. + For example like this: + ant -Duser.properties.file=<path_to_property_file> jar (where you put the property "platforms.${platform.active}.home" in a .properties file) + or ant -Dplatforms.${platform.active}.home=<path_to_JDK_home> jar (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + ${platform.java} -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/MapleSkillMakerReagentIndexer/nbproject/genfiles.properties b/tools/MapleSkillMakerReagentIndexer/nbproject/genfiles.properties new file mode 100644 index 0000000000..af30fbb9f1 --- /dev/null +++ b/tools/MapleSkillMakerReagentIndexer/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=49f97f2c +build.xml.script.CRC32=75bbe280 +build.xml.stylesheet.CRC32=8064a381@1.75.2.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=49f97f2c +nbproject/build-impl.xml.script.CRC32=919b8bee +nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.75.2.48 diff --git a/tools/MapleSkillMakerReagentIndexer/nbproject/project.properties b/tools/MapleSkillMakerReagentIndexer/nbproject/project.properties new file mode 100644 index 0000000000..05e10df1c4 --- /dev/null +++ b/tools/MapleSkillMakerReagentIndexer/nbproject/project.properties @@ -0,0 +1,73 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# Os arquivos em build.classes.dir que devem ser exclu\u00eddos do jar de distribui\u00e7\u00e3o +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/MapleSkillMakerReagentIndexer.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.7 +javac.target=1.7 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=mapleskillmakerreagentindexer.MapleSkillMakerReagentIndexer +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=JDK_1.7 +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/tools/MapleSkillMakerReagentIndexer/nbproject/project.xml b/tools/MapleSkillMakerReagentIndexer/nbproject/project.xml new file mode 100644 index 0000000000..24af6599c4 --- /dev/null +++ b/tools/MapleSkillMakerReagentIndexer/nbproject/project.xml @@ -0,0 +1,16 @@ + + + org.netbeans.modules.java.j2seproject + + + MapleSkillMakerReagentIndexer + + + + + + + + + + diff --git a/tools/MapleSkillMakerReagentIndexer/src/mapleskillmakerreagentindexer/MapleSkillMakerReagentIndexer.java b/tools/MapleSkillMakerReagentIndexer/src/mapleskillmakerreagentindexer/MapleSkillMakerReagentIndexer.java new file mode 100644 index 0000000000..464db4ab04 --- /dev/null +++ b/tools/MapleSkillMakerReagentIndexer/src/mapleskillmakerreagentindexer/MapleSkillMakerReagentIndexer.java @@ -0,0 +1,226 @@ +/* + * This file is part of the MapleSolaxiaV2 Maple Story Server + * + * Copyright (C) 2017 RonanLana + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package mapleskillmakerreagentindexer; + +import java.io.BufferedReader; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +/** + * + * @author RonanLana + * + * The main objective of this program is to index relevant reagent data + * from the Item.wz folder and generate a SQL table with them, to be used + * by the server source. + * + */ +public class MapleSkillMakerReagentIndexer { + static String host = "jdbc:mysql://localhost:3306/maplesolaxia"; + static String driver = "com.mysql.jdbc.Driver"; + static String username = "root"; + static String password = ""; + + static String fileName = "../../wz/Item.wz/Etc/0425.img.xml"; + static String newFile = "lib/MakerReagentData.sql"; + + static PrintWriter printWriter = null; + static InputStreamReader fileReader = null; + static BufferedReader bufferedReader = null; + static byte status = 0; + + static int id = -1; + static List>> reagentList = new ArrayList<>(); + + static int initialStringLength = 50; + + private static String getName(String token) { + int i, j; + char[] dest; + String d; + + i = token.lastIndexOf("name"); + i = token.indexOf("\"", i) + 1; //lower bound of the string + j = token.indexOf("\"", i); //upper bound + + dest = new char[initialStringLength]; + token.getChars(i, j, dest, 0); + + d = new String(dest); + return(d.trim()); + } + + private static String getValue(String token) { + int i, j; + char[] dest; + String d; + + i = token.lastIndexOf("value"); + i = token.indexOf("\"", i) + 1; //lower bound of the string + j = token.indexOf("\"", i); //upper bound + + dest = new char[initialStringLength]; + token.getChars(i, j, dest, 0); + + d = new String(dest); + return(d.trim()); + } + + private static void simpleToken(String token) { + if(token.contains("/imgdir")) { + status -= 1; + } + else if(token.contains("imgdir")) { + status += 1; + } + } + + private static void forwardCursor(int st) { + String line = null; + + try { + while(status >= st && (line = bufferedReader.readLine()) != null) { + simpleToken(line); + } + } + catch(Exception e) { + e.printStackTrace(); + } + } + + private static void translateToken(String token) { + String d; + + if(token.contains("/imgdir")) { + status -= 1; + } + else if(token.contains("imgdir")) { + if(status == 1) { //getting id + d = getName(token); + id = Integer.parseInt(d); + System.out.println("Parsing maker reagent id " + id); + } else if(status == 2) { + d = getName(token); + if(!d.equals("info")) { + System.out.println("not info"); + forwardCursor(status); + } + } + + status += 1; + } else { + if(status == 3) { + if(token.contains("int")) { + d = getName(token); + + if(d.contains("inc") || d.contains("rand")) { + Integer v = Integer.valueOf(getValue(token)); + Pair reagBuff = new Pair<>(d, v); + + Pair> reagItem = new Pair<>(id, reagBuff); + reagentList.add(reagItem); + } + } else { + if(token.contains("canvas")) { + forwardCursor(status + 1); + } + } + } + } + } + + private static void SortReagentList() { + Collections.sort(reagentList, new Comparator>>() { + @Override + public int compare(Pair> p1, Pair> p2) { + return p1.getLeft().compareTo(p2.getLeft()); + } + }); + } + + private static void WriteMakerReagentTableFile() { + printWriter.println(" # SQL File autogenerated from the MapleSkillMakerReagentIndexer feature by Ronan Lana."); + printWriter.println(" # Generated data is conformant with the Item.wz folder used to compile this."); + printWriter.println(); + + printWriter.println("CREATE TABLE IF NOT EXISTS `makerreagentdata` ("); + printWriter.println(" `itemid` int(11) NOT NULL,"); + printWriter.println(" `stat` varchar(20) NOT NULL,"); + printWriter.println(" `value` smallint(6) NOT NULL,"); + printWriter.println(" PRIMARY KEY (`itemid`)"); + printWriter.println(") ENGINE=MyISAM DEFAULT CHARSET=latin1;"); + printWriter.println(); + + StringBuilder sb = new StringBuilder("INSERT IGNORE INTO `makerreagentdata` (`itemid`, `stat`, `value`) VALUES\r\n"); + + for(Pair> it : reagentList) { + sb.append(" (" + it.left + ", \"" + it.right.left + "\", " + it.right.right + "),\r\n"); + } + + sb.setLength(sb.length() - 3); + sb.append(";"); + + printWriter.println(sb); + } + + private static void WriteMakerReagentTableData() { + // This will reference one line at a time + String line = null; + + try { + fileReader = new InputStreamReader(new FileInputStream(fileName), "UTF-8"); + bufferedReader = new BufferedReader(fileReader); + + while((line = bufferedReader.readLine()) != null) { + translateToken(line); + } + + bufferedReader.close(); + fileReader.close(); + + SortReagentList(); + + printWriter = new PrintWriter(newFile, "UTF-8"); + WriteMakerReagentTableFile(); + printWriter.close(); + } + + catch(FileNotFoundException ex) { + System.out.println("Unable to open file '" + fileName + "'"); + } + catch(IOException ex) { + System.out.println("Error reading file '" + fileName + "'"); + } + + catch(Exception e) { + e.printStackTrace(); + } + } + + public static void main(String[] args) { + WriteMakerReagentTableData(); + } +} diff --git a/tools/MapleSkillMakerReagentIndexer/src/mapleskillmakerreagentindexer/Pair.java b/tools/MapleSkillMakerReagentIndexer/src/mapleskillmakerreagentindexer/Pair.java new file mode 100644 index 0000000000..9377cb8178 --- /dev/null +++ b/tools/MapleSkillMakerReagentIndexer/src/mapleskillmakerreagentindexer/Pair.java @@ -0,0 +1,121 @@ +/* +This file is part of the OdinMS Maple Story Server +Copyright (C) 2008 ~ 2010 Patrick Huy +Matthias Butz +Jan Christian Meyer + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License version 3 +as published by the Free Software Foundation. You may not use, modify +or distribute this program under any other version of the +GNU Affero General Public License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . + */ +package mapleskillmakerreagentindexer; + +/** + * Represents a pair of values. + * + * @author Frz + * @since Revision 333 + * @version 1.0 + * + * @param The type of the left value. + * @param The type of the right value. + */ +public class Pair { + + public E left; + public F right; + + /** + * Class constructor - pairs two objects together. + * + * @param left The left object. + * @param right The right object. + */ + public Pair(E left, F right) { + this.left = left; + this.right = right; + } + + /** + * Gets the left value. + * + * @return The left value. + */ + public E getLeft() { + return left; + } + + /** + * Gets the right value. + * + * @return The right value. + */ + public F getRight() { + return right; + } + + /** + * Turns the pair into a string. + * + * @return Each value of the pair as a string joined by a colon. + */ + @Override + public String toString() { + return left.toString() + ":" + right.toString(); + } + + /** + * Gets the hash code of this pair. + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((left == null) ? 0 : left.hashCode()); + result = prime * result + ((right == null) ? 0 : right.hashCode()); + return result; + } + + /** + * Checks to see if two pairs are equal. + */ + @SuppressWarnings("unchecked") + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Pair other = (Pair) obj; + if (left == null) { + if (other.left != null) { + return false; + } + } else if (!left.equals(other.left)) { + return false; + } + if (right == null) { + if (other.right != null) { + return false; + } + } else if (!right.equals(other.right)) { + return false; + } + return true; + } +} \ No newline at end of file diff --git a/wz/Quest.wz/Act.img.xml b/wz/Quest.wz/Act.img.xml index b84644b4b5..95f52423ba 100644 --- a/wz/Quest.wz/Act.img.xml +++ b/wz/Quest.wz/Act.img.xml @@ -34682,7 +34682,6 @@ - diff --git a/wz/Quest.wz/Check.img.xml b/wz/Quest.wz/Check.img.xml index b76319bf5e..3c5fa81f82 100644 --- a/wz/Quest.wz/Check.img.xml +++ b/wz/Quest.wz/Check.img.xml @@ -56514,33 +56514,12 @@ - - - - - - - - - - - - - - - - - - - - - @@ -56628,32 +56607,18 @@ + + - - - - - - - - - - - - - - - - @@ -56743,22 +56708,6 @@ - - - - - - - - - - - - - - - - @@ -56846,6 +56795,7 @@ + diff --git a/wz/Quest.wz/Say.img.xml b/wz/Quest.wz/Say.img.xml index 5dfe81e50f..3fbc6c45a1 100644 --- a/wz/Quest.wz/Say.img.xml +++ b/wz/Quest.wz/Say.img.xml @@ -22668,7 +22668,7 @@ - +