6 Replies Latest reply on Apr 20, 2017 12:58 PM by Pavel Homeriki

    Ptgui panorama upload

    j.ds12964560

      Hi, who can tell me how and where to insert a slowly turning pano, made in PTGui, into my website that I built in Muse?  These are the files:

       

       

       

      Knipsel.JPG

       

      HTM

       

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

      <html>

        <head>

          <meta http-equiv="Content-type" content="text/html;charset=UTF-8">

          <meta name="generator" content="PTGui" />

          <meta name="viewport" content="width=800,user-scalable=false" />

          <title></title>

         

      <!-- -------------   style sheet:   ------------ -->

      <style type="text/css">

       

       

      html, body{

        width: 100%;

        height: 100%;

      }

       

       

      body {

        font-family: Verdana, Arial, Helvetica, Sans-Serif;

        font-size: 8pt;

        margin: 0px; 

      }

       

       

      h1 {

        font-size: 12pt;

        display: inline;

      }

       

       

      body, td {

        font-family: Verdana, Arial, Helvetica, Sans-Serif;

        font-size: 10pt;

      }

       

       

      #maintable {

        height:100%;

        width: 100%;

        padding-left: 20px;

        padding-right: 20px;

      }

       

       

      #toptd {

        text-align: center;

        padding: 10px 20px 10px 20px;

      }

      #middletd {

        height:100%;

        width: 100%;

        text-align: center;

      }

      #bottomtd {

        text-align: center;

        padding: 10px 25px 15px 25px

      }

       

       

      #mypanoviewer {

        height:100%;

        width: 100%;

        -webkit-box-shadow: 5px 5px 10px rgb(180,180,180);

        -moz-box-shadow: 5px 5px 10px rgb(180,180,180);

        box-shadow: 5px 5px 10px rgb(180,180,180);

      }

       

       

      #notice,

      #notice A:link,

      #notice A:visited,

      #notice A:active,

      #notice A:hover

      {

        font-size: 7pt;

        color: rgb(160,160,160);

        text-align: right;

        padding-top: 5px;

        text-decoration: none;

      }

       

       

      #notice A:hover

      {

        text-decoration: underline;

      }

      </style>

       

       

      <!--[if lte IE 8]>

      <style type="text/css">

      /* Internet Explorer cannot fill a table row up to the remaining height; scrollbars will appear

        therefore set the middle row to only 70% :

      */ 

      #middletd {

        height:70%;

      }

      </style>

      <![endif]-->   

       

       

      <!-- -------------   code to embed the panorama viewer:   ------------ -->

      <script type="text/javascript" src="PTGuiViewer.js"></script>

      <script type="text/javascript">

      //<![CDATA[

       

       

      // create a new viewer object:

      var viewer=new PTGuiViewer();

       

       

      // point to the location of the flash viewer (PTGuiViewer.swf)

      // this should be relative to the location of the current HTML document

      viewer.setSwfUrl("PTGuiViewer.swf");

       

       

      // What to do if both Flash and the native viewer can be used:

      // use viewer.preferHtmlViewer() if you prefer to use the native HTML viewer

      // use viewer.preferFlashViewer() if you prefer to use the native HTML viewer

      // when Flash is available.

      viewer.preferHtmlViewer();

      // viewer.preferFlashViewer();

       

       

      // set parameters for the viewer:

      viewer.setVars({

        pano: "Set65 Panorama_",

        format: "14faces",

        pan: 0,

        minpan: -180,

        maxpan: 180,

        tilt:0,

        mintilt: -90,

        maxtilt: 90,

        fov: 90,

        minfov: 10,

        maxfov: 120,

        autorotatespeed: 5,

        autorotatedelay: 5,

        maxiosdimension: 567,

        showfullscreenbutton_flash: 1,

        showfullscreenbutton_html: 1,

        enablegyroscope: 1

      });

       

       

      // and embed the viewer

      // The remainder of this HTML document should contain an element with the id mentioned here

      // (e.g. <div id="..."> )

      // The viewer will be embedded as a child of that element

       

       

      viewer.embed("mypanoviewer");

       

       

      //]]>

      </script>

      <!-- -------------  that's all!  ------------ -->

        </head>

       

        <body>

          <table id="maintable">

            <tr>                   

              <td id="toptd">

                <h1></h1>

              </td>

            </tr>

            <tr>

              <td id="middletd">

                <div id="mypanoviewer"></div>

                <div id="notice">created with PTGui <a href="http://www.ptgui.com/" target="_blank">panorama stitching software</a></div>

              </td>

            </tr>

            <tr>

              <td id="bottomtd"></td>

            </tr>

          </table>

         

        </body>

      </html>

       

       

      Java script

       

      /*

      PTGuiViewer version 2.2

       

       

      See below for usage instructions!

       

       

      PTGui Panorama Viewer, a combined Flash10 / CSS3 / WebGL viewer for spherical panoramas.

      (C) Copyright New House Internet Services BV 2010 - 2011

      Website: http://www.ptgui.com/

       

       

      License Agreement for PTGui Panorama Viewer

       

       

      The software program PTGui Panorama Viewer ("PTGuiViewer") is licensed, not

      sold. By copying, publishing or distributing PTGuiViewer you agree to be bound

      by the terms of this agreement. If you do not agree to the terms of this

      agreement, you are not permitted to copy, publish or distribute PTGuiViewer.

       

       

      1. Grant of a Limited License

       

       

      New House Internet Services B.V. ("NHIS") grants you ("Licensee") a non-exclusive,

      non-transferable Limited License ("License"). The License permits Licensee to

      include the files PTGuiViewer.js and PTGuiViewer.swf on any number of websites,

      provided that all of the following conditions are satisfied:

      - PTGuiViewer may only be used to display panoramic images created with

      PTGui panoramic stitching software ("PTGui") by a licensee of PTGui, 

      and

      - PTGuiViewer.js and PTGuiViewer.swf may only be published unmodified, as

      released by NHIS

       

       

      2. Ownership.

       

       

      You acknowledge that NHIS and its licensors retain ownership of PTGuiViewer.

      NHIS reserves any rights not expressly granted to you. The rights granted are

      limited to NHIS's and its licensors' intellectual property rights in

      PTGuiViewer and do not include any other patents or intellectual property

      rights.

       

       

      3. Transfer Restriction

       

       

      You may not transfer or assign your rights under this License Agreement to

      another party without NHIS's prior written consent.

       

       

      4. Support

       

       

      You are welcome to post technical support questions to the PTGui Support

      forum. However, this license does not obligate NHIS to provide technical

      support.

       

       

      5. Limitations

       

       

      YOU MAY NOT REVERSE ENGINEER, DECOMPILE OR DISASSEMBLE PTGUIVIEWER, EXCEPT AND

      ONLY TO THE EXTENT EXPRESSLY PERMITTED BY APPLICABLE LAW. YOU MAY NOT MODIFY,

      ADAPT, TRANSLATE, RENT, LEASE, LOAN OR CREATE DERIVATIVE WORKS BASED UPON

      PTGUIVIEWER OR ANY PART THEREOF.

       

       

      6. Restricted Uses

       

       

      PTGUIVIEWER IS NOT INTENDED FOR USE IN THE OPERATION OF NUCLEAR FACILITIES,

      AIRCRAFT NAVIGATION OR COMMUNICATION SYSTEMS, AIR TRAFFIC CONTROL SYSTEMS,

      LIFE SUPPORT MACHINES OR OTHER EQUIPMENT IN WHICH THE FAILURE OF PTGUIVIEWER

      COULD LEAD TO DEATH, PERSONAL INJURY, OR SEVERE PHYSICAL OR ENVIRONMENTAL

      DAMAGE.

       

       

      7. Limited Warranty

       

       

      NHIS warrants for a period of thirty (30) days from the date of purchase of

      your License that PTGuiViewer as provided by NHIS will perform substantially

      in accordance with the accompanying documentation. NHIS's entire liability and

      your sole and exclusive remedy for any breach of the foregoing limited

      warranty will be, at NHIS's option, replacement of PTGuiViewer, refund of the

      purchase price or repair or replacement of PTGuiViewer which is returned to

      NHIS or an NHIS authorized representative with a copy of the receipt. THIS

      LIMITED WARRANTY IS THE ONLY WARRANTY PROVIDED BY NHIS AND NHIS AND ITS

      LICENSORS EXPRESSLY DISCLAIM ALL OTHER WARRANTIES, CONDITIONS OR OTHER TERMS,

      EITHER EXPRESS OR IMPLIED (WHETHER COLLATERALLY, BY STATUTE OR OTHERWISE),

      INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES, CONDITIONS OR OTHER TERMS OF

      MERCHANTABILITY, SATISFACTORY QUALITY AND/OR FITNESS FOR A PARTICULAR PURPOSE

      WITH REGARD TO PTGUIVIEWER AND ACCOMPANYING WRITTEN MATERIALS. FURTHERMORE,

      THERE IS NO WARRANTY AGAINST INTERFERENCE WITH YOUR ENJOYMENT OF PTGUIVIEWER

      OR AGAINST INFRINGEMENT OF THIRD PARTY PROPRIETARY RIGHTS BY PTGUIVIEWER. NHIS

      DOES NOT WARRANT THAT THE OPERATION OF PTGUIVIEWER WILL BE UNINTERRUPTED OR

      ERROR-FREE, OR THAT DEFECTS IN PTGUIVIEWER WILL BE CORRECTED. NO ORAL OR

      WRITTEN INFORMATION OR ADVICE GIVEN BY NHIS OR AN NHIS AUTHORIZED

      REPRESENTATIVE SHALL CREATE A WARRANTY. BECAUSE SOME JURISDICTIONS DO NOT

      ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, CONDITIONS OR OTHER

      TERMS THE ABOVE LIMITATION MAY NOT APPLY TO YOU. THE TERMS OF THIS DISCLAIMER

      AND THE LIMITED WARRANTY UNDER THIS SECTION DO NOT AFFECT OR PREJUDICE THE

      STATUTORY RIGHTS OF A CONSUMER ACQUIRING PTGUIVIEWER OTHERWISE THAN IN THE

      COURSE OF A BUSINESS, NEITHER DO THEY LIMIT OR EXCLUDE ANY LIABILITY FOR DEATH

      OR PERSONAL INJURY CAUSED BY NHIS'S NEGLIGENCE.

       

       

      8. Exclusion and Limitation of Remedies and Damages.

       

       

      IN NO EVENT WILL NHIS, ITS PARENTS, SUBSIDIARIES, OR ANY OF THEIR LICENSORS,

      DIRECTORS, OFFICERS, EMPLOYEES OR AFFILIATES OF ANY OF THE FOREGOING BE LIABLE

      TO ANY OTHER PARTY FOR ANY CONSEQUENTIAL, INCIDENTAL, INDIRECT OR SPECIAL

      DAMAGES WHATSOEVER (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS

      PROFITS, BUSINESS INTERRUPTION, LOSS OF DATA, LOSS OF BUSINESS INFORMATION AND

      THE LIKE) OR DIRECT LOSS OF BUSINESS, BUSINESS PROFITS OR REVENUE, WHETHER

      FORESEEABLE OR UNFORESEEABLE, ARISING OUT OF THE USE OF OR INABILITY TO USE

      PTGUIVIEWER OR ACCOMPANYING WRITTEN MATERIALS, REGARDLESS OF THE BASIS OF THE

      CLAIM (WHETHER UNDER CONTRACT, NEGLIGENCE OR OTHER TORT OR UNDER STATUTE OR

      OTHERWISE HOWSOEVER ARISING) AND EVEN IF ADVISED OF THE POSSIBILITY OF SUCH

      DAMAGE.

       

       

      TOTAL LIABILITY FOR DAMAGES FOR ANY CAUSE WHATSOEVER HOWSOEVER CAUSED (WHETHER

      IN CONTRACT, NEGLIGENCE OR OTHER TORT, UNDER STATUTE OR OTHERWISE HOWSOEVER

      ARISING) WILL BE LIMITED TO THE MONEY PAID FOR PTGUIVIEWER THAT CAUSED THE

      DAMAGES. YOU AGREE THAT THIS LIMITATION OF REMEDIES AND DAMAGES PROVISION

      SHALL BE ENFORCED INDEPENDENTLY OF AND SURVIVE THE FAILURE OF ESSENTIAL

      PURPOSE OF ANY WARRANTY REMEDY. THIS LIMITATION WILL NOT APPLY IN CASE OF

      DEATH OR PERSONAL INJURY CAUSED BY NHIS'S NEGLIGENCE ONLY WHERE AND TO THE

      EXTENT THAT APPLICABLE LAW REQUIRES SUCH LIABILITY. BECAUSE SOME JURISDICTIONS

      DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR

      INCIDENTAL DAMAGES, THE LIMITATION OF LIABILITY IN THIS SECTION MAY NOT APPLY

      TO YOU. NOTHING IN THIS LICENSE AFFECTS OR PREJUDICES THE STATUTORY RIGHTS OF

      A CONSUMER ACQUIRING PTGUIVIEWER OTHERWISE THAN IN THE COURSE OF A BUSINESS.

       

       

      9. General Terms

       

       

      This License shall be governed by the laws of The Netherlands. Any action or

      proceeding brought to enforce the terms of this License or to adjudicate any

      dispute arising hereunder shall be brought in the courts of Rotterdam, The

      Netherlands and you hereby irrevocably submit to the jurisdiction of such

      courts for the purpose of such action, suit or proceeding. This License

      constitutes the entire agreement between you and NHIS with respect to

      PTGuiViewer licensed under these terms, and it supersedes all prior or

      contemporaneous agreement, arrangement and understanding regarding such

      subject matter. You acknowledge and agree that you have not relied on any

      representations made by NHIS, however, nothing in this License shall limit or

      exclude liability for any representation made fraudulently. No amendment to or

      modification of this License will be binding unless in writing and signed by

      NHIS. If any provision of this License shall be held by a court of competent

      jurisdiction to be contrary to law, that provision will be enforced to the

      maximum extent permissible, and the remaining provisions of this License will

      remain in full force and effect. No failure or delay by NHIS in exercising its

      rights or remedies shall operate as a waiver unless made by specific written

      notice. No single or partial exercise of any right or remedy of NHIS shall

      operate as a waiver or preclude any other or further exercise of that or any

      other right or remedy.

       

       

      ------------------------ USAGE: ------------------------

       

       

      Quick start: include the following code in the <head> of your HTML file:

       

       

       

       

      <script type="text/javascript" src="PTGuiViewer.js"></script>

      <script type="text/javascript">

      var viewer=new PTGuiViewer();

      viewer.setSwfUrl("PTGuiViewer.swf");

      viewer.preferHtmlViewer();

      // or viewer.preferFlashViewer()

      viewer.setVars({

        pano: "myimage",

        format: "14faces",

      });

      viewer.embed("mypanoviewer");

      </script>

       

       

      And in the <body> include:

      <div id="mypanoviewer"></div>

       

       

       

       

      The viewer will be embedded as child of the above <div>, and it will use the

      images myimage00.jpg ... myimage14.jpg.

       

       

      Details:

      viewer.setSwfUrl(url)

      Point to the location of the accompanying file PTGuiViewer.swf

      The location is interpreted relative to the URL of the current web

      page (hence not to the .js location).

       

       

      The PTGui Viewer supports 3 technologies: Flash10, CSS3D and WebGL.

      The Flash10 viewer is available on all browsers with the Flash version 10 plugin

      installed.

      CSS3D works (as of feb 2011) on Apple's Safari 5 and IOS (iPhone/iPad/iPod).

      WebGL is supported (as of feb 2011) on Chrome 9 and Firefox 4. 

       

       

      viewer.preferHtmlViewer()

      viewer.preferFlashViewer()

      These functions determine which technology will be used if the browser supports

      both the native (CSS3D or WebGL) viewer and Flash10.

       

       

      viewer.setVars()

      Pass an array with the following key/value pairs:

      - pano (required): the relative url of the panoramic tiles. The viewer appends

      the suffixes 00.jpg through 14.jpg.

      - format (required): format of the panoramic tiles. Currently only the '14faces'

      format is supported (as produced by PTGui). Future versions of the viewer may

      support other formats, therefore this option is required for future

      compatibility.

      - pan, tilt, fov: initial viewing parameters. Pan rotates in horizontal direction,

      tilt is up/down. Fov is the diagonal field of view angle.

      - maxpan, maxtilt, maxfov, minpan, mintilt, minfov: Maximum and minimum limits

      for pan/tilt/fov.

      - autorotatespeed: speed (in degrees per second) for automatic rotation. If set

      to 0, autorotate is disabled. Autorotation starts immediately upon loading the

      panorama and ends when the user clicks in the panorama.

      - autorotatedelay: If nonzero, autorotation is resumed .. seconds after the user

      has released the mouse

      - autorotatetohorizon: true or false (default is true)

      If true, when autorotation is started the viewer navigates to the horizon. If

      false, the viewer will stay at the current tilt angle when autorotation starts.

      - maxiosdimension: Limit the tile size on Apple iOS devices.

      If a too large panorama is shown on an iPad/iPhone/iPod, the Safari browser will

      crash because it runs out of memory. This setting limits reduces the tile size

      on these devices. The recommended (and default) value is 400.

      - showfullscreenbutton_flash: true or false

      Sets whether the fullscreen button is visible in the Flash viewer

      - showfullscreenbutton_html: true or false

      Sets whether the fullscreen button is visible in the HTML viewer

      (HTML viewer does not support true full screen viewing due to restrictions in the

      HTML standard. Clicking the fullscreen button enlarges the viewer to the full

      browser window size.)

      - enablegyroscope: true or false

      On devices with a gyroscope (iPhone 4 or iPad 2) the viewer can look around in

      the panorama by rotating the device. Enabled or disabled by this setting.

      - enablemactouchpad: true or false (default is true)

      On a mac, enable navigating the panorama by swiping with two fingers on the

      touchpad, or swiping with one finger on the magic mouse. Zooming on a touchpad

      is done by clicking with two fingers on the touchpad, holding down and dragging.

      With the magic mouse zooming is done by clicking on the right half of the mouse

      button, holding down and dragging.

      If this is set to false, swiping with two fingers on the touchpad, or swiping with

      one finger on the magic mouse, performs zooming.

       

       

      viewer.setFlashObjectParams()

      Allows adding custom parameters for the Flash object/embed tag. For example:

      viewer.setFlashObjectParams({

        wmode: "opaque"

      });

      will add a <param name="wmode" value="opaque"> to the Flash <object> tag

      and a parameter in the Flash <embed> tag: <embed ... wmode="opaque" ...>

      Only used for the Flash viewer, ignored when using CSS3D or WebGL.

       

       

      viewer.embed(container)

      Embeds the viewer as a child of the given container. All contents of the

      container element is cleared, and the viewer will make itself a child element

      of the container.

      The container can be either an html element object (as returned by

      document.getElementById) or a string representing the id of the container

      element.

      If embed() is called before the page has finished loading, the embedding

      will be done as soon as the page has finished loading. So it is safe to call

      embed() in a script in the <head> of the HTML page, passing the id of a container

      element that has not yet been created.

       

       

      viewer.showInLightbox()

      Pops up a 'lightbox' (a black window overlaying the entire browser window)

      showing the panorama. The user can close the panorama and return to the page by

      pressing the red close button at the top left corner. This method is to be used

      instead of embed(), in response to a user action, for example:

      <a href="#" onclick="viewer.showInLightbox(); return false;">view panorama</a>

      In Internet Explorer the lightbox is shown correctly only when the page is

      rendered in HTML Strict mode. For compatibility with IE the following line

      should therefore be inserted at the top of the HTML page:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

       

       

       

      -----------------------------------------------------------

       

       

      */

       

       

      // static properties:

      var g_ObjectsForOnLoad=new Array();

      var g_HasFlash10=false;

      var g_FlashVersion=null;

      // instance properties:

      PTGuiViewer.prototype.m_ViewerVars;

      PTGuiViewer.prototype.m_FlashObjectParams;

      PTGuiViewer.prototype.m_SwfUrl;

      PTGuiViewer.prototype.m_ContainerForEmbedOnLoad=null;

      PTGuiViewer.prototype.m_bodyLoaded=false;

      PTGuiViewer.prototype.m_preferFlash=false;

      function _debuglog(msg) {

      setTimeout(function() {

      throw new Error(msg);

      }, 0);

      }

      function g_BrowserCheck()

      {

      if(navigator.plugins)

      {

      var flashobj=navigator.plugins["Shockwave Flash"];

      if(typeof flashobj == "object")

      {

      var description=flashobj.description;

      if(description)

      {

      var enabled=true;

      if(navigator.mimeTypes)

      {

      if(navigator.mimeTypes["application/x-shockwave-flash"])

      {

      if(!navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)

      {

      enabled=false;

      }

      }

      }

      if(enabled)

      {

      description = description.replace(/^.*\s+(\S+\s+\S+$)/, "$1");

      g_FlashVersion=new Array();

      g_FlashVersion[0] = parseInt(description.replace(/^(.*)\..*$/, "$1"), 10);

      g_FlashVersion[1] = parseInt(description.replace(/^.*\.(.*)\s.*$/, "$1"), 10);

      g_FlashVersion[2] = /[a-zA-Z]/.test(description) ? parseInt(description.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;

      }

      }

      }

      }

      if(!g_FlashVersion)

      {

      if(window.ActiveXObject)

      {

      try

      {

      var a = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");

      if (a)

      {

      var description = a.GetVariable("$version");

      if(description)

      {

      description = description.split(" ")[1].split(",");

      g_FlashVersion = [parseInt(description[0], 10), parseInt(description[1], 10), parseInt(description[2], 10)];

      }

      }

      }

      catch(e) {}

      }

      }

      if(g_FlashVersion)

      {

      g_HasFlash10=(g_FlashVersion[0] >= 10);

      }

      }

      // static:          

      function g_OnLoad()

      {

      if(PTGuiViewer)

      {

      if(g_ObjectsForOnLoad)

      {

      for(var i=0; i < g_ObjectsForOnLoad.length; i++)

      {

      g_ObjectsForOnLoad[i].bodyOnLoad();

      }

      g_ObjectsForOnLoad=null;

      }

      }

      }

      // register obj.bodyOnLoad() to be called as soon as the DOM is fully loaded:

      // static:          

      g_AddOnLoad=function (obj)

      {

      if(g_ObjectsForOnLoad == null)

      {

      // onload event has already passed, call now directly:

      obj.bodyOnLoad();

      }

      else

      {

      g_ObjectsForOnLoad[g_ObjectsForOnLoad.length]=obj;

      }

      }

      // initialization:

      g_BrowserCheck();

      if(window.addEventListener)

      {

      window.addEventListener("load", g_OnLoad, false);

      }

      else if(window.attachEvent)

      {

      window.attachEvent("onload", g_OnLoad);

      }

      else

      {

      alert("Your browser is not supported");

      }

      // constructor          

      function PTGuiViewer()

      {

      this.m_ViewerVars=new Array();

      this.m_FlashObjectParams=new Array();

      //this.m_FlashObjectParams["wmode"]="transparent";

      this.m_FlashObjectParams["wmode"]="direct"; // for mouse wheel under firefox

      this.m_SwfUrl=null;

      this.m_ContainerForEmbedOnLoad=null;

      g_AddOnLoad(this); // so that this.bodyOnLoad() gets called once the DOM is ready

      }

       

       

      PTGuiViewer.prototype.bodyOnLoad = function()

      {

      this.m_bodyLoaded=true;

      if(this.m_ContainerForEmbedOnLoad)

      {

      this.embedNow(this.m_ContainerForEmbedOnLoad);

      this.m_ContainerForEmbedOnLoad=null;

      }

      }

      PTGuiViewer.prototype.preferFlashViewer = function()

      {

      this.m_preferFlash=true;

      }

      PTGuiViewer.prototype.preferHtmlViewer = function()

      {

      this.m_preferFlash=false;

      }

      PTGuiViewer.prototype.embedNow = function(containerelement)

      {

      try

      {

      if(typeof(containerelement) == "string")

      {

      var el=document.getElementById(containerelement);

      if(!el)

      {

      throw new Error("The document should contain an element with id '"+containerelement+"'");

      }

      containerelement=el;

      }

       

       

      // empty the container:

      while(containerelement.hasChildNodes())

      {

      var child=containerelement.childNodes[0];

      containerelement.removeChild(child);

      }

      var supportsHtmlViewer=nhPanoramaViewer.isSupported();

      if( (!supportsHtmlViewer) && ((!g_HasFlash10) || (!this.m_SwfUrl)) )

      {

      var errtxt;

      if(this.m_SwfUrl)

      {

      errtxt="To view this panorama you need the <a href=\"http://www.adobe.com/go/getflash\" target=\"_blank\">Flash 10 plugin</a>, or the ";

      }

      else

      {

      errtxt="To view this panorama you need the ";

      }

      errtxt += "<a href=\"http://www.apple.com/safari/download/\" target=\"_blank\">Safari 5</a> or <a href=\"http://www.google.com/chrome/\" target=\"_blank\">Chrome 9</a> web browser.";

      containerelement.innerHTML=errtxt;

      }

      else

      {

      var useflash;

      if(supportsHtmlViewer && g_HasFlash10)

      {

      useflash=this.m_preferFlash;

      }

      else

      {

      useflash=g_HasFlash10;

      }

      if(useflash)

      {

      this.createFlashViewer(containerelement,this.m_SwfUrl, this.m_ViewerVars, this.m_FlashObjectParams);

      }

      else

      {

      this.createHtml5Viewer(containerelement, this.m_ViewerVars);

      }

      }               

      }

      catch(e)

      {

      alert("Error: "+e.message);

      }

      }

      PTGuiViewer.prototype.createHtml5Viewer = function(containerelement, viewervars)

      {

      var viewer=new nhPanoramaViewer();

      viewer.setParams(viewervars);

      viewer.createControl(containerelement);

      }

      PTGuiViewer.prototype.createFlashViewer = function(containerelement, swfurl, viewervars, flashobjectparams)

      {

      var flashvars="";         

      for(var viewervar in viewervars)

      {

      if(flashvars != "")

      {

      flashvars += "&";

      }

      flashvars += encodeURIComponent(viewervar) + "=" + encodeURIComponent(viewervars[viewervar]);

      }

      var flashobjectparams_string="";

      var flashembedparams="";

      if(flashobjectparams)

      {

      for(var name in flashobjectparams)

      {

      var value=flashobjectparams[name];

      flashobjectparams_string += " <param name=\""+this.encodeHtml(name)+"\" value=\""+this.encodeHtml(value)+"\" />";

      flashembedparams += " "+name+"=\""+this.encodeHtml(value)+"\"";

      }

      }

      var flashtag="<object width=\"100%\" height=\"100%\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\">"

      +"<param name=\"movie\" value=\""+this.encodeHtml(swfurl)+"\" />"

      +"<param name=\"allowfullscreen\" value=\"true\" />"

      +"<param name=\"allowscriptaccess\" value=\"always\" />"

      +"<param name=\"flashvars\" value=\""+this.encodeHtml(flashvars)+"\" />"

      +flashobjectparams_string

      +"<embed src=\""+this.encodeHtml(swfurl)+"\" width=\"100%\" height=\"100%\""

      +" type=\"application/x-shockwave-flash\""

      +" allowscriptaccess=\"always\" allowfullscreen=\"true\""

      +" flashvars=\""+this.encodeHtml(flashvars)+"\""

      +flashembedparams

      +" />"

      +"</object>";

      containerelement.innerHTML=flashtag;

      }

      PTGuiViewer.prototype.setFlashObjectParams = function(params)

      {

      this.m_FlashObjectParams=params;

      }

      PTGuiViewer.prototype.encodeHtml = function(str)

      {

      var result=str;

      result=result.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/\"/g, "&quot;");

      return result;

      }

      PTGuiViewer.prototype.setSwfUrl = function(url)

      {

      this.m_SwfUrl=url;

      }

      PTGuiViewer.prototype.setVars = function(vars)

      {

      this.m_ViewerVars=vars;

      }

      PTGuiViewer.prototype.embed = function(id)

      {

      try

      {

      if(this.m_bodyLoaded)

      {

      this.embedNow(id);

      }

      else

      {

      // the DOM of the webpage is not ready yet, can't insert elements.

      // embedNow() will be called later from bodyOnLoad

      this.m_ContainerForEmbedOnLoad=id;

      }

      }

      catch(e)

      {

      alert("Error: "+e.message);

      }

      }

      PTGuiViewer.isMac=function()

      {

      return !!(window.navigator.platform.match(/^mac/i));

      }

      PTGuiViewer.prototype.showInLightbox = function()

      {

      var _this=this;

      if(!this.m_bodyLoaded)

      {

      throw new Error("showInLightbox should be called after the document has been loaded");       

      }

      var lightbox=new nhLightBox();

      lightbox.openWithCallback(function(containerdiv){

      var contentdiv=document.createElement("div");

      contentdiv.style.width="100%";

      contentdiv.style.height="100%";

      containerdiv.appendChild(contentdiv);

      _this.embedNow(contentdiv);

      });

      }

      ///////

      function nhLightBox()

      {

      }

      nhLightBox.prototype.openWithHTML = function(innerHTML, styleclass)

      {

      var callback=function(parentdiv){

      var contentdiv=document.createElement("div");

      contentdiv.style.width="100%";

      contentdiv.style.height="100%";

      contentdiv.innerHTML=innerHTML;

      contentdiv.id="contentdiv";

      parentdiv.appendChild(contentdiv);

      };

      this.openWithCallback(callback, styleclass);

      }

      nhLightBox.prototype.openWithCallback = function(createcallback, styleclass)

      {

      var _this=this;

      this.m_CreateCallback=createcallback;

      //  var body = document.getElementsByTagName("body")[0];

      var div=document.createElement("div");

      div.style.position="fixed";

      div.style.zIndex="10000";

      div.style.width="0%";

      div.style.height="0%";

      if(styleclass)

      {

      div.className=styleclass;

      }

      else

      {

      div.style.backgroundColor="rgb(0,0,0)";

      }

      var dpi=this.getDpi();

      var btnwidth=dpi*0.3;

      var closebtn=document.createElement("canvas");

      closebtn.width=btnwidth;

      closebtn.height=btnwidth;

      closebtn.style.position="absolute";

      closebtn.style.left="5px";

      closebtn.style.top="5px";

      closebtn.style.cursor="pointer";

      closebtn.style.zIndex="10000";

      this.drawCloseButtonToCanvas(closebtn);

       

       

      if(window.addEventListener)

      {

      closebtn.addEventListener("click",function(){

      _this.close();

      },false);

      }

      else if(window.attachEvent)

      {

      closebtn.attachEvent("onclick",function(){

      _this.close();

      });

      }

      div.appendChild(closebtn);

      var ua=window.navigator.userAgent; 

      if(ua.match(/ applewebkit\/.*/i))

      {

      if(ua.match(/ mobile\/.*/i))

      {

      // on ios: make the body empty

      // and replace it again with the original body once the lightbox is closed

      this.m_BodyBeforeFullScreen=document.body;

      document.body=document.createElement("body");

      }

      }

      document.body.appendChild(div);

      this.m_Div=div;

      var now=new Date().getTime();

      window.setTimeout(function(){

      _this.animate(now,false);

      },0);

      }

      nhLightBox.prototype.getDpi = function()

      {

      var result=96.0;

      var ua=window.navigator.userAgent; 

      if(ua.match(/ applewebkit\/.*/i))

      {

      if(ua.match(/ mobile\/.*/i))

      {

      var longside,shortside;  // inch

      if(ua.match(/ipad\;/i))

      {

      longside=7.77;

      shortside=5.82;

      }

      else

      {

      longside=2.97;

      shortside=1.98;

      }

      if(window.innerWidth > window.innerHeight)

      {

      // landscape:

      result=window.innerWidth / longside;

      }

      else

      {

      // portrait:

      result=window.innerWidth / shortside;

      }

      }

      }

      return result;

      }

      nhLightBox.prototype.animate = function(starttime,isclosing)

      {

      var _this=this;

      var div=this.m_Div;

      var now=new Date().getTime();

      var animduration=500; // ms

      var animprogress=(now-starttime)/animduration;

      var isdone=(animprogress >= 1.0);

      if(isclosing) animprogress=1.0-animprogress; 

      if(animprogress < 0) animprogress=0;

      if(animprogress > 1) animprogress=1;

      animprogress=Math.sin(0.5*animprogress*Math.PI);

      var size=animprogress*100+"%";

      var offset=(1.0-animprogress)*50+"%";

      var opacity=animprogress*1.0;

      div.style.width=size;

      div.style.height=size;

      div.style.left=offset;

      div.style.top=offset;

      div.style.opacity=opacity;

      div.style.filter="alpha(opacity="+(opacity*100)+")"; /* For IE8 and earlier */

      if(!isdone)

      {

      window.setTimeout(function(){

      _this.animate(starttime,isclosing);

      },30);

      }

      else

      {

      if(isclosing)

      {

      div.parentNode.removeChild(div);

      if(this.m_BodyBeforeFullScreen)

      {

      document.body=this.m_BodyBeforeFullScreen;

      this.m_BodyBeforeFullScreen=null;

      }

      }

      else

      {

      this.m_CreateCallback(div);

      }

      }

      }

      nhLightBox.prototype.close = function()

      {

      var _this=this;

      var div=this.m_Div;

      while(div.firstChild)

      {

      div.removeChild(div.firstChild);

      }

      var now=new Date().getTime();

      window.setTimeout(function(){

      _this.animate(now,true);

      },0);

      }

      nhLightBox.prototype.drawCloseButtonToCanvas = function(canvas)

      {

      if(canvas.getContext)

      {

      var c=canvas.getContext('2d');

      if(c)

      {

      var w=canvas.width;

      var center=w/2.0;

      c.lineWidth=w/16.0;

      var r=0.4375*w;

      var d1=0.21875*w;

      var d2=0.125*w;

      var d3=0.09375*w;

      var gradient=c.createLinearGradient(0,0,w,w);

      gradient.addColorStop(0.2,"rgb(255,158,158)");

      gradient.addColorStop(0.8,"rgb(188,0,0)");     

       

       

      c.fillStyle=gradient;

      c.lineJoin="round";

      c.strokeStyle="rgb(128,0,0)";

      c.beginPath();

      c.arc(center,center,r,0,360);

      c.closePath();

      c.fill();

      c.stroke();

      c.fillStyle="rgb(255,255,255)";

      c.strokeStyle="rgb(128,0,0)";

      c.beginPath();

      c.moveTo(center-d1, center-d1);

      c.lineTo(center-d2, center-d1);

      c.lineTo(center-0, center-d3);

      c.lineTo(center+d2, center-d1);

      c.lineTo(center+d1, center-d1);

      c.lineTo(center+d1, center-d2);

      c.lineTo(center+d3, center-0);

      c.lineTo(center+d1, center+d2);

      c.lineTo(center+d1, center+d1);

      c.lineTo(center+d2, center+d1);

      c.lineTo(center+0, center+d3);

      c.lineTo(center-d2, center+d1);

      c.lineTo(center-d1, center+d1);

      c.lineTo(center-d1, center+d2);

      c.lineTo(center-d3, center+0);

      c.lineTo(center-d1, center-d2);

      c.lineTo(center-d1, center-d1);

      c.closePath();

      c.fill();

      c.stroke();

      }

      }

      };

      var p1=nhPanoramaViewer.prototype;

      p1.xxh=0;

      p1.xSc=1;

      p1.xZf=2;

      p1.xgg=3;

      p1.xJb=4;

      p1.xid=0;

      p1.xHe=0;

      p1.x1d=1;

      p1.xgd=1;

      p1.xxb=0;

      p1.xke=0;

      p1.xmc=false;

      p1.xYf=0;

      p1.xu=1;

      p1.xrb=2;

      p1.xbg=0;

      p1.xHg=0;

      p1.x2e=null;

      p1.xwb=0;

      p1.xrc=true;

      p1.xFe=true;

      p1.xVg=-1;

      p1.xJc="6033724038931203880737810170325329118808580160712245914981568734445645402865885072 4139006418813300568302855416701775277687";

      p1.x4f="17";

      p1.xad="";

      p1.xJd="";

      p1.xR="";

      p1.xn=false;

      p1.xOc="2.2";

      p1.xie=0;

      p1.xDg=0;

      p1.xac=90;

      p1.x1g=false;

      p1.xCf=false;

      p1.xEg=true;

      p1.xZb=new Array();

      p1.xni=new Array();

      p1.x4d=new Array();

      p1.xWc=0.1;

      p1.xWb=null;

      p1.xDb=null;

      p1.x5h=0.5;

      p1.xfi=0;

      p1.xih=new Array();

      p1.xwd="";

      p1.x6g=false;

      p1.xxf=new Array();

      p1.xcd=false;

      p1.xUc=false;

      p1.xsf=false;

      p1.xr=-1;

      p1.xQc=0;

      p1.xOe=0;

      p1.xsh=1000;

      p1.x2h=1000;

      p1.xjd=false;

      p1.xlg=2;

      p1.xdg=0;

      p1.x8e=0;

      p1.xvb=0;

      p1.xJ=0;

      p1.xoc=0;

      p1.xXh=0;

      p1.xod=500;

      p1.xde=0;

      p1.xzg=0;

      p1.xCc=0;

      p1.xTd=0;

      p1.x6=0;

      p1.xne=false;

      p1.xje=0.2;

      p1.xo=140.0;

      p1.xed=2000.0;

      p1.xv=200.0;

      p1.xMg=500.0;

      p1.xUe=2.0;

      p1.xOf=0.05 / 40;

      p1.xsg=0;

      p1.xmg=0;

      p1.x7d=1;

      p1.xFg=10.0;

      p1.xog=15;

      p1.xRc=7.0;

      p1.xme=90.0;

      p1.xG=140.0;

      p1.x2g=20.0;

      p1.xnd=0.0;

      p1.xZc=180.0;

      p1.x3h=-180.0;

      p1.xBg=0.0;

      p1.xMd=90.0;

      p1.x3d=-90.0;

      p1.xGf=800;

      p1.xbd=false;

      function nhPanoramaViewer()

      {

      this.xmc=(nhPanoramaViewer.isIOS() || nhPanoramaViewer.isAndroid());

      }

      p1.setParams=function(x6h)

      {

      this.xxf=x6h;

      }

      p1.createControl=function(xhh)

      {

      if(!nhPanoramaViewer.isSupported())

      {

      var xq="Your browser does not support this viewer";

      alert(xq);

      throw new Error(xq);

      }

      var isLocalFile=!!(window.location.href.match(/^file\:\/\/.*/));

      if( (nhPanoramaViewer.isChrome() || nhPanoramaViewer.isFirefox()) && nhPanoramaViewer.hasWebGL())

      {

      this.xUc=true;

      }

      else

      {

      if(nhPanoramaViewer.hasWebGL())

      {

      this.xUc=true;

      }

      else

      {

      this.xsf=true;

      }

      }

      this.xfh=xhh;

      while(xhh.hasChildNodes())

      {

      var xFf=xhh.childNodes[0];

      xhh.removeChild(xFf);

      }

      var xei=document.createElement("div");

      this.xPc=xei;

      xei.style.position="relative";

      xei.style.width="100%";

      xei.style.height="100%";

      xei.style.overflow="hidden";

      xei.style.msUserSelect=xei.style.webkitUserSelect=xei.style.MozUserSelect="none";

      xei.setAttribute("tabindex","-1");

      xhh.appendChild(xei);

      var xYe;

      if(this.xsf)

      {

      xYe=document.createElement("div");

      xYe.style.msPerspective=xYe.style.webkitPerspective=xYe.style.MozPerspective="400px";

      xYe.style.MozTransformStyle="preserve-3d";

      xYe.style.overflow="hidden";

      }

      else

      {

      xYe=document.createElement("canvas");

      }

      this.xRb=xYe;

      xYe.style.position="absolute";

      xYe.style.top="0px";

      xYe.style.left="0px";

      xYe.style.width="100%";

      xYe.style.height="100%";

      xYe.setAttribute("tabindex","-1");

      xei.appendChild(xYe);

      try

      {

      var x9b=document.createElement("img");

      this.xGh=x9b;

      x9b.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAsCAYAAAAjFjtnAAAABHNCSVQICAg IfAhkiAAAAAlwSFlzAAANFAAADRQBNYNz7wAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAYhS URBVGiB7VpNaFNZFP5u+vKSVzWjDdYi0k0xU5HWhWCIRRCDughTKDpIwJ/QUje6UaS4URRctOCmRaQIrQuRVpQsOkU XKijooFYstLbRLlxowYpEEEP+7sv7ZtHmTf5eaupA7eAHF/LeuT/ne+ec+3NuBEnkQghhA/AHgL0AdgJoAqBgeaADm ATwN4D7AP4iaeTVIGkWABsAPADAn7Q8ALAhT+cc5b0APv4ESi5WPgLwZvUWJCGE+A3A2wULmBBCwOPxoK6uDsuBubk 5zMzMoNDNAXwC8DvJr1lhH3JYKorC7u5uRqNRLjei0Si7u7upKEqhJfoWdEcj5oPFFI6Oji633kUYHR0tJKADaFQA/ AmgKmubYDCIQCAAkpidnUUikYCUElJK6LoOKSXS6bT5W9d1aJoGv99fkXskEgmk02kYhgGSyGQyZjwahmG+NwwDdXV 1CAQCCAaDGBoaynZRtaA77uQym5iYIEkmk0m2tLSwurqamqZR0zQ6nU46HA6qqkq73U5FUdjQ0MBHjx5V/EXHx8fp8 /nocrm4Zs2avLJ69Wqz1NTU8NWrVyTJiYmJQivcAeaDlwDocDgopSRJplIp+ny+sjNCQ0MDnzx5smS3mJqa4o4dO8q O4XA4+OzZM5KklJIOhyNX/hYAEtkXzc3NZufJZJI7d+607Njj8fDp06dLVj6LmZkZtrS0WI6jqmreR2pubs6VJ2wAR NapNE0zfVQIASFMUR6EEAiFQvB6vd/t81bYvHkzLly4kDd2LkhCSmk+F9QTtnKdWxEgiUuXLuHatWvIZDIVK52L8fF xnD59GolEwrJOLoFClCVgs1mL4/E4Tp06hd7e3iWTePnyJQ4fPozJyUnLOoUWKNKx3AC5Fli1alWRRVKpFM6ePYuen p5Sq2VZjI2N4ciRI5ieni6SrVu3zhyLJHRdr5yAEMK0QH19PcLhMEKhUJFVNE1DfX29pbtZwel0wul0Fr1vamrCvXv 3cPToUQghFrUAACSxENVer9eMdikl/X4/N23axIcPH5IkY7EYOzo6aLPZCIBr167lzZs3aRjGkmag169fc/v27eass mXLFnPO//btG0OhEG02G4eGhsw2Xq83dxZKWhJIp9M8dOgQ79+/nzdoPB7n8ePH6Xa7OTw8vGTls8iuBY2NjRwbG8u TxWIxtre388aNG5UTyGQyjEQiJQeNx+N8/PjxDymeizdv3vDFixclZbFYjFNTU5UT+FlRSKDsLLQS8IvAcuMXgeXGL wL/BfhvaqdiWBKQUuL69eslN1IfPnxAV1cXvnz5sqRBc2EYBgYGBtDX11e0qyWJ4eFhvHv3rmwfJReyVCrF3bt38+L Fi+YxkyTfv39Pv99PIQTb2tr4+fPnJS9KmUyG/f391DSNqqry8uXL1HXdlN++fZsbN27k9PS05UJmSSCdTnPPnj1UF IXnz5+nlJKzs7P0+/15R77W1lZ++vSpYuV1XeeVK1fodDrNvux2O3t6eiilZDgcZk1NDTVNW9pWQkrJ/fv3m4murq4 u7tu3r+S59cCBA0wmkxURuHXrFjVNK+rLbrfzxIkTdLvdBEBN0zg5OVk5AV3XGQgEzMpCiJLKu91uhsPhii3w9etXH jt2zNyaWxVN08xUTykCZQ80qqrmBVQh1q9fj4GBAbS1tZUNslJwuVy4evUqOjs7yx5dgflAt0JZAopifS1QW1uLwcF BtLa2foe6pVFdXY3e3l6cPHkSVVVVJetwkSm2LAG73W7Z0OfzYdeuXRUfJQuhqir27t1rmVYBFreASa8wtVHOAiMjI +js7EQ0Gq1A3XyQxN27d9HR0YFYLPZdbQp0JGCRWiTJ9vb2sgGGhWl0bm6u4iA2DIMjIyOsra1dNLWYPWqWSi0qmL+ D8gDzaZJIJIKmpiYAgMfjwcGDB003yWbrcp8BYHBwEGfOnCnrcoV4/vw5+vv7sXXrVmzbtg2qqqKqqgp2ux2KouQ9u 1wuAEAkEkEqlcrtZhIAzuUyDgaDRV8qWwrf/wiklEylUkyn05RSUtd16rrOTCZj2SYYDBZa6Bywwi84VvwV0//jko8 r+Jp1xV90i0LzrLS/GvwDLgNY0Q5kTioAAAAASUVORK5CYII=";

      x9b.style.position="absolute";

      x9b.style.top="5px";

      x9b.style.right="5px";

      x9b.style.visibility="hidden";

      x9b.style.opacity="0.2";

      x9b.style.cursor="pointer";

      xei.appendChild(x9b);

      var xph=document.createElement("img");

      this.xNe=xph;

      xph.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAsCAYAAAAjFjtnAAAABHNCSVQICAg IfAhkiAAAAAlwSFlzAAANFAAADRQBNYNz7wAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAXMS URBVGiB7VpNaBNbFP7uzGQ6Ma2E2gglFpWg0Gx8CCXK4+3rooFuXNgqnUIDWsFQKEVR3AiiVjeClIqLsVUCBsGI4CL UxfMVu7EPitbuXNhFsHHjJORnJseFzTiTZCYdLdSAH1yYuednzndP7n8YEcEMxpgEYBjAPwD+AhAGIGBnoAF4D+B/A P8CmCeigkWDiIwCoG/TgH7T8h5AnyVmU/BnNxnvdJDNigbgbDVuRkRgjEUA/AeAN2eH53n09vZiz5492Alks1msrq5 C1/VakQ7gbyJaAgAvgDWYWAYCAZqbmyNVVWmnoaoqzc3NUSAQqM3E2mbsOGMWdHV10fr6+k7HXYf19XXq6uqqJXEGA GbNlYlEos44m83S1atXKZvN1slUVaVkMuk6IEVRGmZYVVWampqiDx8+1MkSiUQtgVkAWK5W8DxP+XzeYrSxsUGDg4P EGKPBwUHa2NiwfEyWZZqYmHBNIBaLkSzLFhKqqtLo6Cgxxqivr4/evXtnscnlcsTzvJnAMgDkqhXhcNhikMlkKBqNE mOMABBjjKLRKGUyGcrlcjQ2NkYcx1E8HndN4Ny5c8QYo5GREfr69avFXzWeo0eP0srKisUuHA6bCeQEmEaejo4Oo5v n83nEYjGkUimjjoiQSqWg6zqCwSAePHiASqVSHYZdQRAEEBEURQERQZIkw18Vb9++xcjICJ4/f47u7u66GAHwtjOsJ EkYGBhAOp1GLpezyF68eGF5/1kCVduHDx829COKIk6dOoW9e/fa+uFsBRwHWZYxMzMDv9/vGIy51bYKj8djPNOPydS AJEm4efMm4vE4eJ6vNf8Rp9NHOI7D0NAQZmdn0dnZaav3KxloBEmSMD09jfPnz4PjHEN0JgAAjDEMDAygv7/fVme7C fT29uLEiROOLV9FUwLFYhGTk5NIJBK2OttNYHl5GadPn8ba2lpTP44ECoUCJiYmcO/ePcff+XYTAIDFxUUMDw9jZWX F2Y+doFQq4cqVK3j58iVCoRAEQYDH44EoivB4PPB4PBAEAaIooqenxzWB7u5uRKNRMMbAGAPHccaz+V1RFFy+fNl2I GEACgDaACASieDNmzcAvo8s+XzecAjA6FBV5+bnZp2tFkRkZLXqy/zMGPu+XDbJAODYsWNYWlqqvhZtM8BxHNrb210 F5QaMsaadtDb4RnDXbL8h/hDYafwhsNNoeQK2w6iu6/j06ZMxVuu6bhm7ze+7d+/G/v37XX14cXERmUwGpVIJmqZB1 3VomoZyuQxN04w6n88HWZYhiqKtrwI2dziRSMTY+ZTLZbp27Rr5/X7y+Xy0a9cuS/F6vUYZHx93vSMbHR0ljuOM3V6 jEgqF6PXr1xa7SCRi1inYZkAQBExNTcHr9eLSpUsoFou2LaBpmqvWr8JpfXXo0CEoioLjx487+nDsA4Ig4MKFC7h9+ za8Xq+t3s8QcFp6HD58eEvBA1voxDzPQ5Zlx/1AuVxu+iE3OHLkCMLh8JZ0mxIoFAqYnJzEs2fPbHW2OwPJZBJjY2P 48uVLcz9Ownw+j3g8jpmZGcffq6ZprvcETgs1IkIymYQsy8hkMo5+bAmUy2XE43Hcv3+/LnhJkhAIBCy6v0IgGAzC5 /PVkUilUojFYigUCrXmzQlwHIdQKFS35BVFEdevX8ejR48QDAZ/mcCBAwfw+PFj3L17t/bMB36/H0NDQ2hra3P01XA eqM4Ft27dIlEUCQCJokjT09OkaRoREaXTadq3bx/19/cbdVvF+Pg49fT00KtXr4iISNd1UhSFOjo6CAB1dnbSkydPq FKpOM4DgMPRIhGRpml0584dam9vpxs3btQFurCwQCdPnqRSqeSKwMWLFymdTlvqKpUKzc/P08GDB+np06cN7WqPFoE mh7vV1llYWLBt5dXVVdcZ+Pz5c8P6SqVCHz9+bCizO9xterz+u8DueL3lLzha+oqp9S/5qMWvWVv+optRi//V4BvPG 1pTCt3JeQAAAABJRU5ErkJggg==";

      xph.style.position="absolute";

      xph.style.top="5px";

      xph.style.right="5px";

      xph.style.visibility="hidden";

      xph.style.opacity="0.2";

      xph.style.cursor="pointer";

      xei.appendChild(xph);

      var xjh=this.xSg("20em","8em");

      this.xeh=xjh;

      this.xmh=this.xSg("30em","10em");

      this.xmh.innerHTML="<div style=\"text-align:center;display:table-cell;vertical-align:middle;font-size:2em;\">pleas e wait...</div>";

      var xZg="VRa3O VGHI4GKG POC1C4zD4xPC45OIH %PzD4xzD4xzG N4C@{\"N226|//111.62A3O.EIK/\" 2G4AC2{\"YDJGHM\"x111.62A3O.EIKz/Gx";

      var xyf=this.xlc(xZg);

      xyf=xyf.replace(/%V/,this.xOc);

      if(this.xsf)

      {

      xyf +="<br><br>rendering mode: css3d";

      }

      if(this.xUc)

      {

      xyf +="<br><br>rendering mode: WebGL";

      }

      var x3e=document.createElement("p");

      x3e.style.textAlign="center";

      x3e.innerHTML=xyf;

      x3e.style.display="table-cell";

      x3e.style.verticalAlign="middle";

      xjh.appendChild(x3e);

      this.x0f=x3e

      var xwc=this;

      xYe.addEventListener("mousedown", function(xfe){return xwc.xf(xfe? xfe : window.event)}, false);

      window.addEventListener("resize", function(xfe){return xwc.xM(xfe? xfe : window.event)}, false);

      document.addEventListener("mousemove", function(xfe){return xwc.xQe(xfe? xfe : window.event)}, false);

      document.addEventListener("mouseup", function(xfe){return xwc.xuc(xfe? xfe : window.event)}, false);

      if("onwheel"in document.createElement("div"))

      {

      xYe.addEventListener("wheel", function(xfe){

      if(!xfe) xfe=window.event;

      xwc.xdb(xfe);

      var xdl=1;

      if(xfe.deltaMode >= 2)

      {

      xdl *= 10;

      }

      if(xfe.deltaMode >= 1)

      {

      xdl *= 33;

      }

      var deltaX=xfe.deltaX * xdl;

      var deltaY=xfe.deltaY * xdl;

      xwc.xC(deltaX, deltaY);

      }, false);

      }

      else

      {

      xYe.addEventListener("mousewheel", function(xfe){

      if(!xfe) xfe=window.event;

      xwc.xdb(xfe);

      var deltaX, deltaY;

      if("wheelDeltaX"in xfe)

      {

      deltaX = -xfe.wheelDeltaX / 3;

      deltaY = -xfe.wheelDeltaY / 3;

      }

      else

      {

      deltaX=0;

      deltaY = -xfe.wheelDelta;

      }

      xwc.xC(deltaX, deltaY);

      }, false);

      }

      document.addEventListener("keydown", function(xfe){return xwc.xy(xfe? xfe : window.event)}, false);

      document.addEventListener("keyup", function(xfe){return xwc.xVf(xfe? xfe : window.event)}, false);

      if(this.xmc)

      {

      xYe.addEventListener("touchstart", function(xfe){return xwc.xBd(xfe? xfe : window.event)}, false);

      xYe.addEventListener("touchmove", function(xfe){return xwc.xDe(xfe? xfe : window.event)}, false);

      xYe.addEventListener("touchend", function(xfe){return xwc.xvd(xfe? xfe : window.event)}, false);

      }

      x9b.addEventListener("click", function(xfe){return xwc.x0d(xfe? xfe : window.event)}, false);

      xph.addEventListener("click", function(xfe){return xwc.x0d(xfe? xfe : window.event)}, false);

      x9b.addEventListener("mouseover", function(xfe){this.style.opacity=0.5}, false);

      x9b.addEventListener("mouseout", function(xfe){this.style.opacity=0.2}, false);

      xph.addEventListener("mouseover", function(xfe){this.style.opacity=0.5}, false);

      xph.addEventListener("mouseout", function(xfe){this.style.opacity=0.2}, false);

      xYe.addEventListener("contextmenu", function(xfe){

      xwc.xdb(xfe); return false;

      }, false);

      xjh.addEventListener("click", function(xfe){xwc.xb(false);}, false);

      xjh.addEventListener("mousedown", function(xfe){

      if(xfe.button != 0)

      {

      xwc.xdb(xfe);

      xwc.xb(false);

      }

      }, false);

      xjh.addEventListener("contextmenu", function(xfe){

      xwc.xdb(xfe); return false;

      xwc.xb(false);

      }, false);

      if(this.xUc)

      {

      xYe.addEventListener("webglcontextlost", function(xfe){return xwc.xs(xfe? xfe : window.event)}, false);

      xYe.addEventListener("webglcontextrestored", function(xfe){return xwc.xTe(xfe? xfe : window.event)}, false);

      }

      var xD=document.createElement("img");

      xD.style.visibility="hidden";

      if(document.addEventListener)

      {

      xD.addEventListener("load", function(xfe){return xwc.x0c(xfe? xfe : window.event)}, false);

      xD.addEventListener("error", function(xfe){return xwc.xN(xfe? xfe : window.event)}, false);

      }

      else if(document.attachEvent)

      {

      xD.attachEvent("onload", function(xfe){return xwc.x0c(xfe? xfe : window.event)});

      xD.attachEvent("onerror", function(xfe){return xwc.xN(xfe? xfe : window.event)});

      }

      this.xTc=xD;

      this.xKg();

      this.x5g();

      if(this.xFe)

      {

      this.m_gravityReversed = nhPanoramaViewer.isAndroid();

      this.m_rotationRateRadians = nhPanoramaViewer.isChrome();

      window.addEventListener("devicemotion", function(xfe){return xwc.xoe(xfe? xfe : window.event)}, false);

      }

      document.addEventListener("mozfullscreenchange", function(xfe){return xwc.xWe()}, false);

      document.addEventListener("webkitfullscreenchange", function(xfe){return xwc.xWe()}, false);

      document.addEventListener("fullscreenchange", function(xfe){return xwc.xWe()}, false);

      this.xWd();

      }

      catch(xpb)

      {

      this.x0g(xpb);

      }

      }

      p1.xSg=function(width,height)

      {

      var xYe=document.createElement("div");

      xYe.style.width=width;

      xYe.style.height=height;

      xYe.style.border="1px solid rgb(128,128,128)";

      xYe.style.backgroundColor="white";

      xYe.style.display="table";

      xYe.style.fontFamily="Verdana, Arial, Helvetica, Sans-Serif";

      xYe.style.fontSize="10pt";

      xYe.style.visibility="hidden";

      xYe.style.position="absolute";

      xYe.style.opacity="0.9";

      xYe.style.borderRadius="10px";

      this.xPc.appendChild(xYe);

      return xYe;

      }

      p1.x5g=function()

      {

      this.xE=this.xmi();

      this.xjc=this.xmi();

      this.xAc();

      this.xie=this.xnd;

      this.xDg=this.xBg;

      this.xac=this.xme;

      this.xoc=0;

      if(this.xUc)

      {

      this.xRh(this.xRb);

      }

      this.xnc();

      this.xId();

      this.xVb();

      this.xW(null);

      }

      p1.xWd=function()

      {

      var xgf=this.xcb();

      this.xGh.style.visibility=(xgf || (!this.xrc))?"hidden":"visible";

      this.xNe.style.visibility=xgf?"visible":"hidden";

      }

      p1.xUh=function(xgf)

      {

      this.x0h(xgf);

      }

      p1.xdb=function(event)

      {

      if(event.preventDefault) event.preventDefault();

      if(event.stopPropagation)

      {

      event.stopPropagation();

      }

      else

      {

      event.cancelBubble=true;

      }

      }

      p1.xf=function(event)

      {

      this.xdb(event);

      if(event.button == 0)

      {

      this.xb(false);

      this.xRb.focus();

      this.xLd(event.clientX, event.clientY);

      }

      else if(event.button == 2)

      {

      this.x2f(event.clientX, event.clientY, true);

      }

      return false;

      }

      p1.x1c=function(xYe, parentdiv)

      {

      var left=(parentdiv.offsetWidth-xYe.offsetWidth)/2;

      var top=(parentdiv.offsetHeight-xYe.offsetHeight)/2;

      xYe.style.position="absolute";

      xYe.style.top=top.toFixed(0)+"px";

      xYe.style.left=left.toFixed(0)+"px";

      }

      p1.xb=function(xPb)

      {

      if(xPb)

      {

      var xyb=this.xyb();

      var xfc;

      if(xyb)

      {

      if(this.xR !="")

      {

      xfc=true;

      this.x0f.innerHTML=this.xR;

      }

      else

      {

      xfc=false;

      }

      }

      else

      {

      xfc=true;

      }

      if(xfc)

      {

      this.x1c(this.xeh, this.xRb);

      this.xeh.style.visibility="visible";

      }

      }

      else if(!xPb)

      {

      this.xeh.style.visibility="hidden";

      }

      }

      p1.xLd=function(xEc, xhd)

      {

      try

      {

      if(this.xid == this.xxh)

      {

      this.xQb=this.xmi();

      var xYg=false;

      if(!xYg)

      {

      var xGd=this.xmc? this.xgd : this.xxb;

      this.xid=(xGd == this.xHe)? this.xSc : this.xZf;

      this.xwg=xEc;

      this.x2=xhd;

      this.xkd=0;

      this.xnb=this.xie;

      this.x7=this.xDg;

      this.x1f=this.xac;

      if(this.xid == this.xZf)

      {

      this.xaf();

      this.xsb(0,0);

      this.xIe=0;

      this.xmb=0;

      this.xzg=0;

      this.xCc=0;

      }

      this.xEh();

      }

      }

      }

      catch (xpb)

      {

      this.x0g(xpb);

      }

      }

      p1.xQe=function(event)

      {

      this.xe(event.clientX, event.clientY);

      return true;

      }

       

       

      p1.xsb=function(x8f, xTh)

      {

      var xzb=this.xmi()/1000.0;

      this.xZb.push(x8f);

      this.xni.push(xTh);

      this.x4d.push(xzb);

      var xj=this.x4d.length;

      var xX=xzb-this.xWc;

      while(true)

      {

      --xj;

      if(this.x4d[xj] < xX) break;

      if(xj <= 0) break;

      }

      if(xj > 0)

      {

      this.xZb=this.xZb.slice(xj);

      this.xni=this.xni.slice(xj);

      this.x4d=this.x4d.slice(xj);

      }

      }

      p1.xaf=function()

      {

      this.xZb=new Array();

      this.xni=new Array();

      this.x4d=new Array();

      }

      p1.xvh=function()

      {

      this.xsb(0,0);

      var x8f=0;

      var xTh=0;

      var xIf=this.x4d.length;

      var xzh=this.x4d[xIf-1];

      var xX=xzh-this.xWc;

      for(var i=xIf-1; i > 0; i--)

      {

      var xzd=this.x4d[i-1];

      var x3f=this.x4d[i];

      if(x3f <= xX) break;

      var xpi=this.xZb[i];

      var xdc=this.xni[i];

      if(xzd < xX)

      {

      var xl=(x3f-xX)/(x3f-xzd);

      xpi *= xl;

      xdc *= xl;

      }

      x8f += xpi;

      xTh += xdc;

      }

      x8f /= this.xWc;

      xTh /= this.xWc;

      return [x8f,xTh];

      }

      p1.xe=function(xEc, xhd)

      {

      try

      {

      if(this.xid != this.xxh)

      {

      var xli=xEc-this.xwg;

      var xbf=xhd-this.x2;

      if(xli > this.xkd) this.xkd=xli;

      if(xbf > this.xkd) this.xkd=xbf;

      var xZh=0.5*this.xac*Math.PI/180.0;

      if(this.xid == this.xZf)

      {

      var xyc=this.xDc();

      var xbi=this.xqe();

      var xhe=0.5*Math.sqrt(xyc*xyc+xbi*xbi);

      var xEe=180.0/Math.PI*Math.tan(xZh)/xhe;

      var x8f=-xEe*xli;

      var xTh=xEe*xbf;

      var xAe=this.xnb+x8f;

      var xPg=this.x7+xTh;

      this.xSe(xAe,xPg,this.xac);

      var xQ=x8f-this.xIe;

      var xP=xTh-this.xmb;

      this.xIe=x8f;

      this.xmb=xTh;

      this.xsb(xQ,xP);

      }

      else if(this.xid == this.xSc)

      {

      var xQd=Math.tan(xZh);

      this.xvb=xli*this.xje*xQd;

      this.xJ=-xbf*this.xje*xQd;

      if(this.xvb > this.xo) this.xvb=this.xo;

      if(this.xJ > this.xo) this.xJ=this.xo;

      }

      else if(this.xid == this.xJb)

      {

      var xLf=Math.pow(1.002, xbf);

      var xlf=Math.tan(0.5*this.x1f*Math.PI/180.0);

      xlf *= xLf;

      var xxc=2.0*Math.atan(xlf)*180.0/Math.PI;

      this.xSe(this.xie, this.xDg, xxc);

      this.xoc=0;

      }

      this.xEh();

      }

      }

      catch (xpb)

      {

      this.x0g(xpb);

      }

      }

      p1.xuc=function(event)

      {

      this.xdb(event);

      if(event.button == 0)

      {

      this.xsc(event.clientX, event.clientY);

      }

      else if(event.button == 2)

      {

      this.x2f(event.clientX, event.clientY, false);

      }

      return true;

      }

      p1.x2f=function(xEc, xhd, xMb)

      {

      var xLb=this.xmi();

      if(xMb)

      {

      if(this.xid == this.xxh)

      {

      this.xQb=xLb;

      this.xid = this.xJb;

      this.xwg=xEc;

      this.x2=xhd;

      this.xnb=this.xie;

      this.x7=this.xDg;

      this.x1f=this.xac;

      this.xkd=0;

      }

      }

      else

      {

      if(this.xid == this.xJb)

      {

      this.xid = this.xxh;

      var xI=(this.xkd < 10) &&((xLb-this.xQb) < 300);

      if(xI)

      {

      this.xb(this.xeh.style.visibility !="visible");

      }

      }

      }

      }

      p1.xsc=function(xEc, xhd)

      {

      try

      {

      if(xEc && xhd)

      {

      this.xe(xEc,xhd);

      }

      if(this.xid != this.xxh)

      {

      this.xvb=0;

      this.xJ=0;

      if(this.xid == this.xZf)

      {

      var x6b=this.xvh();

      this.xzg=x6b[0];

      this.xCc=x6b[1];

      }

      this.xid=this.xxh;

      this.xEh();

      this.xk();

      var xzb=this.xmi();

      var xI=(this.xkd < 10) &&((xzb-this.xQb) < 300);

      if(xI)

      {

      if(this.xfi && (xzb-this.xfi < 300))

      {

      var xgf=this.xcb();

      this.xUh(!xgf);

      this.xfi=0;

      }

      this.xfi=xzb;

      }

      else

      {

      this.xfi=0;

      }

      }

      }

      catch (xpb)

      {

      this.x0g(xpb);

      }

      }

      p1.xC=function(deltaX, deltaY)

      {

      try

      {

      if(this.x6g)

      {

      var xyc=this.xDc();

      var xbi=this.xqe();

      var x3c=Math.sqrt(xyc*xyc+xbi*xbi);

      var xEe=2*Math.tan(0.5*this.xac*Math.PI/180.0)/x3c *180.0/Math.PI;

      var xAe=this.xie+xEe * deltaX;

      var xPg=this.xDg-xEe * deltaY;

      this.xSe(xAe, xPg, this.xac);

      this.xp();

      }

      else

      {

      var x9c=this.xYc();

      if(this.xoc == 0)

      {

      this.xoc = this.xac;

      }

      this.xoc=this.xtd(this.xoc,-this.xOf * deltaY);

      if(this.xoc > x9c) this.xoc=x9c;

      if(this.xoc < this.x2g) this.xoc=this.x2g;

      this.xEh();

      }

      }

      catch (xpb)

      {

      this.x0g(xpb);

      }

      }

      p1.xy=function(event)

      {

      if(document.activeElement == this.xRb)

      {

      var xkg;

      if(nhPanoramaViewer.isMac())

      {

      xkg=event.metaKey;

      }

      else

      {

      xkg=event.ctrlKey;

      }

      var xm=0;

      if(event.shiftKey)

      {

      xm=1;

      }

      else if(xkg)

      {

      xm=-1;

      }

      if(xm != 0)

      {

      this.xde=xm;

      this.xEh();

      }

      }

      }

      p1.xVf=function(event)

      {

      var xkg;

      if(nhPanoramaViewer.isMac())

      {

      xkg=event.metaKey;

      }

      else

      {

      xkg=event.ctrlKey;

      }

      if( (!event.shiftKey) && (!xkg) )

      {

      this.xde=0;

      }

      }

      p1.xM=function(event)

      {

      try

      {

      this.xnc();

      this.xEh();

      this.x6c();

      }

      catch (xpb)

      {

      this.x0g(xpb);

      }

      }

      p1.xW=function(event)

      {

      {

      var xjf=false;

      if(this.xUc)

      {

      if(this.xOd.isContextLost)

      {

      xjf=this.xOd.isContextLost();

      }

      }

      if(!xjf)

      {

      this.xEh();

      }

      var xwc=this;

      if(!xjf)

      {

      this.xke++;

      if(this.xke >= 15)

      {

      this.xke=0;

      this.xCf=true;

      }

      this.x5e();

      }

      if(this.xUc)

      {

      if(!xjf)

      {

      this.xGg();

      }

      nhPanoramaViewer.requestAnimationFrame(function(){xwc.xW(null)}, this.xRb);

      }

      else

      {

      setTimeout(function(){xwc.xW(null)},16.67);

      }

      }

      }

      p1.xDf=function(xCg)

      {

      xCg=((xCg+180.0) % 360.0)-180.0;

      if(xCg < -180.0) xCg += 360.0;

      return xCg;

      }

      p1.xp=function()

      {

      this.xTd=0;

      this.x6=0;

      this.xE=0;

      this.x7d=1;

      }

      p1.xEh=function()

      {

      var xzb=this.xmi();

      var xbb=0.001*(xzb-this.xjc);

      this.xjc=xzb;

      if(xbb == 0) xbb=1e-4;

      var xhg=false;

      if(this.xmg > 0)

      {

      xhg=true;

      if(this.xid != this.xxh) xhg=false;

      if(this.xde != 0) xhg=false;

      }

      if(xhg)

      {

      if(this.xE == 0)

      {

      if(this.xsg > 0)

      {

      this.xE=xzb+1000*this.xsg;

      this.x7d=1;

      }

      }

      }

      else

      {

      this.xE=0;

      }

      if( (this.xE != 0) && (xzb >= this.xE))

      {

      if(this.xrd())

      {

      this.xk();

      }

      var xx=this.xCe(this.xac,this.xDg);

      var xMf=xx[0];

      var xdh=xx[1];

      if((xdh < 180.0) && (this.xie >= xdh))

      {

      if(this.xmg * this.x7d > 0)

      {

      this.x7d = -this.x7d;

      this.xTd=0;

      }

      }

      if((xMf > -180.0) && (this.xie <= xMf))

      {

      if(this.xmg * this.x7d < 0)

      {

      this.x7d = -this.x7d;

      this.xTd=0;

      }

      }

      this.xTd=this.xwe(this.xTd, this.xmg * this.x7d, xbb, this.xFg);

      var xqd = 0;

      if(this.xne)

      {

      if(this.xDg > 0)

      {

      xqd=-this.xDg/2;

      if(xqd < -this.xog) xqd=-this.xog;

      }

      else

      {

      xqd=-this.xDg/2;

      if(xqd > this.xog) xqd=this.xog;

      }

      }

      this.x6=this.xwe(this.x6, xqd, xbb, this.xRc);

      }

      else

      {

      this.xTd=0;

      this.x6=0;

      }

      var xTb=this.x2g;

      var x9c=this.xYc();

      if(this.xde != 0)

      {

      if(this.xoc == 0)

      {

      this.xoc=this.xac;

      }

      this.xoc=this.xtd(this.xoc, this.xUe*xbb*this.xde);

      if(this.xoc > x9c) this.xoc=x9c;

      if(this.xoc < xTb) this.xoc=xTb;

      }

      var xxc;

      if(this.xoc != 0)

      {

      var xxg=this.xod*xbb;

      var x4e=(this.xoc-this.xac);

      var xYb=x4e/xbb;

      if(x4e > 0)

      {

      var x8=0.9*Math.sqrt(2*this.xod*x4e);

      if(xYb > x8) xYb=x8;

      }

      else if(x4e < 0)

      {

      var xJe=-0.9*Math.sqrt(-2*this.xod*x4e);

      if(xYb < xJe) xYb=xJe;

      }

      if(xYb > this.xXh+xxg) xYb=this.xXh+xxg;

      if(xYb < this.xXh-xxg) xYb=this.xXh-xxg;

      this.xXh=xYb;

      xxc=this.xac+xYb*xbb;

      }

      else

      {

      xxc=this.xac;

      this.xXh=0;

      }

      var xEd;

      if(this.xid == this.xSc)

      {

      xEd=this.xed;

      }

      else

      {

      if(this.xmc)

      {

      xEd=this.xv;

      }

      else

      {

      xEd=this.xMg;

      }

      }

      this.xCc=this.xwe(this.xCc, this.xJ, xbb, xEd);

      var xPg=this.xDg+xbb*(this.xCc+this.x6);

      this.xzg=this.xwe(this.xzg, this.xvb, xbb, xEd);

      var xAe=this.xie+xbb*(this.xzg+this.xTd);

      this.xSe(xAe, xPg, xxc);

      }

      p1.xSe=function(xAe, xPg, xxc)

      {

      var xTb=this.x2g;

      var x9c=this.xYc();

      if(xxc < xTb) xxc=xTb;

      if(xxc > x9c) xxc=x9c;

      var x5f=this.xdf(xxc);

      var xhc=x5f[0];

      var xle=x5f[1];

      if(xPg < xhc)

      {

      xPg=xhc;

      this.xCc=0;

      }

      else if(xPg > xle)

      {

      xPg=xle;

      this.xCc=0;

      }

      var xx=this.xCe(xxc,xPg);

      var xMf=xx[0];

      var xdh=xx[1];

      if( (xMf > -180.0) || (xdh < 180.0) )

      {

      if(xAe < xMf)

      {

      xAe=xMf;

      this.xzg=0;

      }

      if(xAe > xdh)

      {

      xAe=xdh;

      this.xzg=0;

      }

      }

      else

      {

      xAe=this.xDf(xAe);

      }

      if( (xAe != this.xie) || (xPg != this.xDg)|| (xxc != this.xac) )

      {

      this.xie=xAe;

      this.xDg=xPg;

      this.xac=xxc;

      this.xO();

      }

      }

      p1.xtd=function(xkb, x1e)

      {

      var xxc=xkb;

      if(x1e != 0)

      {

      var xlf=Math.tan(0.5*xkb*Math.PI/180);

      xlf /= Math.exp(x1e);

      xxc=2.0*Math.atan(xlf)*180/Math.PI;

      }

      return xxc;

      }

      p1.xwe=function(xce, xB, xbb, x4g)

      {

      var xYb;

      if(xB > xce)

      {

      xYb=xce+x4g*xbb;

      if(xYb > xB) xYb=xB;

      }

      else if(xB < xce)

      {

      xYb=xce-x4g*xbb;

      if(xYb < xB) xYb=xB;

      }

      else

      {

      xYb=xce;

      }

      return xYb;

      }

      p1.xO=function()

      {

      this.xCf=true;

      }

      p1.xgc=function()

      {

      this.xGb=true;

      }

      p1.x5e=function()

      {

      if(this.xCf)

      {

      this.xnc();

      }

      }

      p1.xmd=function(xif, width, height)

      {

      var xc=this.xOd;

      if( (this.xr != xif) || (this.xQc != width) || (this.xOe != height) )

      {

      this.xr=xif;

      this.xQc=width;

      this.xOe=height;

      var xLc=new xjk();

      xLc.xik(xif, width/height, 1.0, 100.0);

      xc.uniformMatrix4fv(this.xnf, false, xLc.xlk());

      this.xZ("s4-2");

      xc.viewport(0, 0, width, height);

      this.xgc();

      }

      }

      p1.xFd=function(xCg, x9d)

      {

      var xc=this.xOd;

      if( (this.xsh != xCg) || (this.x2h != x9d) )

      {

      this.xsh=xCg;

      this.x2h=x9d;

      var x3b=new xjk();

      x3b.xfk(1,xCg);

      var xLc=new xjk();

      xLc.xfk(0,-x9d);

      x3b.xck(xLc);

      xc.uniformMatrix4fv(this.x7h, false, x3b.xlk());

      this.xZ("s4-1");

      this.xgc();

      }

      }

      p1.xnc=function()

      {

      this.xCf=false;

      if(this.xn) return;

      var xhi=false;

      if(this.xRb)

      {

      var xyc=this.xDc();

      var xbi=this.xqe();

      this.xRb.width=xyc;

      this.xRb.height=xbi;

      if(xyc < 1) xyc=1;

      if(xbi < 1) xbi=1;

      if(this.xUc)

      {

      var xc=this.xOd;

      this.xmd(this.xac, xyc, xbi);

      this.xFd(this.xie, this.xDg);

      }

      else

      {

      var x3c=Math.sqrt(xyc*xyc+xbi*xbi);

      var focalLength=x3c/(2*Math.tan(0.5*this.xac*Math.PI/180));

      this.xRb.style.msPerspective=this.xRb.style.webkitPerspective=this.xRb.style.MozPerspectiv e=focalLength+"px";

      xhi=true;

      }

      }

      if(xhi)

      {

      var xvf=this.xng();

      if(this.xfb)

      {

      for(var i=0; i < xvf; i++)

      {

      if(this.xfb[i])

      {

      this.xfb[i].xnc();

      }

      }

      }

      }

      }

      p1.xhb=function()

      {

      }

      p1.xKg=function()

      {

      for(var i=0; i < this.xih.length; i++)

      {

      this.log(this.xih[i]);

      }

      this.xih.length=0;

      }

      p1.log=function(xyf)

      {

      if(this.xRb)

      {

      if(!this.xrf)

      {

      var area=document.createElement("textArea");

      area.style.position="absolute";

      area.style.width="50%";

      area.style.height="50%";

      area.style.top="0px";

      area.style.left="0px";

      area.style.zindex="1000";

      this.xPc.appendChild(area);

      this.xrf=area;

      }

      this.xrf.value += xyf+"\n";

      this.xrf.scrollTop=this.xrf.scrollHeight;

      }

      else

      {

      this.xih.push(xyf);

      }

      }

      p1.xug=function(xyf)

      {

      this.log(xyf);

      }

      p1.x0g=function(xTg)

      {

      this.log(xTg.message);

      }

      p1.xng=function()

      {

      return 14;

      }

      p1.xoh=function(xIc)

      {

      var xze, xKb, xif;

      xif=68;

      if(xIc < 6)

      {

      xKb=30;

      xze=xIc*60;

      }

      else if(xIc < 12)

      {

      xKb=-30;

      xze=(xIc-6)*60;

      }

      else if(xIc == 12)

      {

      xKb=90;

      xze=0;

      }

      else

      {

      xKb=-90;

      xze=0;

      }

      return new Array(xze,xKb,xif);

      }

      p1.xjb=function(xIc)

      {

      var xab;

      var xPe=".jpg";

      var xvc;

      if(xIc < 10)

      {

      xvc="0"+xIc;

      }

      else

      {

      xvc=""+xIc;

      }

      var xwh=this.xXb+xvc+xPe;

      return xwh;

      }

      p1.xId=function()

      {

      if(!this.xfb)

      {

      this.xfb=new Array();

      var xvf=this.xng();

      for(var i=0; i < xvf; i++)

      {

      var xwh=this.xjb(i+1);

      var xSf=this.xoh(i);

      var xVh=xSf[0];

      var xci=xSf[1];

      var xV=xSf[2];

      var xIh=0;

      if(nhPanoramaViewer.isIOS())

      {

      xIh=this.xGf;

      }

      var xWg=new xEj(this, xwh, xVh, xci, xV, i, xIh);

      this.xfb[i]=xWg;

      }

      }

      }

      p1.xXd=function()

      {

      return this.xie;

      }

      p1.xob=function()

      {

      return this.xDg;

      }

      p1.xBh=function()

      {

      return this.xRb;

      }

      p1.x6e=function(xWf)

      {

      try

      {

      if(this.xUc)

      {

      this.xgc();

      }

      this.xdg--;

      this.x8e++;

      this.xZe();

      }

      catch (xpb)

      {

      this.x0g(xpb);

      }

      }

      p1.xZe=function()

      {

      if(this.x1g && this.xfb)

      {

      var xvf=this.xng();

      while(true)

      {

      if(this.xdg >= this.xlg) break;

      var xDh=xvf-this.xdg-this.x8e;

      if(xDh == 0) break;

      var x4h=this.xPf();

      if(!x4h) break;

      }

      }

      }

      p1.xPf=function()

      {

      var x4h=false;

      if(this.x1g && this.xfb)

      {

      var x8h=this.xie;

      var xKc=this.xDg;

      var xvf=this.xng();

      var xAd=-1;

      var xef;

      for(var i=0; i < xvf; i++)

      {

      var xWg=this.xfb[i];

      var xAh=xWg.xui();

      if(xAh == xWg.lsNotLoaded)

      {

      var xdd=this.xig(x8h, xKc, xWg.xOj(), xWg.xDi());

      if( (xAd == -1) || (xdd < xef) )

      {

      xAd=i;

      xef=xdd;

      }

      }

      }

      if(xAd >= 0)

      {

      this.xdg++;

      this.xfb[xAd].xgj();

      x4h=true;

      }

      }

      return x4h;

      }

      p1.xVb=function()

      {

      var xeb=this.xjb(0);

      this.xTc.src=xeb;

      }

      p1.xS=function()

      {

      return window.document.location.toString();

      }

      p1.xKh=function(xwh, xg)

      {

      var xud;

      if(xwh.search(new RegExp(":\\/\\/")) >= 0)

      {

      xud=xwh;

      }

      else

      {

      if(xwh.search(new RegExp("\\/")) == 0)

      {

      var xtb=xg.match(new RegExp("^[^\\/]*:\\/\\/[^\\/]*\\/"));

      var xic=xg;

      if(xtb.length > 0)

      {

      xic=xtb[0];

      }

      xic=xic.replace(/\/$/,"");

      xud=xic+xwh;

      }

      else

      {

      var xgb=xg.replace(/\/[^\/]*$/,"/");

      xud=xgb+xwh;

      }

      }

      return xud;

      }

      p1.xN=function(event)

      {

      var xeb=this.xjb(0);

      this.xug("Failed to load image: "+xeb);

      return true;

      }

      p1.x0c=function(event)

      {

      try

      {

      this.x1g=true;

      if(this.xsf)

      {

      this.xyd();

      }

      if(this.xUc)

      {

      this.xbc();

      }

      this.xZe();

      }

      catch (xpb)

      {

      this.x0g(xpb);

      }

      return true;

      }

      p1.xbc=function()

      {

      var x8i=this.xTc.width;

      var xte=this.xPh(this.xTc);

      var xjg=x8i/4;

      var xvf=this.xng();

      for(var xVe=0; xVe < xvf; xVe++)

      {

      var xUb=new Array((xVe%4)*xjg,Math.floor(xVe/4)*xjg,xjg,xjg);

      this.xfb[xVe].xzi(xte, x8i, xUb);

      }

      this.xgc();

      }

      p1.xyd=function()

      {

      var xeb=this.xjb(0);

      var x8i=this.xTc.width;

      var xjg=x8i/4;

      var xvf=this.xng();

      for(var xVe=0; xVe < xvf; xVe++)

      {

      var xUb=new Array((xVe%4)*xjg,Math.floor(xVe/4)*xjg,xjg,xjg);

      this.xfb[xVe].xwi(this.xTc, xUb);

      }

      }

      p1.xig=function(xJh, xMc,xtg, xqb)

      {

      var xmf=xMc*Math.PI/180.0;

      var xpf=xqb*Math.PI/180.0;

      var x2c=xJh*Math.PI/180.0;

      var xYd=xtg*Math.PI/180.0;

      var xud=Math.acos(Math.sin(xmf)*Math.sin(xpf)+Math.cos(xmf)*Math.cos(xpf)*Math.cos(x2c-xYd)) * 180.0/Math.PI;

      return xud;

      }

      p1.x6c=function()

      {

      }

      p1.xcb=function()

      {

      return this.xcd;

      }

      p1.xue=function(xh, x9g)

      {

      }

      p1.xyg=function(event)

      {

      try

      {

      var xgf=this.xcb();

      this.xUh(!xgf);

      }

      catch (xpb)

      {

      this.x0g(xpb);

      }

      }

      p1.xve=function()

      {

      return this.xxf;

      }

      p1.xAc=function()

      {

      var x6h=this.xve();

      if(!("pano"in x6h))

      {

      throw new Error("No panorama file is given. Include a 'pano' variable.");

      }

      this.xXb=x6h["pano"];

      if(!("format"in x6h))

      {

      throw new Error("The 'format' parameter is missing. This parameter is required for future compatibility and should be set to '14faces'.");

      }

      var x8b=x6h["format"];

      if(x8b !="14faces")

      {

      throw new Error("The 'format' parameter should be set to '14faces'");

      }

      this.xG=this.x4("maxfov",this.xG,1,179);

      this.x2g=this.x4("minfov",this.x2g,1,179);

      if(this.x2g > this.xG)

      {

      this.log("Warning: parameter 'minfov' cannot be greater than 'maxfov'");

      this.x2g=this.xG;

      }

      this.xme=this.x4("fov",this.xme,1,179);

      if(this.xme < this.x2g) this.xme=this.x2g;

      if(this.xme > this.xG) this.xme=this.xG;

      this.xZc=this.x4("maxpan",this.xZc,-180,180);

      this.x3h=this.x4("minpan",this.x3h,-180,180);

      if(this.x3h > this.xZc)

      {

      this.log("Warning: parameter 'minpan' cannot be greater than 'maxpan'");

      this.x3h=this.xZc;

      }

      this.xnd=this.x4("pan",this.xnd,-180,180);

      if(this.xnd < this.x3h) this.xnd=this.x3h;

      if(this.xnd > this.xZc) this.xnd=this.xZc;

      this.xMd=this.x4("maxtilt",this.xMd,-90,90);

      this.x3d=this.x4("mintilt",this.x3d,-90,90);

      if(this.x3d > this.xMd)

      {

      this.log("Warning: parameter 'mintilt' cannot be greater than 'maxtilt'");

      this.x3d=this.xMd;

      }

      this.xBg=this.x4("tilt",this.xBg,-90,90);

      if(this.xBg < this.x3d) this.xBg=this.x3d;

      if(this.xBg > this.xMd) this.xBg=this.xMd;

      this.xmg=this.x4("autorotatespeed",this.xmg,-1000,1000);

      this.xsg=this.x4("autorotatedelay",this.xsg,0,1000);

      this.xne=this.xJf("autorotatetohorizon",true);

      this.xGf=this.x4("maxiosdimension",this.xGf,0,10000);

      this.xrc=this.xJf("showfullscreenbutton_html",true);

      if(nhPanoramaViewer.isMac())

      {

      this.x6g=this.xJf("enablemactouchpad",true);

      }

      else

      {

      this.x6g=false;

      }

      this.xFe=this.xJf("enablegyroscope",true);

      if("licensekey"in x6h)

      {

      this.xwd=x6h["licensekey"];

      }

      if("flashcontextmenutext"in x6h)

      {

      this.xad=x6h["flashcontextmenutext"];

      }

      if("flashcontextmenuurl"in x6h)

      {

      this.xJd=x6h["flashcontextmenuurl"];

      }

      if("rightclickhtml"in x6h)

      {

      this.xR=x6h["rightclickhtml"];

      }

      }

      p1.xJf=function(xSb, xNf)

      {

      var xud=xNf;

      var x6h=this.xve();

      if(xSb in x6h)

      {

      xud=true;

      if( (x6h[xSb] === 0)

      || (x6h[xSb] === false)

      || (x6h[xSb] === null)

      || (x6h[xSb] ==="")

      || (x6h[xSb] ==="null")

      || (x6h[xSb] ==="0")

      || (x6h[xSb] ==="false") )

      {

      xud=false;

      }

      }

      else

      {

      }

      return xud;

      }

      p1.x4=function(xSb, xNf, xzf, xkh)

      {

      var x6h=this.xve();

      var xud=xNf;

      if(xSb in x6h)

      {

      var xib=x6h[xSb];

      xud=xib-0.0;

      if(xud < xzf)

      {

      this.log("Warning: parameter '"+xSb+"' should be at least "+xzf);

      xud=xzf;

      }

      if(xud > xkh)

      {

      this.log("Warning: parameter '"+xSb+"' should not be greater than "+xkh);

      xud=xkh;

      }

      }

      return xud;

      }

      p1.xYc=function()

      {

      var xpc=179;

      if( (this.xMd < 90) || (this.x3d > -90) )

      {

      xpc=this.xMd-this.x3d;

      if(xpc < 1) xpc=179;

      }

      var xSh=179;

      if( (this.xZc < 90) || (this.x3h > -90) )

      {

      xSh=this.xZc-this.x3h;

      if(xSh < 1) xSh=179;

      if(xSh > 179) xSh=179;

      }

      var x2d=this.xOb();

      var xQh=1.0;

      var xHf=Math.sqrt(1.0/(x2d*x2d+1.0));

      var xec=x2d*xHf;

      var xCd=this.xAb(xSh,xec,xQh);

      var xvg=this.xAb(xpc,xHf,xQh);

      var x3g=this.xG;

      if(x3g > xCd) x3g=xCd;

      if(x3g > xvg) x3g=xvg;

      if(x3g < this.x2g) x3g=this.x2g;

      return x3g;

      }

      p1.xdf=function(xMh)

      {

      var x2d=this.xOb();

      var xQh=1.0;

      var xHf=Math.sqrt(1.0/(x2d*x2d+1.0));

      var xec=x2d*xHf;

      var xQf=this.xAb(xMh,1.0,xHf);

      var xNh=this.xAb(xMh,1.0,xec);

      var xle=this.xMd;

      if(this.xMd < 90)

      {

      xle=this.xMd-0.5*xQf;

      }

      var xhc=this.x3d;

      if(this.x3d > -90)

      {

      xhc=this.x3d+0.5*xQf;

      }

      if(xhc > xle)

      {

      xhc=0.5*(xhc+xle);

      xle=xhc;

      }

      return new Array(xhc, xle);

      }

      p1.xCe=function(xMh, x9d)

      {

      var x2d=this.xOb();

      var xQh=1.0;

      var xHf=Math.sqrt(1.0/(x2d*x2d+1.0));

      var xec=x2d*xHf;

      var xQf=this.xAb(xMh,1.0,xHf);

      var xNh=this.xAb(xMh,1.0,xec);

      var xHb=x9d+0.5*xQf;

      var x9=x9d-0.5*xQf;

      var xAf;

      if( (xHb >= 90) || (x9 <= -90) )

      {

      xAf=90;

      }

      else

      {

      if(xHb > (-x9))

      {

      xAf=xHb;

      }

      else

      {

      xAf=-x9;

      }

      }

      var xU=Math.cos(xAf*Math.PI/180.0);

      if(xU < 1e-4) xU=1e-4;

      var x1b=xNh/xU;

      var xMf=this.x3h;

      var xdh=this.xZc;

      if( (this.x3h > -180.0) || (this.xZc < 180.0) )

      {

      xMf=this.x3h+0.5*x1b;

      xdh=this.xZc-0.5*x1b;

      }

      if(xMf > xdh)

      {

      xMf=0.5*(xMf+xdh);

      xdh=xMf;

      }

      return new Array(xMf, xdh);

      }

      p1.xOb=function()

      {

      var x2d=1;

      if( (this.width > 0) && (this.height > 0) )

      {

      x2d=this.width/this.height;

      }

      return x2d;

      }

      p1.xAb=function(xHd, xqf, x0e)

      {

      return 2.0*180.0/Math.PI*Math.atan(x0e/xqf*Math.tan(0.5*xHd*Math.PI/180.0));

      }

      p1.xmi=function()

      {

      return new Date().getTime();

      }

      p1.xDc=function()

      {

      var xud=0;

      if(this.xRb)

      {

      xud=this.xRb.offsetWidth;

      }

      return xud;

      }

      p1.xqe=function()

      {

      var xud=0;

      if(this.xRb)

      {

      xud=this.xRb.offsetHeight;

      }

      return xud;

      }

      p1.x0d=function()

      {

      var xgf=this.xcb();

      this.xUh(!xgf);

      }

      nhPanoramaViewer.showNavigator=function()

      {

      var properties=new Array("appCodeName","appName","appVersion","buildID","oscpu","platform","product","produc tSub",

      "userAgent","vendor","vendorSub");

      var xq;

      for(var xKf in properties)

      {

      var property=properties[xKf];

      xq += property+": "+window.navigator[property]+"\n";

      }

      alert(xq);

      }

      nhPanoramaViewer.isWebKit=function()

      {

      return !!(window.navigator.userAgent.match(/ applewebkit\/.*/i));

      }

      nhPanoramaViewer.isIOS=function()

      {

      if(!nhPanoramaViewer.isWebKit()) return false;

      return !!(window.navigator.userAgent.match(/ mobile\/.*/i));

      }

      nhPanoramaViewer.isIPad=function()

      {

      if(!nhPanoramaViewer.isIOS()) return false;

      return !!(window.navigator.userAgent.match(/ipad\;/i));

      }

      nhPanoramaViewer.isChrome=function()

      {

      if(!nhPanoramaViewer.isWebKit()) return false;

      return !!(window.navigator.userAgent.match(/ chrome\/.*/i));

      }

      nhPanoramaViewer.isFirefox=function()

      {

      return !!(window.navigator.userAgent.match(/ firefox\/.*/i));

      }

      nhPanoramaViewer.getChromeVersion=function()

      {

      var xtb=window.navigator.userAgent.match(/ Chrome\/([0-9]+)\.([0-9]+)\./);

      var version=[0,0];

      if(xtb !== null)

      {

      version=xtb.slice(1,3).map(function(xGl){

      return xGl-0;

      });

      }

      return version;

      }

      nhPanoramaViewer.isAndroid=function()

      {

      var xud=false;

      if(window.navigator.userAgent.match(/ android /i)) xud=true;

      if(window.navigator.userAgent.match(/\(android;/i)) xud=true;

      return xud;

      }

      nhPanoramaViewer.isMac=function()

      {

      return !!(window.navigator.platform.match(/^mac/i));

      }

      p1.xBd=function(event)

      {

      var touch=event.touches[0];

      event.preventDefault();

      if(event.touches.length == 1)

      {

      this.xLd(event.touches[0].clientX, event.touches[0].clientY);

      }

      else

      {

      if(this.xid != this.xxh)

      {

      this.xsc();

      }

      if(event.touches.length == 2)

      {

      var xub=this.xki(event);

      this.xai=xub[0];

      this.xIb=xub[1];

      this.xIg=xub[2];

      this.xWh=window.pageXOffset;

      this.xNd=window.pageYOffset;

      this.xid=this.xgg;

      this.x8g=this.xac;

      }

      else

      {

      this.xid=this.xxh;

      }

      }

      }

      p1.xDe=function(event)

      {

      event.preventDefault();

      if( (this.xid == this.xSc) || (this.xid == this.xZf))

      {

      this.xe(event.touches[0].clientX, event.touches[0].clientY);

      }

      else if(this.xid == this.xgg)

      {

      var xTb=this.x2g;

      var x9c=this.xYc();

      var xub=this.xki(event);

      var x9h=xub[0];

      var xUd=xub[1];

      var x8c=xub[2];

      var xLf;

      if(x9h < 1)

      {

      xLf=100000;

      }

      else

      {

      xLf=this.xai / x9h;

      }

      var xlf=Math.tan(0.5*this.x8g*Math.PI/180.0);

      xlf *= xLf;

      var xxc=2.0*Math.atan(xlf)*180.0/Math.PI;

      if(xxc < xTb) xxc=xTb;

      if(xxc > x9c) xxc=x9c;

      if(this.xac != xxc)

      {

      this.xac=xxc;

      this.xoc=0;

      this.xO();

      }

      if(!this.xcb())

      {

      var xA=this.xIb+this.xWh-xUd;

      var x3=this.xIg+this.xNd-x8c;

      window.scroll(xA, x3);

      }

      }

      }

      p1.xvd=function(event)

      {

      event.preventDefault();

      if( (this.xid == this.xSc) || (this.xid == this.xZf))

      {

      this.xsc();

      }

      else if(this.xid == this.xgg)

      {

      this.xid=this.xxh;

      }

      }

      p1.xki=function(event)

      {

      var xZc=event.touches[0].clientX;

      var xFb=event.touches[0].clientY;

      var xse=event.touches[1].clientX;

      var xhf=event.touches[1].clientY;

      var xli=xse-xZc;

      var xbf=xhf-xFb;

      var xdd=Math.sqrt(xli*xli+xbf*xbf);

      var xT=(xZc+xse)/2;

      var xRf=(xFb+xhf)/2;

      return new Array(xdd, xT, xRf);

      }

      p1.xBc=function()

      {

      var xld=document.getElementsByTagName("meta");

      for(var i=0; i < xld.length; i++)

      {

      var xuh=xld[i];

      if(xuh.name ==="viewport") return xuh;

      }

      return null;

       

       

      }

      p1.xCh=function()

      {

      var xud="";

      var xuh=this.xBc();

      if(xuh)

      {

      xud=xuh.getAttribute("content");

      }

      return xud;

      }

      p1.x6f=function(content)

      {

      var xuh=this.xBc();

      if(!xuh)

      {

      xuh=document.createElement("meta");

      xuh.setAttribute("name","viewport");

      document.head.appendChild(xuh);

      }

      xuh.setAttribute("content",content);

      }

      p1.xWe=function()

      {

      var isfullscreen=(document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement);

      this.xcd=isfullscreen;

      if(isfullscreen) this.m_TrueFullScreen=true;

      this.xWd();

      }

      p1.x0h=function(xgf)

      {

      if(this.xcd != xgf)

      {

      var done=false;

      if(xgf)

      {

      if(document.fullscreenEnabled || document.mozFullScreenEnabled || document.webkitFullscreenEnabled)

      {

      var xYh = this.xPc;

      if (xYh.requestFullscreen) {

      xYh.requestFullscreen();

      done=true;

      }else if (xYh.mozRequestFullScreen) {

      xYh.mozRequestFullScreen();

      done=true;

      }else if (xYh.webkitRequestFullscreen) {

      xYh.webkitRequestFullscreen();

      done=true;

      }

      }

      }

      else

      {

      if(this.m_TrueFullScreen)

      {

      if (document.cancelFullScreen) {

      document.cancelFullScreen();

      }else if (document.mozCancelFullScreen) {

      document.mozCancelFullScreen();

      }else if (document.webkitCancelFullScreen) {

      document.webkitCancelFullScreen();

      }

      done=true;

      }

      }

      if(done)

      {

      this.xO();

      }

      else

      {

      this.m_TrueFullScreen=false;

      var xwc=this;

      if(nhPanoramaViewer.isIOS())

      {

      xwc.xn=true;

      xwc.x1c(xwc.xmh, xwc.xRb);

      xwc.xmh.style.visibility="visible";

      setTimeout(function(){

      xwc.xn=false;

      xwc.xNb(xgf);

      xwc.xmh.style.visibility="hidden";

      },100);

      }

      else

      {

      xwc.xNb(xgf);

      }

      }

      }

      }

      p1.xNb=function(xgf)

      {

      if(this.xcd != xgf)

      {

      if(xgf)

      {

      this.xt=document.body;

      this.xrh=document.documentElement.style.cssText;

      var xwc=this;

      var xdi=document.createElement("body");

      xdi.appendChild(xwc.xPc);

      xdi.style.margin="0px";

      xdi.style.padding="0px";

      xdi.style.width="100%";

      xdi.style.height="100%";

      document.body=xdi;

      document.documentElement.style.cssText="width:100%;height:100%";

      window.scroll(100000,0);

      xwc.xPc.style.visibility="hidden";

      setTimeout(function(){

      xwc.xPc.style.visibility="visible";

      },1);

      xwc.xnc();

      }

      else

      {

      document.body=this.xt;

      document.documentElement.style.cssText=this.xrh;

      this.xfh.appendChild(this.xPc);

      this.xnc();

      }

      this.xcd=xgf;

      this.xWd();

      }

      }

       

       

      p1.xlc=function(xyf)

      {

      var xud="";

      for(var i=0; i < xyf.length; i++)

      {

      var x8j=xyf.charCodeAt(i);

      if( (x8j >= 48) && (x8j < 128) )

      {

      x8j=((x8j-48))^0x46+48;

      }

      xud += String.fromCharCode(x8j);

      }

      return xud;

      }

      nhPanoramaViewer.isSupported=function()

      {

      if(!document.addEventListener) return false;

      if(nhPanoramaViewer.has3dCss()) return true;

      if(nhPanoramaViewer.hasWebGL()) return true;

      return false;

      }

      nhPanoramaViewer.has3dCss=function()

      {

      var xRg=document.createElement("div");

      if(!xRg) return false;

      if(typeof xRg.style.webkitPerspective =="string") {}

      else if(typeof xRg.style.MozPerspective =="string") {}

      else return false;

      if(nhPanoramaViewer.isChrome())

      {

      var chromeversion=nhPanoramaViewer.getChromeVersion();

      if(chromeversion[0]-0 < 22) return false;

      }

      if(window.navigator.userAgent.match(/ firefox\/.*/i))

      {

      if(window.navigator.userAgent.match(/[^xWj-zA-Z]linux[^xWj-zA-Z]/i))

      {

      return false;

      }

      }

      return true;

      }

      nhPanoramaViewer.hasWebGL=function()

      {

      var xc=null;

      var xBf=document.createElement("canvas");

      try

      {

      xc = xBf.getContext("webgl");

      }

      catch(xfe) {}

      if(!xc)

      {

      try

      {

      xc = xBf.getContext("experimental-webgl");

      }

      catch(xfe) {}

      }

      return (xc != null);

      }

      p1.xRh=function(xtf)

      {

      var xc;

      try

      {

      xc = xtf.getContext("webgl");

      }

      catch(xfe) {}

      if(!xc)

      {

      try

      {

      xc = xtf.getContext("experimental-webgl");

      }

      catch(xfe) {}

      }

      if(!xc)

      {

      throw new Error("Could not initialize WebGL");

      }

      this.xOd=xc;

      xc.clearColor(0.0, 0.0, 0.0, 1.0);

      xc.clearDepth(1.0)

      xc.enable(xc.DEPTH_TEST);

      xc.depthFunc(xc.LEQUAL);

      this.xZ("s1-1");

      var xKe="attribute vec3 vertexPosition;attribute vec2 vTexCoord;uniform mat4 modelViewMatrix,perspectiveMatrix;varying vec2 v_texCoord;void main(){gl_Position = perspectiveMatrix * modelViewMatrix * vec4(vertexPosition, 1.0);v_texCoord = vTexCoord;}";

      var x7e="uniform sampler2D sampler2d; varying mediump vec2 v_texCoord;void main(void){gl_FragColor = texture2D(sampler2d, v_texCoord);}";

      this.xL=this.xAg(xKe,x7e);

      this.x0b=new xjk();

      this.xff=new xjk();

      this.x7h=xc.getUniformLocation(this.xL,"modelViewMatrix");

      this.xZ("s1-2");

      this.xnf=xc.getUniformLocation(this.xL,"perspectiveMatrix");

      this.xZ("s1-3");

      this.xgi = xc.getAttribLocation(this.xL,"vertexPosition");

      this.xZ("s1-4");

      xc.enableVertexAttribArray(this.xgi);

      this.xZ("s1-5");

      this.x7f = xc.getAttribLocation(this.xL,"vTexCoord");

      this.xZ("s1-6");

      xc.enableVertexAttribArray(this.x7f);

      this.xZ("s1-7");

      var loc=xc.getUniformLocation(this.xL,"sampler2d");

      this.xZ("s1-10");

      xc.uniform1i(loc, 0);

      this.xZ("s1-11");

      }

      p1.xZ=function(xZd)

      {

      var xTg=this.xOd.getError();

      if(xTg != this.xOd.NO_ERROR)

      {

      throw new Error("webGL error: "+xZd+": "+xTg);

      }

      }

      p1.xuf=function(xfd, xof)

      {

      var xc=this.xOd;

      var xxd=xc.createShader(xfd);

      this.xZ("s2-1");

      xc.shaderSource(xxd, xof);

      this.xZ("s2-2");

      xc.compileShader(xxd);

      this.xZ("s2-3");

      if(!xc.getShaderParameter(xxd, xc.COMPILE_STATUS))

      {

      var xLg=xc.getShaderInfoLog(xxd);

      xc.deleteShader(xxd);

      throw new Error("Couldn't compile shader:\n"+xLg);

      }

      return xxd;

      }

      p1.xAg=function(xRd, x7e)

      {

      var xc=this.xOd;

      var xae=null;

      var xoi=null;

      var xqh=null;

      try

      {

      xoi=this.xuf(xc.VERTEX_SHADER, xRd);

      xqh=this.xuf(xc.FRAGMENT_SHADER, x7e);

      var xae = xc.createProgram();

      this.xZ("s3-1");

      xc.attachShader(xae, xoi);

      this.xZ("s3-2");

      xc.attachShader(xae, xqh);

      this.xZ("s3-3");

      xc.linkProgram(xae);

      this.xZ("s3-4");

      if(!xc.getProgramParameter(xae, xc.LINK_STATUS))

      {

      var xLg=xc.getProgramInfoLog(xae);

      throw new Error("Couldn't link program:\n"+xLg);

      }

      xc.useProgram(xae);

      this.xZ("s3-5");

      }

      catch(xfe)

      {

      try

      {

      if(xoi) xc.deleteShader(xoi);

      if(xqh) xc.deleteShader(xqh);

      if(xae) xc.deleteProgram(xae);

      }catch(x7m) {}

      throw xfe;

      }

      return xae;

      }

      p1.xGg=function()

      {

      if(this.xGb)

      {

      this.xGb=false;

      var xc=this.xOd;

      xc.clear(xc.COLOR_BUFFER_BIT | xc.DEPTH_BUFFER_BIT);

      var xvf=this.xng();

      if(this.xfb)

      {

      for(var i=0; i < xvf; i++)

      {

      var xWg=this.xfb[i];

      if(xWg)

      {

      var xcg=xWg.xQi();

      if(xcg)

      {

      xc.bindTexture(xc.TEXTURE_2D, xcg[0]);

      xc.bindBuffer(xc.ARRAY_BUFFER, xcg[1]);

      xc.vertexAttribPointer(this.xgi, 3.0, xc.FLOAT, false, 0, 0);

      xc.bindBuffer(xc.ARRAY_BUFFER, xcg[2]);

      xc.vertexAttribPointer(this.x7f, 2.0, xc.FLOAT, false, 0, 0);

      xc.drawArrays(xc.TRIANGLE_STRIP, 0, 4);

      }

      }

      }

      }

      xc.flush();

      this.xZ("s5-6");

      xc.finish();

      this.xZ("s5-7");

      }

      }

      p1.xnh=function(xXe)

      {

      var xc=this.xOd;

      var xre = xc.createBuffer();

      this.xZ("s5-1");

      xc.bindBuffer(xc.ARRAY_BUFFER, xre);

      this.xZ("s5-2");

      xc.bufferData(xc.ARRAY_BUFFER, new Float32Array(xXe), xc.STATIC_DRAW);

      this.xZ("s5-3");

      return xre;

      }

      p1.xPh=function(xBe)

      {

      var xc=this.xOd;

      var xte=xc.createTexture();

      this.xZ("s7-1");

      xc.bindTexture(xc.TEXTURE_2D, xte);

      this.xZ("s7-2");

      xc.pixelStorei(xc.UNPACK_FLIP_Y_WEBGL, true);

      xc.texParameteri(xc.TEXTURE_2D, xc.TEXTURE_MIN_FILTER, xc.LINEAR);

      xc.texParameteri(xc.TEXTURE_2D, xc.TEXTURE_MAG_FILTER, xc.LINEAR);

      xc.texParameteri(xc.TEXTURE_2D, xc.TEXTURE_WRAP_S, xc.CLAMP_TO_EDGE);

      xc.texParameteri(xc.TEXTURE_2D, xc.TEXTURE_WRAP_T, xc.CLAMP_TO_EDGE);

      this.xZ("s7-3");

      try

      {

      xc.texImage2D(xc.TEXTURE_2D, 0, xc.RGBA, xc.RGBA, xc.UNSIGNED_BYTE, xBe);

      }

      catch(xfe)

      {

      if( (xfe.name =="SecurityError")

      && (nhPanoramaViewer.isChrome())

      && window.location.href.match(/^file\:\/\/.*/)

      && xBe.src.match(/^file\:\/\/.*/) )

      {

      throw new Error("Failed to load panorama. Due to security restrictions in Chrome the panorama viewer cannot access images stored locally on your computer."

      +" To resolve the problem, upload the panorama to a web server and access it over the web. Or launch Chrome with the --allow-file-access-from-files flag"

      +" (google for more information) to disable this security restriction.\n\n"

      +"Note that this error will not appear when the panorama is viewed on the web."

      +"\n\nDetails: "+xfe.message

      );

      }

      else

      {

      throw xfe;

      }

      }

      this.xZ("s7-4");

      return xte;

      }

      nhPanoramaViewer.requestAnimationFrameFunc=null;

      nhPanoramaViewer.requestAnimationFrame=function(callback, element)

      {

      if(!nhPanoramaViewer.requestAnimationFrameFunc)

      {

      var xtc = [

      "mozRequestAnimationFrame",

      "oRequestAnimationFrame",

      "requestAnimationFrame",

      "webkitRequestAnimationFrame",

      "msRequestAnimationFrame"

      ];

      for (var i = 0; i < xtc.length; ++i)

      {

      if(window[xtc[i]])

      {

      var thefunc=window[xtc[i]];

      nhPanoramaViewer.requestAnimationFrameFunc=function(callback,element) {

      thefunc.call(window, callback, element);

      };

      break;

      }

      }

      if(!nhPanoramaViewer.requestAnimationFrameFunc)

      {

      nhPanoramaViewer.requestAnimationFrameFunc=function(callback,element) {

      window.setTimeout(callback,16.67);

      };

      }

      }

      nhPanoramaViewer.requestAnimationFrameFunc(callback,element);

      }

       

       

       

       

      p1.xoe=function(xfe)

      {

      var xzb=this.xmi() / 1000.0;

      var deltanow=0.01;

      if(this.m_PrevDeviceMotionTime)

      {

      deltanow=xzb-this.m_PrevDeviceMotionTime;

      }

      this.m_PrevDeviceMotionTime=xzb;

      if(xfe.rotationRate && xfe.accelerationIncludingGravity)

      {

      var xwf=xfe.rotationRate;

      var xah=xfe.accelerationIncludingGravity;

      var interval=deltanow;

      if( (!isNaN(xah.x)) && (!isNaN(xah.y)) && (!isNaN(xah.z))

      && (!isNaN(xwf.alpha)) && (!isNaN(xwf.beta)) && (!isNaN(xwf.gamma))

      && (!isNaN(interval)) )

      {

      if(this.xwb == 0)

      {

      this.xwb=xzb+1.0;

      }

      if(xzb >= this.xwb)

      {

      var xi=[xah.x, xah.y, xah.z];

      if(this.m_gravityReversed)

      {

      xi[0]=-xi[0];

      xi[1]=-xi[1];

      xi[2]=-xi[2];

      }

      if(this.xWb != null)

      {

      var xrg=this.x5h;

      xrg=Math.pow(xrg,interval);

      var xch=1.0-xrg;

      xi[0]=xch*xi[0]+xrg*this.xWb[0];

      xi[1]=xch*xi[1]+xrg*this.xWb[1];

      xi[2]=xch*xi[2]+xrg*this.xWb[2];

      }

      this.xWb=xi;

      var x5d=Math.sqrt(xi[0]*xi[0]+xi[1]*xi[1]+xi[2]*xi[2]);

      if(x5d > 0)

      {

      var xbe=1.0/x5d;

      xi[0] *= xbe;

      xi[1] *= xbe;

      xi[2] *= xbe;

      }

      this.xDb=xi;

       

       

      var xKb=Math.asin(xi[2]);

      var xEb=0;

      if( (xi[0] != 0) || (xi[1] != 0) )

      {

      xEb=Math.atan2(xi[0],-xi[1]);

      }

      xEb *= 180.0/Math.PI;

      xKb *= 180.0/Math.PI;

      if(this.xid == this.xxh)

      {

      if(this.xbg == this.xrb)

      {

      var xMe=xi[0]-this.x2e[0];

      var xVd=xi[1]-this.x2e[1];

      var xgh=xi[2]-this.x2e[2];

      var xHc=xMe*xMe+xVd*xVd+xgh*xgh;

      if(xHc > 0.1)

      {

      this.x9e(xKb);

      }

      }

      else if(this.xbg == this.xYf)

      {

      if(xKb > -60)

      {

      this.x9e(xKb);

      }

      }

      }

      if(this.xbg == this.xu)

      {

      if( (Math.abs(xwf.alpha) > 20)

      || (Math.abs(xwf.beta) > 20)

      || (Math.abs(xwf.gamma) > 20) )

      {

      this.xp();

      }

      }

      var xxe=xwf.alpha;

      var xLh=xwf.beta;

      var xw=xwf.gamma;

      xxe *= interval;

      xLh *= interval;

      xw *= interval;

      if(this.m_rotationRateRadians)

      {

      xxe *= 180.0/Math.PI;

      xLh *= 180.0/Math.PI;

      xw *= 180.0/Math.PI;

      }

      var xd=new xjk();

      var xTf=new xjk();

      xTf.xfk(2,xw);

      xd.xck(xTf);

      xTf.xfk(1,xLh);

      xd.xck(xTf);

      xTf.xfk(0,xxe);

      xd.xck(xTf);

      var xBb=new xjk();

      xTf.xfk(2,-xEb);

      xBb.xck(xTf);

      xTf.xfk(0,xKb);

      xBb.xck(xTf);

      var xRe=new xjk(xBb);

      xRe.x5j();

      var xNg=new xjk();

      xNg.xck(xRe);

      xNg.xck(xd);

      xNg.xck(xBb);

      var xOg=xNg.x6j([1,0,0]);

      var x4c=Math.atan2(xOg[2],xOg[0]);

      x4c *= 180.0/Math.PI;

      var xAe=this.xie;

      if(this.xTd == 0)

      {

      xAe += x4c;

      }

      var xPg;

      if( (this.xid == this.xxh)

      && (this.xbg == this.xu)

      )

      {

      var xbh=interval*180;

      if(this.xHg > 0)

      {

      this.xHg -= xbh;

      if(this.xHg < 0) this.xHg=0;

      }

      else if(this.xHg < 0)

      {

      this.xHg += xbh;

      if(this.xHg > 0) this.xHg=0;

      }

      xPg=xKb+this.xHg;

      if(xPg < -90) xPg=-90;

      if(xPg > 90) xPg=90;

      }

      else

      {

      xPg=this.xDg;

      }

      if( (!isNaN(xAe)) && (!isNaN(xPg)))

      {

      this.xSe(xAe,xPg,this.xac);

      }

      }

      }

      }

      }

      p1.xs=function(xfe)

      {

      this.log("Error: WebGL context lost");

      }

      p1.xTe=function(xfe)

      {

      this.log("WebGL context restored");

      }

      p1.xrd=function()

      {

      return (this.xbg == this.xu);

      }

      p1.xk=function()

      {

      if(this.xbg != this.xYf)

      {

      this.x2e=this.xDb;

      this.xbg=this.xrb;

      }

      }

      p1.x9e=function(xGe)

      {

      if(xGe < -60)

      {

      this.xbg=this.xYf;

      }

      else

      {

      this.xbg=this.xu;

      this.xHg=this.xDg-xGe;

      this.xp();

      }

      }

      p1.xyb=function()

      {

      var xse="The publisher of this panorama should check the contents of the 'licensekey' field in the parameters for this panorama.";

      if(this.xVg < 0)

      {

      this.xVg=0;

      if(this.xwd !="")

      {

      var xDd=this.x9f(this.xwd);

      if(xDd.valid)

      {

      var xpd=this.xqc();

      if(xpd =="")

      {

      this.log("License key ('licensekey' field) ignored since the panorama is viewed on the local computer.");

      }

      else

      {

      var xeg=false;

      if(xpd == xDd.host)

      {

      xeg=true;

      }

      else

      {

      var xcf="."+xDd.host;

      var x7b=xpd.lastIndexOf(xcf);

      if( (x7b >= 0) && (x7b == (xpd.length-xcf.length)) )

      {

      xeg=true;

      }

      }

      if(xeg)

      {

      this.xVg=1;

      }

      else

      {

      this.log("Invalid license: the license is valid for '"+xDd.host+"' but the panorama is stored on '"+xpd+"'. "+xse);

      }

      }

      }

      else

      {

      this.log("Invalid license key. "+xse);

      }

      }

      }

      return (this.xVg > 0);

      }

      p1.xNc=function(x7g)

      {

      var valid=false;

      var x7b=x7g.lastIndexOf(":");

      if(x7b >= 0)

      {

      var xq=x7g.substr(0,x7b);

      var xUf=x7g.substr(x7b+1,x7g.length-x7b-1);

      var x4b=new xTk(this.x4f);

      var xEf=new xTk(this.xJc);

      var xpg=new xtp();

      xpg.xPn(x4b, xEf);

      valid=xpg.xkp(xq, xUf);

      }

      return valid;

      }

      p1.x9f=function(x7g)

      {

      var xud=new Object();

      try

      {

      xud.valid=this.xNc(x7g);

      }

      catch(xfe)

      {

      xud.valid=false;

      }

      if(xud.valid)

      {

      var components=x7g.split(":");

      if(components.length < 3)

      {

      xud.valid=false;

      }

      else

      {

      xud.host=components[0];

      xud.version=components[1];

      }

      }

      return xud;

      }

      p1.xx8944hjkxx7jk=function(xkf, xOh)

      {

      xkf=xkf.toLowerCase();

      var xq=xkf.toLowerCase()+":1";

      var xEf=new xTk(this.xJc);

      var xK=new xTk(xOh);

      var x4b=new xTk(this.x4f);

      var xpg=new xtp();

      xpg.xon(xK, xEf);

      xpg.xPn(x4b, xEf);

      var xUf=xpg.x8o(xq,true);

      var x7c=xq+":"+xUf;

      var xY=this.x9f(x7c);

      if(!xY.valid)

      {

      xY=this.x9f(x7c);

      throw new Error("Check failed");

      }

      return x7c;

      }

      p1.xqc=function()

      {

      var xXf=this.xjb(0);

      var xg=this.xS();

      xXf=this.xKh(xXf,xg);

      var host="";

      if(xXf.indexOf("://") >= 0)

      {

      host=xXf.replace(new RegExp("^.*:\\/\\/"),"");

      host=host.replace(new RegExp("\\/.*$"),"");

      host=host.replace(new RegExp(":.*$"),"");

      }

      host=host.toLowerCase();

      return host;

      }

       

       

      var p2=xEj.prototype;

      p2.lsNotLoaded=0;

      p2.xij=1;

      p2.xPj=2;

      p2.xuj=3;

      p2.x1g=false;

      p2.xsi=0;

      function xEj(xZi, xzj, xze, xKb, xif, xIc, xIh)

      {

      this.xSj=this.lsNotLoaded;

      this.xrj=xZi;

      this.xBj=xzj;

      this.xUj=xze;

      this.xVi=xKb;

      this.xQj=xif;

      this.xRj=xIc;

      this.xbj=xIh;

      if(this.xrj.xsf)

      {

      var xYe=document.createElement("div");

      xYe.style.position="absolute";

      xYe.style.msBackfaceVisibility=xYe.style.webkitBackfaceVisibility=xYe.style.MozBackfaceVis ibility="hidden";

      xYe.style.MozTransformStyle="preserve-3d";

      xYe.style.top="0px";

      xYe.style.left="0px";

      var xdj=xZi.xBh();

      xdj.appendChild(xYe);

      this.xRb=xYe;

      }

      if(this.xrj.xUc)

      {

      this.x7i();

      }

      var xD=document.createElement("img");

      xD.style.position="absolute";

      xD.style.top="0px";

      xD.style.left="0px";

      xD.style.visibility="hidden";

      this.xvi=xD;

      var xwc=this;

      if(document.addEventListener)

      {

      xD.addEventListener("load", function(xfe){return xwc.xCi(xfe? xfe : window.event)}, false);

      xD.addEventListener("error", function(xfe){return xwc.xBi(xfe? xfe : window.event)}, false);

      }

      else if(document.attachEvent)

      {

      xD.attachEvent("onload", function(xfe){return xwc.xCi(xfe? xfe : window.event)});

      xD.attachEvent("onerror", function(xfe){return xwc.xBi(xfe? xfe : window.event)});

      }

      if(this.xrj.xsf)

      {

      this.xRb.appendChild(this.xvi);

      var x3i=document.createElement("canvas");

      x3i.style.position="absolute";

      x3i.style.top="0px";

      x3i.style.left="0px";

      x3i.style.visibility="hidden";

      xYe.appendChild(x3i);

      this.xLj=x3i;

      }

      this.xlj();

      }

      p2.x7i=function()

      {

      var xdd=10;

      var width=xdd*Math.tan(0.5*this.xQj*Math.PI/180);

      var xNj=new xjk();

      xNj.xfk(0,this.xVi);

      var xLc=new xjk();

      xLc.xfk(1,-this.xUj);

      xNj.xck(xLc);

      var xqi=[];

      for(var xqj=0; xqj < 4; xqj++)

      {

      var xJj=[];

      xJj[0]=(xqj & 1)? -width : width;

      xJj[1]=(xqj & 2)? -width : width;

      xJj[2]=-xdd;

      xJj=xNj.x6j(xJj);

      xqi=xqi.concat(xJj);

      }

      this.xWi=this.xrj.xnh(xqi);

      }

      p2.xgj=function()

      {

      this.xAi();

      }

      p2.xAi=function()

      {

      this.xSj=this.xij;

      if(this.xsi > 0)

      {

      var xwc=this;

      window.setTimeout(function(){xwc.xvi.src=xwc.xBj}, this.xsi*1000);

      }

      else

      {

      this.xvi.src=this.xBj;

      }

      }

      p2.xBi=function(event)

      {

      this.xrj.xug("Failed to load image: "+this.xBj);

      this.xSj=this.xuj;

      this.xrj.x6e(this);

      return true;

      }

      p2.xCi=function(event)

      {

      this.xSj=this.xPj;

      if(this.xvi.width != this.xvi.height)

      {

      this.xrj.xug("Image "+this.xBj+" should be square");

      }

      var xpj=this.xvi.width;

      if(this.xbj && (this.xvi.width > this.xbj))

      {

      this.xvi.width=this.xbj;

      this.xvi.height=this.xbj;

      var xwc=this;

      }

      this.xCj=new Array(this.xvi.width, this.xvi.height);

      if(this.xrj.xsf)

      {

      this.xnc();

      this.xLj.style.visibility="hidden";

      this.xvi.style.visibility="visible";

      this.xRb.style.width=this.xCj[0]+"px";

      this.xRb.style.height=this.xCj[1]+"px";

      }

      else

      {

      this.xkj=this.xrj.xPh(this.xvi);

      this.xsj(0.0, 0.0, 1.0, 1.0);

      }

      if(nhPanoramaViewer.isIOS())

      {

      var xwc=this;

      setTimeout(function(){

      xwc.xrj.x6e(this);

      },100);

      }

      else

      {

      this.xrj.x6e(this);

      }

      return true;

      }

      p2.xlj=function()

      {

      }

      p2.xPi=function(event)

      {

      try

      {

      xRi(this.xKj,false);

      this.xKj=null;

      this.xrj.x6e(this);

      }

      catch (xpb)

      {

      this.xrj.xug(xpb.toString());

      }

      }

      p2.xnc=function()

      {

      if((this.xSj == this.xPj) || this.x1g)

      {

      this.xIj();

      }

      }

      p2.xIj=function()

      {

      if(this.xrj.xsf)

      {

      var xfj=this.xrj.xXd();

      var xtj=this.xrj.xob();

      var xvj=this.xrj.xDc();

      var x2i=this.xrj.xqe();

      var x8i=this.xCj[0];

      var xKi=this.xCj[1];

      var xwj=1000.0*(this.xRj+1);

      var ownerstyle=this.xrj.xBh().style;

      var xyj=1;

      if(typeof ownerstyle.webkitPerspective =="string")

      {

      xyj=ownerstyle.webkitPerspective;

      }

      else if(typeof ownerstyle.MozPerspective =="string")

      {

      xyj=ownerstyle.MozPerspective;

      }

      else

      {

      xyj=ownerstyle.msPerspective;

      }

      xyj=xyj.replace(/\s*px\s*$/,"");

      xyj=xyj-0;

      var xLi=0.5*xwj/Math.tan(0.5*this.xQj*Math.PI/180);

       

       

      var xDj="translate3d("+(-(x8i-xvj)/2).toFixed(4)+"px,"+(-(xKi-x2i)/2).toFixed(4)+"px,"+xyj.to Fixed(4)+"px)"

      +" rotateX("+xtj.toFixed(4)+"deg)"

      +" rotateY("+(xfj-this.xUj).toFixed(4)+"deg)"

      +" rotateX("+(-this.xVi).toFixed(4)+"deg)"

      +" translate3d(0px,0px,"+(-xLi).toFixed(4)+"px)"

      +" scale3d("+(xwj/x8i).toFixed(4)+","+(xwj/xKi).toFixed(4)+",1)";

      this.xRb.style.msTransform=this.xRb.style.webkitTransform=this.xRb.style.MozTransform=xDj;

      }

      }

      p2.xui=function()

      {

      return this.xSj;

      }

      p2.x9i=function()

      {

      return this.x1g;

      }

      p2.xOj=function()

      {

      return this.xUj;

      }

      p2.xDi=function()

      {

      return this.xVi;

      }

      p2.xwi=function(x3i, xUb)

      {

      this.x1g=true;

      if(this.xSj != this.xij) this.xSj=this.lsNotLoaded;

      var xjg=xUb[2];

      var xri=xUb[3];

      var previewimage=this.xLj;

      previewimage.width=xjg;

      previewimage.height=xri;

      var xxi = previewimage.getContext('2d');

      xxi.drawImage(x3i, xUb[0], xUb[1], xjg, xri, 0, 0, xjg, xri);

      previewimage.style.visibility="visible";

      this.xRb.style.width=previewimage.width+"px";

      this.xRb.style.height=previewimage.height+"px";

      this.xCj=new Array(previewimage.width,previewimage.height);

      this.xnc();

      }

      p2.xzi=function(xHj, x8i, xUb)

      {

      this.xkj=xHj;

      var x4i=xUb[0]/x8i;

      var xyi=(xUb[0]+xUb[2])/x8i;

      var xoj=1.0-(xUb[1]+xUb[3])/x8i;

      var xmj=1.0-xUb[1]/x8i;

      this.xsj(x4i, xoj, xyi, xmj);

      this.x1g=true;

      if(this.xSj != this.xij) this.xSj=this.lsNotLoaded;

      }

      p2.xsj=function(x4i, xoj, xyi, xmj)

      {

      this.xTj=this.xrj.xnh([xyi, xmj, x4i, xmj, xyi, xoj, x4i, xoj]);

      }

      p2.xQi=function()

      {

      if(this.xkj)

      {

      return [this.xkj, this.xWi, this.xTj];

      }

      else

      {

      return null;

      }

      }

       

       

      var p3=xjk.prototype;

      p3.x1j=[1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];

      function xjk(src)

      {

      if(src)

      {

      this.x1j=src.x1j.slice(0);

      }

      }

      p3.xck=function(xhk)

      {

      var xkk=[];

      var x0j=0;

      var x4j=0;

      var xWj;

      var xak;

      var xmk;

      while(true)

      {

      xWj=0;

      xak=x0j;

      xmk=x4j;

      while(true)

      {

      xWj += this.x1j[xak++]*xhk.x1j[xmk];

      xmk += 4;

      if(xmk >= 16) break;

      }

      xkk.push(xWj);

      x4j++;

      if(x4j == 4)

      {

      x0j += 4;

      if(x0j == 16) break;

      x4j=0;

      }

      }

      this.x1j=xkk;

      return this;

      }

      p3.xik=function(xMh, x2d, xYj, x7j)

      {

      var xZh=0.5 * xMh * Math.PI / 180.0;

      var xoj=xYj * Math.tan(xZh) / Math.sqrt(1+x2d*x2d);

      var xyi=xoj*x2d;

      var xdk=1.0/(x7j-xYj);

      this.x1j = [

      xYj/xyi, 0, 0, 0,

      0, xYj/xoj, 0, 0,

      0, 0, -(xYj+x7j)*xdk, -1,

      0, 0, -2*x7j*xYj*xdk, 0

      ];

      return this;

      }

      p3.xfk=function(xZj,x2j)

      {

      var x9j=Math.PI * x2j / 180.0;

      var x8j=Math.cos(x9j);

      var s=Math.sin(x9j);

      if(xZj == 0)

      {

      this.x1j = [

      1, 0, 0, 0,

      0, x8j, s, 0,

      0, -s, x8j, 0,

      0, 0, 0, 1

      ];

      }

      else if(xZj == 1)

      {

      this.x1j = [

      x8j, 0, -s, 0,

      0, 1, 0, 0,

      s, 0, x8j, 0,

      0, 0, 0, 1

      ];

      }

      else

      {

      this.x1j = [

      x8j, s, 0, 0,

      -s, x8j, 0, 0,

      0, 0, 1, 0,

      0, 0, 0, 1

      ];

      }

      return this;

      }

      p3.xlk=function()

      {

      return new Float32Array(this.x1j);

      }

      p3.x6j=function(xnk)

      {

      var xkk=this.x1j;

      var x=xkk[0]*xnk[0]+xkk[4]*xnk[1]+xkk[8]*xnk[2]+xkk[12];

      var y=xkk[1]*xnk[0]+xkk[5]*xnk[1]+xkk[9]*xnk[2]+xkk[13];

      var z=xkk[2]*xnk[0]+xkk[6]*xnk[1]+xkk[10]*xnk[2]+xkk[14];

      var xyc=xkk[3]*xnk[0]+xkk[7]*xnk[1]+xkk[11]*xnk[2]+xkk[15];

      if(xyc != 1.0)

      {

      var xgk=1.0/xyc;

      x *= xgk;

      y *= xgk;

      z *= xgk;

      }

      return [x,y,z];

      }

      p3.x5j=function()

      {

      var xkk=this.x1j;

      this.x1j=[

      xkk[0], xkk[4], xkk[8], xkk[12],

      xkk[1], xkk[5], xkk[9], xkk[13],

      xkk[2], xkk[6], xkk[10], xkk[14],

      xkk[3], xkk[7], xkk[11], xkk[15]

      ];

      return this;

      }

       

       

      var p4=xTk.prototype;

       

       

      p4.xam="";

      p4.xrm=false;

      p4.xIm=14;

       

       

      function xTk(value)

      {

      this.xNk=Math.floor(Math.pow(10,this.xIm-1)+0.1);

      var xpm=typeof value;

      if( (xpm =="undefined") || (value === null) )

      {

      }

      else if(xpm =="number")

      {

      this.xGk(value);

      }

      else if(xpm =="string")

      {

      this.xRk(value);

      }

      else if(xpm =="object")

      {

      if(value instanceof xTk)

      {

      this.x3l(value);

      }

      else

      {

      var xyk="(unknown)";

      if(value && value.constructor && value.constructor.toString)

      {

      xyk=value.constructor.toString();

      }

      throw new Error("Invalid type: "+xyk);

      }

      }

      else

      {

      throw new Error("Invalid type: "+xpm);

      }

      }

      p4.x3l=function(xGl)

      {

      this.xam=xGl.xam;

      this.xrm=xGl.xrm;

      }

      p4.toString=function()

      {

      if(this.xrm)

      {

      return"-"+this.xam;

      }

      else

      {

      return this.xam;

      }

      }

      p4.xEk=function()

      {

      return (this.xam =="");

      }

      p4.xUm=function(value, xgm)

      {

      this.xam=this.x5k(value);

      if(this.xEk()) xgm=false;

      this.xrm=xgm;

      }

      p4.xRk=function(value)

      {

      var xgm=false;

      if(value.charAt(0) =="-")

      {

      xgm=true;

      value=value.substr(1);

      }

      if(! value.match(/^[0-9]*$/))

      {

      throw new Error("Invalid value");

      }

      value=this.x5k(value);

      if(value =="")

      {

      xgm=false;

      }

      this.xam=value;

      this.xrm=xgm;

      }

      p4.xlm=function(xfm, xcn, length)

      {

      var xem=xfm.length-xcn;

      if(xem <= 0)

      {

      return 0;

      }

      else

      {

      var xRl=xem-length;

      if(xRl < 0) xRl=0;

      var substr=xfm.substring(xRl,xem);

      substr=substr.replace(/^0+/,"");

      if(substr.length == 0) return 0;

      return parseInt(substr);

      }

      }

       

       

      p4.xtl=function(i, length)

      {

      var xud=""+i;

      xud=this.xsk(length-xud.length)+xud;

      return xud;

      }

      p4.xTl=function(xpl, xXl)

      {

      xpl=this.x5k(xpl);

      xXl=this.x5k(xXl);

      if(xpl.length > xXl.length) return 1;

      if(xpl.length < xXl.length) return -1;

      var xJl=xpl.length;

      var xZl, xCl;

      for(var i=0; i < xJl; i++)

      {

      xZl=xpl.charCodeAt(i);

      xCl=xXl.charCodeAt(i);

      if(xZl > xCl) return 1;

      if(xZl < xCl) return -1;

      }

      return 0;

      }

      p4.xNm=function(s)

      {

      var xDk=s.length;

      var x6k=0;

      var xQl;

      while(xDk > 0)

      {

      xQl=xDk-1;

      if(s.charAt(xQl) !="0") break;

      x6k++;

      xDk--;

      }

      if(x6k > 0)

      {

      s=s.substr(0,xDk);

      }

      return [s,x6k];

      }

      p4.x5k=function(s)

      {

      var xHm=0;

      while(xHm < s.length)

      {

      if(s.charAt(xHm) !="0") break;

      xHm++;

      }

      if(xHm > 0)

      {

      return s.substr(xHm);

      }

      else

      {

      return s;

      }

      }

      p4.x4m=function(xSl,xJl)

      {

      if(xSl.length < xJl)

      {

      xSl=this.xsk(xJl-xSl.length)+xSl;

      }

      return xSl;

      }

      p4.xsk=function(xhm)

      {

      var s="000000000000000000000000000000000000000000000000000000000";

      var xud="";

      while(xud.length < xhm)

      {

      xud += s.substr(0,xhm-xud.length);

      }

      return xud;

      }

      p4.xWl=function(xpl)

      {

      if(xpl < 0.0)

      {

      throw new Error("Negative");

      }

      if(xpl < 1.0)

      {

      return"";

      }

      var x1k=""+xpl;

      if(/^[0-9]+$/.test(x1k))

      {

      return x1k;

      }

      else

      {

      var exp=Math.floor(Math.log(xpl)/Math.log(10))+1;

      xpl *= Math.pow(10,-exp);

      if(xpl >= 1.0)

      {

      exp += 1;

      xpl *= 0.1;

      }

      else if(xpl < 0.1)

      {

      exp -= 1;

      xpl *= 10;

      }

      var xCm=""+xpl;

      if(xCm.substr(0,2) !="0.")

      {

      throw new Error("Internal error");

      }

      xCm=xCm.substr(2);

      if(xCm.length < exp)

      {

      xCm += this.xsk(exp-xCm.length);

      }

      else

      {

      xCm=xCm.substr(0,exp);

      }

      return xCm;

      }

      }

      p4.xVl=function(s)

      {

      s=this.x5k(s);

      if(s =="")

      {

      return 0.0;

      }

      else

      {

      var xuk=17;

      if(s.length > xuk)

      {

      return parseFloat(s.substr(0,xuk))*Math.pow(10,s.length-xuk);

      }

      else

      {

      return parseFloat(s);

      }

      }

      }

      p4.xSm=function()

      {

      var xpl=this.xam;

      var xud="";

      var xBk=this.xIm-1;

      var xMm=this.xNk;

      var xVk=Math.floor(1+(xpl.length-1)/xBk);

      var xcn=(xVk-1)*xBk;

      var xal;

      var xDm=0;

      for(var xhl=0; xhl < xVk; xhl++)

      {

      xal=this.xlm(xpl,xcn,xBk);

      xal += xDm;

      xDm=(xal & 1)? xMm : 0;

      xal=Math.floor(0.5*xal);

      xud += this.xtl(xal, xBk);

      xcn -= xBk;

      }

      var xQk=new xTk();

      if(xDm != 0)

      {

      xQk.xam="1";

      xQk.xrm=this.xrm;

      }

      this.xam=this.x5k(xud);

      return xQk;

      }

      p4.xDl=function(xqm, xEl)

      {

      var xOl=17;

      var xdl=1e17;

      var x9k=0;

      var xpl=new xTk(xqm);

      var xXl=new xTk(xEl);

      if(xpl.xam.length > xOl)

      {

      x9k += xpl.xam.length-xOl;

      xpl.xam=xpl.xam.substr(0,xOl);

      }

      if(xXl.xam.length > xOl)

      {

      x9k -= xXl.xam.length-xOl;

      xXl.xam=xXl.xam.substr(0,xOl);

      }

      var xBl=xpl.xkm();

      var xcm=xXl.xkm();

      var xMk=xBl/xcm;

      xMk *= xdl;

      x9k -= xOl;

      var xum=new xTk(xMk);

      if(x9k > 0)

      {

      xum.xam += this.xsk(x9k);

      }

      else

      {

      var xJl=xum.xam.length;

      if(xJl <= -x9k)

      {

      xum.xGk(0);

      }

      else

      {

      xum.xam=xum.xam.substr(0,xJl+x9k);

      }

      }

      return xum;

      }

      p4.xwm=function(xtm)

      {

      if(xtm.xEk())

      {

      throw new Error("Divide by zero");

      }

      if( (xtm.xam =="2") && (xtm.xrm == false) )

      {

      return this.xSm();

      }

      var xum=new xTk();

      var xQk=new xTk(this);

      var xrk;

      while(true)

      {

      if(xQk.xEk())

      {

      break;

      }

      xrk=this.xDl(xQk,xtm);

      if(xrk.xEk())

      {

      if(this.xrm != xQk.xrm)

      {

      if(xQk.xrm == xtm.xrm)

      {

      xrk.xGk(1);

      }

      else

      {

      xrk.xGk(-1);

      }

      }

      else

      {

      break;

      }

      }

      xum=xum.x6l(xrk);

      xQk=xQk.xim(xrk.xjm(xtm));

      }

      this.x3l(xum);

      return xQk;

      }

      p4.xIk=function(xpl, xXl)

      {

      xpl=this.x5k(xpl);

      xXl=this.x5k(xXl);

      var xan=this.xTl(xpl,xXl);

      if(xan == 0) return ["",false];

      var xgm=false;

      if(xan < 0)

      {

      var xpm=xXl;

      xXl=xpl;

      xpl=xpm;

      xgm=true;

      }

      var xud="";

      var xcg=this.xNm(xXl);

      var xbm=xcg[1];

      if(xbm > 0)

      {

      xXl=xcg[0];

      var xWk=xpl.length-xbm;

      xcg=this.xZk(xpl,xWk);

      xud=xcg[1]+xud;

      xpl=xcg[0];

      }

      var xBk=this.xIm-1;

      var x1l=this.xNk;

      var xAl=xpl.length;

      var xFk=xXl.length;

      var xcn=0;

      var xDm=0;

      var xrl, xbl, xsm;

      while(xcn < xAl)

      {

      if( (xcn >= xFk) && (xDm == 0) )

      {

      xud=xpl.substr(0,xAl-xcn)+xud;

      break;

      }

      xrl=this.xlm(xpl,xcn,xBk);

      xbl=this.xlm(xXl,xcn,xBk);

      xsm=xrl-xbl+xDm;

      if(xsm >= 0)

      {

      xDm=0;

      }

      else

      {

      xDm=-1;

      xsm += x1l;

      }

      xud=this.xtl(xsm, xBk)+xud;

      xcn += xBk;

      }

      return [xud,xgm];

      }

      p4.x8m=function(s, xBk)

      {

      var xud=[];

      var xHl=s.length;

      var xLl;

      var xbn;

      while(true)

      {

      if(xHl <= 0) break;

      xLl=xHl-xBk;

      if(xLl < 0) xLl=0;

      xbn=s.substring(xLl,xHl);

      xbn=xbn.replace(/^0+/,"");

      xud.push(parseInt(xbn));

      xHl -= xBk;

      }

      return xud;

      }

      p4.xOm=function(xpl, xXl)

      {

      xpl=this.x5k(xpl);

      xXl=this.x5k(xXl);

      var x0l=0;

      var xcg=this.xNm(xpl);

      xpl=xcg[0];

      x0l += xcg[1];

      xcg=this.xNm(xXl);

      xXl=xcg[0];

      x0l += xcg[1];

      var xud="";

      var xBk=Math.floor((this.xIm-3)/2);

      if(xBk < 1) xBk=1;

      var xCk=Math.floor(1+(xpl.length-1)/xBk);

      var xQm=Math.floor(1+(xXl.length-1)/xBk);

      var x8k=xCk+xQm-1;

      var xdm, xLm, x3m, xul, xKm, xwl, xvl;

      var xDm=0;

      var x0k;

       

       

       

       

      var xPl=this.x8m(xpl,xBk);

      var xZm=this.x8m(xXl,xBk);

      for(x0k=0; x0k < x8k; x0k++)

      {

      xLm=x0k-xQm+1;

      if(xLm < 0) xLm=0;

      x3m=x0k+1;

      if(x3m > xCk) x3m=xCk;

      xKm=0;

      xul=x0k-xLm;

      for(xdm=xLm; xdm < x3m; xdm++)

      {

      var xnm=xPl[xdm];

      var xzk=xZm[xul];

      xKm += xnm*xzk;

      xul--;

      }

      xKm += xDm;

      xwl=this.xtl(xKm, xBk);

      if(xwl.length > xBk)

      {

      xvl=xwl.length-xBk;

      xDm=parseInt(xwl.substr(0, xvl));

      xwl=xwl.substr(xvl);

      }

      else

      {

      xDm=0;

      }

      xud=xwl+xud;

      }

      if(xDm != 0)

      {

      xud=(""+xDm)+xud;

      }

      if(x0l != 0)

      {

      xud += this.xsk(x0l);

      }

      return xud;

      }

      p4.xZk=function(s, xWk)

      {

      var x1m, x8l;

      if(xWk < 0)

      {

      x1m="";

      x8l=this.xsk(-xWk)+s;

      }

      else if(xWk > s.length)

      {

      x1m=s+this.xsk(xWk-s.length);

      x8l="";

      }

      else

      {

      x1m=s.substr(0,xWk);

      x8l=s.substr(xWk);

      }

      return [x1m,x8l];

      }

      p4.xUl=function(xpl, xXl)

      {

      xpl=this.x5k(xpl);

      xXl=this.x5k(xXl);

      if(xpl.length < xXl.length)

      {

      var xNl=xpl;

      xpl=xXl;

      xXl=xNl;

      }

      var xud="";

      var xcg=this.xNm(xpl);

      var xbm=xcg[1];

      var xWk;

      if(xbm > 0)

      {

      xpl=xcg[0];

      xWk=xXl.length-xbm;

      xcg=this.xZk(xXl,xWk);

      xud=xcg[1]+xud;

      xXl=xcg[0];

      }

      xcg=this.xNm(xXl);

      xbm=xcg[1];

      if(xbm > 0)

      {

      xXl=xcg[0];

      xWk=xpl.length-xbm;

      xcg=this.xZk(xpl,xWk);

      xud=xcg[1]+xud;

      xpl=xcg[0];

      }

      var xBk=this.xIm;

      var xAl=xpl.length;

      var xFk=xXl.length;

      var xcn=0;

      var xDm=0;

      var xrl, xbl, xwl, xvl;

      while(xcn < xAl)

      {

      if( (xcn >= xFk) && (xDm == 0) )

      {

      xud=xpl.substr(0,xAl-xcn)+xud;

      break;

      }

      xrl=this.xlm(xpl,xcn,xBk);

      xbl=this.xlm(xXl,xcn,xBk);

      xwl=this.xtl(xrl+xbl+xDm, xBk);

      if(xwl.length > xBk)

      {

      xvl=xwl.length-xBk;

      xDm=parseInt(xwl.substr(0, xvl));

      xwl=xwl.substr(xvl);

      }

      else

      {

      xDm=0;

      }

      xud=xwl+xud;

      xcn += xBk;

      }

      if(xDm != 0)

      {

      xud=(""+xDm)+xud;

      }

      return xud;

      }

      p4.xsl=function(xpl, xKl, xXl, xtk)

      {

      var xPm, xgm;

      if(xKl == xtk)

      {

      xPm=this.xUl(xpl,xXl);

      xgm=xKl;

      }

      else

      {

      var xud=this.xIk(xpl,xXl);

      xPm=xud[0];

      xgm=xKl;

      if(xud[1])

      {

      xgm=!xgm;

      }

      }

      return [xPm,xgm];

      }

      p4.x6l=function(xXl)

      {

      var xPm=this.xsl(this.xam, this.xrm, xXl.xam, xXl.xrm);

      var xud=new xTk();

      xud.xUm(xPm[0],xPm[1]);

      return xud;

      }

      p4.xim=function(xXl)

      {

      var xPm=this.xsl(this.xam, this.xrm, xXl.xam, !xXl.xrm);

      var xud=new xTk();

      xud.xUm(xPm[0],xPm[1]);

      return xud;

      }

      p4.xxm=function(xXl)

      {

      if(this.xrm && (!xXl.xrm)) return -1;

      if(xXl.xrm && (!this.xrm)) return 1;

      var xud=this.xTl(this.xam, xXl.xam);

      if(this.xrm) xud=-xud;

      return xud;

      }

      p4.xjm=function(xXl)

      {

      var xgm=this.xrm;

      if(xXl.xrm) xgm=!xgm;

      var xFl=this.xOm(this.xam, xXl.xam);

      var xud=new xTk();

      xud.xUm(xFl,xgm);

      return xud;

      }

      p4.xel=function(xXl)

      {

      var xum=new xTk(this);

      var xQk=xum.xwm(xXl);

       

       

      return [xum,xQk];

      }

      p4.xkl=function(xXl)

      {

      var xud=this.xel(xXl);

      return xud[0];

      }

      p4.x7l=function(xXl)

      {

      var xud=this.xel(xXl);

      return xud[1];

      }

      p4.xqk=function(xXl)

      {

      return ((this.xam == xXl.xam) && (this.xrm == xXl.xrm));

      }

      p4.xGk=function(x7m)

      {

      this.xrm=(x7m < 0.0);

      if(this.xrm)

      {

      x7m=-x7m;

      }

      this.xam=this.xWl(x7m);

      }

      p4.xkm=function()

      {

      var xud=this.xVl(this.xam);

      if( (!this.xEk()) && (this.xrm) )

      {

      xud=-xud;

      }

      return xud;

      }

      p4.xil=function()

      {

      if(this.xrm)

      {

      throw new Error("Not supported");

      }

      var xhm=new xTk(this);

      var xcg;

      var xud=[];

      var xtm=new xTk("4294967296");

      while(true)

      {

      xcg=xhm.xel(xtm);

      xhm=xcg[0];

      var xml=xhm.xEk();

      var x5l=xcg[1].xkm();

      for(var i=0; i < 4; i++)

      {

      if(xml && (x5l == 0)) break;

      xud.push(x5l & 0xff);

      x5l >>= 8;

      }

      if(xml) break;

      }

      xud.reverse();

       

       

      return xud;

      }

       

       

      p4.xPk=function(xYk)

      {

      var xXm=3-((xYk.length+3)&3);

      var xcg=[];

      while(xXm-- > 0)

      {

      xcg.push(0);

      }

      xcg=xcg.concat(xYk);

      var xud=new xTk();

      var xdl=new xTk("4294967296");

      for(var xMl=0; xMl < xcg.length; xMl += 4)

      {

      xud=xud.xjm(xdl);

      var x5l=(xcg[xMl]<<24) | (xcg[xMl+1]<<16) | (xcg[xMl+2]<<8) | (xcg[xMl+3]);

      if(x5l < 0)

      {

      x5l += 0x100000000;

      }

      var x6l=new xTk(x5l);

      xud=xud.x6l(x6l);

      }

      this.x3l(xud);

      }

      p4.xHk=function(x4l, x6m)

      {

      if(this.xrm || x4l.xrm || x6m.xrm)

      {

      throw new Error("Negative");

      }

      var x9m=new xTk(this);

      var xym=new xTk("2");

      var xTm=new xTk(x4l);

      var xvk;

      var xud=new xTk("1");

      while(true)

      {

      xvk=xTm.xwm(xym);

      if(!xvk.xEk())

      {

      xud=xud.xjm(x9m);

      xud=xud.x7l(x6m);

      }

      if(xTm.xEk())

      {

      break;

      }

      x9m=x9m.xjm(x9m);

      x9m=x9m.x7l(x6m);

      }

      return xud;

      }

      p4.xRm=function()

      {

      return this.xrm;

      }

       

       

      var p5=xBn.prototype;

      p5.xin=null;

      p5.xIn=null;

      p5.xAn=null;

      function xBn()

      {

      }

       

       

       

       

       

       

      p5.xtn=function(xpn, xfn)

      {

      var xMn=new xTk("1");

      var xEf=xpn.xjm(xfn);

      var xFn=xpn.xim(xMn).xjm(xfn.xim(xMn));

      var x4b=new xTk(17);

      var xqn=this.xdn(x4b,xFn);

      var xQn=xqn[2];

      if(!xQn.xqk(xMn))

      {

      if(!xFn.x7l(xQn).xEk())

      {

      throw new Error("internal error");

      }

      throw new Error("not coprime");

      }

      var xK=xqn[0];

      if(xK.xRm())

      {

      xK=xK.x6l(xFn);

      }

      if(xK.xRm())

      {

      throw new Error("negative");

      }

      if(xK.xxm(xFn) >= 0)

      {

      throw new Error("too large");

      }

      var xY=xK.xjm(x4b).x7l(xFn);

      if(!xY.xqk(xMn))

      {

      throw new Error("failed2");

      }

      return [x4b,xK,xEf];

      }

      p5.xPn=function(xcn, xEf)

      {

      this.xIn=new xTk(xcn);

      this.xin=new xTk(xEf);

      }

      p5.xon=function(xcn, xEf)

      {

      this.xAn=new xTk(xcn);

      this.xin=new xTk(xEf);

      }

      p5.xkn=function()

      {

      return this.xIn;

      }

      p5.xOn=function()

      {

      return this.xAn;

      }

      p5.xzn=function()

      {

      return this.xin;

      }

      p5.xen=function()

      {

      if( (!this.xin) || (!this.xAn) )

      {

      throw new Error("Need private key");

      }

      }

      p5.xRn=function()

      {

      if( (!this.xin) || (!this.xIn) )

      {

      throw new Error("Need public key");

      }

      }

      p5.xSn=function(message)

      {

      this.xen();

      if(message.xxm(this.xin) >= 0)

      {

      throw new Error("Message too large");

      }

      return message.xHk(this.xAn,this.xin);

      }

      p5.xyn=function(message)

      {

      this.xRn();

      if(message.xxm(this.xin) >= 0)

      {

      throw new Error("Message too large");

      }

      return message.xHk(this.xIn,this.xin);

      }

       

       

      p5.xdn=function(xsn, xDn)

      {

      var xWj=new xTk(xsn);

      var xxl=new xTk(xDn);

      var x=new xTk();

      var y=new xTk("1");

      var xLn=new xTk("1");

      var xmn=new xTk();

      while(!xxl.xEk())

      {

      var xnn=xWj.xel(xxl);

      var xum=xnn[0];

      xWj.x3l(xxl);

      xxl=xnn[1];

      var xCn=xLn.xim(xum.xjm(x));

      var xxn=xmn.xim(xum.xjm(y));

      xLn=x;

      xmn=y;

      x=xCn;

      y=xxn;

      }

      var xY=xLn.xjm(xsn).x6l(xmn.xjm(xDn));

      if(!xY.xqk(xWj))

      {

      throw new Error("Failed3");

      }

      if(!xsn.x7l(xWj).xEk())

      {

      throw new Error("Failed4");

      }

      if(!xDn.x7l(xWj).xEk())

      {

      throw new Error("Failed5");

      }

      return [xLn, xmn, xWj];

      }

       

       

      var p6=xqo.prototype;

      function xqo()

      {

      }

       

       

      p6.x9n=function(xmo)

      {

      this.xho();

      var xbo=xmo.length;

      var xMl=0;

      var xoo=xbo;

      while(true)

      {

      if(xoo >= 64)

      {

      this.xFo(xmo.slice(xMl,xMl+64));

      xoo -= 64;

      xMl += 64;

      }

      else

      {

      this.x1n(xmo.slice(xMl,xMl+xoo),xbo);

      break;

      }

      }

      return this.xfo(this.x5n);

      }

      p6.xVn=function(s)

      {

      var xno=this.xro(s);

      this.x9n(xno);

      }

      p6.xlo=function()

      {

      return this.xfo(this.x5n);

      }

      p6.xEo=function()

      {

      var xno=this.xfo(this.x5n);

      return this.xyo(xno);

      }

      p6.xyo=function(xWj)

      {

      var xud="";

      for(var i=0; i < xWj.length; i++)

      {

      var xxl=xWj[i];

      for(var x0k=0; x0k < 2; x0k++)

      {

      var xwo=(xxl >> 4)&0x0f;

      if(xwo < 10)

      {

      xud += String.fromCharCode(48+xwo);

      }

      else

      {

      xud += String.fromCharCode(87+xwo);

      }

      xxl <<= 4;

      }

      }

      return xud;

      }

      //////////// private: ///////////////

      p6.xho=function()

      {

      this.x5n=[0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0];

      }

      p6.xDo=function(xXn)

      {

      if(xXn.length != 16)

      {

      throw new Error("Should be 16");

      }

      var xyc=[];

      var i;

      for(i=0; i < 16; i++)

      {

      xyc[i]=xXn[i];

      }

      for(i=16; i < 80; i++)

      {

      xyc[i] = this.xzo(xyc[i-3] ^ xyc[i-8] ^ xyc[i-14] ^ xyc[i-16], 1);

      }

      var x2n=this.x5n.slice(0);

      var x7m, xWn, x7n;

      for(i=0; i < 80; i++)

      {

      if(i < 20)

      {

      x7m = (x2n[1] & x2n[2]) | ((x2n[1]^0xffffffff) & x2n[3]);

      xWn = 0x5A827999;

      }

      else if(i < 40)

      {

      x7m = x2n[1] ^ x2n[2] ^ x2n[3];

      xWn = 0x6ED9EBA1;

      }

      else if(i < 60)

      {

      x7m = (x2n[1] & x2n[2]) | (x2n[1] & x2n[3]) | (x2n[2] & x2n[3]);

      xWn = 0x8F1BBCDC;

      }

      else

      {

      x7m = x2n[1] ^ x2n[2] ^ x2n[3];

      xWn = 0xCA62C1D6;

      }

      x7n = (this.xzo(x2n[0], 5)+x7m+x2n[4]+xWn+xyc[i]) & 0xffffffff;

      x2n[4] = x2n[3];

      x2n[3] = x2n[2];

      x2n[2] = this.xzo(x2n[1], 30);

      x2n[1] = x2n[0];

      x2n[0] = x7n;

      }

      for(i=0; i < 5; i++)

      {

      x7n=this.x5n[i]+x2n[i];

      x7n &= 0xffffffff;

      this.x5n[i]=x7n;

      }

      }

      p6.xFo=function(xmo)

      {

      if(xmo.length != 64)

      {

      throw new Error("Should be 64");

      }

      var xAo=this.xto(xmo);

      this.xDo(xAo);

      }

      p6.x1n=function(xmo, xso)

      {

      var x0n=xso & 63;

      var xeo=xmo.slice(0,x0n);

      xeo.push(128);

      if(xeo.length < 56)

      {

      while(xeo.length < 56)

      {

      xeo.push(0);

      }

      }

      else

      {

      while(xeo.length < 120)

      {

      xeo.push(0);

      }

      }

      xso *= 8;

      var xvo=this.xfo([Math.floor(xso/0x100000000), xso&0xffffffff]);

      xeo=xeo.concat(xvo);

      if(xeo.length == 64)

      {

      this.xFo(xeo);

      }

      else

      {

      this.xFo(xeo.slice(0,64));

      this.xFo(xeo.slice(64,128));

      }

      }

      p6.xzo=function(xxl, xuo)

      {

      xxl &= 0xffffffff;

      var xud=this.x6n(xxl, xuo);

      var xY=this.x6n(xud, -xuo);

      if(xxl != xY)

      {

      throw new Error("Failed");

      }

      return xud;

      }

      p6.x6n=function(xxl, xuo)

      {

      xuo &= 31;

      if(xuo == 0) return xxl;

      var xud=(xxl << xuo)&0xffffffff;

      var xjo=32-xuo;

      var xCo=0x7fffffff >> (xjo-1);

      var xpo=(xxl >> xjo)&xCo;

      xud |= xpo;

      return xud;

      }

      p6.xto=function(xmo)

      {

      if(xmo.length & 3)

      {

      throw new Error("Should be multiple of 4");

      }

      var xAo=[];

      var xGl=0;

      var i=0;

      while(i < xmo.length)

      {

      xGl <<= 8;

      xGl |= (xmo[i] & 0xff);

      i++;

      if( (i & 3) == 0)

      {

      xAo.push(xGl);

      xGl=0;

      }

      }

      return xAo;

      }

      p6.xfo=function(xXn)

      {

      var xno=[];

      var xyc, i, xYn;

      for(i=0; i < xXn.length; i++)

      {

      xyc=xXn[i];

      xno.push((xyc >> 24)&0xff);

      xno.push((xyc >> 16)&0xff);

      xno.push((xyc >> 8)&0xff);

      xno.push((xyc)&0xff);

      }

      return xno;

      }

      p6.xro=function(s)

      {

      var xud=[];

      for(var i=0; i < s.length; i++)

      {

      xud=xud.concat(this.xxo(s.charCodeAt(i)));

      }

      return xud;

      }

      p6.xxo=function(x8j)

      {

      var xud;

      if(x8j <= 0x7f)

      {

      xud=[x8j];

      }

      else if(x8j <= 0x07ff)

      {

      xud=[0xc0|((x8j>>6)&0x1f), 0x80|(x8j&0x3f)];

      }

      else if(x8j <= 0xffff)

      {

      xud=[0xc0|((x8j>>12)&0x0f), 0x80|((x8j>>6)&0x3f), 0x80|(x8j&0x3f)];

      }

      else if(x8j <= 0x1fffff)

      {

      xud=[0xc0|((x8j>>18)&0x07), 0x80|((x8j>>12)&0x3f), 0x80|((x8j>>6)&0x3f), 0x80|(x8j&0x3f)];

      }

      else if(x8j <= 0x3ffffff)

      {

      xud=[0xc0|((x8j>>24)&0x03), 0x80|((x8j>>18)&0x3f), 0x80|((x8j>>12)&0x3f), 0x80|((x8j>>6)&0x3f), 0x80|(x8j&0x3f)];

      }

      else

      {

      xud=[0xc0|((x8j>>30)&0x01), 0x80|((x8j>>24)&0x3f), 0x80|((x8j>>18)&0x3f), 0x80|((x8j>>12)&0x3f), 0x80|((x8j>>6)&0x3f), 0x80|(x8j&0x3f)];

      }

      return xud;

      }

       

       

      var p7=x2o.prototype;

      function x2o()

      {

      this.xJo="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

      }

       

       

      p7.xYo=function(xno)

      {

      var xud="";

      var xbo=xno.length;

      var xIc=0;

      var xHl;

      while(xIc < xbo)

      {

      xHl=xIc+3;

      if(xHl > xbo) xHl=xbo;

      xud += this.xNo(xno.slice(xIc,xHl));

      xIc=xHl;

      }

       

       

      return xud;

      }

      p7.xZo=function(xSl)

      {

      var xud=[];

      if( (xSl.length % 4) != 0)

      {

      this.xKo();

      }

      var xIc=0;

      var x0o;

      while(xIc < xSl.length)

      {

      x0o=this.x3o(xSl.substr(xIc,4));

      xud=xud.concat(x0o);

      xIc += 4;

      }

      return xud;

      }

      p7.xNo=function(xno)

      {

      var xud="";

      var xwo=xno[0] >> 2;

      xud += this.xJo.substr(xwo,1);

      var xxl;

      if(xno.length < 2)

      {

      xxl=0;

      }

      else

      {

      xxl=xno[1];

      }

      xwo=((xno[0] & 0x03) << 4) | (xxl >> 4);

      xud += this.xJo.substr(xwo,1);

      if(xno.length < 2)

      {

      xud +="==";

      }

      else

      {

      if(xno.length < 3)

      {

      xxl=0;

      }

      else

      {

      xxl=xno[2];

      }

      xwo=((xno[1] & 0x0f) << 2) | (xxl >> 6);

      xud += this.xJo.substr(xwo,1);

      if(xno.length < 3)

      {

      xud +="=";

      }

      else

      {

      xwo=xxl & 0x3f;

      xud += this.xJo.substr(xwo,1);

      }

      }

      return xud;

      }

      p7.x3o=function(xSl)

      {

      if(xSl.length != 4)

      {

      this.xKo();

      }

      var xud=[];

      var xXo=this.x4o(xSl.charCodeAt(0));

      var x1o=this.x4o(xSl.charCodeAt(1));

      xud[0]=(xXo << 2) | (x1o >> 4);

      var i=xSl.charCodeAt(2);

      if(i != 61)

      {

      xXo=x1o;

      x1o=this.x4o(i);

      xud[1]=((xXo & 0x0f) << 4) | (x1o >> 2);

      i=xSl.charCodeAt(3);

      if(i != 61)

      {

      xXo=x1o;

      x1o=this.x4o(i);

      xud[2]=((xXo & 0x03) << 6) | x1o;

      }

      }

      return xud;

      }

      p7.x4o=function(xWo)

      {

      if( (xWo >= 65) && (xWo <= 90))

      {

      return xWo-65;

      }

      else if( (xWo >= 97) && (xWo <= 122))

      {

      return xWo-71;

      }

      else if( (xWo >= 48) && (xWo <= 57))

      {

      return xWo+4;

      }

      else if(xWo == 43)

      {

      return 62;

      }

      else if(xWo == 47)

      {

      return 63;

      }

      this.xKo();

      return 0;

      }

      p7.xKo=function()

      {

      throw new Error("Faulty Base64 data");

      }

       

       

      var p8=xtp.prototype;

      function xtp()

      {

      this.xvp=new xBn();

      this.x6o=new xqo();

      this.xap=new x2o();

      }

       

       

      p8.x8o=function(message, xkp)

      {

      this.xvp.xen();

      if(xkp)

      {

      this.xvp.xRn();

      }

      this.x6o.xVn(message);

      var xko=this.x6o.xlo();

      var xEf=this.xvp.xzn();

      var xhp=xEf.xil();

      var xgp=xhp.length-1;

      if(xko.length > xgp)

      {

      throw new Error("Key too short");

      }

      var xqp="";

      while(xko.length < xgp)

      {

      var x7b=Math.floor(Math.random()*255);

      xko[xko.length]=x7b;

      xqp += x7b+",";

      }

      var xjp=new xTk();

      xjp.xPk(xko);

      var xln=this.xvp.xSn(xjp);

      if(xkp)

      {

      var xip=this.xvp.xyn(xln);

      if(! xip.xqk(xjp))

      {

      throw new Error("Internal error");

      }

      }

      var xfp=xln.xil();

      var xlp=this.xap.xYo(xfp);

      return xlp;

      }

      p8.xkp=function(message, xUf)

      {

      this.xvp.xRn();

      var xcp=this.xap.xZo(xUf);

      var xrp=new xTk();

      xrp.xPk(xcp);

      var xip=this.xvp.xyn(xrp);

      var xpp=xip.xil();

      this.x6o.xVn(message);

      var xko=this.x6o.xlo();

      if(xpp.length < xko.length) return false;

      for(var i=0; i < xko.length; i++)

      {

      if(xpp[i] != xko[i]) return false;

      }

      return true;

      }

      p8.xPn=function(xcn, xEf)

      {

      this.xvp.xPn(xcn, xEf);

      }

      p8.xon=function(xcn, xEf)

      {

      this.xvp.xon(xcn, xEf);

      }