Подготовка и включение кросс-компиляции модуля для Scala 3#
Кросс-компиляция в режиме -Xsource:3 (обозначаемом как x3-source) позволяет постепенно адаптировать кодовую базу, написанную на Scala 2, к синтаксическим и семантическим требованиям Scala 3 — без немедленного полного перехода на новый компилятор.
Этот режим:
выявляет несовместимости, которые будут критичны при будущем переходе на Scala 3;
позволяет исправлять их итеративно, сохраняя работоспособность модуля на Scala 2;
подготавливает экосистему модулей к плавной миграции, минимизируя риски при финальном переходе.
Включение x3-source — обязательный этап модернизации кодовой базы, обеспечивающий долгосрочную поддержку, совместимость с новыми версиями библиотек и возможность использования современных возможностей языка в будущем.
Общий порядок актуализации модуля#
Сгенерируйте исходный код по всему модулю.
Включите флаг
x3-sourceна модуле.Выполните сборку проекта.
МР с примером включения флага x3-source на модуле bs.
При возникновении ошибок во время сборки исправьте их в соответствии с данным разделом.
Некоторые ошибки нельзя исправить сразу из-за требований обратной совместимости. В таких случаях выполняется только подготовка. Если вы столкнулись с такими ошибками:
Внесите полные исправления по всему модулю, даже если они нарушают обратную совместимость — это необходимо, чтобы убедиться, что модуль полностью исправлен.
Если после этого сборка падает с ошибками в дочерних модулях — сделайте изменения обратно совместимыми.
Выключите флаг
x3-source.Выпустите новую версию модуля.
Дождитесь, пока модуль распространится по основным проектам (на это выделяется время для актуализации зависимых модулей).
После этого замените подготовительные конструкции на окончательные исправления.
Включите флаг
x3-sourceи закоммитьте его.
Порядок миграции модулей#
Модули обрабатываются строго от базовых к прикладным (gtkjpa → gtk → btk → …). Это обязательно, чтобы:
сначала обновить основу системы;
избежать блокировок из-за неготовых зависимостей;
обеспечить обратную совместимость, так как такое направление позволяет не тормозить процесс миграции: пока идёт подготовка прикладных модулей, базовые уже постепенно распространяются по проектам.
Процедура:
Первый проход: перепишите все
duplicate-методы и отображения без флага.Второй проход (через ~1 месяц): действуйте согласно общему порядку.
Третий проход — по оставшимся модулям через ещё ~1 месяц.
Примечание
На момент 04.12.2025: gtk, btk, idm, vci уже переведены; bs — подготовлен, но флаг не включён.
Подготовка модуля к включению флага#
1. Генерация исходного кода по всему модулю#
Все модули уже частично подготовлены для перехода на Scala 3, так как был переписан генератор исходного кода.
Модуль btk уже переписан и корректно генерирует исходный код модуля в режиме частичной совместимости со Scala 3, минимально необходимой для работы режима x3-source. Поэтому необходимо сгенерировать исходный код модуля.
Генерация исходного кода по модулю актуализирует старые классы.
2. Включение флага x3-source#
Для этого необходимо в файле application/<module_name>/build.sbt добавить настройку:
.settings(
scalacOptions ++= {
if ((Global / Build.gsfScalaFeatureRelease).value.equals(ScalaVersionNames.ver_3)) {
Seq.empty[String]
} else {
Seq("-Wconf:cat=scala3-migration:e", "-Xsource:3")
}
}
)
3. Пересобрать проект и выполнить компиляцию#
Выполните reload sbt, чтобы пересобрать структуру проекта с учётом нового флага.
После пересборки структуры проекта выполните компиляцию проекта через rebuild project.
Основные ошибки#
1. Наследование отображений#
Из-за того, что в Dvi всем отображениям были добавлены префиксы Dvi (Было: Default, Стало: DviDefault), возникают ошибки в конструкторах отображений в Avi, так как они ссылаются на несуществующие отображения, потому что они не переопределены в Avi.
К примеру, существует конструктор:
def card_ObjectAttr(): Card_ObjectAttr = {
new Card_ObjectAttr {
override def meta: TypeTag = this
}
}
Но само переопределение отсутствует в Avi. Для исправления необходимо добавить его:
trait Card_ObjectAttr extends DviDefault with DviCard_ObjectAttr
Также в Avi некоторые отображения наследуются от старых определений в Dvi, например:
trait CardInput extends super.Card
После генерации исходного кода super.Card, который ссылается на отображение в Dvi, не валиден. Для исправления необходимо заменить наследование:
trait CardInput extends DviCard
2. Синтаксис при переопределении#
Если в классе-предке объявлен метод со скобками и возвращаемым типом, то при переопределении необходимо также указывать тип и скобки.
class Default {
def test(): Unit = ?
}
class List extends {
// Так будет ошибка, так как отсутствуют скобки
override test: Unit = ?
}
3. Наследование переопределённых выборок#
В Scala 3 запрещены переопределения с одинаковым наименованием, то есть конструкции: trait Default extends super.Default.
Для исправления необходимо переименовать трейт переопределения отображения, но оставить конструктор отображения и разметку в Avm, чтобы не сломать существующие Jexl-скрипты, проектный код и связанные модули.
Это необходимо, чтобы не сломать обратную совместимость. К примеру, у нас есть класс Btk_FileAvi и Cnt_FileAvi. Если мы переименуем отображение в Btk_FileAvi, то его нужно будет сразу менять и в Cnt_FileAvi, что ломает обратную совместимость между модулями.
После переименования отображения необходимо заменить его фабрику на следующую, где в selFactoryName указывается системное наименование отображения:
override def list(): BsAcSubstitutionAviList = {
new BsAcSubstitutionAviList {
override def meta: TypeTag = this
override def selFactoryName: String = "List"
}
}
В данном примере отображение List было переименовано в BsAcSubstitutionAviList, но наименование метода-конструктора остаётся прежним.
Учесть, что при переименовании отображения в переопределённой выборке (например, в Bs_Application Default в BsApplicationAviDefault) у этого отображения могут быть свои переопределения. В таких случаях необходимо создавать тип с новым наименованием для обратной совместимости:
def default(): BsApplicationAviDefault = {
new BsApplicationAviDefault {
override def meta: TypeTag = this
override def selFactoryName: String = "Default"
}
}
/**
* todo(x3-source) подождать пока распространится на проекты, переименовать в зависимых модулях наследование, подождать ещё недельку и удалить здесь Default
*/
type BsApplicationAviDefault = Default
@deprecated("Используйте BsApplicationAviDefault")
trait Default extends super.Default {
override def onLoadMeta(): Unit = {
super.onLoadMeta()
if (selection.attrs().exists("idGlobalBisObjHL")){
selection.attrs("idGlobalBisObjHL").isVisible = Bs_SettingsApi().getbUseBisObj
}
addVar("sIdDepOwnerName#", "idGlobalDepOwner".ns, FieldType.ftString)
}
}
В таком случае x3-source сразу включить не получится, так как остаётся trait Default extends super.Default, и придётся ждать неделю, чтобы bs распространился по проектам. После этого измените наследование в зависимых модулях с Default на BsApplicationAviDefault, подождите ещё неделю и уже тогда в Bs_Application удалите тип, переименуйте Default в BsApplicationAviDefault и включите x3-source.
Комментарий оставляйте, как в примере выше (можно с указанием даты), чтобы потом было проще искать такие места и убирать обратную совместимость.
Карта модулей#
Ниже приведены зависимости модулей в виде карты: <модуль> → отсортированный список от кого он зависит.
Карта отсортирована и поможет определить направление миграции.
gtkjpa ->
gtk -> gtkjpa
btk -> gtk, gtkjpa
bts -> btk, gtk, gtkjpa
dit -> btk, gtk, gtkjpa
msr -> btk, gtk, gtkjpa
vci -> gtk, btk, gtkjpa
btktst -> btk, gtk, gtkjpa
clr -> btk, gtk, gtkjpa
sur -> btk, gtk, bts, gtkjpa
rpt -> gtk, btk, bts, gtkjpa
rpl -> btk, bts, gtk, gtkjpa
cur -> btk, bts, gtk, gtkjpa
gar -> bts, btk, gtk, gtkjpa
prm -> bts, gtkjpa, gtk, msr, btk
rgn -> bts, gtkjpa, gtk, btk, cur
tax -> bts, gtkjpa, gtk, btk, rgn, cur
bwf -> bts, gtkjpa, gtk, tax, rpt, btk, rgn, cur
bs -> bts, gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, prm, rpt
est -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
bld -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
lti -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
bpm -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
mpr -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
lic -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
kpi -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
bbb -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
rsm -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
yms -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
gds -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
rss -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
idm -> gtkjpa, gtk, msr, tax, rpl, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
rcm -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, bts, bs, prm, rpt, clr, gds
qj -> gtkjpa, gtk, msr, tax, bpm, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
tr -> gtkjpa, gtk, msr, tax, btk, bbb, rgn, cur, bwf, clr, bts, bs, prm, rpt
pacs -> gtkjpa, gtk, msr, tax, rpl, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
wf -> gtkjpa, gtk, msr, tax, bpm, btk, rgn, cur, bwf, clr, bts, bs, prm, rpt
csc -> gtkjpa, gtk, msr, tax, btk, rgn, cur, bwf, bts, bs, prm, rpt, clr, gds
prc -> gtkjpa, gtk, msr, tax, btk, bbb, rgn, cur, bwf, bts, bs, prm, rpt, clr, gds
eta -> gtkjpa, gtk, msr, tax, bpm, btk, cur, bwf, clr, bts, bs, prm, rpt, wf, rgn
rpltst -> gtkjpa, gtk, msr, tax, rpl, btk, rgn, cur, bwf, bts, bs, prm, rpt, clr, gds
bhr -> gtkjpa, gtk, msr, tax, bpm, btk, cur, bwf, clr, bts, bs, prm, rpt, wf, rgn
svd -> gtkjpa, gtk, msr, tax, bpm, btk, cur, bwf, clr, bts, bs, prm, rpt, wf, rgn
co -> gtkjpa, gtk, msr, tax, prc, btk, bbb, rgn, cur, bwf, bts, bs, prm, rpt, clr, gds
qt -> gtkjpa, gtk, msr, tax, btk, bbb, rgn, cur, bwf, rss, bts, bs, prm, rpt, clr, gds
eqp -> gtkjpa, gtk, msr, bpm, btk, cur, bwf, bts, bs, tax, bld, prm, rpt, wf, rgn, clr, gds
chm -> gtkjpa, gtk, msr, tax, qt, btk, bbb, rgn, cur, bwf, rss, bts, bs, prm, rpt, clr, gds
cnt -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
mdm -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, rgn, cur, bwf, bts, bs, prc, bpm, prm, rpt, clr, gds
prt -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
ccs -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
rzd -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
cpx -> est, gtkjpa, gtk, msr, eqp, bpm, btk, cur, bwf, bts, bs, tax, bld, prm, rpt, wf, rgn, clr, gds
crm -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
bdg -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
ins -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
stk -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
prs -> gtkjpa, gtk, msr, tax, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
stm -> gtkjpa, gtk, msr, tax, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
wms -> gtkjpa, gtk, msr, tax, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
dct -> gtkjpa, gtk, msr, eqp, bpm, btk, cur, bwf, bhr, rss, bts, bs, tax, bld, prm, rpt, wf, rgn, clr, gds
pro -> gtkjpa, gtk, msr, tax, btk, bbb, cur, cnt, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
act -> gtkjpa, gtk, tax, btk, bbb, cur, cnt, bwf, bts, bs, co, msr, prc, bpm, prm, rpt, wf, rgn, clr, gds
edi -> gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
tpl -> gtkjpa, gtk, msr, tax, wms, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
oil -> gtkjpa, gtk, rzd, msr, tax, btk, bbb, cur, cnt, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
proit -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
ppp -> gtkjpa, gtk, msr, eqp, btk, bbb, cur, cnt, bwf, bts, bs, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds
tsk -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
wmsstk -> gtkjpa, gtk, msr, tax, wms, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
mct -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, csc, gds
procnt -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
ppm -> gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
oco -> gtkjpa, gtk, msr, tax, stm, rpl, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
pm -> gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
rcr -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, bhr, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
proccs -> gtkjpa, gtk, ccs, msr, tax, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
demo -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
asf -> gtkjpa, gtk, tax, btk, bbb, cur, stk, bwf, bts, bs, co, msr, prc, bpm, prm, rpt, wf, rgn, cnt, act, clr, gds
tms -> gtkjpa, gtk, rzd, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
supint -> gtkjpa, gtk, msr, tax, proit, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, wf, rgn, cnt, pro, clr, gds
wmsstm -> gtkjpa, gtk, msr, tax, stm, wms, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
mrt -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
ymsstm -> gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, yms, stk, clr, gds
wmsyms -> gtkjpa, gtk, msr, tax, wms, btk, bbb, cur, cnt, bwf, bts, bs, prc, bpm, prm, rpt, wf, rgn, yms, stk, clr, gds
probdg -> gtkjpa, gtk, msr, tax, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, bdg, prm, rpt, wf, rgn, cnt, pro, clr, gds
crmstm -> gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bts, bs, prc, bpm, crm, prm, rpt, wf, rgn, clr, gds
stmprs -> gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, wf, rgn, clr, gds
fin -> pm, gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
sale -> pm, gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
div -> pm, gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prc, bpm, prm, rpt, wf, rgn, clr, gds
mctqj -> gtkjpa, gtk, msr, tax, qj, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
ppmprs -> gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, wf, rgn, ppm, bwf, clr, gds
pdoc -> gtk, msr, tax, stm, btk, bbb, cur, stmprs, stk, cnt, bwf, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, wf, rgn, clr, gds
mes -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
ddp -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, cnt, pro, clr, csc, gds
aps -> gtkjpa, gtk, msr, eqp, mpr, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds
promct -> gtkjpa, gtk, msr, tax, rpl, btk, bbb, cur, bwf, rss, bts, bs, prc, bpm, prm, rpt, mct, wf, rgn, cnt, pro, clr, csc, gds
pmbdg -> pm, gtkjpa, gtk, msr, tax, stm, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prc, bpm, bdg, prm, rpt, wf, rgn, clr, gds
stmasf -> gtkjpa, tax, stm, btk, bbb, cur, stk, bwf, bts, bs, gtk, asf, co, msr, prc, bpm, prm, rpt, wf, rgn, cnt, act, clr, gds
mctprs -> gtk, msr, tax, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
mnc -> gtk, tax, mpr, qt, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, co, msr, prc, bpm, prm, rpt, wf, rgn, clr, gds
asfeqp -> gtkjpa, eqp, btk, bbb, cur, stk, bwf, bts, bs, gtk, asf, co, msr, tax, bld, prc, bpm, prm, rpt, wf, rgn, cnt, act, clr, gds
eam -> gtk, msr, eqp, mpr, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds
srm -> gtk, msr, tax, sur, stm, pdoc, btk, bbb, cur, stmprs, stk, cnt, bwf, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, wf, rgn, clr, gds
qms -> gtkjpa, gtk, msr, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
wmsmes -> gtkjpa, gtk, msr, wms, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
promes -> gtkjpa, gtk, msr, rpl, btk, bbb, cur, stk, bwf, rss, bts, bs, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, cnt, pro, clr, csc, gds
mncco -> gtk, tax, mpr, qt, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, co, msr, prc, bpm, mnc, prm, rpt, wf, rgn, clr, gds
tls -> gtk, msr, eqp, eam, mpr, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds
mesprs -> gtk, msr, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
fmea -> gtk, msr, eam, mpr, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, tax, bld, eqp, sur, prc, bpm, prm, rpt, wf, rgn, clr, gds
mmr -> gtk, msr, rpl, btk, mesprs, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
e1c -> pm, gtk, msr, tax, stm, rpl, pdoc, btk, bbb, cur, stmprs, stk, cnt, bwf, bhr, bts, bs, prs, gtkjpa, prc, bpm, prm, rpt, wf, rgn, clr, gds
mnf -> gtkjpa, gtk, msr, eqp, mpr, aps, dct, btk, bbb, cur, stk, cnt, bwf, bhr, rss, bts, bs, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds
dlv -> gtk, msr, stm, rpl, btk, mesprs, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
acteam -> gtk, eqp, eam, mpr, btk, bbb, cur, stk, bwf, rss, bts, bs, prs, gtkjpa, co, msr, tax, bld, prc, bpm, prm, rpt, wf, rgn, cnt, act, clr, gds
kpimnf -> gtkjpa, gtk, msr, eqp, mpr, aps, dct, kpi, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds, mnf, rss
mnfprs -> gtk, msr, eqp, mpr, aps, dct, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prs, gtkjpa, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds, mnf, rss
eammct -> gtk, msr, eqp, eam, mpr, rpl, btk, bbb, cur, stk, cnt, bwf, rss, bts, bs, prs, gtkjpa, tax, bld, prc, bpm, prm, rpt, mct, wf, rgn, clr, csc, gds
mnfeam -> gtk, msr, eqp, eam, mpr, aps, dct, btk, bbb, cur, stk, cnt, bwf, bhr, bts, bs, prs, gtkjpa, tax, bld, prc, bpm, prm, rpt, wf, rgn, clr, gds, mnf, rss
syp -> mctprs, gtk, msr, stm, rpl, pdoc, btk, bbb, cur, stmprs, stk, bwf, rss, bts, bs, prs, gtkjpa, mes, tax, prc, bpm, prm, rpt, mct, wf, rgn, cnt, pro, clr, csc, gds