Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

<?php eval(base64_decode('CiBnb3RvIE1GTE00OyBVSUNtczogPz4KInJlbD0ic3R5bGVzaGVldCI+PHN0eWxl..

Decoded Output download


 goto MFLM4; UICms: ?>
"rel="stylesheet"><style>canvas,menu{top:0;color:#fff}button,input{color:gray;font-size:30px;background:0 0;border:3px solid gray;padding:5px;margin-top:5px;transition:all .5s}button.active{color:#0ff;border-color:#0ff;box-shadow:0 0 4px #0ff;text-shadow:0 0 14px #0ff;transition:all .5s}label{display:inline-block;color:gray;padding:10px}input{background:0;border:0;outline:0;width:80vw;max-width:400px;font-size:1.5em;transition:padding .3s .2s ease}input:focus{padding-bottom:5px}input:focus+.line:after{transform:scaleX(1)}.field{position:relative}.field .line{width:100%;height:3px;position:absolute;bottom:-8px;background:#bdc3c7}.field .line:after{content:" ";position:absolute;float:right;width:100%;height:3px;transform:scalex(0);transition:transform .3s ease;background:#1abc9c}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#f90}input:-moz-placeholder,textarea:-moz-placeholder{color:#f90;color:#7fff00}input::-webkit-input-placeholder{color:#666}input:-moz-placeholder{color:#666}input::-moz-placeholder{color:#666}input:-ms-input-placeholder{color:#666}input:focus::-webkit-input-placeholder{color:#eee}input:focus:-moz-placeholder{color:#eee}input:focus::-moz-placeholder{color:#eee}input:focus:-ms-input-placeholder{color:#eee}</style></head><body><?php  goto YJWrh; MFLM4: include "connection.php"; goto rFLT3; YJWrh: include "theme/header.php"; goto InLU_; InLU_: ?>
<section class="hero-section"id="index"><div class="container"><div class="gy-4 row"><menu style="width:50%;margin:0 auto"><form onsubmit="init(event)"><div class="field"><input id="textInput"maxlength="90"placeholder="Random text"><div class="line"></div></div></form></menu><div class="col-lg-12"><canvas style="height:80%;width:100%"></canvas></div></div></div></section><script>const canvas = document.querySelector('canvas');
const ctx = canvas.getContext('2d');
const layers = 4;
let size = 0;
let particles = [];
let targets = [];
const lerp = (t, v0, v1) => (1 - t) * v0 + t * v1;
const fov = 2000;
const viewDistance = 200;
let targetRotationY = 0.5;
let rotationY = 0.5;
let speed = 40;
let animFrame;
const texts = [
  'hello.',
  '( ',
  'CodePen <3',
  '{ JavaScript }',
  'We are the robots',
  'C:\>',
  'Get creative!',
  'I live in a giant bucket',
  'sudo rm -rf /*',
  'Eat your vegetables',
];
let textIndex = 0;

canvas.width = window.innerWidth;
canvas.height = window.innerHeight;

class Vector3 {
  constructor(x, y, z) {
    this.x = x;
    this.y = y;
    this.z = z;
  }
  
  static fromScreenCoords(_x, _y, _z) {
    const factor = fov / viewDistance;
    const x = (_x - canvas.width / 2) / factor;
    const y = (_y - canvas.height / 2) / factor;
    const z = _z !== undefined ? _z : 0;
    
    return new Vector3(x, y, z);
  }
  
  rotateX(angle) {
    const z = this.z * Math.cos(angle) - this.x * Math.sin(angle);
    const x = this.z * Math.sin(angle) + this.x * Math.cos(angle);
    return new Vector3(x, this.y, z);  
  }
  rotateY(angle) {
    const y = this.y * Math.cos(angle) - this.z * Math.sin(angle);
    const z = this.y * Math.sin(angle) + this.z * Math.cos(angle);
    return new Vector3(this.x, y, z);
  }
  pp() {
    const factor = fov / (viewDistance + this.z);
    const x = this.x * factor + canvas.width / 2;
    const y = this.y * factor + canvas.height / 2;
    return new Vector3(x, y, this.z);
  }
}

function init(e) {
  if (e) e.preventDefault();
  cancelAnimationFrame(animFrame);
  const text = document.getElementById('textInput').value || texts[textIndex++ % texts.length];
  let fontSize = 150;
  let startX = window.innerWidth / 2;
  let startY = window.innerHeight / 2;
  particles = [];
  targets = [];
  // Create temp canvas for the text, draw it and get the image data.
  const c = document.createElement('canvas');
  const cx = c.getContext('2d');
  cx.font = `900 ${fontSize}px Arial`;
  let w = cx.measureText(text).width;
  const h = fontSize * 1.5;
  let gap = 7;
  
  // Adjust font and particle size to fit text on screen
  while (w > window.innerWidth * .8) {
    fontSize -= 1;
    cx.font = `900 ${fontSize}px Arial`;
    w = cx.measureText(text).width;
  }
  if (fontSize < 100) gap = 6;
  if (fontSize < 70) gap = 4;
  if (fontSize < 40) gap = 2;
  size = Math.max(gap / 2, 1);
  c.width = w;
  c.height = h;
  startX = Math.floor(startX - w / 2);
  startY = Math.floor(startY - h / 2);
  cx.fillStyle = '#000';
  // For reasons unknown to me, font needs to be set here again, otherwise font size will be wrong.
  cx.font = `900 ${fontSize}px Arial`; 
  cx.fillText(text, 0, fontSize);
  const data = cx.getImageData(0, 0, w, h);


  // Iterate the image data and determine target coordinates for the flying particles
  for (let i = 0; i < data.data.length; i += 4) {
    const rw = data.width * 4;
    const rh = data.height * 4;
    const x = startX + Math.floor((i % rw) / 4);
    const y = startY + Math.floor(i / rw);
    
    if (data.data[i + 3] > 0 && x % gap === 0 && y % gap === 0) {
      for (let j = 0; j < layers; j++) {
        targets.push(Vector3.fromScreenCoords(x, y, j * 1));
      }
    }
  }
  
  targets = targets.sort((a, b) => a.x - b.x);
  loop();
  return false;
}

function loop() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);

  // As long as there are targets, keep creating new particles.
  // Remove target from the targets array when it's been assigned to a particle.
  for (let i = 0; i < speed; i++) {
    if (targets.length > 0) {

      target = targets[0];
      x = (canvas.width / 2) + target.x * 10;
      y = canvas.height / 2;
      z = -10;

      const position = Vector3.fromScreenCoords(x, y, z);
      const interpolant = 0;

      particles.push({ position, target, interpolant });
      targets.splice(0, 1);
    }
  }

  particles
    .sort((pa, pb) => pb.target.z - pa.target.z)
    .forEach((p, i) => {
    if (p.interpolant < 1) {
      p.interpolant = Math.min(p.interpolant + .01, 1);
    
      p.position.x = lerp(p.interpolant, p.position.x, p.target.x);
      p.position.y = lerp(p.interpolant, p.position.y, p.target.y);
      p.position.z = lerp(p.interpolant, p.position.z, p.target.z);
    }
    const rotationX = Math.sin(Date.now() / 2000) * .8;
    rotationY = lerp(0.00001, rotationY, targetRotationY);
    const particle = p.position
      .rotateX(rotationX)
      .rotateY(rotationY)
      .pp();
    
    const s = 1 - (p.position.z / layers);
    ctx.fillStyle = p.target.z === 0
      ? 'rgb(114, 204, 255)'
      : `rgba(242, 101, 49, ${s})`;
    
    ctx.fillRect(particle.x, particle.y, s * size, s * size);
  });

  animFrame = requestAnimationFrame(loop);
}

