Подготовка и включение кросс-компиляции модуля для Scala 3#

Кросс-компиляция в режиме -Xsource:3 (обозначаемом как x3-source) позволяет постепенно адаптировать кодовую базу, написанную на Scala 2, к синтаксическим и семантическим требованиям Scala 3 — без немедленного полного перехода на новый компилятор.

Этот режим:

  • выявляет несовместимости, которые будут критичны при будущем переходе на Scala 3;

  • позволяет исправлять их итеративно, сохраняя работоспособность модуля на Scala 2;

  • подготавливает экосистему модулей к плавной миграции, минимизируя риски при финальном переходе.

Включение x3-source — обязательный этап модернизации кодовой базы, обеспечивающий долгосрочную поддержку, совместимость с новыми версиями библиотек и возможность использования современных возможностей языка в будущем.

Общий порядок актуализации модуля#

  1. Сгенерируйте исходный код по всему модулю.

  2. Включите флаг x3-source на модуле.

  3. Выполните сборку проекта.

МР с примером включения флага x3-source на модуле bs.

При возникновении ошибок во время сборки исправьте их в соответствии с данным разделом.
Некоторые ошибки нельзя исправить сразу из-за требований обратной совместимости. В таких случаях выполняется только подготовка. Если вы столкнулись с такими ошибками:

  1. Внесите полные исправления по всему модулю, даже если они нарушают обратную совместимость — это необходимо, чтобы убедиться, что модуль полностью исправлен.

  2. Если после этого сборка падает с ошибками в дочерних модулях — сделайте изменения обратно совместимыми.

  3. Выключите флаг x3-source.

  4. Выпустите новую версию модуля.

  5. Дождитесь, пока модуль распространится по основным проектам (на это выделяется время для актуализации зависимых модулей).

  6. После этого замените подготовительные конструкции на окончательные исправления.

  7. Включите флаг x3-source и закоммитьте его.

Порядок миграции модулей#

Модули обрабатываются строго от базовых к прикладным (gtkjpagtkbtk → …). Это обязательно, чтобы:

  • сначала обновить основу системы;

  • избежать блокировок из-за неготовых зависимостей;

  • обеспечить обратную совместимость, так как такое направление позволяет не тормозить процесс миграции: пока идёт подготовка прикладных модулей, базовые уже постепенно распространяются по проектам.

Детальная карта модулей.

Процедура:

  • Первый проход: перепишите все 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")
    }
  }
)

Пример в модуле bs.

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

Пример в модуле bs.

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.

Комментарий оставляйте, как в примере выше (можно с указанием даты), чтобы потом было проще искать такие места и убирать обратную совместимость.

Пример в модуле bs.

Карта модулей#

Ниже приведены зависимости модулей в виде карты: <модуль> → отсортированный список от кого он зависит.
Карта отсортирована и поможет определить направление миграции.

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