function fep_transferdom(bytes32 b32_dom, address adr_to, address adr_user) external onlydomowner(b32_dom, adr_user) payable {
// 0. pay
uint256 u_pr = fi_getmapu()[kk("/faz_score/u_pricetransfer")];
fi_payment(u_pr, "transfer_dom", adr_user);
// 1 reg en map dom2adr
fi_getmapa()[fi_kdomowner(b32_dom)] = adr_to;
// 2. en map inverso, adr2doms: unreg para adr_user (ie, pop b32_dom from lis_dom del adr_user)
fi_pop_lisdom(adr_user, b32_dom);
// 3. new entry in the corresp map adr2doms, para adr_to
fi_add_lisdom(adr_to, b32_dom); // adr_user => b32_dom_i
// 4. count-up for statistics
fi_up("transfer_dom");
}//endfun fep_transferdom
// fun: pop dom_i elem from list dom
function fi_pop_lisdom(address adr_user, bytes32 b32_dom) private {
mapping(bytes32 => uint256) storage m_u = fi_getmapu();
// 1. find idx that matches that domain, in adr_user reg
uint256 ndom = m_u[k_user2dom(adr_user)];
uint256 idx;
for (uint256 idom=0; idom<ndom; idom++) { // idom=0 is reserved
bytes32 b32_dom_i = bytes32(m_u[ k_user2dom(adr_user, idom) ]);
if (b32_dom_i == b32_dom) {
idx = idom;
break; // jomp off the "for"
}//endif match
}//endfor idom
// 2. if idx not the last one, then move the last reg to the hole at idx
if (idx != (ndom-1)) {
m_u[ k_user2dom(adr_user, idx) ] = m_u[ k_user2dom(adr_user, ndom-1) ];
}//enduf no último
// 3. down the counter ndom for adr_user (1 extra op)
m_u[ k_user2dom(adr_user)]--; // ndom-- ; when only arg adr_user -> ndom idx
}//endfun fi_pop_lisdom