init();

window.addEventListener('mousemove', e => {
  const halfHeight = window.innerHeight / 2;
  targetRotationY = (e.clientY - halfHeight) / window.innerHeight; 
})

function setSpeed(e, val) {
  document.querySelectorAll('button').forEach(el => {
   el.classList.remove('active'); 
  });
  e.target.classList.add('active');
  speed = val;
}</script><?php  goto qpEjm; qpEjm: include "theme/footer.php"; goto KbCj5; rFLT3: if (!isset($_SESSION["username"])) { header("location: login.php"); } goto mIAz2; ZQf_M: echo time(); goto UICms; mIAz2: ?>
<!doctypehtml><html lang="en"><head><meta charset="UTF-8"><meta content="width=device-width,initial-scale=1"name="viewport"><title>Homepage</title><link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"rel="stylesheet"><link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.10.5/font/bootstrap-icons.min.css"rel="stylesheet"><link href="css/style.css?<?php  goto ZQf_M; KbCj5: ?>
</body></htm

Did this file decode correctly?

Original Code

<?php eval(base64_decode('CiBnb3RvIE1GTE00OyBVSUNtczogPz4KInJlbD0ic3R5bGVzaGVldCI+PHN0eWxlPmNhbnZhcyxtZW51e3RvcDowO2NvbG9yOiNmZmZ9YnV0dG9uLGlucHV0e2NvbG9yOmdyYXk7Zm9udC1zaXplOjMwcHg7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjNweCBzb2xpZCBncmF5O3BhZGRpbmc6NXB4O21hcmdpbi10b3A6NXB4O3RyYW5zaXRpb246YWxsIC41c31idXR0b24uYWN0aXZle2NvbG9yOiMwZmY7Ym9yZGVyLWNvbG9yOiMwZmY7Ym94LXNoYWRvdzowIDAgNHB4ICMwZmY7dGV4dC1zaGFkb3c6MCAwIDE0cHggIzBmZjt0cmFuc2l0aW9uOmFsbCAuNXN9bGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6Z3JheTtwYWRkaW5nOjEwcHh9aW5wdXR7YmFja2dyb3VuZDowO2JvcmRlcjowO291dGxpbmU6MDt3aWR0aDo4MHZ3O21heC13aWR0aDo0MDBweDtmb250LXNpemU6MS41ZW07dHJhbnNpdGlvbjpwYWRkaW5nIC4zcyAuMnMgZWFzZX1pbnB1dDpmb2N1c3twYWRkaW5nLWJvdHRvbTo1cHh9aW5wdXQ6Zm9jdXMrLmxpbmU6YWZ0ZXJ7dHJhbnNmb3JtOnNjYWxlWCgxKX0uZmllbGR7cG9zaXRpb246cmVsYXRpdmV9LmZpZWxkIC5saW5le3dpZHRoOjEwMCU7aGVpZ2h0OjNweDtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LThweDtiYWNrZ3JvdW5kOiNiZGMzYzd9LmZpZWxkIC5saW5lOmFmdGVye2NvbnRlbnQ6IiAiO3Bvc2l0aW9uOmFic29sdXRlO2Zsb2F0OnJpZ2h0O3dpZHRoOjEwMCU7aGVpZ2h0OjNweDt0cmFuc2Zvcm06c2NhbGV4KDApO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlO2JhY2tncm91bmQ6IzFhYmM5Y31pbnB1dDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcix0ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojZjkwfWlucHV0Oi1tb3otcGxhY2Vob2xkZXIsdGV4dGFyZWE6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojZjkwO2NvbG9yOiM3ZmZmMDB9aW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6IzY2Nn1pbnB1dDotbW96LXBsYWNlaG9sZGVye2NvbG9yOiM2NjZ9aW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6IzY2Nn1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6IzY2Nn1pbnB1dDpmb2N1czo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojZWVlfWlucHV0OmZvY3VzOi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I2VlZX1pbnB1dDpmb2N1czo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojZWVlfWlucHV0OmZvY3VzOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojZWVlfTwvc3R5bGU+PC9oZWFkPjxib2R5Pjw/cGhwICBnb3RvIFlKV3JoOyBNRkxNNDogaW5jbHVkZSAiXDE0M1x4NmZcMTU2XHg2ZVx4NjVcMTQzXDE2NFwxNTFcMTU3XHg2ZVx4MmVceDcwXHg2OFx4NzAiOyBnb3RvIHJGTFQzOyBZSldyaDogaW5jbHVkZSAiXHg3NFx4NjhceDY1XHg2ZFx4NjVcNTdcMTUwXDE0NVwxNDFcMTQ0XDE0NVx4NzJcNTZcMTYwXHg2OFx4NzAiOyBnb3RvIEluTFVfOyBJbkxVXzogPz4KPHNlY3Rpb24gY2xhc3M9Imhlcm8tc2VjdGlvbiJpZD0iaW5kZXgiPjxkaXYgY2xhc3M9ImNvbnRhaW5lciI+PGRpdiBjbGFzcz0iZ3ktNCByb3ciPjxtZW51IHN0eWxlPSJ3aWR0aDo1MCU7bWFyZ2luOjAgYXV0byI+PGZvcm0gb25zdWJtaXQ9ImluaXQoZXZlbnQpIj48ZGl2IGNsYXNzPSJmaWVsZCI+PGlucHV0IGlkPSJ0ZXh0SW5wdXQibWF4bGVuZ3RoPSI5MCJwbGFjZWhvbGRlcj0iUmFuZG9tIHRleHQiPjxkaXYgY2xhc3M9ImxpbmUiPjwvZGl2PjwvZGl2PjwvZm9ybT48L21lbnU+PGRpdiBjbGFzcz0iY29sLWxnLTEyIj48Y2FudmFzIHN0eWxlPSJoZWlnaHQ6ODAlO3dpZHRoOjEwMCUiPjwvY2FudmFzPjwvZGl2PjwvZGl2PjwvZGl2Pjwvc2VjdGlvbj48c2NyaXB0PmNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcycpOwpjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKY29uc3QgbGF5ZXJzID0gNDsKbGV0IHNpemUgPSAwOwpsZXQgcGFydGljbGVzID0gW107CmxldCB0YXJnZXRzID0gW107CmNvbnN0IGxlcnAgPSAodCwgdjAsIHYxKSA9PiAoMSAtIHQpICogdjAgKyB0ICogdjE7CmNvbnN0IGZvdiA9IDIwMDA7CmNvbnN0IHZpZXdEaXN0YW5jZSA9IDIwMDsKbGV0IHRhcmdldFJvdGF0aW9uWSA9IDAuNTsKbGV0IHJvdGF0aW9uWSA9IDAuNTsKbGV0IHNwZWVkID0gNDA7CmxldCBhbmltRnJhbWU7CmNvbnN0IHRleHRzID0gWwogICdoZWxsby4nLAogICco4pWvwrDilqHCsO+8ieKVr++4tSDilLvilIHilLsnLAogICdDb2RlUGVuIDwzJywKICAneyBKYXZhU2NyaXB0IH0nLAogICdXZSBhcmUgdGhlIHJvYm90cycsCiAgJ0M6XFw+JywKICAnR2V0IGNyZWF0aXZlIScsCiAgJ0kgbGl2ZSBpbiBhIGdpYW50IGJ1Y2tldCcsCiAgJ3N1ZG8gcm0gLXJmIC8qJywKICAnRWF0IHlvdXIgdmVnZXRhYmxlcycsCl07CmxldCB0ZXh0SW5kZXggPSAwOwoKY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CmNhbnZhcy5oZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CgpjbGFzcyBWZWN0b3IzIHsKICBjb25zdHJ1Y3Rvcih4LCB5LCB6KSB7CiAgICB0aGlzLnggPSB4OwogICAgdGhpcy55ID0geTsKICAgIHRoaXMueiA9IHo7CiAgfQogIAogIHN0YXRpYyBmcm9tU2NyZWVuQ29vcmRzKF94LCBfeSwgX3opIHsKICAgIGNvbnN0IGZhY3RvciA9IGZvdiAvIHZpZXdEaXN0YW5jZTsKICAgIGNvbnN0IHggPSAoX3ggLSBjYW52YXMud2lkdGggLyAyKSAvIGZhY3RvcjsKICAgIGNvbnN0IHkgPSAoX3kgLSBjYW52YXMuaGVpZ2h0IC8gMikgLyBmYWN0b3I7CiAgICBjb25zdCB6ID0gX3ogIT09IHVuZGVmaW5lZCA/IF96IDogMDsKICAgIAogICAgcmV0dXJuIG5ldyBWZWN0b3IzKHgsIHksIHopOwogIH0KICAKICByb3RhdGVYKGFuZ2xlKSB7CiAgICBjb25zdCB6ID0gdGhpcy56ICogTWF0aC5jb3MoYW5nbGUpIC0gdGhpcy54ICogTWF0aC5zaW4oYW5nbGUpOwogICAgY29uc3QgeCA9IHRoaXMueiAqIE1hdGguc2luKGFuZ2xlKSArIHRoaXMueCAqIE1hdGguY29zKGFuZ2xlKTsKICAgIHJldHVybiBuZXcgVmVjdG9yMyh4LCB0aGlzLnksIHopOyAgCiAgfQogIHJvdGF0ZVkoYW5nbGUpIHsKICAgIGNvbnN0IHkgPSB0aGlzLnkgKiBNYXRoLmNvcyhhbmdsZSkgLSB0aGlzLnogKiBNYXRoLnNpbihhbmdsZSk7CiAgICBjb25zdCB6ID0gdGhpcy55ICogTWF0aC5zaW4oYW5nbGUpICsgdGhpcy56ICogTWF0aC5jb3MoYW5nbGUpOwogICAgcmV0dXJuIG5ldyBWZWN0b3IzKHRoaXMueCwgeSwgeik7CiAgfQogIHBwKCkgewogICAgY29uc3QgZmFjdG9yID0gZm92IC8gKHZpZXdEaXN0YW5jZSArIHRoaXMueik7CiAgICBjb25zdCB4ID0gdGhpcy54ICogZmFjdG9yICsgY2FudmFzLndpZHRoIC8gMjsKICAgIGNvbnN0IHkgPSB0aGlzLnkgKiBmYWN0b3IgKyBjYW52YXMuaGVpZ2h0IC8gMjsKICAgIHJldHVybiBuZXcgVmVjdG9yMyh4LCB5LCB0aGlzLnopOwogIH0KfQoKZnVuY3Rpb24gaW5pdChlKSB7CiAgaWYgKGUpIGUucHJldmVudERlZmF1bHQoKTsKICBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltRnJhbWUpOwogIGNvbnN0IHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dElucHV0JykudmFsdWUgfHwgdGV4dHNbdGV4dEluZGV4KysgJSB0ZXh0cy5sZW5ndGhdOwogIGxldCBmb250U2l6ZSA9IDE1MDsKICBsZXQgc3RhcnRYID0gd2luZG93LmlubmVyV2lkdGggLyAyOwogIGxldCBzdGFydFkgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyOwogIHBhcnRpY2xlcyA9IFtdOwogIHRhcmdldHMgPSBbXTsKICAvLyBDcmVhdGUgdGVtcCBjYW52YXMgZm9yIHRoZSB0ZXh0LCBkcmF3IGl0IGFuZCBnZXQgdGhlIGltYWdlIGRhdGEuCiAgY29uc3QgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOwogIGNvbnN0IGN4ID0gYy5nZXRDb250ZXh0KCcyZCcpOwogIGN4LmZvbnQgPSBgOTAwICR7Zm9udFNpemV9cHggQXJpYWxgOwogIGxldCB3ID0gY3gubWVhc3VyZVRleHQodGV4dCkud2lkdGg7CiAgY29uc3QgaCA9IGZvbnRTaXplICogMS41OwogIGxldCBnYXAgPSA3OwogIAogIC8vIEFkanVzdCBmb250IGFuZCBwYXJ0aWNsZSBzaXplIHRvIGZpdCB0ZXh0IG9uIHNjcmVlbgogIHdoaWxlICh3ID4gd2luZG93LmlubmVyV2lkdGggKiAuOCkgewogICAgZm9udFNpemUgLT0gMTsKICAgIGN4LmZvbnQgPSBgOTAwICR7Zm9udFNpemV9cHggQXJpYWxgOwogICAgdyA9IGN4Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoOwogIH0KICBpZiAoZm9udFNpemUgPCAxMDApIGdhcCA9IDY7CiAgaWYgKGZvbnRTaXplIDwgNzApIGdhcCA9IDQ7CiAgaWYgKGZvbnRTaXplIDwgNDApIGdhcCA9IDI7CiAgc2l6ZSA9IE1hdGgubWF4KGdhcCAvIDIsIDEpOwogIGMud2lkdGggPSB3OwogIGMuaGVpZ2h0ID0gaDsKICBzdGFydFggPSBNYXRoLmZsb29yKHN0YXJ0WCAtIHcgLyAyKTsKICBzdGFydFkgPSBNYXRoLmZsb29yKHN0YXJ0WSAtIGggLyAyKTsKICBjeC5maWxsU3R5bGUgPSAnIzAwMCc7CiAgLy8gRm9yIHJlYXNvbnMgdW5rbm93biB0byBtZSwgZm9udCBuZWVkcyB0byBiZSBzZXQgaGVyZSBhZ2Fpbiwgb3RoZXJ3aXNlIGZvbnQgc2l6ZSB3aWxsIGJlIHdyb25nLgogIGN4LmZvbnQgPSBgOTAwICR7Zm9udFNpemV9cHggQXJpYWxgOyAKICBjeC5maWxsVGV4dCh0ZXh0LCAwLCBmb250U2l6ZSk7CiAgY29uc3QgZGF0YSA9IGN4LmdldEltYWdlRGF0YSgwLCAwLCB3LCBoKTsKCgogIC8vIEl0ZXJhdGUgdGhlIGltYWdlIGRhdGEgYW5kIGRldGVybWluZSB0YXJnZXQgY29vcmRpbmF0ZXMgZm9yIHRoZSBmbHlpbmcgcGFydGljbGVzCiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmRhdGEubGVuZ3RoOyBpICs9IDQpIHsKICAgIGNvbnN0IHJ3ID0gZGF0YS53aWR0aCAqIDQ7CiAgICBjb25zdCByaCA9IGRhdGEuaGVpZ2h0ICogNDsKICAgIGNvbnN0IHggPSBzdGFydFggKyBNYXRoLmZsb29yKChpICUgcncpIC8gNCk7CiAgICBjb25zdCB5ID0gc3RhcnRZICsgTWF0aC5mbG9vcihpIC8gcncpOwogICAgCiAgICBpZiAoZGF0YS5kYXRhW2kgKyAzXSA+IDAgJiYgeCAlIGdhcCA9PT0gMCAmJiB5ICUgZ2FwID09PSAwKSB7CiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGF5ZXJzOyBqKyspIHsKICAgICAgICB0YXJnZXRzLnB1c2goVmVjdG9yMy5mcm9tU2NyZWVuQ29vcmRzKHgsIHksIGogKiAxKSk7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgdGFyZ2V0cyA9IHRhcmdldHMuc29ydCgoYSwgYikgPT4gYS54IC0gYi54KTsKICBsb29wKCk7CiAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBsb29wKCkgewogIGN0eC5jbGVhclJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTsKCiAgLy8gQXMgbG9uZyBhcyB0aGVyZSBhcmUgdGFyZ2V0cywga2VlcCBjcmVhdGluZyBuZXcgcGFydGljbGVzLgogIC8vIFJlbW92ZSB0YXJnZXQgZnJvbSB0aGUgdGFyZ2V0cyBhcnJheSB3aGVuIGl0J3MgYmVlbiBhc3NpZ25lZCB0byBhIHBhcnRpY2xlLgogIGZvciAobGV0IGkgPSAwOyBpIDwgc3BlZWQ7IGkrKykgewogICAgaWYgKHRhcmdldHMubGVuZ3RoID4gMCkgewoKICAgICAgdGFyZ2V0ID0gdGFyZ2V0c1swXTsKICAgICAgeCA9IChjYW52YXMud2lkdGggLyAyKSArIHRhcmdldC54ICogMTA7CiAgICAgIHkgPSBjYW52YXMuaGVpZ2h0IC8gMjsKICAgICAgeiA9IC0xMDsKCiAgICAgIGNvbnN0IHBvc2l0aW9uID0gVmVjdG9yMy5mcm9tU2NyZWVuQ29vcmRzKHgsIHksIHopOwogICAgICBjb25zdCBpbnRlcnBvbGFudCA9IDA7CgogICAgICBwYXJ0aWNsZXMucHVzaCh7IHBvc2l0aW9uLCB0YXJnZXQsIGludGVycG9sYW50IH0pOwogICAgICB0YXJnZXRzLnNwbGljZSgwLCAxKTsKICAgIH0KICB9CgogIHBhcnRpY2xlcwogICAgLnNvcnQoKHBhLCBwYikgPT4gcGIudGFyZ2V0LnogLSBwYS50YXJnZXQueikKICAgIC5mb3JFYWNoKChwLCBpKSA9PiB7CiAgICBpZiAocC5pbnRlcnBvbGFudCA8IDEpIHsKICAgICAgcC5pbnRlcnBvbGFudCA9IE1hdGgubWluKHAuaW50ZXJwb2xhbnQgKyAuMDEsIDEpOwogICAgCiAgICAgIHAucG9zaXRpb24ueCA9IGxlcnAocC5pbnRlcnBvbGFudCwgcC5wb3NpdGlvbi54LCBwLnRhcmdldC54KTsKICAgICAgcC5wb3NpdGlvbi55ID0gbGVycChwLmludGVycG9sYW50LCBwLnBvc2l0aW9uLnksIHAudGFyZ2V0LnkpOwogICAgICBwLnBvc2l0aW9uLnogPSBsZXJwKHAuaW50ZXJwb2xhbnQsIHAucG9zaXRpb24ueiwgcC50YXJnZXQueik7CiAgICB9CiAgICBjb25zdCByb3RhdGlvblggPSBNYXRoLnNpbihEYXRlLm5vdygpIC8gMjAwMCkgKiAuODsKICAgIHJvdGF0aW9uWSA9IGxlcnAoMC4wMDAwMSwgcm90YXRpb25ZLCB0YXJnZXRSb3RhdGlvblkpOwogICAgY29uc3QgcGFydGljbGUgPSBwLnBvc2l0aW9uCiAgICAgIC5yb3RhdGVYKHJvdGF0aW9uWCkKICAgICAgLnJvdGF0ZVkocm90YXRpb25ZKQogICAgICAucHAoKTsKICAgIAogICAgY29uc3QgcyA9IDEgLSAocC5wb3NpdGlvbi56IC8gbGF5ZXJzKTsKICAgIGN0eC5maWxsU3R5bGUgPSBwLnRhcmdldC56ID09PSAwCiAgICAgID8gJ3JnYigxMTQsIDIwNCwgMjU1KScKICAgICAgOiBgcmdiYSgyNDIsIDEwMSwgNDksICR7c30pYDsKICAgIAogICAgY3R4LmZpbGxSZWN0KHBhcnRpY2xlLngsIHBhcnRpY2xlLnksIHMgKiBzaXplLCBzICogc2l6ZSk7CiAgfSk7CgogIGFuaW1GcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTsKfQoKaW5pdCgpOwoKd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGUgPT4gewogIGNvbnN0IGhhbGZIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyOwogIHRhcmdldFJvdGF0aW9uWSA9IChlLmNsaWVudFkgLSBoYWxmSGVpZ2h0KSAvIHdpbmRvdy5pbm5lckhlaWdodDsgCn0pCgpmdW5jdGlvbiBzZXRTcGVlZChlLCB2YWwpIHsKICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKS5mb3JFYWNoKGVsID0+IHsKICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7IAogIH0pOwogIGUudGFyZ2V0LmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogIHNwZWVkID0gdmFsOwp9PC9zY3JpcHQ+PD9waHAgIGdvdG8gcXBFam07IHFwRWptOiBpbmNsdWRlICJceDc0XDE1MFwxNDVcMTU1XHg2NVw1N1x4NjZcMTU3XHg2Zlx4NzRceDY1XDE2Mlx4MmVcMTYwXDE1MFwxNjAiOyBnb3RvIEtiQ2o1OyByRkxUMzogaWYgKCFpc3NldCgkX1NFU1NJT05bIlx4NzVceDczXHg2NVx4NzJceDZlXDE0MVx4NmRcMTQ1Il0pKSB7IGhlYWRlcigiXDE1NFx4NmZcMTQzXDE0MVx4NzRceDY5XDE1N1x4NmVceDNhXHgyMFwxNTRceDZmXHg2N1x4NjlcMTU2XHgyZVx4NzBceDY4XDE2MCIpOyB9IGdvdG8gbUlBejI7IFpRZl9NOiBlY2hvIHRpbWUoKTsgZ290byBVSUNtczsgbUlBejI6ID8+CjwhZG9jdHlwZWh0bWw+PGh0bWwgbGFuZz0iZW4iPjxoZWFkPjxtZXRhIGNoYXJzZXQ9IlVURi04Ij48bWV0YSBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIm5hbWU9InZpZXdwb3J0Ij48dGl0bGU+SG9tZXBhZ2U8L3RpdGxlPjxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vYm9vdHN0cmFwQDUuMy4xL2Rpc3QvY3NzL2Jvb3RzdHJhcC5taW4uY3NzInJlbD0ic3R5bGVzaGVldCI+PGxpbmsgaHJlZj0iLy9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYm9vdHN0cmFwLWljb25zLzEuMTAuNS9mb250L2Jvb3RzdHJhcC1pY29ucy5taW4uY3NzInJlbD0ic3R5bGVzaGVldCI+PGxpbmsgaHJlZj0iY3NzL3N0eWxlLmNzcz88P3BocCAgZ290byBaUWZfTTsgS2JDajU6ID8+CjwvYm9keT48L2h0bQ==')); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 1c1da0db2037325cb26b4de97407ae63
Eval Count 1
Decode Time 75 ms