It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: http://www.download.com/3410-2001-0-10.xml

  1. <!DOCTYPE html>
  2. <html class="desktop">
  3.  
  4. <head>
  5.    <title>Page not found - CNET Download.com</title>
  6.    <meta charset="UTF-8" />
  7.    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  8.    <meta name="viewport" content="width=device-width, initial-scale=1">
  9.    <meta property="fb:app_id" content="16995676698" />
  10.    <meta property="fb:admins" content="100001036810388" />
  11.    <meta property="og:site_name" content="CNET" />
  12.  
  13.    <script>
  14.        function generateVguid() {
  15.            var charList = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '@']
  16.            var date = new Date();
  17.            var time = date.getTime();
  18.  
  19.            var smallTime = Math.floor(time % Math.pow(10, 10) * Math.random());
  20.  
  21.            smallTime = smallTime - ((smallTime >> 28) << 28);
  22.  
  23.            var pints = [smallTime >> 4, ((smallTime % 16) << 20) + Math.floor(Math.random() * 1048576), Math.floor(Math.random() * 16777216), Math.floor(Math.random() * 16777216), Math.floor(Math.random() * 16777216), Math.floor(Math.random() * 16777216), Math.floor(Math.random() * 16777216), Math.floor(Math.random() * 16777216), Math.floor(Math.random() * 16777216)];
  24.  
  25.            for (i = 8; i >= 0; i--) {
  26.                for (j = 0; j < 4; j++) {
  27.                    var uu = charList[(pints[i] >> (6 * j)) % 63];
  28.  
  29.                    if (typeof (vguid) == 'undefined') {
  30.                        var vguid = uu;
  31.                    } else if ([9, 14, 19, 24].indexOf(i * 4 + 4 - j) != -1) {
  32.                        vguid = '-' + vguid;
  33.                    } else {
  34.                        vguid = uu + vguid;
  35.                    }
  36.                }
  37.            }
  38.  
  39.            return vguid;
  40.        }
  41.        var pageViewGuid = generateVguid();
  42.        var topicName = "downloads";
  43.        window.pageTargeting = {
  44.            "ptype": "error",
  45.            "vguid": pageViewGuid,
  46.            "topic": topicName,
  47.            "pid": "0"
  48.        };
  49.        window.gdprConsent = false;
  50.        window.gdprCallbacks = [];
  51.        window.gdprLoadedLibs = [];
  52.  
  53.        function addGdprCallback(callback, options) {
  54.            var options = options || {};
  55.  
  56.            if (window.gdprConsent === true) {
  57.                callback();
  58.            } else {
  59.                var dependsOn = options.dependsOn || null;
  60.                window.gdprCallbacks.push({ callback: callback, dependsOn: dependsOn });
  61.            }
  62.        }
  63.  
  64.        (function (id) {
  65.            function append(scriptid, url, async, onload) {
  66.                var d = document,
  67.                        sn = 'script',
  68.                        f = d.getElementsByTagName(sn)[0];
  69.                if (!f) {
  70.                    f = d.head;
  71.                }
  72.                var s = d.createElement(sn);
  73.                s.async = async;
  74.                s.id = scriptid;
  75.                s.src = url;
  76.                s.onload = function () {
  77.                    window.gdprLoadedLibs.push(scriptid);
  78.                };
  79.                f.parentNode.insertBefore(s, f);
  80.            }
  81.  
  82.            function getRootDomain() {
  83.                var parts = window.location.hostname.split('.'); if (parts.length === 2) rootDomain = parts[0]; else if (parts.length > 2) {
  84.                    var part = parts[parts.length - 2]; if (part === 'com' || part === 'co') { rootDomain = parts[parts.length - 3] }
  85.                    else { rootDomain = part }
  86.                }
  87.                return rootDomain;
  88.            }
  89.            window.evidon = {};
  90.            window.evidon.id = id;
  91.            var cdn = '//c.evidon.com/',
  92.                    rootDomain = getRootDomain(),
  93.                    noticecdn = cdn + 'sitenotice/';
  94.            append('evidon-notice', noticecdn + 'evidon-sitenotice-tag.js', true);
  95.            append('evidon-location', cdn + 'geo/country.js', true);
  96.            append('evidon-themes', noticecdn + id + '/snthemes.js', true);
  97.            if (rootDomain) append('evidon-settings', noticecdn + id + '/' + rootDomain + '/settings.js', !0);
  98.            window.evidon.priorConsentCallback = function () {
  99.                var mobileDetected = navigator.userAgent.toLowerCase().indexOf("mobile") >= 0 && !navigator.userAgent.search(/(ipad)/i) >= 0;
  100.                if (!mobileDetected) {
  101.                    append('indexww-lib', 'https://js-sec.indexww.com/ht/ls-Download.js', true);
  102.                }
  103.                append('gpt-lib', 'https://www.googletagservices.com/tag/js/gpt.js', true);
  104.                append('sonobi-lib', 'https://mtrx.go.sonobi.com/morpheus.download.1590.js', true);
  105.                append('om-inline-lib', 'https://a3.fdlstatic.com/asset/bundles/downloadcore/js/libs/om-inline.js', true);
  106.                append('dw-lib', 'https://dw.cbsi.com/js/dw.js', true);
  107.  
  108.                window.googletag = window.googletag || {};
  109.                googletag.cmd = googletag.cmd || [];
  110.  
  111.                window.gdprConsent = true;
  112.                var intervalCallbackGroups = {};
  113.                var intervals = {};
  114.                for (var i = 0; i < window.gdprCallbacks.length; i++) {
  115.                    var callback = window.gdprCallbacks[i].callback;
  116.                    var dependsOn = window.gdprCallbacks[i].dependsOn;
  117.                    if (!callback) { continue; }
  118.                    try {
  119.                        if (!dependsOn || window.gdprLoadedLibs.indexOf(dependsOn) !== -1) {
  120.                            callback();
  121.                        } else {
  122.                            intervalCallbackGroups[dependsOn] = intervalCallbackGroups[dependsOn] || [];
  123.                            intervalCallbackGroups[dependsOn].push(callback);
  124.                        }
  125.                    } catch (e) {
  126.                        console.error(e);
  127.                    }
  128.                }
  129.  
  130.                for (var dep in intervalCallbackGroups) {
  131.                    if (intervalCallbackGroups.hasOwnProperty(dep)) {
  132.                        (function (dep) {
  133.                            intervals[dep] = setInterval(function () {
  134.                                if (window.gdprLoadedLibs.indexOf(dep) !== -1) {
  135.                                    clearInterval(intervals[dep]);
  136.                                    for (var j = 0; j < intervalCallbackGroups[dep].length; j++) {
  137.                                        intervalCallbackGroups[dep][j]();
  138.                                    }
  139.                                }
  140.                            }, 100);
  141.                        })(dep);
  142.                    }
  143.                }
  144.            }
  145.            window.evidon.closeCallback = function () { }
  146.            window.evidon.consentWithdrawnCallback = function () { }
  147.        })(425)
  148.    </script>
  149.  
  150.    <link rel="search" type="application/opensearchdescription+xml" title="CNET Download Search" href="https://www.cnet.com/html/osdd/download.xml" />
  151.  
  152.    <script>
  153.        var DL = (function () {
  154.            var mobileMediaQuery = 'screen and (max-width: 667px),' +
  155.                    'screen and (min-device-width: 375px) and (max-device-width: 667px) and (-webkit-device-pixel-ratio: 2),' +
  156.                    'screen and (min-device-width: 414px) and (max-device-width: 736px) and (-webkit-device-pixel-ratio: 3)',
  157.                    matchesMobileMediaQuery = window.matchMedia(mobileMediaQuery).matches,
  158.                    isMobileUserAgent = navigator.userAgent.toLowerCase().indexOf("mobile") >= 0,
  159.                    isMobileDevice = matchesMobileMediaQuery && isMobileUserAgent;
  160.  
  161.            return {
  162.                viewportWidth: Math.max(document.documentElement.clientWidth, window.innerWidth || 0),
  163.                mobileMediaQuery: mobileMediaQuery,
  164.                matchesMobileMediaQuery: matchesMobileMediaQuery,
  165.                isMobileUserAgent: isMobileUserAgent,
  166.                isMobileDevice: isMobileDevice,
  167.                isResponsivePage: false
  168.            };
  169.        }());
  170.    </script>
  171.    <script type='text/javascript'>
  172.        addGdprCallback(
  173.                function () {
  174.                    window.googletag = window.googletag || {};
  175.                    googletag.cmd = googletag.cmd || [];
  176.  
  177.                    var ukRegion = ['bh', 'be', 'dk', 'eg', 'fi', 'fr', 'de', 'is', 'iq', 'ie', 'it', 'kw', 'lu', 'nl', 'no', 'om', 'qa', 'sa', 'za', 'es', 'se', 'ae', 'gb'];
  178.                    var auRegion = ['au', 'nz'];
  179.                    var asiaRegion = ['hk', 'in', 'id', 'my', 'ph', 'sg', 'tw', 'th', 'vn'];
  180.  
  181.                    var adCountry = 'us';
  182.                    var adRegion = 'aw';
  183.                    var ftag = '';
  184.  
  185.                    try {
  186.                        var cookies = document.cookie.split(';');
  187.                        var dlGeoCookie = "dl_geo=";
  188.                        var dlFtagCookie = "dl_ad_ftag=";
  189.                        for (var i = 0; i < cookies.length; i++) {
  190.                            var c = cookies[i];
  191.                            while (c.charAt(0) == ' ') c = c.substring(1, c.length);
  192.                            if (c.indexOf(dlGeoCookie) == 0) {
  193.                                var dlGeoCookieValue = c.substring(dlGeoCookie.length, c.length);
  194.                                if (dlGeoCookieValue.indexOf("countryCode") !== -1) {
  195.                                    var parsedCountry = eval("(" + dlGeoCookieValue + ")").countryCode;
  196.                                    adCountry = parsedCountry.toLowerCase();
  197.                                }
  198.                            } else if (c.indexOf(dlFtagCookie) == 0) {
  199.                                ftag = c.substring(dlFtagCookie.length, c.length);
  200.                            }
  201.                        }
  202.                    } catch (e) { }
  203.  
  204.                    var j;
  205.                    for (j = 0; j < ukRegion.length; j++) {
  206.                        if (adCountry === ukRegion[j]) {
  207.                            adRegion = 'uk'; break;
  208.                        }
  209.                    }
  210.                    for (j = 0; j < auRegion.length; j++) {
  211.                        if (adCountry === auRegion[j]) {
  212.                            adRegion = 'au'; break;
  213.                        }
  214.                    }
  215.                    for (j = 0; j < asiaRegion.length; j++) {
  216.                        if (adCountry === asiaRegion[j]) {
  217.                            adRegion = 'asia'; break;
  218.                        }
  219.                    }
  220.  
  221.                    var channel = "/8264/" + adRegion + "-download/" + topicName;
  222.  
  223.                    googletag.cmd.push(function () { googletag.pubads().collapseEmptyDivs(true); });
  224.  
  225.                    googletag.cmd.push(function () {
  226.                        adSlots["nav-ad"] = googletag.defineSlot(channel, [7, 7], "nav-ad")
  227.                                .addService(googletag.pubads())
  228.                                .setTargeting("pos", "Nav")
  229.                    });
  230.  
  231.                    googletag.cmd.push(function () {
  232.                        adSlots["leader_plus_top"] = googletag.defineSlot(channel, [[970, 66], [728, 90]], "leader_plus_top")
  233.                                .addService(googletag.pubads())
  234.                                .setTargeting("pos", "top")
  235.                    });
  236.  
  237.                    googletag.cmd.push(function () {
  238.                        adSlots["mpu_plus_top"] = googletag.defineSlot(channel, [[300, 250], [300, 600]], "mpu_plus_top")
  239.                                .addService(googletag.pubads())
  240.                                .setTargeting("pos", "top")
  241.                    });
  242.  
  243.                    var adSlots = {};
  244.  
  245.                    googletag.cmd.push(function () { googletag.pubads().setTargeting("ptype", "error"); });
  246.                    googletag.cmd.push(function () { googletag.pubads().setTargeting("vguid", pageViewGuid); });
  247.                    googletag.cmd.push(function () { googletag.pubads().setTargeting("topic", topicName); });
  248.                    googletag.cmd.push(function () { googletag.pubads().setTargeting("pid", "0"); });
  249.  
  250.                    if (ftag != '') {
  251.                        googletag.cmd.push(function () { googletag.pubads().setTargeting("ftag", ftag); });
  252.                    }
  253.                    googletag.cmd.push(function () { googletag.pubads().enableSingleRequest() });
  254.                    googletag.cmd.push(function () { googletag.enableServices() });
  255.                },
  256.                { dependsOn: 'gpt-lib' }
  257.        );
  258.    </script>
  259.  
  260.    <link rel="stylesheet" type="text/css" href="https://a3.fdlstatic.com/asset/bundles/downloadcore/css/main.desktop.css" />
  261.    <!--[if lte IE 8]>
  262.    <link rel="stylesheet" type="text/css" href="https://a3.fdlstatic.com/asset/bundles/downloadcore/css/main.desktop.ie.css" />
  263.    <![endif]-->
  264.    <link rel="shortcut icon" href="https://a3.fdlstatic.com/asset/bundles/downloadcore/images/favicon.ico" />
  265.    <!--[if lte IE 7]>
  266.    <script type="text/javascript" src="https://a3.fdlstatic.com/asset/bundles/downloadcore/js/libs/json2.js"></script>
  267.    <![endif]-->
  268.  
  269.    <script type="text/javascript" src="https://a3.fdlstatic.com/asset/bundles/flyjs/js/libs/require-2.1.2.js"></script>
  270.    <script type="text/javascript">
  271.        require.config({ "baseUrl": "https:\/\/a3.fdlstatic.com\/asset\/bundles\/downloadcore\/js\/", "config": { "version": { "fly\/libs\/easy-xdm": "2.4.17.1", "fly\/libs\/jquery.widget": "1.9.2", "fly\/libs\/jquery.throttle-debounce": "1.1", "fly\/libs\/urs": "1.0", "fly\/utils\/data-prefix": "1.0", "fly\/utils\/data-selector": "1.0", "fly\/utils\/component-helper": "1.0", "fly\/utils\/log": "1.0", "fly\/utils\/object-helper": "1.0", "fly\/utils\/string-helper": "1.0", "fly\/utils\/string-vars": "1.0", "fly\/utils\/ad-helper": "1.0", "fly\/utils\/url-helper": "1.0", "fly\/utils\/guid": "1.0", "fly\/managers\/dw-tracking": "1.0", "fly\/libs\/jquery.cookie": "1.2", "fly\/managers\/cookie": "1.0", "fly\/managers\/components": "1.0", "fly\/managers\/ad": "1.0", "fly\/managers\/gpt": "1.0", "components\/search-autosuggest": "1.0", "fly\/managers\/madison": "1.0", "fly\/managers\/debug": "1.0", "fly\/managers\/user": "1.0", "fly\/managers\/history": "1.0", "fly\/managers\/tracking": "1.0", "fly\/components\/base": "1.0", "fly\/components\/iframe-messenger": "1.0", "fly\/components\/dependent-field": "1.0", "fly\/components\/carousel": "1.0", "fly\/components\/livefyre-conversation": "1.0", "fly\/components\/livefyre-commentcount": "1.0", "fly\/components\/load-more": "1.0", "fly\/components\/tabs": "1.0", "fly\/components\/tooltip": "1.0", "fly\/components\/dropdown": "1.0", "fly\/components\/fixate": "1.0", "fly\/components\/alert": "1.0", "fly\/components\/modal": "1.0", "fly\/components\/modal-async": "1.0", "fly\/components\/modal-iframe": "1.0", "fly\/components\/form-validate": "1.0", "fly\/components\/social-button": "1.0", "fly\/components\/social-links": "1.0", "fly\/components\/loading": "1.0", "managers\/adsManager": "1.0", "libs\/dil": "2.0", "libs\/adlens": "1.0", "components\/downloadNowButton": "2.0", "components\/utility": "1.0", "components\/listing-pagination": "1.0", "components\/offsite-dl-popup": "2.0", "components\/offsite-visit-site": "1.0", "components\/tab-widget": "1.0", "components\/footer-change-site": "1.0", "components\/find-software-widget": "1.0", "components\/searchbar-dropdown": "1.0", "components\/spotbid-impressions": "2.0", "components\/panama": "1.0", "components\/listing-controls": "1.0", "components\/version-dropdown": "1.0", "components\/delay-redirect": "1.0", "components\/init-download": "1.0", "managers\/social-authentication": "1.0", "components\/user-form": "1.0", "components\/user-controller": "1.0", "managers\/user": "2.0", "managers\/ad": "1.0", "components\/onLoad": "1.0", "components\/image-gallery": "1.0", "components\/lightbox": "1.0", "components\/livefyre-conversation": "1.0", "components\/medusa-unit": "1.0", "components\/user-review-sort": "1.0", "components\/user-review-form": "1.0", "components\/user-reply": "1.0", "components\/title-detail-button-dlm-notice-widget": "1.0", "components\/floating-download-now-button-bar-widget": "1.0", "components\/tooltip": "1.0", "components\/floating-social-media-widget": "1.0", "components\/download-social-links": "1.0", "components\/form-validate": "1.0", "components\/dreCarousel": "1.0", "components\/alternate-platform-button": "1.0", "components\/user-review-rating": "1.0", "components\/infinite-scroll": "1.0", "components\/uninstall-download-app-form": "1.0", "components\/responsive-header": "1.0", "libs\/placeholder": "0.2.4", "utils\/function-natives": "1.0" } }, "paths": { "fly": "..\/..\/flyjs\/js", "version": "..\/..\/flyjs\/js\/libs\/require.version-1.0", "jquery": "..\/..\/flyjs\/js\/libs\/jquery-1.8.3", "jquery-ui": "libs\/jquery-ui-1.10.4", "pkg.utils": "pkg.utils.desktop", "constants": "constants.desktop" }, "shim": { "jquery-ui": ["jquery"], "version!libs\/placeholder": ["jquery"] }, "map": { "*": { "livefyre": "\/\/zor.livefyre.com\/wjs\/v3.0\/javascripts\/livefyre.js", "livefyre-commentcount": "\/\/zor.livefyre.com\/wjs\/v1.0\/javascripts\/CommentCount.js", "gpt": "\/\/www.googletagservices.com\/tag\/js\/gpt.js", "panama": "http:\/\/i.i.cbsi.com\/cnwk.1d\/Ads\/common\/panama\/panama-download.js", "urs": "\/\/urs.cnet.com\/sdk\/urs.js" } }, "waitSeconds": 0 });
  272.        require(['main.desktop']);
  273.    </script>
  274. </head>
  275.  
  276. <body data-dw='{"host":null,"pageParams":{"topicguid":"downloads","sitetype":"desktop web","devicetype":"desktop"}}'
  277.      data-tracking-status='true' data-ad-cookie-service-path='/module/ad-cookie/' data-ad='{"gpt":{"targeting":{"device":"desktop","ptype":"","cid":"","env":"dev"},"adConfig":{"network":{"dev":8264,"qa":8264,"uat":8264,"stage":8264,"prod":8264},"method":"async","regions":[{"region":"uk","countries":["gb","ie","za","bh","kw","om","qa","sa","ae","iq","eg","fr","it","de","be","nl"]},{"region":"au","countries":["au","nz"]},{"region":"asia","countries":["sg","my","th","id","ph","hk","vn","tw"]}],"adUnits":{"intromercial":{"sizes":[630,480],"outOfPage":true},"skin":{"sizes":[[1600,1000]]},"launchpad_1":{"sizes":[[200,75]],"position":1},"launchpad_2":{"sizes":[[200,75]],"position":2},"resourceCenterTop":{"sizes":[[300,300]],"position":"top"},"resourceCenterBottom":{"sizes":[[632,160]],"position":"bottom"},"mpuPlusTop":{"sizes":[[300,250],[300,600]],"position":"top"},"marqueeTop":{"sizes":[[234,60]],"position":"top"},"mpuTop":{"sizes":[[300,250],[300,600]],"position":"top"},"mpuBottom":{"sizes":[[300,250]],"position":"bottom"},"leaderPlusTop":{"sizes":[[728,90],[970,66],[970,250]],"position":"top"},"leaderTop":{"sizes":[[728,90],[970,66]],"position":"bottom"},"textLinkTop":{"sizes":[401,11],"position":"top"},"leaderPlusBottom":{"sizes":[[728,90],[970,66],[970,250]],"position":"bottom"},"leaderBottom":{"sizes":[[728,90],[970,66]],"position":"bottom"},"infoBoardTop":{"sizes":[[771,201]],"position":"top"},"categorySpotlightTop":{"sizes":[[681,200]],"position":"top"},"categorySpotlightBottom":{"sizes":[[681,200]],"position":"bottom"}},"mobile":{"adUnits":{"mobileBannerTop":{"sizes":[[300,50],["120. 20"],[168,28],[216,36]]},"mobileBannerMpuHptoOverlay":{"outOfPage":true},"mobileMpuBottom":{"sizes":[300,250]}}},"tablet":{"adUnits":{"resourceCenterTop":{"sizes":[[300,300]],"position":"top"},"resourceCenterBottom":{"sizes":[[632,160]],"position":"bottom"},"mpuPlusTop":{"sizes":[[300,600],[300,250]]},"marqueeTop":{"sizes":[[234,60]],"position":"top"},"mpuTop":{"sizes":[[300,250],[300,600]],"position":"top"},"mpuBottom":{"sizes":[[300,250]],"position":"bottom"},"leaderTop":{"sizes":[[728,90],[970,66]],"position":"bottom"},"leaderPlusTop":{"sizes":[[728,90],[970,66],[970,250]],"position":"top"}}},"siteName":"download","collapseEmptyDiv":true,"defaultRegion":"aw"},"containerId":"544e5e7a68041","slotVars":{"network":"8264","siteName":"download","collapseEmptyDiv":"1","topics":"","platform":"desktop"},"adType":"gpt"},"cookieName":"dl_ad","blueKai":{"bkSiteId":3328,"limit":4,"ch":"windows software","site":"cbsidownloadcomsite"}}'
  278.      data-tracking-guid='(none)' data-tracking-vguid='' data-esi-dw-params='&devicetype=&pguid=&viewguid=' data-pagetype=''
  279.      data-breadcrumb='' data-siteid='4' data-user='{"baseUrl":"https:\/\/secure-download.cnet.com","cookieName":"purs_1"}'
  280.      data-social-auth='{"baseUrl":"http:\/\/download.cnet.com","appId":387,"environment":"LIVE","modalFlow":"true"}'
  281.      data-asset="https://download.cnet.com" data-locale="en" data-dl-ad-ftag-cookie-value='' class="pageType-9999 static no-sticky-ad">
  282.  
  283. <script>
  284.    var utag_data = {}
  285. </script>
  286.  
  287. <script type="text/javascript">
  288.    (function (a, b, c, d) {
  289.        a = '//tags.tiqcdn.com/utag/cbsi/downloadcomsite/prod/utag.js';
  290.        b = document; c = 'script'; d = b.createElement(c); d.src = a; d.type = 'text/java' + c; d.async = true;
  291.        a = b.getElementsByTagName(c)[0]; a.parentNode.insertBefore(d, a);
  292.    })();
  293. </script>
  294.  
  295. <noscript><img src="https://pixel.everesttech.net/4083/v?" width="1" height="1" style="position:absolute;" /></noscript>
  296.  
  297. <div id="wrapper">
  298.    <!--[if lt IE 9]>
  299.    <script src="https://a3.fdlstatic.com/asset/bundles/downloadcore/js/libs/html5shiv/html5shiv.js"></script>
  300.    <script src="https://a3.fdlstatic.com/asset/bundles/downloadcore/js/libs/html5shiv/html5shiv-printshiv.js"></script>
  301.    <![endif]-->
  302.  
  303.    <!--[if lt IE 9]>
  304.    <noscript><div id="rbHeader" class="headerTag" section="hdr" name="rb_header"></noscript>
  305.    <![endif]-->
  306.    <header id="rbHeader" class="responsive-header" data-component="responsive-header">
  307.        <section class="header-bottom">
  308.            <div class="mobile-header">
  309.                <a href="/" class="shuttlecock-link">
  310.                    <img class="shuttlecock-image" src="https://a3.fdlstatic.com/asset/bundles/downloadcore/images/header/logo.svg"
  311.                         alt="Download.com">
  312.                </a>
  313.  
  314.                <a href="/">
  315.                    <img class="flat-logo" src="https://a3.fdlstatic.com/asset/bundles/downloadcore/images/header/logo-text.svg"
  316.                         alt="Download.com">
  317.                </a>
  318.  
  319.                <ul class="mobile-buttons">
  320.                    <li class="mobile-nav-button">Navigation</li>
  321.                    <li id="mobile-search-button" class="mobile-search-button">open search</li>
  322.                </ul>
  323.            </div>
  324.  
  325.            <form class="search-bar-container" action="/s/" method="get" autocomplete="off" data-component="search-autosuggest"
  326.                  data-search-autosuggest-options="{&quot;toggleButtonSelector&quot;:&quot;#mobile-search-button&quot;,&quot;searchInputSelector&quot;:&quot;#download-header-query&quot;,&quot;searchBaseUrl&quot;:&quot;\/s\/&quot;}">
  327.                <div class="search-bar">
  328.                    <input class="search-button" type="submit">
  329.                    <span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span><input type="search"
  330.                                                                                                             id="download-header-query" name="query" value="Search for Apps" autocomplete="off" class="download-header-query ui-autocomplete-input">
  331.                </div>
  332.  
  333.                <div class="search-bar-suggestions">
  334.                    <ul class="ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all" id="ui-id-2"
  335.                        tabindex="0" style="display: none;"></ul>
  336.                </div>
  337.            </form>
  338.        </section>
  339.  
  340.        <section class="flyin-menu-container" style="display:none !important">
  341.            <div class="flyin-close-button">Close</div>
  342.  
  343.            <h3>PLATFORMS</h3>
  344.            <ul class="platform-menu">
  345.                <li class="platform platform-android active selected">
  346.                    <a title="Android" href="https://download.cnet.com/apps/android/"></a>
  347.                </li>
  348.                <li class="platform platform-ios ">
  349.                    <a title="iOS" href="https://download.cnet.com/apps/ios/"></a>
  350.                </li>
  351.                <li class="platform platform-windows ">
  352.                    <a title="Windows" href="https://download.cnet.com/apps/windows/"></a>
  353.                </li>
  354.                <li class="platform platform-mac ">
  355.                    <a title="Mac" href="https://download.cnet.com/apps/mac/"></a>
  356.                </li>
  357.            </ul>
  358.  
  359.            <h3>POPULAR LINKS</h3>
  360.            <ul class="sorting-menu">
  361.  
  362.                <li><a href="https://download.cnet.com/blog/download-blog/">Latest News</a></li>
  363.                <li><a href="https://download.cnet.com/security-center/?ftag=DLAd9aaded">Security and Antivirus Center</a></li>
  364.                <li><a href="https://download.cnet.com/s/software/?sort=latest">New Releases</a></li>
  365.                <li><a href="https://download.cnet.com/s/software/?sort=users-rating">User Favorites</a></li>
  366.                <li><a href="https://download.cnet.com/s/software/?sort=editors-rating">Editor's Picks</a></li>
  367.                <li><a href="https://download.cnet.com/s/software/free/">Top Freeware</a></li>
  368.            </ul>
  369.  
  370.            <h3>CATEGORIES</h3>
  371.            <ul class="categories-menu">
  372.  
  373.                <li class="category category-browsers ">
  374.                    <a href="https://download.cnet.com/s/browsers/">Browsers</a>
  375.                </li>
  376.  
  377.                <li class="category category-business ">
  378.                    <a href="https://download.cnet.com/s/biz-soft/">Business Software</a>
  379.                </li>
  380.  
  381.                <li class="category category-communications ">
  382.                    <a href="https://download.cnet.com/s/chat-voip-email/">Communications</a>
  383.                </li>
  384.  
  385.                <li class="category category-photo ">
  386.                    <a href="https://download.cnet.com/s/digitalphoto/">Digital Photo Software</a>
  387.                </li>
  388.  
  389.                <li class="category category-entertainment ">
  390.                    <a href="https://download.cnet.com/s/entertainment-software/">Entertainment Software</a>
  391.                </li>
  392.  
  393.                <li class="category category-games ">
  394.                    <a href="https://download.cnet.com/s/games/">Games</a>
  395.                </li>
  396.  
  397.                <li class="category category-internet ">
  398.                    <a href="https://download.cnet.com/s/internet/">Internet Software</a>
  399.                </li>
  400.  
  401.                <li class="category category-mp3 ">
  402.                    <a href="https://download.cnet.com/s/audio/">MP3 &amp; Audio Software</a>
  403.                </li>
  404.  
  405.                <li class="category category-productivity ">
  406.                    <a href="https://download.cnet.com/s/productivity//">Productivity Software</a>
  407.                </li>
  408.  
  409.                <li class="category category-screensavers ">
  410.                    <a href="https://download.cnet.com/s/customization//">Screensavers &amp; Wallpaper</a>
  411.                </li>
  412.  
  413.                <li class="category category-security ">
  414.                    <a href="https://download.cnet.com/s/security//">Security Software</a>
  415.                </li>
  416.  
  417.                <li class="category category-utilities ">
  418.                    <a href="https://download.cnet.com/s/utilities//">Utilities &amp; Operating Systems</a>
  419.                </li>
  420.  
  421.                <li class="category category-video ">
  422.                    <a href="https://download.cnet.com/s/video//">Video Software</a>
  423.                </li>
  424.            </ul>
  425.  
  426.            <h3>HELP &amp; SETTINGS</h3>
  427.            <ul class="help-menu">
  428.                <li><a href="http://m.cnet.com">Link to CNET Site</a></li>
  429.                <li><a href="mailto:[email protected]">Submit Feedback</a></li>
  430.                <li><a target="_blank" href="http://legalterms.cbsinteractive.com/terms-of-use">Terms of Use</a></li>
  431.                <li><a target="_blank" href="http://legalterms.cbsinteractive.com/privacy">Privacy Policy</a></li>
  432.            </ul>
  433.            <ul class="licence-footer">
  434.                <li>
  435.                    &copy; 2017 CBS Interactive Inc.
  436.                </li>
  437.                <li>
  438.                    All Rights Reserved
  439.                </li>
  440.            </ul>
  441.        </section>
  442.  
  443.  
  444.        <div id="screen-mask" class="screen-mask"></div>
  445.    </header>
  446.    <!--[if lt IE 9]>
  447.    <noscript></div></noscript>
  448.    <![endif]-->
  449.    <div id="nav-ad">
  450.        <script type="text/javascript">
  451.            addGdprCallback(
  452.                    function () {
  453.                        googletag.cmd.push(function () {
  454.                            if (typeof index_headertag_lightspeed !== 'undefined' && !DL.isMobileDevice) {
  455.                                index_headertag_lightspeed.add_session_end_hook(function () {
  456.                                    var slots = googletag.pubads().getSlots();
  457.                                    index_headertag_lightspeed.set_slot_targeting(slots);
  458.                                    googletag.display("nav-ad");
  459.                                }, true);
  460.                                index_headertag_lightspeed.refresh();
  461.                            } else {
  462.                                googletag.display("nav-ad");
  463.                            }
  464.                        });
  465.                    },
  466.                    { dependsOn: 'gpt-lib' }
  467.            );
  468.        </script>
  469.    </div>
  470.    <header id="page-header" class="page-header" data-component="page-header">
  471.        <a href="/android/" class="brand brand-shuttlecock">
  472.            <img class="logo" src="https://a3.fdlstatic.com/asset/bundles/downloadcore/images/header/[email protected]">
  473.        </a>
  474.  
  475.        <div class="dropdown dropdown-platform-selector" data-tracking-dropdown="platform">
  476.            <a href="/android/" class="brand brand-text">
  477.                <img class="logo" src="https://a3.fdlstatic.com/asset/bundles/downloadcore/images/header/[email protected]">
  478.            </a>
  479.  
  480.            <div class="platform-selector-btn label">
  481.                <i class="icon-down-arrow"></i>
  482.            </div>
  483.  
  484.            <div id="header-platform-selector" class="options">
  485.  
  486.                <div class="option loaded">
  487.                    <div class="option-left-container platform-simple" data-tracking-dropdown-option="windows"
  488.                         data-platform="windows">
  489.                        <span class="platform-windows-icon platform-icon" data-href="https://download.cnet.com/windows/"></span>
  490.                    </div>
  491.                    <div class="option-right-container platform-simple" data-tracking-dropdown-option="windows"
  492.                         data-platform="windows">
  493.  
  494.                        <span class="platform-name" data-href="https://download.cnet.com/windows/">Windows</span>
  495.                        <span class="platform-right-arrow-icon" data-href="https://download.cnet.com/windows/"></span>
  496.                    </div>
  497.                    <div class="quick-links">
  498.                        <div class="quick-links-title quick-links-no-iOS">Quick Links (windows)</div>
  499.                        <div class="quick-links-list">
  500.                            <a data-href="https://download.cnet.com/most-popular/windows/"
  501.                               data-tracking-dropdown-option="Most Popular">
  502.  
  503.                                Most Popular
  504.                            </a>
  505.                            <a data-href="https://download.cnet.com/new-windows-software/"
  506.                               data-tracking-dropdown-option="New Releases">
  507.  
  508.                                New Releases
  509.                            </a>
  510.                            <a data-href="https://download.cnet.com/s/software/windows/?licenseType=Free"
  511.                               data-tracking-dropdown-option="Free Apps">
  512.  
  513.                                Free Apps
  514.                            </a>
  515.                            <a data-href="https://download.cnet.com/apps/windows/" data-tracking-dropdown-option="Browse Windows Apps">
  516.  
  517.                                Browse Windows Apps
  518.                            </a>
  519.                        </div>
  520.                    </div>
  521.                </div>
  522.                <div class="option loaded">
  523.                    <div class="option-left-container platform-simple" data-tracking-dropdown-option="ios"
  524.                         data-platform="ios">
  525.                        <span class="platform-ios-icon platform-icon" data-href="https://download.cnet.com/ios/"></span>
  526.                    </div>
  527.                    <div class="option-right-container platform-simple" data-tracking-dropdown-option="ios"
  528.                         data-platform="ios">
  529.  
  530.                        <span class="platform-name" data-href="https://download.cnet.com/ios/">iOS</span>
  531.                        <span class="platform-right-arrow-icon" data-href="https://download.cnet.com/ios/"></span>
  532.                    </div>
  533.                    <div class="quick-links">
  534.                        <div class="quick-links-title">Quick Links (iOS)</div>
  535.                        <div class="quick-links-list">
  536.                            <a data-href="https://download.cnet.com/most-popular/ios/"
  537.                               data-tracking-dropdown-option="Most Popular">
  538.  
  539.                                Most Popular
  540.                            </a>
  541.                            <a data-href="https://download.cnet.com/new-ios-software/"
  542.                               data-tracking-dropdown-option="New Releases">
  543.  
  544.                                New Releases
  545.                            </a>
  546.                            <a data-href="https://download.cnet.com/s/software/ios/?licenseType=Free"
  547.                               data-tracking-dropdown-option="Free Apps">
  548.  
  549.                                Free Apps
  550.                            </a>
  551.                            <a data-href="https://download.cnet.com/apps/ios/" data-tracking-dropdown-option="Browse iOS Apps">
  552.  
  553.                                Browse iOS Apps
  554.                            </a>
  555.                        </div>
  556.                    </div>
  557.                </div>
  558.                <div class="option loaded">
  559.                    <div class="option-left-container platform-simple" data-tracking-dropdown-option="android"
  560.                         data-platform="android">
  561.                        <span class="platform-android-icon platform-icon" data-href="https://download.cnet.com/android/"></span>
  562.                    </div>
  563.                    <div class="option-right-container platform-simple" data-tracking-dropdown-option="android"
  564.                         data-platform="android">
  565.  
  566.                        <span class="platform-name" data-href="https://download.cnet.com/android/">Android</span>
  567.                        <span class="platform-right-arrow-icon" data-href="https://download.cnet.com/android/"></span>
  568.                    </div>
  569.                    <div class="quick-links">
  570.                        <div class="quick-links-title quick-links-no-iOS">Quick Links (android)</div>
  571.                        <div class="quick-links-list">
  572.                            <a data-href="https://download.cnet.com/most-popular/android/"
  573.                               data-tracking-dropdown-option="Most Popular">
  574.  
  575.                                Most Popular
  576.                            </a>
  577.                            <a data-href="https://download.cnet.com/new-android-software/"
  578.                               data-tracking-dropdown-option="New Releases">
  579.  
  580.                                New Releases
  581.                            </a>
  582.                            <a data-href="https://download.cnet.com/s/software/android/?licenseType=Free"
  583.                               data-tracking-dropdown-option="Free Apps">
  584.  
  585.                                Free Apps
  586.                            </a>
  587.                            <a data-href="https://download.cnet.com/apps/android/" data-tracking-dropdown-option="Browse Android Apps">
  588.  
  589.                                Browse Android Apps
  590.                            </a>
  591.                        </div>
  592.                    </div>
  593.                </div>
  594.                <div class="option loaded">
  595.                    <div class="option-left-container platform-simple" data-tracking-dropdown-option="mac"
  596.                         data-platform="mac">
  597.                        <span class="platform-mac-icon platform-icon" data-href="https://download.cnet.com/mac/"></span>
  598.                    </div>
  599.                    <div class="option-right-container platform-simple" data-tracking-dropdown-option="mac"
  600.                         data-platform="mac">
  601.  
  602.                        <span class="platform-name" data-href="https://download.cnet.com/mac/">Mac</span>
  603.                        <span class="platform-right-arrow-icon" data-href="https://download.cnet.com/mac/"></span>
  604.                    </div>
  605.                    <div class="quick-links">
  606.                        <div class="quick-links-title quick-links-no-iOS">Quick Links (mac)</div>
  607.                        <div class="quick-links-list">
  608.                            <a data-href="https://download.cnet.com/most-popular/mac/"
  609.                               data-tracking-dropdown-option="Most Popular">
  610.  
  611.                                Most Popular
  612.                            </a>
  613.                            <a data-href="https://download.cnet.com/new-mac-software/"
  614.                               data-tracking-dropdown-option="New Releases">
  615.  
  616.                                New Releases
  617.                            </a>
  618.                            <a data-href="https://download.cnet.com/s/software/mac/?licenseType=Free"
  619.                               data-tracking-dropdown-option="Free Apps">
  620.  
  621.                                Free Apps
  622.                            </a>
  623.                            <a data-href="https://download.cnet.com/apps/mac/" data-tracking-dropdown-option="Browse Mac Apps">
  624.  
  625.                                Browse Mac Apps
  626.                            </a>
  627.                        </div>
  628.                    </div>
  629.                </div>
  630.            </div>
  631.        </div>
  632.  
  633.        <div class="header-search-dropdown-container">
  634.            <div id="header-search-container" class="header-search-container">
  635.                <div id="header-search-button" class="header-search-button">
  636.                    <img src="https://a3.fdlstatic.com/asset/bundles/downloadcore/images/header/search-icon.svg">
  637.                </div>
  638.  
  639.                <form id="header-search-form">
  640.                    <span role="status" aria-live="polite" class="ui-helper-hidden-accessible"></span><input id="header-search-input"
  641.                                                                                                             class="header-search-input ui-autocomplete-input" placeholder="Search software, apps, games, &amp; more..."
  642.                                                                                                             value="" autocomplete="off">
  643.                </form>
  644.  
  645.                <span class="header-search-help"><span class="icon icon-return-arrow"></span> Enter to <em>Search</em></span>
  646.  
  647.                <div id="header-search-suggestions" class="header-search-suggestions">
  648.                    <ul class="ui-autocomplete ui-front ui-menu ui-widget ui-widget-content ui-corner-all" id="ui-id-1"
  649.                        tabindex="0" style="display: none;"></ul>
  650.                </div>
  651.            </div>
  652.            <div class="dropdown-container">
  653.  
  654.                <div class="dropdown dropdown-cnet" data-tracking-dropdown="cnet_content">
  655.                    <div class="label">
  656.                        CNET
  657.                        <i class="icon-down-arrow"></i>
  658.                    </div>
  659.  
  660.                    <div class="options">
  661.                        <a class="option" href="https://www.cnet.com/reviews/" data-tracking-dropdown-option="Reviews">
  662.  
  663.                            Reviews
  664.                        </a>
  665.                        <a class="option" href="https://www.cnet.com/news/" data-tracking-dropdown-option="News">
  666.  
  667.                            News
  668.                        </a>
  669.                        <a class="option" href="https://www.cnet.com/video/" data-tracking-dropdown-option="Video">
  670.  
  671.                            Video
  672.                        </a>
  673.                        <a class="option" href="https://www.cnet.com/how-to/" data-tracking-dropdown-option="How To">
  674.  
  675.                            How To
  676.                        </a>
  677.                        <a class="option" href="https://www.cnet.com/smart-home/" data-tracking-dropdown-option="Smart Home">
  678.  
  679.                            Smart Home
  680.                        </a>
  681.                        <a class="option" href="https://www.cnet.com/roadshow/" data-tracking-dropdown-option="Cars">
  682.  
  683.                            Cars
  684.                        </a>
  685.                        <a class="option" href="https://www.cnet.com/deals/" data-tracking-dropdown-option="Deals">
  686.  
  687.                            Deals
  688.                        </a>
  689.                        <a class="option" href="https://www.cnet.com/" data-tracking-dropdown-option="CNET Home">
  690.  
  691.                            CNET Home
  692.                        </a>
  693.                    </div>
  694.                </div>
  695.                <div id="header-user-dropdown" class="dropdown dropdown-user" data-tracking-dropdown="account">
  696.  
  697.                    <div class="label">
  698.                        <i class="icon-user"></i>
  699.                    </div>
  700.  
  701.                    <div class="options">
  702.                        <div class="logged-in" data-user-view="loggedIn">
  703.                            <a class="option" href="https://www.cnet.com/profile/">My Profile</a>
  704.                            <a class="option" href="https://download.cnet.com/user/logout/">Logout</a>
  705.                        </div>
  706.  
  707.                        <div class="logged-out" data-user-view="loggedOut">
  708.                            <a class="option" data-tracking-dropdown-option="register" data-user-show="{&quot;action&quot;:&quot;login&quot;,&quot;params&quot;:{&quot;appId&quot;:&quot;135&quot;}}">
  709.  
  710.                                Login </a>
  711.  
  712.                            <a class="option" data-tracking-dropdown-option="login" data-user-show="{&quot;action&quot;:&quot;register&quot;,&quot;params&quot;:{&quot;appId&quot;:&quot;135&quot;}}">
  713.                                Join </a>
  714.                        </div>
  715.                    </div>
  716.                </div>
  717.            </div>
  718.        </div>
  719.    </header>
  720.  
  721.    <div id="header-overlay" class="header-overlay"></div>
  722.  
  723.    <script type="text/javascript">
  724.        var $searchForm = document.getElementById("header-search-form"),
  725.                $searchInput = document.getElementById("header-search-input"),
  726.                $searchButton = document.getElementById("header-search-button"),
  727.                $overlay = document.getElementById("header-overlay"),
  728.                $searchContainer = document.getElementById("header-search-container"),
  729.                isSearchFocused = false,
  730.                searchUrl;
  731.  
  732.        function searchElement(e) {
  733.            var query = $searchInput.value.trim();
  734.  
  735.            if (query) {
  736.                query = encodeURIComponent(query);
  737.                searchUrl = "/s/" + query + "/";
  738.                window.location.href = searchUrl;
  739.            }
  740.  
  741.            e.preventDefault();
  742.        }
  743.  
  744.        $searchInput.addEventListener("focus", function () {
  745.            $searchContainer.className += " active";
  746.            $overlay.className += " active";
  747.            isSearchFocused = true;
  748.        });
  749.  
  750.        $searchInput.addEventListener("blur", function () {
  751.            if (isSearchFocused) {
  752.                $overlay.classList.remove("active");
  753.                $searchContainer.classList.remove("active");
  754.                isSearchFocused = false;
  755.            }
  756.        });
  757.  
  758.        $searchForm.addEventListener("submit", searchElement);
  759.  
  760.        $searchButton.addEventListener("click", function () {
  761.            if ($searchInput.value.trim() !== '') {
  762.                searchElement();
  763.            } else {
  764.                $searchInput.focus();
  765.            }
  766.        });
  767.    </script>
  768.  
  769.    <script>
  770.        (function () {
  771.            var userPlatform = getCookie('dl_user_platform');
  772.            var selectedPlatform = getCookie('dl_selected_platform');
  773.  
  774.            resolvePlatform();
  775.            setBrandAnchorUrls();
  776.            addOverlayEventHandlers();
  777.            addPlatformEventHandlers();
  778.            addTrackingEventHandlers();
  779.  
  780.            function resolvePlatform() {
  781.                if (!userPlatform) {
  782.                    userPlatform = getOs();
  783.                    setCookie('dl_user_platform', userPlatform);
  784.                }
  785.  
  786.                if (!selectedPlatform) {
  787.                    setCookie('dl_selected_platform', userPlatform);
  788.                    selectedPlatform = userPlatform;
  789.                }
  790.  
  791.                document.body.setAttribute('data-user-platform', userPlatform);
  792.                document.body.setAttribute('data-selected-platform', selectedPlatform);
  793.                document.body.className += ' platform-' + selectedPlatform;
  794.            }
  795.  
  796.            function setBrandAnchorUrls() {
  797.                var anchors = document.querySelectorAll('.page-header .brand');
  798.                var platformDoorUrls = getPlatformDoorUrls();
  799.                var currentPlatformUrl = platformDoorUrls[selectedPlatform];
  800.  
  801.                for (var i = 0; i < anchors.length; i++) {
  802.                    anchors[i].setAttribute('href', currentPlatformUrl);
  803.                }
  804.            }
  805.  
  806.            function getPlatformDoorUrls() {
  807.                return {
  808.                    windows: '/windows/',
  809.                    ios: '/ios/',
  810.                    android: '/android/',
  811.                    mac: '/mac/'
  812.                };
  813.            }
  814.  
  815.            function addOverlayEventHandlers() {
  816.                var overlay = document.getElementById('header-overlay');
  817.                var dropdowns = document.querySelectorAll('.dropdown');
  818.  
  819.                for (var i = 0; i < dropdowns.length; i++) {
  820.                    dropdowns[i].addEventListener('mouseover', function (e) {
  821.                        removeClass(overlay, 'active');
  822.                        overlay.className += ' active';
  823.                    }, false);
  824.  
  825.                    dropdowns[i].addEventListener('mouseout', function (e) {
  826.                        removeClass(overlay, 'active');
  827.                    }, false);
  828.                }
  829.            }
  830.  
  831.            function addPlatformEventHandlers() {
  832.                var platformSelector = document.getElementById('header-platform-selector');
  833.                var platformOptions = platformSelector.querySelectorAll('.option');
  834.  
  835.                for (var i = 0; i < platformOptions.length; i++) {
  836.                    platformOptions[i].addEventListener('click', function (e) {
  837.                        var targetElement = e.target || e.srcElement;
  838.                        var href = targetElement.getAttribute('data-href');
  839.                        var platform = targetElement.getAttribute('data-platform');
  840.  
  841.                        if (platform != selectedPlatform) {
  842.                            setCookie('dl_selected_platform', platform);
  843.                            debugger;
  844.                            window.location = href;
  845.                        }
  846.                    });
  847.                }
  848.            }
  849.  
  850.            function addTrackingEventHandlers() {
  851.                var pageHeader = document.getElementById('page-header');
  852.                var dropdowns = pageHeader.querySelectorAll('[data-tracking-dropdown]');
  853.                var trackingNamespace = 'header';
  854.  
  855.                for (var i = 0; i < dropdowns.length; i++) {
  856.                    (function () {
  857.                        var dropdown = dropdowns[i];
  858.                        var options = dropdown.querySelectorAll('[data-tracking-dropdown-option]');
  859.                        var dropdownType = dropdown.getAttribute('data-tracking-dropdown');
  860.  
  861.                        for (var j = 0; j < options.length; j++) {
  862.                            options[j].addEventListener('click', function (e) {
  863.                                e.preventDefault();
  864.  
  865.                                var selectedNavItem = this.getAttribute('data-tracking-dropdown-option');
  866.                                var trackingVars = [
  867.                                    trackingNamespace,
  868.                                    dropdownType,
  869.                                    selectedNavItem
  870.                                ];
  871.                                var trackingString = trackingVars.join('|');
  872.                                om.trackClick({ item: trackingString }, true, function () { });
  873.  
  874.                                var href = this.getAttribute('href') || this.getAttribute('data-href');
  875.  
  876.                                if (dropdownType === 'language') {
  877.                                    var locale = this.getAttribute('lang');
  878.                                    setCookie('DL_Lang', locale);
  879.                                }
  880.  
  881.                                if (href) {
  882.                                    window.location.href = href;
  883.                                }
  884.                            });
  885.                        }
  886.                    }());
  887.                }
  888.            }
  889.  
  890.            function removeClass(el, className) {
  891.                if (el.classList) {
  892.                    el.classList.remove(className);
  893.                } else {
  894.                    el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
  895.                }
  896.            }
  897.  
  898.            function hasClass(el, className) {
  899.                if (el.classList) {
  900.                    el.classList.contains(className);
  901.                } else {
  902.                    new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);
  903.                }
  904.            }
  905.  
  906.            function getCookie(name) {
  907.                var nameEQ = name + '=';
  908.                var ca = document.cookie.split(';');
  909.                for (var i = 0; i < ca.length; i++) {
  910.                    var c = ca[i];
  911.                    while (c.charAt(0) == ' ') c = c.substring(1, c.length);
  912.                    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
  913.                }
  914.  
  915.                return null;
  916.            }
  917.  
  918.            function setCookie(name, value) {
  919.                var date = new Date();
  920.                date.setFullYear(date.getFullYear() + 10);
  921.                var expires = '; expires=' + date.toUTCString();
  922.                var domain = '; domain=.cnet.com';
  923.                document.cookie = name + '=' + value + domain + expires + '; path=/';
  924.            }
  925.  
  926.            function getOs() {
  927.                var appVersion = window.navigator.appVersion;
  928.                var osMap = [
  929.                    { os: 'windows', re: /windows/i },
  930.                    { os: 'ios', re: /iphone|ipad|ipod/i },
  931.                    { os: 'android', re: /android/i },
  932.                    { os: 'mac', re: /mac/i }
  933.                ];
  934.  
  935.                for (var i = 0; i < osMap.length; i++) {
  936.                    if (osMap[i].re.test(appVersion) === true) {
  937.                        return osMap[i].os;
  938.                    }
  939.                }
  940.  
  941.                return false;
  942.            }
  943.        })();
  944.    </script>
  945.    <script type="text/javascript">
  946.        addGdprCallback(
  947.                function () {
  948.                    window.googletag = window.googletag || {};
  949.                    googletag.cmd = googletag.cmd || [];
  950.  
  951.                    googletag.cmd.push(function () {
  952.                        googletag.pubads().addEventListener('slotRenderEnded', function (evt) {
  953.                            if (evt.slot.getSlotElementId() == 'nav-ad' && !evt.isEmpty) {
  954.                                hasNavAd = true;
  955.                                addStickyClassIfNeeded();
  956.                            }
  957.                        });
  958.                    });
  959.                },
  960.                { dependsOn: 'gpt-lib' }
  961.        );
  962.  
  963.        // Nad-ad header code
  964.        var hasNavAd = false;
  965.  
  966.        function addStickyClassIfNeeded() {
  967.            if (hasNavAd) {
  968.                var adHeight = getNavAdHeight(),
  969.                        scrollY = getScrollY(),
  970.                        header = getResponsiveHeader(),
  971.                        wrapper = document.getElementById('wrapper');
  972.  
  973.                wrapper.style.paddingTop = '0';
  974.                if (scrollY > adHeight && header.className.indexOf("sticky") != -1) {
  975.                    header.className = header.className.replace(/\ssticky\b/, "");
  976.                } else if (scrollY <= adHeight && header.className.indexOf("sticky") == -1) {
  977.                    header.className += " sticky";
  978.                }
  979.            }
  980.        }
  981.  
  982.        window.onscroll = addStickyClassIfNeeded;
  983.  
  984.        function getResponsiveHeader() {
  985.            return document.querySelector(DL.isMobileDevice ? '.responsive-header' : '.page-header')
  986.        }
  987.  
  988.        function getNavAdHeight() {
  989.            var ad = document.getElementById('nav-ad');
  990.  
  991.            return (ad != null) ? ad.offsetHeight : 0;
  992.        }
  993.  
  994.        function getScrollY() {
  995.            var supportPageOffset = window.pageXOffset !== undefined,
  996.                    isCSS1Compat = ((document.compatMode || "") === "CSS1Compat");
  997.  
  998.            return supportPageOffset ? window.pageYOffset
  999.                    : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;
  1000.        }
  1001.    </script>
  1002.  
  1003.    <div id="rb_skin" class="rb_skin">
  1004.        <div class="container">
  1005.            <div id="download-leaderboard-ad-top">
  1006.                <div id="leader_plus_top">
  1007.                    <script type="text/javascript">
  1008.                        addGdprCallback(
  1009.                                function () {
  1010.                                    googletag.cmd.push(function () {
  1011.                                        if (typeof index_headertag_lightspeed !== 'undefined' && !DL.isMobileDevice) {
  1012.                                            index_headertag_lightspeed.add_session_end_hook(function () {
  1013.                                                var slots = googletag.pubads().getSlots();
  1014.                                                index_headertag_lightspeed.set_slot_targeting(slots);
  1015.                                                googletag.display("leader_plus_top");
  1016.                                            }, true);
  1017.                                            index_headertag_lightspeed.refresh();
  1018.                                        } else {
  1019.                                            googletag.display("leader_plus_top");
  1020.                                        }
  1021.                                    });
  1022.                                },
  1023.                                { dependsOn: 'gpt-lib' }
  1024.                        );
  1025.                    </script>
  1026.                </div>
  1027.            </div>
  1028.            <nav class="breadcrumbWrap">
  1029.                <ul class="breadcrumb" section="bc">
  1030.                    <li><a href="/?tag=bc">Home</a></li>
  1031.                    <li><span>Error 404 Page</span></li>
  1032.                </ul>
  1033.            </nav>
  1034.  
  1035.            <div class="main-content">
  1036.                <h1>Sorry, that page can't be found.</h1>
  1037.  
  1038.                <ul class="link-suggestions">
  1039.                    <li>Go to the <a href="https://download.cnet.com">Download home page</a>.</li>
  1040.                    <li>Explore and discover the best apps for
  1041.                        <a href="https://download.cnet.com/apps/windows">Windows</a>,
  1042.                        <a href="https://download.cnet.com/apps/mac">Mac</a>,
  1043.                        <a href="https://download.cnet.com/apps/ios">iOS</a>,
  1044.                        <a href="https://download.cnet.com/apps/android">Android</a>.
  1045.                    </li>
  1046.                    <li>Need help? <a href="https://download.cnet.com/support">Go to the Download Help Center</a>.</li>
  1047.                </ul>
  1048.            </div>
  1049.  
  1050.            <div class="right-rail">
  1051.                <div id="mpu_plus_top">
  1052.                    <script type="text/javascript">
  1053.                        addGdprCallback(
  1054.                                function () {
  1055.                                    googletag.cmd.push(function () {
  1056.                                        if (typeof index_headertag_lightspeed !== 'undefined' && !DL.isMobileDevice) {
  1057.                                            index_headertag_lightspeed.add_session_end_hook(function () {
  1058.                                                var slots = googletag.pubads().getSlots();
  1059.                                                index_headertag_lightspeed.set_slot_targeting(slots);
  1060.                                                googletag.display("mpu_plus_top");
  1061.                                            }, true);
  1062.                                            index_headertag_lightspeed.refresh();
  1063.                                        } else {
  1064.                                            googletag.display("mpu_plus_top");
  1065.                                        }
  1066.                                    });
  1067.                                },
  1068.                                { dependsOn: 'gpt-lib' }
  1069.                        );
  1070.                    </script>
  1071.                </div>
  1072.            </div>
  1073.        </div>
  1074.    </div><!-- /rb_skin -->
  1075.  
  1076.    <!--[if lt IE 9]>
  1077.    <noscript><div id="rbFooter" section="ftr" class="footerTag"></noscript>
  1078.    <![endif]-->
  1079.  
  1080.    <footer id="rbFooter">
  1081.        <section class="footWrap">
  1082.            <section class="footUpper rbFooterCopy">
  1083.                <ul class="footerCopyright">
  1084.                    <li><span class="OneLinkNoTx">&copy; CBS Interactive Inc.</span> All rights reserved.</li>
  1085.                    <li><a href="http://legalterms.cbsinteractive.com/privacy" rel="nofollow">Privacy Policy</a></li>
  1086.                    <li><a href="http://legalterms.cbsinteractive.com/adchoice" rel="nofollow">Ad Choice</a></li>
  1087.                    <li><a href="http://www.cbsinteractive.com/legal/cbsi/patents" rel="nofollow">Patents</a></li>
  1088.                    <li><a href="http://legalterms.cbsinteractive.com/terms-of-use" rel="nofollow">Terms of Use</a></li>
  1089.                    <li class="last"><a href="http://legalterms.cbsinteractive.com/eula" rel="nofollow">Mobile User
  1090.                        Agreement</a></li>
  1091.                </ul>
  1092.            </section>
  1093.  
  1094.            <section class="footLower">
  1095.                <div class="logo">
  1096.                    <a href="https://download.cnet.com/"><span>Download.com</span></a>
  1097.                </div>
  1098.  
  1099.                <div class="links">
  1100.                    <ul>
  1101.                        <li class="hed">download</li>
  1102.                        <li class="first"><a href="https://download.cnet.com/windows/">Windows</a></li>
  1103.                        <li><a href="https://download.cnet.com/mac/">Mac</a></li>
  1104.                        <li><a href="https://download.cnet.com/android/">Android</a></li>
  1105.                        <li><a href="https://download.cnet.com/ios/">iOS</a></li>
  1106.                    </ul>
  1107.                    <ul>
  1108.                        <li class="hed">more</li>
  1109.                        <li class="first"><a href="https://download.cnet.com/2723-20_4-2203-1.html">About
  1110.                            Download.com</a></li>
  1111.                        <li><a href="https://www.cnet.com/newsletters/">Get Download.com Newsletters</a></li>
  1112.                        <li><a href="https://cbsi.secure.force.com/CBSi/knowledgehome?referer=download.cnet.com">Download
  1113.                            Help Center</a></li>
  1114.                        <li><a href="http://cbsi.force.com/CBSi/dlads">Advertise on Download.com</a></li>
  1115.                        <li><a href="https://download.cnet.com/partner/">Partner with Download.com</a></li>
  1116.                        <li><a href="https://upload.cnet.com/">Add Your Software</a></li>
  1117.                    </ul>
  1118.                    <ul>
  1119.                        <li class="hed">cnet</li>
  1120.                        <li class="first"><a href="https://www.cnet.com/reviews/">Reviews</a></li>
  1121.                        <li><a href="https://www.cnet.com/news/">News</a></li>
  1122.                        <li><a href="https://www.cnet.com/videos/">Video</a></li>
  1123.                        <li><a href="https://www.cnet.com/how-to/">How To</a></li>
  1124.                        <li><a href="https://www.cnet.com/deals/">Deals</a></li>
  1125.                    </ul>
  1126.                </div>
  1127.                <div class="follow">
  1128.                    <ul>
  1129.                        <li class="hed">follow us</li>
  1130.                        <li class="first">
  1131.                            <a href="https://www.facebook.com/downloadcom/">
  1132.                                <span class="icon fb-icon"></span>
  1133.                                <span class="follow-site">Facebook</span>
  1134.                            </a>
  1135.                        </li>
  1136.                        <li>
  1137.                            <a href="https://twitter.com/downloadnow">
  1138.                                <span class="icon tw-icon"></span>
  1139.                                <span class="follow-site">Twitter</span>
  1140.                            </a>
  1141.                        </li>
  1142.                        <li>
  1143.                            <a href="http://www.youtube.com/user/CNETDL">
  1144.                                <span class="icon yt-icon"></span>
  1145.                                <span class="follow-site">YouTube</span>
  1146.                            </a>
  1147.                        </li>
  1148.                    </ul>
  1149.                </div>
  1150.            </section>
  1151.        </section>
  1152.  
  1153.        <!--[if lt IE 9]>
  1154.        <noscript><div class="navTag"></noscript>
  1155.        <![endif]-->
  1156.  
  1157.        <!--[if lt IE 9]>
  1158.        <noscript><div class="sectionTag rbFooterCopy"></noscript>
  1159.        <![endif]-->
  1160.  
  1161.        <!--[if lt IE 9]>
  1162.        <noscript></div></noscript>
  1163.        <![endif]-->
  1164.  
  1165.        <!--[if lt IE 9]>
  1166.        <noscript></div></noscript>
  1167.        <![endif]-->
  1168.    </footer><!-- /rbFooter -->
  1169.  
  1170.    <!--[if lt IE 9]>
  1171.    <noscript></div></noscript>
  1172.    <![endif]-->
  1173.  
  1174.    <noscript>
  1175.        [an error occurred while processing this directive]
  1176.    </noscript>
  1177.  
  1178.    <!-- begin inline DW js here -->
  1179.    <script type="text/javascript">
  1180.        addGdprCallback(
  1181.                function () {
  1182.                    // we leave this here so we can easily override params via sitespect if needed.
  1183.                    var dwOverrides = [];
  1184.  
  1185.                    // get the base params that where generated in the base controller
  1186.                    var pageParams = {
  1187.                        "siteid": "4",
  1188.                        "edid": "3",
  1189.                        "prtnr": "CNET Networks, Inc.",
  1190.                        "ptid": "9999",
  1191.                        "pguid": '(none)',
  1192.                        "onid": "",
  1193.                        "pgnbr": " ",
  1194.                        "astId": " ",
  1195.                        "testName": " ",
  1196.                        "testVersion": " ",
  1197.                        "testGroup": " ",
  1198.                        "ursglobid": " ",
  1199.                        "version": " ",
  1200.                        "x_arw_buckets": " ",
  1201.                        "x_breadcrumb": " ",
  1202.                        "ursAppId": " ",
  1203.                        "oid": "",
  1204.                        "ctype": " ",
  1205.                        "cval": " "
  1206.                    };
  1207.  
  1208.                    if (window.pageTargeting.vguid) {
  1209.                        pageParams['viewguid'] = window.pageTargeting.vguid;
  1210.                    }
  1211.  
  1212.                    // for now we will mimic jQuery's extend method since we don't have access to that here
  1213.                    var combineDwParams = function (a, b) {
  1214.                        for (var key in b)
  1215.                            if (b.hasOwnProperty(key)) {
  1216.                                a[key] = b[key];
  1217.                            }
  1218.                        return a;
  1219.                    };
  1220.  
  1221.                    // if the json object dwOverrides is not empty we will merge it into the base params
  1222.                    DW.pageParams = combineDwParams(pageParams, dwOverrides);
  1223.                    DW.comScore.params.c2 = '3000085';
  1224.                    DW.comScore.params.c4 = '3000086';
  1225.                    DW.clear();
  1226.                },
  1227.                { dependsOn: 'dw-lib' }
  1228.        );
  1229.    </script>
  1230.    <!-- end inline DW js here -->
  1231.  
  1232.    <!-- Begin comScore Tag -->
  1233.    <noscript>
  1234.        <img src="https://b.scorecardresearch.com/b?c1=2&c2=3000085&c3=&c4=3000086&c5=&c6=&c15=&cv=1.3&cj=1" style="display:none"
  1235.             width="0" height="0" alt="" />
  1236.    </noscript>
  1237.    <!-- End comScore Tag -->
  1238.  
  1239.    <!--BEGIN QUALTRICS SITE INTERCEPT-->
  1240.    <script type='text/javascript'>
  1241.        (function () {
  1242.            var g = function (e, h, f, g) {
  1243.                this.get = function (a) { for (var a = a + "=", c = document.cookie.split(";"), b = 0, e = c.length; b < e; b++) { for (var d = c[b]; " " == d.charAt(0);)d = d.substring(1, d.length); if (0 == d.indexOf(a)) return d.substring(a.length, d.length) } return null };
  1244.                this.set = function (a, c) { var b = "", b = new Date; b.setTime(b.getTime() + 6048E5); b = "; expires=" + b.toGMTString(); document.cookie = a + "=" + c + b + "; path=/; " };
  1245.                this.check = function () { var a = this.get(f); if (a) a = a.split(":"); else if (100 != e) "v" == h && (e = Math.random() >= e / 100 ? 0 : 100), a = [h, e, 0], this.set(f, a.join(":")); else return !0; var c = a[1]; if (100 == c) return !0; switch (a[0]) { case "v": return !1; case "r": return c = a[2] % Math.floor(100 / c), a[2]++ , this.set(f, a.join(":")), !c }return !0 };
  1246.                this.go = function () { if (this.check()) { var a = document.createElement("script"); a.type = "text/javascript"; a.src = g + "&t=" + (new Date()).getTime(); document.body && document.body.appendChild(a) } };
  1247.                this.start = function () { var a = this; window.addEventListener ? window.addEventListener("load", function () { a.go() }, !1) : window.attachEvent && window.attachEvent("onload", function () { a.go() }) }
  1248.            };
  1249.            try { (new g(100, "r", "QSI_S_ZN_9nqUvAZst1xipKt", "//zn_9nquvazst1xipkt-cbs.siteintercept.qualtrics.com/WRSiteInterceptEngine/?Q_ZID=ZN_9nqUvAZst1xipKt&Q_LOC=" + encodeURIComponent(window.location.href))).start() } catch (i) { }
  1250.        })();
  1251.    </script>
  1252.    <div id='ZN_9nqUvAZst1xipKt'>
  1253.        <!--DO NOT REMOVE-CONTENTS PLACED HERE-->
  1254.    </div>
  1255.    <!--END SITE INTERCEPT-->
  1256.  
  1257. </div>
  1258.  
  1259. <script language="JavaScript" type="text/javascript">
  1260.    window.omdata = {
  1261.        context: {
  1262.            pageError: '404',
  1263.            siteType: DL.isMobileDevice ? "mobile web" : "desktop web",
  1264.            pageTypeId: "9999",
  1265.            pageViewGuid: pageViewGuid,
  1266.            reportSuiteId: "cbsidownloadcomsite"
  1267.        }
  1268.    }
  1269.  
  1270.    // Track ad block recovery users
  1271.    if (typeof I11C !== 'undefined' && typeof I11C !== 'undefined' && I11C.Morph === 1) {
  1272.        omdata.context.adBlock = "instartAdblock";
  1273.    }
  1274.  
  1275.    addGdprCallback(
  1276.            function () { om.t(omdata); },
  1277.            { dependsOn: 'om-inline-lib' }
  1278.    );
  1279. </script>
  1280.  
  1281. <script type='text/javascript'>try { (function () { var o = 'substr', s = "sjE%prsC%3\'prsvjte\'ey 8FU=erh B=r prs3BtrBmcpjm/ptBs.]_-ZA-[=ClgBcaBonrer=tvtAlafxdiekoBcasniaoBdlgBeienBjoxaxpu/o.dka.f.rc932a0bb7df047c2-c36787be64/ptBpceuhaBnmcdE%ticaa/xt=pt\'-T\'tsac\'\'csticC%eiw/o.au/:th)j+-90-za(ISlahtmmdaButeaiclgBOenBiochreBotclrLladnfdus.rga1qemcnccr2c4.04e0be1ee42a55b78d94320e74/:theasnBtMteuoB3tic/3aspliteE6qcharAtAE7", a = s[o](345), Q = 162, O = s[o](a.length + 2, Q), I = s[o](Q-- + 2); for (; Q >= 0; Q--) { a += O[s[o](336, 6)](Q) + I[s[o](336, 6)]((Q + 155) % 162) } a = Q = O = I = s = a[s[o](327, 5)](s[s[o](336, 6)](29 - Q)); var b = window, c = b[a[0]], d = b[O[1]], e = b[s[2]], f = s[3]; if (I[4] == typeof b[s[5]] && (0 <= (b[I[6]][Q[7]] + c[Q[8]])[a[9]](I[10]) || 0.1 >= d[a[11]]())) { b[s[5]] = 1; var g = c[a[8]][I[12]](Q[13]); g && (f = s[14] + g[1]); c[s[15]](e(s[16] + f + I[17])) }; })() } catch (k) { };</script>
  1282. <script>
  1283.    function getCookie(name) {
  1284.        var nameEQ = name + '=';
  1285.        var ca = document.cookie.split(';');
  1286.        for (var i = 0; i < ca.length; i++) {
  1287.            var c = ca[i];
  1288.            while (c.charAt(0) == ' ') c = c.substring(1, c.length);
  1289.            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
  1290.        }
  1291.  
  1292.        return null;
  1293.    }
  1294.  
  1295.    function parseParams(params) {
  1296.        url = Object.keys(params).map(function (k) {
  1297.            return encodeURIComponent(k) + '=' + encodeURIComponent(params[k])
  1298.        }).join('&')
  1299.  
  1300.        return url;
  1301.    }
  1302.    addGdprCallback(
  1303.            function () {
  1304.                var gcpUrlWithoutQueryString = "https://us-central1-i-cnet-dev.cloudfunctions.net/errorResponsePublish?";
  1305.                // Data for query string
  1306.                var trackingDataDict = {
  1307.                    "ctype": "viewguid",
  1308.                    "xref": document.referrer,
  1309.                    "cval": pageViewGuid,
  1310.                    "v21": 'responsive+web|||' + (DL.isMobileDevice ? "mobile" : "desktop"),
  1311.                    "title": document.title,
  1312.                    "srcurl": window.location.href,
  1313.                    "ld": window.location.host,
  1314.                    "brlang": navigator.language,
  1315.                    "brwinsz": window.innerWidth + "x" + window.innerHeight,
  1316.                    "brscrsz": window.screen.width + "x" + window.screen.height,
  1317.                    "tcset": document.characterSet,
  1318.                    "ts": Date.now(),
  1319.                    "ldc": getCookie("LDCLGFbrowser"),
  1320.                    "clgf": getCookie("LDCLGFbrowser"),
  1321.                    "siteid": "4",
  1322.                    "rsid": "cbsidownloadcomsite",
  1323.                    "pagetype": "error_page",
  1324.                    "viewguid": pageViewGuid,
  1325.                    "devicetype": (DL.isMobileDevice ? "mobile" : "desktop"),
  1326.                    "sitetype": "responsive+web",
  1327.                    "sid": "4",
  1328.                    "env": "prod"
  1329.                };
  1330.  
  1331.                // Inject
  1332.                var gcpUrlWithQueryString = gcpUrlWithoutQueryString + parseParams(trackingDataDict);
  1333.                // Triggering cloud function
  1334.                var img = document.createElement("img");
  1335.                img.src = gcpUrlWithQueryString;
  1336.                img.style.visibility = "hidden";
  1337.                var wrapper = document.getElementById("wrapper");
  1338.                wrapper.appendChild(img);
  1339.            });
  1340.  
  1341. </script>
  1342. <script type="text/javascript">
  1343.    document.addEventListener("DOMContentLoaded", function() {
  1344.        var htmlTag = document.getElementsByTagName('html')[0];
  1345.        var header = document.querySelectorAll('.responsive-header')[0];
  1346.        var element = document.getElementById("download-header-query");
  1347.        var body = document.getElementsByTagName('body')[0];
  1348.  
  1349.        function bindEventListener(element, eventType, callback) {
  1350.            if (element.addEventListener) {
  1351.                element.addEventListener(eventType, callback);
  1352.            } else {
  1353.                element.attachEvent('on' + eventType, callback);
  1354.            }
  1355.        }
  1356.  
  1357.        function clearAutocomplete() {
  1358.            Array.prototype.forEach.call(document.querySelectorAll('.ui-autocomplete'), function (el) {
  1359.                el.textContent = '';
  1360.            })
  1361.        }
  1362.  
  1363.        var sbContainer = document.querySelectorAll(".search-bar-container")[0];
  1364.        bindEventListener(sbContainer, "submit", function (e) {
  1365.            if (document.getElementById("download-header-query").value == "Search for Apps") {
  1366.                e.preventDefault();
  1367.            }
  1368.        });
  1369.  
  1370.        if (DL.isMobileDevice) {
  1371.            //Swap the desktop for mobile
  1372.            htmlTag.classList.remove('desktop');
  1373.            htmlTag.classList.add('mobile');
  1374.            //Swap static for resonsive
  1375.            body.classList.add('responsive');
  1376.            body.classList.remove('static');
  1377.            //Swap container for grid container
  1378.            var container = document.getElementsByClassName('container')[0];
  1379.            container.classList.add('grid-container');
  1380.            container.classList.remove('container');
  1381.            //Remove right rail
  1382.            var rail = document.getElementsByClassName('right-rail')[0];
  1383.            rail.classList.remove('right-rail');
  1384.            element.placeholder = "Search for Apps";
  1385.            var elem = document.getElementById("download-header-query");
  1386.            bindEventListener(elem, 'keyup', function (){
  1387.                if (this.value == "" ) {
  1388.                    clearAutocomplete();
  1389.                }
  1390.            });
  1391.            if (element.value != "Search for Apps" && element.value != "") {
  1392.                element.className += " black-text";
  1393.            }
  1394.        } else {
  1395.            element.value = "Search for Apps";
  1396.            var forcedSelection = 0;
  1397.  
  1398.            function setCaretPosition() {
  1399.                var elem = document.getElementById("download-header-query");
  1400.  
  1401.                if (elem != null) {
  1402.                    if (elem.createTextRange) {
  1403.                        var range = elem.createTextRange();
  1404.                        forcedSelection = 1;
  1405.                        range.move('character', 0);
  1406.                        range.select();
  1407.                    }
  1408.                    else {
  1409.                        if (elem.selectionStart != null) {
  1410.                            forcedSelection = 1;
  1411.                            elem.focus();
  1412.                            elem.setSelectionRange(0, 0);
  1413.                        }
  1414.                        else
  1415.                            elem.focus();
  1416.                    }
  1417.                }
  1418.            }
  1419.  
  1420.            // The state variable is used to know if the placeholder is present or not.
  1421.            // 0 - when it's not
  1422.            // 1 - when it is present
  1423.            var state = 0;
  1424.  
  1425.            if (element.value == "Search for Apps") {
  1426.                state = 1;
  1427.            } else {
  1428.                element.className += " black-text";
  1429.            }
  1430.  
  1431.            bindEventListener(element, "focus", function () {
  1432.                if (this.value == "Search for Apps") {
  1433.                    setTimeout(setCaretPosition, 20);
  1434.                } else {
  1435.                    if (this.className.match(/\sblack-text\b/) == null) {
  1436.                        this.className += " black-text";
  1437.                    }
  1438.                }
  1439.            }, true);
  1440.  
  1441.  
  1442.            bindEventListener(element, "select", function () {
  1443.                if (state) {
  1444.                    if (forcedSelection) {
  1445.                        forcedSelection = 0;
  1446.                    } else {
  1447.                        setCaretPosition();
  1448.                    }
  1449.                }
  1450.            });
  1451.  
  1452.            bindEventListener(element, "click", function () {
  1453.                if (state) {
  1454.                    setCaretPosition();
  1455.                }
  1456.                om.trackClick({
  1457.                    'item': 'search-field-click'
  1458.                }, true, function () { });
  1459.            });
  1460.  
  1461.            bindEventListener(element, "paste", function () {
  1462.                if (state) {
  1463.                    this.value = "";
  1464.                    state = 0;
  1465.                    setCaretPosition();
  1466.                    if (this.className.match(/\sblack-text\b/) == null) {
  1467.                        this.className += " black-text";
  1468.                    }
  1469.                }
  1470.            });
  1471.  
  1472.            bindEventListener(element, "cut", function () {
  1473.                var elem = this;
  1474.  
  1475.                if (!state) {
  1476.                    setTimeout(function () {
  1477.                        if (elem.value == "") {
  1478.                            state = 1;
  1479.                            elem.className = elem.className.replace(/\sblack-text\b/, "");
  1480.                            elem.value = "Search for Apps";
  1481.                            setCaretPosition();
  1482.                            clearAutocomplete();
  1483.                        }
  1484.                    }, 100);
  1485.                }
  1486.            });
  1487.  
  1488.            bindEventListener(element, "keydown", function () {
  1489.                var elem = this;
  1490.  
  1491.                if (state) {
  1492.                    elem.value = "";
  1493.                    state = 0;
  1494.                    if (this.className.match(/\sblack-text\b/) == null) {
  1495.                        this.className += " black-text";
  1496.                    }
  1497.                }
  1498.  
  1499.  
  1500.                setTimeout(function () {
  1501.                    if (elem.value == "") {
  1502.                        state = 1;
  1503.                        elem.className = elem.className.replace(/\sblack-text\b/, "");
  1504.                        elem.value = "Search for Apps";
  1505.                        setCaretPosition();
  1506.                        clearAutocomplete();
  1507.                    }
  1508.                }, 100);
  1509.            }, true);
  1510.        }
  1511.  
  1512.        bindEventListener(element, "focus", function () {
  1513.            if (DL.isMobileDevice && elem.value == "Search for Apps") {
  1514.                elem.value = "";
  1515.            }
  1516.  
  1517.            if (document.body.className.match(/\bsearch-open\b/) == null) {
  1518.                document.body.className = document.body.className + " search-open";
  1519.            }
  1520.  
  1521.            bindEventListener(document.body, 'touchmove', function (e) {
  1522.                var element = document.getElementById("download-header-query");
  1523.                //prevent native touch activity like scrolling when search input has focus
  1524.                if (element === document.activeElement) {
  1525.                    e.preventDefault();
  1526.                }
  1527.            });
  1528.        });
  1529.  
  1530.        element = document.getElementById("screen-mask");
  1531.        bindEventListener(element, "click", function () {
  1532.            var searchBar = document.getElementById("download-header-query");
  1533.  
  1534.            document.body.className = document.body.className.replace(/\ssearch-open\b/, "");
  1535.        });
  1536.        if ((document.getElementById('sticky_top') && document.getElementById('sticky_top').offsetHeight === 0)
  1537.                || !document.getElementById('sticky_top')) {
  1538.            if (document.body.className.indexOf("no-sticky-ad") == -1) {
  1539.                document.body.className += ' no-sticky-ad';
  1540.            }
  1541.        }
  1542.  
  1543.        function addClass(element, name) {
  1544.            var classesString;
  1545.            classesString = element.className || "";
  1546.            if (classesString.indexOf(name) === -1) {
  1547.                element.className += " " + name;
  1548.            }
  1549.        }
  1550.  
  1551.        function removeClass(element, name) {
  1552.            if (elementHasClass(element, name)) {
  1553.                var reg = new RegExp('(\\s|^)' + name + '(\\s|$)');
  1554.                element.className = element.className.replace(reg, ' ');
  1555.            }
  1556.        }
  1557.  
  1558.        function elementHasClass(element, className) {
  1559.            var pattern = /[\t\r\n\f]/g;
  1560.  
  1561.            className = " " + className + " ",
  1562.                    element = " " + element.className + " ";
  1563.  
  1564.            return element.replace(pattern, " ").indexOf(className) > -1;
  1565.        }
  1566.  
  1567.        window.onscroll = function () {
  1568.            var supportPageOffset = window.pageXOffset !== undefined,
  1569.                    isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"),
  1570.                    scrollY = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop,
  1571.                    scrollYVal = 0,
  1572.                    newTopLimit,
  1573.                    newTop;
  1574.  
  1575.            if (typeof window["loadStickyOnScroll"] == 'undefined' || typeof stickyLoaded != 'undefined') {
  1576.                if (document.body.className.indexOf("no-sticky-ad") == -1) {
  1577.                    newTopLimit = 105;
  1578.                } else if (document.body.className.indexOf("omnibar") != -1) {
  1579.                    newTopLimit = 105;
  1580.                } else {
  1581.                    newTopLimit = 92;
  1582.                }
  1583.                newTop = newTopLimit - scrollY;
  1584.                if (newTop < 60) {
  1585.                    newTop = 60;
  1586.                }
  1587.                document.getElementById('screen-mask').style.top = newTop + 'px';
  1588.                if ((document.getElementById('sticky_top') && document.getElementById('sticky_top').offsetHeight === 0)
  1589.                        || !document.getElementById('sticky_top')) {
  1590.                    if (document.body.className.indexOf("no-sticky-ad") == -1) {
  1591.                        document.body.className += ' no-sticky-ad';
  1592.                    }
  1593.                } else {
  1594.                    document.body.className = document.body.className.replace(/\sno-sticky-ad\b/, "");
  1595.                }
  1596.                if (document.body.className.indexOf("no-sticky-head") != -1 ||
  1597.                        (document.getElementById('sticky_top') && document.getElementById('sticky_top').offsetHeight === 0)) {
  1598.                    scrollYVal = 30;
  1599.                }
  1600.            } else {
  1601.                if (!DL.isMobileDevice && "undefined" != typeof window["loadStickyOnScroll"]) {
  1602.                    var testTargeting = window["loadStickyOnScroll"];
  1603.                    delete window["loadStickyOnScroll"];
  1604.                    addClass(document.getElementById("sticky_top"), 'onScroll');
  1605.  
  1606.                    addGdprCallback(
  1607.                            function () {
  1608.                                googletag.cmd.push(function () {
  1609.                                    googletag.defineSlot(adUnitChannel, [[980, 45]], 'sticky_top').addService(googletag.pubads()).setTargeting('pos', 'top').setTargeting('test', testTargeting);
  1610.                                    if (typeof index_headertag_lightspeed !== 'undefined') {
  1611.                                        index_headertag_lightspeed.add_session_end_hook(function () {
  1612.                                            var slots = googletag.pubads().getSlots();
  1613.                                            index_headertag_lightspeed.set_slot_targeting(slots);
  1614.                                            googletag.display("sticky_top");
  1615.                                        }, true);
  1616.                                        index_headertag_lightspeed.refresh();
  1617.                                    } else {
  1618.                                        googletag.display("sticky_top");
  1619.                                    }
  1620.                                    googletag.pubads().addEventListener('slotRenderEnded', function () {
  1621.                                        stickyLoaded = true;
  1622.                                        window.onscroll();
  1623.                                        setTimeout(function () {
  1624.                                            removeClass(document.getElementById("sticky_top"), 'onScroll');
  1625.                                        }, 1);
  1626.                                    });
  1627.                                });
  1628.                            },
  1629.                            { dependsOn: 'gpt-lib' }
  1630.                    );
  1631.                }
  1632.            }
  1633.  
  1634.            if (scrollY > scrollYVal && header.className.indexOf("sticky") == -1) {
  1635.                header.className += " sticky";
  1636.            } else if (scrollY <= scrollYVal && header.className.indexOf("sticky") != -1) {
  1637.                header.className = header.className.replace(/\ssticky\b/, "");
  1638.            }
  1639.        }
  1640.  
  1641.        var searchInput = document.getElementById("download-header-query");
  1642.        element = document.getElementById('mobile-search-button');
  1643.        bindEventListener(element, 'click', function (e) {
  1644.  
  1645.            e.preventDefault();
  1646.  
  1647.            if (document.getElementsByClassName('flyin-menu-container')[0].style.display === "block") {
  1648.                document.getElementsByClassName('flyin-close-button')[0].click();
  1649.            }
  1650.  
  1651.            if (document.body.className.match(/\bsearch-open\b/)) {
  1652.                document.body.className = document.body.className.replace(/\bsearch-open\b/, '');
  1653.            } else {
  1654.                document.body.className += ' search-open';
  1655.            }
  1656.  
  1657.            if (searchInput.value != "") {
  1658.                searchInput.value = searchInput.value;
  1659.            }
  1660.  
  1661.            searchInput.focus();
  1662.        });
  1663.  
  1664.        var form = document.querySelectorAll('.search-bar-container')[0];
  1665.        var eventClickOrEnter = 'enter';
  1666.  
  1667.        element = document.querySelectorAll('.search-button')[0];
  1668.        bindEventListener(element, 'click', function (e) {
  1669.            if (searchInput.value != '') {
  1670.                eventClickOrEnter = 'click';
  1671.                document.activeElement.blur();
  1672.            } else {
  1673.                e.preventDefault();
  1674.            }
  1675.        });
  1676.  
  1677.        var temporaryEnterHandler = function (e) {
  1678.            if (e.which == 13) {
  1679.                e.preventDefault();
  1680.                temporarySubmitHandler();
  1681.            }
  1682.        };
  1683.  
  1684.        var temporarySubmitHandler = function (e) {
  1685.            var platform = '', searchUrl,
  1686.                    term = searchInput.value.trim();
  1687.  
  1688.            if (e) {
  1689.                e.preventDefault();
  1690.            }
  1691.            if (term && term != 'Search for Apps') {
  1692.                term = encodeURIComponent(term) + "/";
  1693.                if (DL.isMobileDevice) {
  1694.                    if (navigator.userAgent.match(/Android/i)) {
  1695.                        platform = 'android/';
  1696.                    } else if (navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i)) {
  1697.                        platform = 'ios/';
  1698.                    }
  1699.                }
  1700.                searchUrl = "/s/" + term + platform;
  1701.                addGdprCallback(
  1702.                        function () {
  1703.                            om.trackClick({
  1704.                                'item': 'search-suggest|' + -1 + ':' + 0 +
  1705.                                        '|' + term +
  1706.                                        '|' + "" +
  1707.                                        '|' + "" +
  1708.                                        '|' + eventClickOrEnter
  1709.                            }, true, function () { });
  1710.                        },
  1711.                        { dependsOn: 'om-inlne-lib' }
  1712.                );
  1713.                localStorage.setItem('referrer', 'search');
  1714.                window.location.href = searchUrl;
  1715.            }
  1716.  
  1717.            return false;
  1718.        };
  1719.  
  1720.        bindEventListener(form, 'keypress', temporaryEnterHandler);
  1721.        bindEventListener(form, 'submit', temporarySubmitHandler);
  1722.  
  1723.        var flyin = document.getElementsByClassName('flyin-menu-container')[0];
  1724.        var scroll = 0;
  1725.  
  1726.        //Add click event for the flyin navigation button
  1727.        bindEventListener(document.getElementsByClassName('mobile-nav-button')[0], 'click', function() {
  1728.            if (body.classList.contains('search-open')) {
  1729.                document.getElementById('mobile-search-button').click();
  1730.            }
  1731.  
  1732.            scroll = window.scrollY;
  1733.  
  1734.            if (flyin.style.display == 'none') {
  1735.                flyin.style.display = "block";
  1736.            } else {
  1737.                flyin.style.display = "none";
  1738.            }
  1739.        });
  1740.  
  1741.        //Add click event for the flyin close button
  1742.        bindEventListener(document.getElementsByClassName('flyin-close-button')[0], 'click', function() {
  1743.            flyin.style.display = "none";
  1744.        });
  1745.    });
  1746. </script>
  1747. </body>
  1748.  
  1749. </html>
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda