mono_md5_init (struct MonoMD5Context * ctx)
{
  union _endian * _endian.0;
  char D.7299;

  ctx->buf[0] = 1732584193;
  ctx->buf[1] = 4023233417;
  ctx->buf[2] = 2562383102;
  ctx->buf[3] = 271733878;
  ctx->bits[0] = 0;
  ctx->bits[1] = 0;
  _endian.0 = _endian;
  D.7299 = _endian.0->b[0];
  if (D.7299 == 68) goto <D.7300>; else goto <D.7301>;
  <D.7300>:
  ctx->doByteReverse = 1;
  goto <D.7302>;
  <D.7301>:
  ctx->doByteReverse = 0;
  <D.7302>:
}


mono_md5_update (struct MonoMD5Context * ctx, const guchar * buf, guint32 len)
{
  unsigned int D.7303;
  unsigned int D.7304;
  unsigned int D.7305;
  unsigned int D.7308;
  unsigned int D.7309;
  unsigned int D.7310;
  unsigned int D.7311;
  unsigned int D.7312;
  int D.7317;
  guchar[64] * D.7320;
  guint32[4] * D.7321;
  guint32 t;

  t = ctx->bits[0];
  D.7303 = len << 3;
  D.7304 = D.7303 + t;
  ctx->bits[0] = D.7304;
  D.7305 = ctx->bits[0];
  if (D.7305 < t) goto <D.7306>; else goto <D.7307>;
  <D.7306>:
  D.7308 = ctx->bits[1];
  D.7309 = D.7308 + 1;
  ctx->bits[1] = D.7309;
  <D.7307>:
  D.7308 = ctx->bits[1];
  D.7310 = len >> 29;
  D.7311 = D.7308 + D.7310;
  ctx->bits[1] = D.7311;
  D.7312 = t >> 3;
  t = D.7312 & 63;
  if (t != 0) goto <D.7313>; else goto <D.7314>;
  <D.7313>:
  {
    guchar * p;

    p = &ctx->in[t];
    t = 64 - t;
    if (len < t) goto <D.7315>; else goto <D.7316>;
    <D.7315>:
    memcpy (p, buf, len);
    return;
    <D.7316>:
    memcpy (p, buf, t);
    D.7317 = ctx->doByteReverse;
    if (D.7317 != 0) goto <D.7318>; else goto <D.7319>;
    <D.7318>:
    D.7320 = &ctx->in;
    _byte_reverse (D.7320, 16);
    <D.7319>:
    D.7321 = &ctx->buf;
    D.7320 = &ctx->in;
    md5_transform (D.7321, D.7320);
    buf = buf + t;
    len = len - t;
  }
  <D.7314>:
  goto <D.7262>;
  <D.7261>:
  D.7320 = &ctx->in;
  memcpy (D.7320, buf, 64);
  D.7317 = ctx->doByteReverse;
  if (D.7317 != 0) goto <D.7322>; else goto <D.7323>;
  <D.7322>:
  D.7320 = &ctx->in;
  _byte_reverse (D.7320, 16);
  <D.7323>:
  D.7321 = &ctx->buf;
  D.7320 = &ctx->in;
  md5_transform (D.7321, D.7320);
  buf = buf + 64;
  len = len + 4294967232;
  <D.7262>:
  if (len > 63) goto <D.7261>; else goto <D.7263>;
  <D.7263>:
  D.7320 = &ctx->in;
  memcpy (D.7320, buf, len);
}


_byte_reverse (guchar * buf, guint32 longs)
{
  guchar * D.7325;
  unsigned char D.7326;
  unsigned int D.7327;
  unsigned int D.7328;
  guchar * D.7329;
  unsigned char D.7330;
  unsigned int D.7331;
  unsigned int D.7332;
  unsigned int D.7333;
  guchar * D.7334;
  unsigned char D.7335;
  unsigned int D.7336;
  unsigned int D.7337;
  unsigned char D.7338;
  unsigned int D.7339;
  unsigned int D.7340;
  guint32 t;

  <D.7249>:
  D.7325 = buf + 3;
  D.7326 = *D.7325;
  D.7327 = (unsigned int) D.7326;
  D.7328 = D.7327 << 8;
  D.7329 = buf + 2;
  D.7330 = *D.7329;
  D.7331 = (unsigned int) D.7330;
  D.7332 = D.7328 | D.7331;
  D.7333 = D.7332 << 16;
  D.7334 = buf + 1;
  D.7335 = *D.7334;
  D.7336 = (unsigned int) D.7335;
  D.7337 = D.7336 << 8;
  D.7338 = *buf;
  D.7339 = (unsigned int) D.7338;
  D.7340 = D.7337 | D.7339;
  t = D.7333 | D.7340;
  MEM[(guint32 *)buf] = t;
  buf = buf + 4;
  longs = longs + 4294967295;
  if (longs != 0) goto <D.7249>; else goto <D.7250>;
  <D.7250>:
}


md5_transform (guint32 * buf, const guint32 * in)
{
  unsigned int D.7341;
  unsigned int D.7342;
  unsigned int D.7343;
  unsigned int D.7344;
  unsigned int D.7345;
  unsigned int D.7346;
  unsigned int D.7347;
  unsigned int D.7348;
  unsigned int D.7349;
  const guint32 * D.7350;
  unsigned int D.7351;
  unsigned int D.7352;
  unsigned int D.7353;
  unsigned int D.7354;
  unsigned int D.7355;
  unsigned int D.7356;
  const guint32 * D.7357;
  unsigned int D.7358;
  unsigned int D.7359;
  unsigned int D.7360;
  unsigned int D.7361;
  unsigned int D.7362;
  unsigned int D.7363;
  const guint32 * D.7364;
  unsigned int D.7365;
  unsigned int D.7366;
  unsigned int D.7367;
  const guint32 * D.7368;
  unsigned int D.7369;
  unsigned int D.7370;
  unsigned int D.7371;
  const guint32 * D.7372;
  unsigned int D.7373;
  unsigned int D.7374;
  unsigned int D.7375;
  const guint32 * D.7376;
  unsigned int D.7377;
  unsigned int D.7378;
  unsigned int D.7379;
  const guint32 * D.7380;
  unsigned int D.7381;
  unsigned int D.7382;
  unsigned int D.7383;
  const guint32 * D.7384;
  unsigned int D.7385;
  unsigned int D.7386;
  unsigned int D.7387;
  const guint32 * D.7388;
  unsigned int D.7389;
  unsigned int D.7390;
  unsigned int D.7391;
  const guint32 * D.7392;
  unsigned int D.7393;
  unsigned int D.7394;
  unsigned int D.7395;
  const guint32 * D.7396;
  unsigned int D.7397;
  unsigned int D.7398;
  unsigned int D.7399;
  const guint32 * D.7400;
  unsigned int D.7401;
  unsigned int D.7402;
  unsigned int D.7403;
  const guint32 * D.7404;
  unsigned int D.7405;
  unsigned int D.7406;
  unsigned int D.7407;
  const guint32 * D.7408;
  unsigned int D.7409;
  unsigned int D.7410;
  unsigned int D.7411;
  const guint32 * D.7412;
  unsigned int D.7413;
  unsigned int D.7414;
  unsigned int D.7415;
  unsigned int D.7416;
  unsigned int D.7417;
  unsigned int D.7418;
  unsigned int D.7419;
  unsigned int D.7420;
  unsigned int D.7421;
  unsigned int D.7422;
  unsigned int D.7423;
  unsigned int D.7424;
  unsigned int D.7425;
  unsigned int D.7426;
  unsigned int D.7427;
  unsigned int D.7428;
  unsigned int D.7429;
  unsigned int D.7430;
  unsigned int D.7431;
  unsigned int D.7432;
  unsigned int D.7433;
  unsigned int D.7434;
  unsigned int D.7435;
  unsigned int D.7436;
  unsigned int D.7437;
  unsigned int D.7438;
  unsigned int D.7439;
  unsigned int D.7440;
  unsigned int D.7441;
  unsigned int D.7442;
  unsigned int D.7443;
  unsigned int D.7444;
  unsigned int D.7445;
  unsigned int D.7446;
  unsigned int D.7447;
  unsigned int D.7448;
  unsigned int D.7449;
  unsigned int D.7450;
  unsigned int D.7451;
  unsigned int D.7452;
  unsigned int D.7453;
  unsigned int D.7454;
  unsigned int D.7455;
  unsigned int D.7456;
  unsigned int D.7457;
  unsigned int D.7458;
  unsigned int D.7459;
  unsigned int D.7460;
  unsigned int D.7461;
  unsigned int D.7462;
  unsigned int D.7463;
  unsigned int D.7464;
  unsigned int D.7465;
  unsigned int D.7466;
  unsigned int D.7467;
  unsigned int D.7468;
  unsigned int D.7469;
  unsigned int D.7470;
  unsigned int D.7471;
  unsigned int D.7472;
  unsigned int D.7473;
  unsigned int D.7474;
  unsigned int D.7475;
  unsigned int D.7476;
  unsigned int D.7477;
  unsigned int D.7478;
  unsigned int D.7479;
  unsigned int D.7480;
  unsigned int D.7481;
  unsigned int D.7482;
  unsigned int D.7483;
  unsigned int D.7484;
  unsigned int D.7485;
  unsigned int D.7486;
  unsigned int D.7487;
  unsigned int D.7488;
  unsigned int D.7489;
  unsigned int D.7490;
  unsigned int D.7491;
  unsigned int D.7492;
  unsigned int D.7493;
  unsigned int D.7494;
  unsigned int D.7495;
  unsigned int D.7496;
  unsigned int D.7497;
  unsigned int D.7498;
  unsigned int D.7499;
  unsigned int D.7500;
  unsigned int D.7501;
  unsigned int D.7502;
  unsigned int D.7503;
  unsigned int D.7504;
  unsigned int D.7505;
  unsigned int D.7506;
  unsigned int D.7507;
  unsigned int D.7508;
  unsigned int D.7509;
  unsigned int D.7510;
  unsigned int D.7511;
  unsigned int D.7512;
  unsigned int D.7513;
  unsigned int D.7514;
  unsigned int D.7515;
  unsigned int D.7516;
  unsigned int D.7517;
  unsigned int D.7518;
  unsigned int D.7519;
  unsigned int D.7520;
  unsigned int D.7521;
  unsigned int D.7522;
  unsigned int D.7523;
  unsigned int D.7524;
  unsigned int D.7525;
  unsigned int D.7526;
  unsigned int D.7527;
  unsigned int D.7528;
  unsigned int D.7529;
  unsigned int D.7530;
  unsigned int D.7531;
  unsigned int D.7532;
  unsigned int D.7533;
  unsigned int D.7534;
  unsigned int D.7535;
  unsigned int D.7536;
  unsigned int D.7537;
  guint32 * D.7538;
  unsigned int D.7539;
  unsigned int D.7540;
  guint32 * D.7541;
  unsigned int D.7542;
  unsigned int D.7543;
  guint32 * D.7544;
  unsigned int D.7545;
  unsigned int D.7546;
  register guint32 a;
  register guint32 b;
  register guint32 c;
  register guint32 d;

  a = *buf;
  b = MEM[(guint32 *)buf + 4B];
  c = MEM[(guint32 *)buf + 8B];
  d = MEM[(guint32 *)buf + 12B];
  D.7341 = c ^ d;
  D.7342 = D.7341 & b;
  D.7343 = D.7342 ^ d;
  D.7344 = *in;
  D.7345 = D.7343 + D.7344;
  D.7346 = D.7345 + a;
  a = D.7346 + 3614090360;
  a = a r>> 25;
  a = a + b;
  D.7347 = b ^ c;
  D.7348 = D.7347 & a;
  D.7349 = D.7348 ^ c;
  D.7350 = in + 4;
  D.7351 = *D.7350;
  D.7352 = D.7349 + D.7351;
  D.7353 = D.7352 + d;
  d = D.7353 + 3905402710;
  d = d r>> 20;
  d = d + a;
  D.7354 = a ^ b;
  D.7355 = D.7354 & d;
  D.7356 = D.7355 ^ b;
  D.7357 = in + 8;
  D.7358 = *D.7357;
  D.7359 = D.7356 + D.7358;
  D.7360 = D.7359 + c;
  c = D.7360 + 606105819;
  c = c r>> 15;
  c = c + d;
  D.7361 = d ^ a;
  D.7362 = D.7361 & c;
  D.7363 = D.7362 ^ a;
  D.7364 = in + 12;
  D.7365 = *D.7364;
  D.7366 = D.7363 + D.7365;
  D.7367 = D.7366 + b;
  b = D.7367 + 3250441966;
  b = b r>> 10;
  b = b + c;
  D.7341 = c ^ d;
  D.7342 = D.7341 & b;
  D.7343 = D.7342 ^ d;
  D.7368 = in + 16;
  D.7369 = *D.7368;
  D.7370 = D.7343 + D.7369;
  D.7371 = D.7370 + a;
  a = D.7371 + 4118548399;
  a = a r>> 25;
  a = a + b;
  D.7347 = b ^ c;
  D.7348 = D.7347 & a;
  D.7349 = D.7348 ^ c;
  D.7372 = in + 20;
  D.7373 = *D.7372;
  D.7374 = D.7349 + D.7373;
  D.7375 = D.7374 + d;
  d = D.7375 + 1200080426;
  d = d r>> 20;
  d = d + a;
  D.7354 = a ^ b;
  D.7355 = D.7354 & d;
  D.7356 = D.7355 ^ b;
  D.7376 = in + 24;
  D.7377 = *D.7376;
  D.7378 = D.7356 + D.7377;
  D.7379 = D.7378 + c;
  c = D.7379 + 2821735955;
  c = c r>> 15;
  c = c + d;
  D.7361 = d ^ a;
  D.7362 = D.7361 & c;
  D.7363 = D.7362 ^ a;
  D.7380 = in + 28;
  D.7381 = *D.7380;
  D.7382 = D.7363 + D.7381;
  D.7383 = D.7382 + b;
  b = D.7383 + 4249261313;
  b = b r>> 10;
  b = b + c;
  D.7341 = c ^ d;
  D.7342 = D.7341 & b;
  D.7343 = D.7342 ^ d;
  D.7384 = in + 32;
  D.7385 = *D.7384;
  D.7386 = D.7343 + D.7385;
  D.7387 = D.7386 + a;
  a = D.7387 + 1770035416;
  a = a r>> 25;
  a = a + b;
  D.7347 = b ^ c;
  D.7348 = D.7347 & a;
  D.7349 = D.7348 ^ c;
  D.7388 = in + 36;
  D.7389 = *D.7388;
  D.7390 = D.7349 + D.7389;
  D.7391 = D.7390 + d;
  d = D.7391 + 2336552879;
  d = d r>> 20;
  d = d + a;
  D.7354 = a ^ b;
  D.7355 = D.7354 & d;
  D.7356 = D.7355 ^ b;
  D.7392 = in + 40;
  D.7393 = *D.7392;
  D.7394 = D.7356 + D.7393;
  D.7395 = D.7394 + c;
  c = D.7395 + 4294925233;
  c = c r>> 15;
  c = c + d;
  D.7361 = d ^ a;
  D.7362 = D.7361 & c;
  D.7363 = D.7362 ^ a;
  D.7396 = in + 44;
  D.7397 = *D.7396;
  D.7398 = D.7363 + D.7397;
  D.7399 = D.7398 + b;
  b = D.7399 + 2304563134;
  b = b r>> 10;
  b = b + c;
  D.7341 = c ^ d;
  D.7342 = D.7341 & b;
  D.7343 = D.7342 ^ d;
  D.7400 = in + 48;
  D.7401 = *D.7400;
  D.7402 = D.7343 + D.7401;
  D.7403 = D.7402 + a;
  a = D.7403 + 1804603682;
  a = a r>> 25;
  a = a + b;
  D.7347 = b ^ c;
  D.7348 = D.7347 & a;
  D.7349 = D.7348 ^ c;
  D.7404 = in + 52;
  D.7405 = *D.7404;
  D.7406 = D.7349 + D.7405;
  D.7407 = D.7406 + d;
  d = D.7407 + 4254626195;
  d = d r>> 20;
  d = d + a;
  D.7354 = a ^ b;
  D.7355 = D.7354 & d;
  D.7356 = D.7355 ^ b;
  D.7408 = in + 56;
  D.7409 = *D.7408;
  D.7410 = D.7356 + D.7409;
  D.7411 = D.7410 + c;
  c = D.7411 + 2792965006;
  c = c r>> 15;
  c = c + d;
  D.7361 = d ^ a;
  D.7362 = D.7361 & c;
  D.7363 = D.7362 ^ a;
  D.7412 = in + 60;
  D.7413 = *D.7412;
  D.7414 = D.7363 + D.7413;
  D.7415 = D.7414 + b;
  b = D.7415 + 1236535329;
  b = b r>> 10;
  b = b + c;
  D.7347 = b ^ c;
  D.7416 = D.7347 & d;
  D.7417 = D.7416 ^ c;
  D.7350 = in + 4;
  D.7351 = *D.7350;
  D.7418 = D.7417 + D.7351;
  D.7419 = D.7418 + a;
  a = D.7419 + 4129170786;
  a = a r>> 27;
  a = a + b;
  D.7354 = a ^ b;
  D.7420 = D.7354 & c;
  D.7421 = D.7420 ^ b;
  D.7376 = in + 24;
  D.7377 = *D.7376;
  D.7422 = D.7421 + D.7377;
  D.7423 = D.7422 + d;
  d = D.7423 + 3225465664;
  d = d r>> 23;
  d = d + a;
  D.7361 = d ^ a;
  D.7424 = D.7361 & b;
  D.7425 = D.7424 ^ a;
  D.7396 = in + 44;
  D.7397 = *D.7396;
  D.7426 = D.7425 + D.7397;
  D.7427 = D.7426 + c;
  c = D.7427 + 643717713;
  c = c r>> 18;
  c = c + d;
  D.7341 = c ^ d;
  D.7428 = D.7341 & a;
  D.7429 = D.7428 ^ d;
  D.7344 = *in;
  D.7430 = D.7429 + D.7344;
  D.7431 = D.7430 + b;
  b = D.7431 + 3921069994;
  b = b r>> 12;
  b = b + c;
  D.7347 = b ^ c;
  D.7416 = D.7347 & d;
  D.7417 = D.7416 ^ c;
  D.7372 = in + 20;
  D.7373 = *D.7372;
  D.7432 = D.7417 + D.7373;
  D.7433 = D.7432 + a;
  a = D.7433 + 3593408605;
  a = a r>> 27;
  a = a + b;
  D.7354 = a ^ b;
  D.7420 = D.7354 & c;
  D.7421 = D.7420 ^ b;
  D.7392 = in + 40;
  D.7393 = *D.7392;
  D.7434 = D.7421 + D.7393;
  D.7435 = D.7434 + d;
  d = D.7435 + 38016083;
  d = d r>> 23;
  d = d + a;
  D.7361 = d ^ a;
  D.7424 = D.7361 & b;
  D.7425 = D.7424 ^ a;
  D.7412 = in + 60;
  D.7413 = *D.7412;
  D.7436 = D.7425 + D.7413;
  D.7437 = D.7436 + c;
  c = D.7437 + 3634488961;
  c = c r>> 18;
  c = c + d;
  D.7341 = c ^ d;
  D.7428 = D.7341 & a;
  D.7429 = D.7428 ^ d;
  D.7368 = in + 16;
  D.7369 = *D.7368;
  D.7438 = D.7429 + D.7369;
  D.7439 = D.7438 + b;
  b = D.7439 + 3889429448;
  b = b r>> 12;
  b = b + c;
  D.7347 = b ^ c;
  D.7416 = D.7347 & d;
  D.7417 = D.7416 ^ c;
  D.7388 = in + 36;
  D.7389 = *D.7388;
  D.7440 = D.7417 + D.7389;
  D.7441 = D.7440 + a;
  a = D.7441 + 568446438;
  a = a r>> 27;
  a = a + b;
  D.7354 = a ^ b;
  D.7420 = D.7354 & c;
  D.7421 = D.7420 ^ b;
  D.7408 = in + 56;
  D.7409 = *D.7408;
  D.7442 = D.7421 + D.7409;
  D.7443 = D.7442 + d;
  d = D.7443 + 3275163606;
  d = d r>> 23;
  d = d + a;
  D.7361 = d ^ a;
  D.7424 = D.7361 & b;
  D.7425 = D.7424 ^ a;
  D.7364 = in + 12;
  D.7365 = *D.7364;
  D.7444 = D.7425 + D.7365;
  D.7445 = D.7444 + c;
  c = D.7445 + 4107603335;
  c = c r>> 18;
  c = c + d;
  D.7341 = c ^ d;
  D.7428 = D.7341 & a;
  D.7429 = D.7428 ^ d;
  D.7384 = in + 32;
  D.7385 = *D.7384;
  D.7446 = D.7429 + D.7385;
  D.7447 = D.7446 + b;
  b = D.7447 + 1163531501;
  b = b r>> 12;
  b = b + c;
  D.7347 = b ^ c;
  D.7416 = D.7347 & d;
  D.7417 = D.7416 ^ c;
  D.7404 = in + 52;
  D.7405 = *D.7404;
  D.7448 = D.7417 + D.7405;
  D.7449 = D.7448 + a;
  a = D.7449 + 2850285829;
  a = a r>> 27;
  a = a + b;
  D.7354 = a ^ b;
  D.7420 = D.7354 & c;
  D.7421 = D.7420 ^ b;
  D.7357 = in + 8;
  D.7358 = *D.7357;
  D.7450 = D.7421 + D.7358;
  D.7451 = D.7450 + d;
  d = D.7451 + 4243563512;
  d = d r>> 23;
  d = d + a;
  D.7361 = d ^ a;
  D.7424 = D.7361 & b;
  D.7425 = D.7424 ^ a;
  D.7380 = in + 28;
  D.7381 = *D.7380;
  D.7452 = D.7425 + D.7381;
  D.7453 = D.7452 + c;
  c = D.7453 + 1735328473;
  c = c r>> 18;
  c = c + d;
  D.7341 = c ^ d;
  D.7428 = D.7341 & a;
  D.7429 = D.7428 ^ d;
  D.7400 = in + 48;
  D.7401 = *D.7400;
  D.7454 = D.7429 + D.7401;
  D.7455 = D.7454 + b;
  b = D.7455 + 2368359562;
  b = b r>> 12;
  b = b + c;
  D.7347 = b ^ c;
  D.7456 = D.7347 ^ d;
  D.7372 = in + 20;
  D.7373 = *D.7372;
  D.7457 = D.7456 + D.7373;
  D.7458 = D.7457 + a;
  a = D.7458 + 4294588738;
  a = a r>> 28;
  a = a + b;
  D.7354 = a ^ b;
  D.7459 = D.7354 ^ c;
  D.7384 = in + 32;
  D.7385 = *D.7384;
  D.7460 = D.7459 + D.7385;
  D.7461 = D.7460 + d;
  d = D.7461 + 2272392833;
  d = d r>> 21;
  d = d + a;
  D.7361 = d ^ a;
  D.7462 = D.7361 ^ b;
  D.7396 = in + 44;
  D.7397 = *D.7396;
  D.7463 = D.7462 + D.7397;
  D.7464 = D.7463 + c;
  c = D.7464 + 1839030562;
  c = c r>> 16;
  c = c + d;
  D.7341 = c ^ d;
  D.7465 = D.7341 ^ a;
  D.7408 = in + 56;
  D.7409 = *D.7408;
  D.7466 = D.7465 + D.7409;
  D.7467 = D.7466 + b;
  b = D.7467 + 4259657740;
  b = b r>> 9;
  b = b + c;
  D.7347 = b ^ c;
  D.7456 = D.7347 ^ d;
  D.7350 = in + 4;
  D.7351 = *D.7350;
  D.7468 = D.7456 + D.7351;
  D.7469 = D.7468 + a;
  a = D.7469 + 2763975236;
  a = a r>> 28;
  a = a + b;
  D.7354 = a ^ b;
  D.7459 = D.7354 ^ c;
  D.7368 = in + 16;
  D.7369 = *D.7368;
  D.7470 = D.7459 + D.7369;
  D.7471 = D.7470 + d;
  d = D.7471 + 1272893353;
  d = d r>> 21;
  d = d + a;
  D.7361 = d ^ a;
  D.7462 = D.7361 ^ b;
  D.7380 = in + 28;
  D.7381 = *D.7380;
  D.7472 = D.7462 + D.7381;
  D.7473 = D.7472 + c;
  c = D.7473 + 4139469664;
  c = c r>> 16;
  c = c + d;
  D.7341 = c ^ d;
  D.7465 = D.7341 ^ a;
  D.7392 = in + 40;
  D.7393 = *D.7392;
  D.7474 = D.7465 + D.7393;
  D.7475 = D.7474 + b;
  b = D.7475 + 3200236656;
  b = b r>> 9;
  b = b + c;
  D.7347 = b ^ c;
  D.7456 = D.7347 ^ d;
  D.7404 = in + 52;
  D.7405 = *D.7404;
  D.7476 = D.7456 + D.7405;
  D.7477 = D.7476 + a;
  a = D.7477 + 681279174;
  a = a r>> 28;
  a = a + b;
  D.7354 = a ^ b;
  D.7459 = D.7354 ^ c;
  D.7344 = *in;
  D.7478 = D.7459 + D.7344;
  D.7479 = D.7478 + d;
  d = D.7479 + 3936430074;
  d = d r>> 21;
  d = d + a;
  D.7361 = d ^ a;
  D.7462 = D.7361 ^ b;
  D.7364 = in + 12;
  D.7365 = *D.7364;
  D.7480 = D.7462 + D.7365;
  D.7481 = D.7480 + c;
  c = D.7481 + 3572445317;
  c = c r>> 16;
  c = c + d;
  D.7341 = c ^ d;
  D.7465 = D.7341 ^ a;
  D.7376 = in + 24;
  D.7377 = *D.7376;
  D.7482 = D.7465 + D.7377;
  D.7483 = D.7482 + b;
  b = D.7483 + 76029189;
  b = b r>> 9;
  b = b + c;
  D.7347 = b ^ c;
  D.7456 = D.7347 ^ d;
  D.7388 = in + 36;
  D.7389 = *D.7388;
  D.7484 = D.7456 + D.7389;
  D.7485 = D.7484 + a;
  a = D.7485 + 3654602809;
  a = a r>> 28;
  a = a + b;
  D.7354 = a ^ b;
  D.7459 = D.7354 ^ c;
  D.7400 = in + 48;
  D.7401 = *D.7400;
  D.7486 = D.7459 + D.7401;
  D.7487 = D.7486 + d;
  d = D.7487 + 3873151461;
  d = d r>> 21;
  d = d + a;
  D.7361 = d ^ a;
  D.7462 = D.7361 ^ b;
  D.7412 = in + 60;
  D.7413 = *D.7412;
  D.7488 = D.7462 + D.7413;
  D.7489 = D.7488 + c;
  c = D.7489 + 530742520;
  c = c r>> 16;
  c = c + d;
  D.7341 = c ^ d;
  D.7465 = D.7341 ^ a;
  D.7357 = in + 8;
  D.7358 = *D.7357;
  D.7490 = D.7465 + D.7358;
  D.7491 = D.7490 + b;
  b = D.7491 + 3299628645;
  b = b r>> 9;
  b = b + c;
  D.7492 = ~d;
  D.7493 = D.7492 | b;
  D.7494 = D.7493 ^ c;
  D.7344 = *in;
  D.7495 = D.7494 + D.7344;
  D.7496 = D.7495 + a;
  a = D.7496 + 4096336452;
  a = a r>> 26;
  a = a + b;
  D.7497 = ~c;
  D.7498 = D.7497 | a;
  D.7499 = D.7498 ^ b;
  D.7380 = in + 28;
  D.7381 = *D.7380;
  D.7500 = D.7499 + D.7381;
  D.7501 = D.7500 + d;
  d = D.7501 + 1126891415;
  d = d r>> 22;
  d = d + a;
  D.7502 = ~b;
  D.7503 = D.7502 | d;
  D.7504 = D.7503 ^ a;
  D.7408 = in + 56;
  D.7409 = *D.7408;
  D.7505 = D.7504 + D.7409;
  D.7506 = D.7505 + c;
  c = D.7506 + 2878612391;
  c = c r>> 17;
  c = c + d;
  D.7507 = ~a;
  D.7508 = D.7507 | c;
  D.7509 = D.7508 ^ d;
  D.7372 = in + 20;
  D.7373 = *D.7372;
  D.7510 = D.7509 + D.7373;
  D.7511 = D.7510 + b;
  b = D.7511 + 4237533241;
  b = b r>> 11;
  b = b + c;
  D.7492 = ~d;
  D.7493 = D.7492 | b;
  D.7494 = D.7493 ^ c;
  D.7400 = in + 48;
  D.7401 = *D.7400;
  D.7512 = D.7494 + D.7401;
  D.7513 = D.7512 + a;
  a = D.7513 + 1700485571;
  a = a r>> 26;
  a = a + b;
  D.7497 = ~c;
  D.7498 = D.7497 | a;
  D.7499 = D.7498 ^ b;
  D.7364 = in + 12;
  D.7365 = *D.7364;
  D.7514 = D.7499 + D.7365;
  D.7515 = D.7514 + d;
  d = D.7515 + 2399980690;
  d = d r>> 22;
  d = d + a;
  D.7502 = ~b;
  D.7503 = D.7502 | d;
  D.7504 = D.7503 ^ a;
  D.7392 = in + 40;
  D.7393 = *D.7392;
  D.7516 = D.7504 + D.7393;
  D.7517 = D.7516 + c;
  c = D.7517 + 4293915773;
  c = c r>> 17;
  c = c + d;
  D.7507 = ~a;
  D.7508 = D.7507 | c;
  D.7509 = D.7508 ^ d;
  D.7350 = in + 4;
  D.7351 = *D.7350;
  D.7518 = D.7509 + D.7351;
  D.7519 = D.7518 + b;
  b = D.7519 + 2240044497;
  b = b r>> 11;
  b = b + c;
  D.7492 = ~d;
  D.7493 = D.7492 | b;
  D.7494 = D.7493 ^ c;
  D.7384 = in + 32;
  D.7385 = *D.7384;
  D.7520 = D.7494 + D.7385;
  D.7521 = D.7520 + a;
  a = D.7521 + 1873313359;
  a = a r>> 26;
  a = a + b;
  D.7497 = ~c;
  D.7498 = D.7497 | a;
  D.7499 = D.7498 ^ b;
  D.7412 = in + 60;
  D.7413 = *D.7412;
  D.7522 = D.7499 + D.7413;
  D.7523 = D.7522 + d;
  d = D.7523 + 4264355552;
  d = d r>> 22;
  d = d + a;
  D.7502 = ~b;
  D.7503 = D.7502 | d;
  D.7504 = D.7503 ^ a;
  D.7376 = in + 24;
  D.7377 = *D.7376;
  D.7524 = D.7504 + D.7377;
  D.7525 = D.7524 + c;
  c = D.7525 + 2734768916;
  c = c r>> 17;
  c = c + d;
  D.7507 = ~a;
  D.7508 = D.7507 | c;
  D.7509 = D.7508 ^ d;
  D.7404 = in + 52;
  D.7405 = *D.7404;
  D.7526 = D.7509 + D.7405;
  D.7527 = D.7526 + b;
  b = D.7527 + 1309151649;
  b = b r>> 11;
  b = b + c;
  D.7492 = ~d;
  D.7493 = D.7492 | b;
  D.7494 = D.7493 ^ c;
  D.7368 = in + 16;
  D.7369 = *D.7368;
  D.7528 = D.7494 + D.7369;
  D.7529 = D.7528 + a;
  a = D.7529 + 4149444226;
  a = a r>> 26;
  a = a + b;
  D.7497 = ~c;
  D.7498 = D.7497 | a;
  D.7499 = D.7498 ^ b;
  D.7396 = in + 44;
  D.7397 = *D.7396;
  D.7530 = D.7499 + D.7397;
  D.7531 = D.7530 + d;
  d = D.7531 + 3174756917;
  d = d r>> 22;
  d = d + a;
  D.7502 = ~b;
  D.7503 = D.7502 | d;
  D.7504 = D.7503 ^ a;
  D.7357 = in + 8;
  D.7358 = *D.7357;
  D.7532 = D.7504 + D.7358;
  D.7533 = D.7532 + c;
  c = D.7533 + 718787259;
  c = c r>> 17;
  c = c + d;
  D.7507 = ~a;
  D.7508 = D.7507 | c;
  D.7509 = D.7508 ^ d;
  D.7388 = in + 36;
  D.7389 = *D.7388;
  D.7534 = D.7509 + D.7389;
  D.7535 = D.7534 + b;
  b = D.7535 + 3951481745;
  b = b r>> 11;
  b = b + c;
  D.7536 = *buf;
  D.7537 = D.7536 + a;
  *buf = D.7537;
  D.7538 = buf + 4;
  D.7538 = buf + 4;
  D.7539 = *D.7538;
  D.7540 = D.7539 + b;
  *D.7538 = D.7540;
  D.7541 = buf + 8;
  D.7541 = buf + 8;
  D.7542 = *D.7541;
  D.7543 = D.7542 + c;
  *D.7541 = D.7543;
  D.7544 = buf + 12;
  D.7544 = buf + 12;
  D.7545 = *D.7544;
  D.7546 = D.7545 + d;
  *D.7544 = D.7546;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.7547;
  unsigned int D.7548;

  D.7548 = __builtin_object_size (__dest, 0);
  D.7547 = __builtin___memcpy_chk (__dest, __src, __len, D.7548);
  return D.7547;
}


mono_md5_final (struct MonoMD5Context * ctx, guchar * digest)
{
  unsigned int D.7550;
  unsigned int D.7551;
  guchar * p.1;
  int D.7555;
  guchar[64] * D.7558;
  guint32[4] * D.7559;
  unsigned int D.7561;
  guchar * D.7564;
  guchar * D.7565;
  unsigned int D.7566;
  guint32 count;
  guchar * p;

  D.7550 = ctx->bits[0];
  D.7551 = D.7550 >> 3;
  count = D.7551 & 63;
  p = &ctx->in[count];
  p.1 = p;
  p = p.1 + 1;
  *p.1 = 128;
  count = 63 - count;
  if (count <= 7) goto <D.7553>; else goto <D.7554>;
  <D.7553>:
  memset (p, 0, count);
  D.7555 = ctx->doByteReverse;
  if (D.7555 != 0) goto <D.7556>; else goto <D.7557>;
  <D.7556>:
  D.7558 = &ctx->in;
  _byte_reverse (D.7558, 16);
  <D.7557>:
  D.7559 = &ctx->buf;
  D.7558 = &ctx->in;
  md5_transform (D.7559, D.7558);
  D.7558 = &ctx->in;
  memset (D.7558, 0, 56);
  goto <D.7560>;
  <D.7554>:
  D.7561 = count + 4294967288;
  memset (p, 0, D.7561);
  <D.7560>:
  D.7555 = ctx->doByteReverse;
  if (D.7555 != 0) goto <D.7562>; else goto <D.7563>;
  <D.7562>:
  D.7558 = &ctx->in;
  _byte_reverse (D.7558, 14);
  <D.7563>:
  D.7564 = &ctx->in[56];
  D.7550 = ctx->bits[0];
  MEM[(guint32 *)D.7564] = D.7550;
  D.7565 = &ctx->in[60];
  D.7566 = ctx->bits[1];
  MEM[(guint32 *)D.7565] = D.7566;
  D.7559 = &ctx->buf;
  D.7558 = &ctx->in;
  md5_transform (D.7559, D.7558);
  D.7555 = ctx->doByteReverse;
  if (D.7555 != 0) goto <D.7567>; else goto <D.7568>;
  <D.7567>:
  D.7559 = &ctx->buf;
  _byte_reverse (D.7559, 4);
  <D.7568>:
  D.7559 = &ctx->buf;
  memcpy (digest, D.7559, 16);
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.7571;
  int D.7576;
  void * D.7578;
  unsigned int D.7579;

  D.7571 = __builtin_constant_p (__len);
  if (D.7571 != 0) goto <D.7572>; else goto <D.7573>;
  <D.7572>:
  if (__len == 0) goto <D.7574>; else goto <D.7575>;
  <D.7574>:
  D.7576 = __builtin_constant_p (__ch);
  if (D.7576 == 0) goto <D.7569>; else goto <D.7577>;
  <D.7577>:
  if (__ch != 0) goto <D.7569>; else goto <D.7570>;
  <D.7569>:
  __warn_memset_zero_len ();
  D.7578 = __dest;
  return D.7578;
  <D.7570>:
  <D.7575>:
  <D.7573>:
  D.7579 = __builtin_object_size (__dest, 0);
  D.7578 = __builtin___memset_chk (__dest, __ch, __len, D.7579);
  return D.7578;
}


