DG
mload(add(array, index)), то есть загружаем слот по адресу, который есть сумма array + index, где array = msg.data,
index = msg.data.length
Size: a a a
DG
mload(add(array, index)), то есть загружаем слот по адресу, который есть сумма array + index, где DG
MD

DG
abi.encodePacked(functionSignature, userAddress) по второй ссылке, создает такой массив в msg.data, длинна которого = длинна только functionSignature. Но о таком извращении даже думать не хочетсяDG
_data прибавляют 1 слот (20 байт), что бы обойти длинну массива (длинна хранится в первом слоте)MD
DG
i на 20 (длинна слота в байнах)DG
MD

MM
DG
MD
DG
MM
DG
DG
N
N
DG