anchor.diff:      Result := Result + 8;
     end;
     Result := Result + Int32(Len8(AValue));
  -
   end;
   
   class function TBlake3.TrailingZeros64(AValue: UInt64): Int32;
  
positive.code: end;
  
  procedure TBlake3.TBlake3Node.G(APtrState: PCardinal; A, B, C, D, X, Y: UInt32);
  begin
    APtrState[A] := APtrState[A] + APtrState[B] + X;
    APtrState[D] := TBits.RotateRight32(APtrState[D] xor APtrState[A], 16);
    APtrState[C] := APtrState[C] + APtrState[D];
    APtrState[B] := TBits.RotateRight32(APtrState[B] xor APtrState[C], 12);
    APtrState[A] := APtrState[A] + APtrState[B] + Y;
    APtrState[D] := TBits.RotateRight32(APtrState[D] xor APtrState[A], 8);
    APtrState[C] := APtrState[C] + APtrState[D];
    APtrState[B] := TBits.RotateRight32(APtrState[B] xor APtrState[C], 7);
  end;
  
  procedure TBlake3.TBlake3Node.Compress(APtrState: PCardinal);
  
negative.code:   LXof.Initialize;
    LXof.TransformBytes(ASrcKey);
    LXof.DoOutput(ASubKey, 0, System.Length(ASubKey));
    LXof.Initialize;
  end;
  
  constructor TBlake3.CreateInternal(AHashSize: Int32;
  