mono_md5_get_digest (const guchar * buffer, gint buffer_size, guchar * digest)
{
  unsigned int buffer_size.2;
  struct MonoMD5Context ctx;

  try
    {
      mono_md5_init (&ctx);
      buffer_size.2 = (unsigned int) buffer_size;
      mono_md5_update (&ctx, buffer, buffer_size.2);
      mono_md5_final (&ctx, digest);
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


mono_md5_get_digest_from_file (const gchar * filename, guchar * digest)
{
  unsigned int nb_bytes_read.3;
  unsigned int D.7585;
  int D.7586;
  struct MonoMD5Context ctx;
  guchar tmp_buf[1024];
  gint nb_bytes_read;
  struct FILE * fp;

  try
    {
      mono_md5_init (&ctx);
      fp = fopen (filename, "r");
      if (fp == 0B) goto <D.7582>; else goto <D.7583>;
      <D.7582>:
      return;
      <D.7583>:
      goto <D.7293>;
      <D.7292>:
      nb_bytes_read.3 = (unsigned int) nb_bytes_read;
      mono_md5_update (&ctx, &tmp_buf, nb_bytes_read.3);
      <D.7293>:
      D.7585 = fread (&tmp_buf, 1, 1024, fp);
      nb_bytes_read = (gint) D.7585;
      if (nb_bytes_read > 0) goto <D.7292>; else goto <D.7294>;
      <D.7294>:
      D.7586 = ferror (fp);
      if (D.7586 != 0) goto <D.7587>; else goto <D.7588>;
      <D.7587>:
      fclose (fp);
      return;
      <D.7588>:
      fclose (fp);
      mono_md5_final (&ctx, digest);
    }
  finally
    {
      ctx = {CLOBBER};
      tmp_buf = {CLOBBER};
    }
}


fread (void * restrict __ptr, size_t __size, size_t __n, struct FILE * restrict __stream)
{
  unsigned int D.7592;
  int D.7597;
  int D.7599;
  unsigned int D.7601;
  size_t D.7602;
  unsigned int D.7603;
  unsigned int D.7604;
  unsigned int D.7605;
  unsigned int D.7608;

  D.7592 = __builtin_object_size (__ptr, 0);
  if (D.7592 != 4294967295) goto <D.7593>; else goto <D.7594>;
  <D.7593>:
  D.7597 = __builtin_constant_p (__size);
  if (D.7597 == 0) goto <D.7595>; else goto <D.7598>;
  <D.7598>:
  D.7599 = __builtin_constant_p (__n);
  if (D.7599 == 0) goto <D.7595>; else goto <D.7600>;
  <D.7600>:
  D.7601 = __size | __n;
  if (D.7601 > 65535) goto <D.7595>; else goto <D.7596>;
  <D.7595>:
  D.7603 = __builtin_object_size (__ptr, 0);
  D.7602 = __fread_chk (__ptr, D.7603, __size, __n, __stream);
  return D.7602;
  <D.7596>:
  D.7604 = __size * __n;
  D.7605 = __builtin_object_size (__ptr, 0);
  if (D.7604 > D.7605) goto <D.7606>; else goto <D.7607>;
  <D.7606>:
  D.7608 = __builtin_object_size (__ptr, 0);
  D.7602 = __fread_chk_warn (__ptr, D.7608, __size, __n, __stream);
  return D.7602;
  <D.7607>:
  <D.7594>:
  D.7602 = __fread_alias (__ptr, __size, __n, __stream);
  return D.7602;
}


