(function () {
    function isOldIE() {
       var version = getInternetExplorerVersion();
       if (version === -1) {
         return false;
       }

       return version < 9;
    }

    /**
     * Returns the version of Internet Explorer or a -1 (indicating the use of another browser).
     * Source: https://msdn.microsoft.com/en-us/library/ms537509(v=vs.85).aspx
     * @returns {number} the version of Internet Explorer or a -1 (indicating the use of another browser).
     */
    function getInternetExplorerVersion() {
        var rv = -1;

        if (navigator.appName == 'Microsoft Internet Explorer') {
            var ua = navigator.userAgent;
            var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
            var res = re.exec(ua);
            if (res !== null){
            rv = parseFloat(res[1]);
            }
        }

        return rv;
    }

    function isDom (obj) {
        return (typeof obj==="object") &&
            (obj.nodeType===1) && (typeof obj.style === "object") &&
            (typeof obj.ownerDocument ==="object");
    }

    if (isOldIE()) {
        if (Object.defineProperty.videoVastMonkeyPatched) {
            return;
        }

        var original = Object.defineProperty;

        Object.defineProperty = function(obj, prop, description) {
            if (isDom(obj)) {
                return original(obj, prop, description);
            }
            if (description.get || description.set) {
                throw new Error('browser doesn\'t support getters and setters');
            }
            obj[prop] = description.value;
        };
        Object.defineProperty.videoVastMonkeyPatched = true;
    }
})();


@@ -1104,39 +1104,24 @@
  if (Object.
-defineProperty.
 videoVastMon
@@ -1130,24 +1130,24 @@
 yPatched) %7B%0A
+
             
@@ -1583,16 +1583,17 @@
      %7D;%0A
+%0A
         
@@ -1599,30 +1599,1033 @@
  Object.
-defineProperty
+getOwnPropertyNames = function getOwnPropertyNames(object) %7B%0A          var buffer = %5B%5D;%0A          var key;%0A%0A          // Non-enumerable properties cannot be discovered but can be checked for by name.%0A          // Define those used internally by JS to allow an incomplete solution%0A          var commonProps = %5B'length', %22name%22, %22arguments%22, %22caller%22, %22prototype%22, %22observe%22, %22unobserve%22%5D;%0A%0A          if (typeof object === 'undefined' %7C%7C object === null) %7B%0A            throw new TypeError('Cannot convert undefined or null to object');%0A          %7D%0A%0A          object = Object(object);%0A%0A          // Enumerable properties only%0A          for (key in object) %7B%0A            if (object.hasOwnProperty(key)) %7B%0A              buffer.push(key);%0A            %7D%0A          %7D%0A%0A          // Check for and add the common non-enumerable properties%0A          for (var i=0, s=commonProps.length; i%3Cs; i++) %7B%0A            if (commonProps%5Bi%5D in object) buffer.push(commonProps%5Bi%5D);%0A          %7D%0A%0A          return buffer;%0A      %7D;%0A%0A      Object
 .videoVa
@@ -2654,15 +2654,16 @@
 ;%0A    %7D%0A
+%0A
 %7D)();%0A%0A

add getOwnPropertyNames