// // ChemDoodle Web Components 9.1.0 // // https://web.chemdoodle.com // // Copyright 2009-2020 iChemLabs, LLC. All rights reserved. // // The ChemDoodle Web Components library is licensed under version 3 // of the GNU GENERAL PUBLIC LICENSE. // // You may redistribute it and/or modify it under the terms of the // GNU General Public License as published by the Free Software Foundation, // either version 3 of the License, or (at your option) any later version. // // As an exception to the GPL, you may distribute this packed form of // the code without the copy of the GPL license normally required, // provided you include this license notice and a URL through which // recipients can access the corresponding unpacked source code. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // ChemDoodle Web Components employs 3rd party libraries under the MIT // license. For a full list with links to the original source, go to: // https://web.chemdoodle.com/installation/download/#libraries // // Please contact iChemLabs for // alternate licensing options. // 'use strict';let ChemDoodle=function(){let f={iChemLabs:{},informatics:{},io:{},lib:{},notations:{},structures:{}};f.structures.d2={};f.structures.d3={};f.getVersion=function(){return"9.1.0"};return f}(); (function(f,q,n){(function(f,e){"object"===typeof module&&"object"===typeof module.exports?module.exports=f.document?e(f,!0):function(k){if(!k.document)throw Error("jQuery requires a window with a document");return e(k)}:e(f)})("undefined"!==typeof f?f:this,function(f,e){function k(c){var a=!!c&&"length"in c&&c.length,b=t.type(c);return"function"===b||t.isWindow(c)?!1:"array"===b||0===a||"number"===typeof a&&0a;a+=2)"margin"===b&&(p+=t.css(c,b+ka[a],!0,g)),d?("content"===b&&(p-=t.css(c,"padding"+ka[a],!0,g)),"margin"!==b&&(p-=t.css(c,"border"+ka[a]+"Width",!0,g))):(p+=t.css(c,"padding"+ka[a],!0,g),"padding"!==b&&(p+=t.css(c,"border"+ka[a]+"Width",!0,g)));return p}function ca(c,a,b){var d=!0,g="width"===a?c.offsetWidth:c.offsetHeight,p=Fa(c),h="border-box"===t.css(c,"boxSizing",!1,p); if(0>=g||null==g){g=J(c,a,p);if(0>g||null==g)g=c.style[a];if(Ja.test(g))return g;d=h&&(P.boxSizingReliable()||g===c.style[a]);g=parseFloat(g)||0}return g+Q(c,a,b||(h?"border":"content"),d,p)+"px"}function da(c,a){for(var b,d,g,p=[],h=0,e=c.length;hb;b+=2-a){var g=ka[b];d["margin"+g]=d["padding"+g]=c}a&&(d.opacity=d.width=c);return d}function ra(c,a,b){for(var d,g=(V.tweeners[a]||[]).concat(V.tweeners["*"]),p=0,h=g.length;pb&&p)return a;h.resolveWith(c,[m]);return!1},m=h.promise({elem:c,props:t.extend({},a),opts:t.extend(!0,{specialEasing:{},easing:t.easing._default},b),originalProperties:a,originalOptions:b,startTime:pa||oa(),duration:b.duration,tweens:[],createTween:function(a,b){a=t.Tween(c,m.opts,a,b,m.opts.specialEasing[a]||m.opts.easing);m.tweens.push(a);return a},stop:function(a){var b=0,g=a?m.tweens.length:0;if(d)return this;for(d=!0;bc?this[c+this.length]:this[c]:ja.call(this)},pushStack:function(c){c=t.merge(this.constructor(),c);c.prevObject=this;c.context=this.context;return c},each:function(c){return t.each(this, c)},map:function(c){return this.pushStack(t.map(this,function(a,b){return c.call(a,b,a)}))},slice:function(){return this.pushStack(ja.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(c){var a=this.length;c=+c+(0>c?a:0);return this.pushStack(0<=c&&cO.cacheLength&&delete c[a.shift()];return c[b+" "]=d}var a=[];return c}function d(c){c[H]=!0;return c}function g(c){var a=B.createElement("div");try{return!!c(a)}catch(ec){return!1}finally{a.parentNode&&a.parentNode.removeChild(a)}}function p(c,a){c=c.split("|");for(var b=c.length;b--;)O.attrHandle[c[b]]=a}function h(c,a){var b=a&&c,d=b&&1===c.nodeType&&1===a.nodeType&&(~a.sourceIndex||-2147483648)- (~c.sourceIndex||-2147483648);if(d)return d;if(b)for(;b=b.nextSibling;)if(b===a)return-1;return c?1:-1}function e(c){return function(a){return"input"===a.nodeName.toLowerCase()&&a.type===c}}function m(c){return function(a){var b=a.nodeName.toLowerCase();return("input"===b||"button"===b)&&a.type===c}}function l(c){return d(function(a){a=+a;return d(function(b,d){for(var g,p=c([],b.length,a),h=p.length;h--;)b[g=p[h]]&&(b[g]=!(d[g]=b[g]))})})}function f(c){return c&&"undefined"!==typeof c.getElementsByTagName&& c}function v(){}function k(c){for(var a=0,b=c.length,d="";a+~]|[\x20\t\r\n\f])[\x20\t\r\n\f]*/,Da=/=[\x20\t\r\n\f]*([^\]'"]*?)[\x20\t\r\n\f]*\]/g,oa= /:((?:\\.|[\w-]|[^\x00-\xa0])+)(?:\((('((?:\\.|[^\\'])*)'|"((?:\\.|[^\\"])*)")|((?:\\.|[^\\()[\]]|\[[\x20\t\r\n\f]*((?:\\.|[\w-]|[^\x00-\xa0])+)(?:[\x20\t\r\n\f]*([*^$|!~]?=)[\x20\t\r\n\f]*(?:'((?:\\.|[^\\'])*)'|"((?:\\.|[^\\"])*)"|((?:\\.|[\w-]|[^\x00-\xa0])+))|)[\x20\t\r\n\f]*\])*)|.*)\)|)/,ta=/^(?:\\.|[\w-]|[^\x00-\xa0])+$/,ja={ID:/^#((?:\\.|[\w-]|[^\x00-\xa0])+)/,CLASS:/^\.((?:\\.|[\w-]|[^\x00-\xa0])+)/,TAG:/^((?:\\.|[\w-]|[^\x00-\xa0])+|[*])/,ATTR:/^\[[\x20\t\r\n\f]*((?:\\.|[\w-]|[^\x00-\xa0])+)(?:[\x20\t\r\n\f]*([*^$|!~]?=)[\x20\t\r\n\f]*(?:'((?:\\.|[^\\'])*)'|"((?:\\.|[^\\"])*)"|((?:\\.|[\w-]|[^\x00-\xa0])+))|)[\x20\t\r\n\f]*\]/, PSEUDO:/^:((?:\\.|[\w-]|[^\x00-\xa0])+)(?:\((('((?:\\.|[^\\'])*)'|"((?:\\.|[^\\"])*)")|((?:\\.|[^\\()[\]]|\[[\x20\t\r\n\f]*((?:\\.|[\w-]|[^\x00-\xa0])+)(?:[\x20\t\r\n\f]*([*^$|!~]?=)[\x20\t\r\n\f]*(?:'((?:\\.|[^\\'])*)'|"((?:\\.|[^\\"])*)"|((?:\\.|[\w-]|[^\x00-\xa0])+))|)[\x20\t\r\n\f]*\])*)|.*)\)|)/,CHILD:/^:(only|first|last|nth|nth-last)-(child|of-type)(?:\([\x20\t\r\n\f]*(even|odd|(([+-]|)(\d*)n|)[\x20\t\r\n\f]*(?:([+-]|)[\x20\t\r\n\f]*(\d+)|))[\x20\t\r\n\f]*\)|)/i,bool:/^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i, needsContext:/^[\x20\t\r\n\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\([\x20\t\r\n\f]*((?:-\d)?\d*)[\x20\t\r\n\f]*\)|)(?=[^-]|$)/i},Y=/^(?:input|select|textarea|button)$/i,T=/^h\d$/i,ua=/^[^{]+\{\s*\[native \w/,W=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ma=/[+~]/,La=/'|\\/g,R=/\\([\da-f]{1,6}[\x20\t\r\n\f]?|([\x20\t\r\n\f])|.)/ig,S=function(c,a,b){c="0x"+a-65536;return c!==c||b?a:0>c?String.fromCharCode(c+65536):String.fromCharCode(c>>10|55296,c&1023|56320)},ba=function(){ea()};try{ha.apply(aa=ra.call(X.childNodes), X.childNodes),aa[X.childNodes.length].nodeType}catch(dc){ha={apply:aa.length?function(c,a){L.apply(c,ra.call(a))}:function(c,a){for(var b=c.length,d=0;c[b++]=a[d++];);c.length=b-1}}}var U=a.support={};var ia=a.isXML=function(c){return(c=c&&(c.ownerDocument||c).documentElement)?"HTML"!==c.nodeName:!1};var ea=a.setDocument=function(c){var a;c=c?c.ownerDocument||c:X;if(c===B||9!==c.nodeType||!c.documentElement)return B;B=c;q=B.documentElement;D=!ia(B);(a=B.defaultView)&&a.top!==a&&(a.addEventListener? a.addEventListener("unload",ba,!1):a.attachEvent&&a.attachEvent("onunload",ba));U.attributes=g(function(c){c.className="i";return!c.getAttribute("className")});U.getElementsByTagName=g(function(c){c.appendChild(B.createComment(""));return!c.getElementsByTagName("*").length});U.getElementsByClassName=ua.test(B.getElementsByClassName);U.getById=g(function(c){q.appendChild(c).id=H;return!B.getElementsByName||!B.getElementsByName(H).length});U.getById?(O.find.ID=function(c,a){if("undefined"!==typeof a.getElementById&& D)return(c=a.getElementById(c))?[c]:[]},O.filter.ID=function(c){var a=c.replace(R,S);return function(c){return c.getAttribute("id")===a}}):(delete O.find.ID,O.filter.ID=function(c){var a=c.replace(R,S);return function(c){return(c="undefined"!==typeof c.getAttributeNode&&c.getAttributeNode("id"))&&c.value===a}});O.find.TAG=U.getElementsByTagName?function(c,a){if("undefined"!==typeof a.getElementsByTagName)return a.getElementsByTagName(c);if(U.qsa)return a.querySelectorAll(c)}:function(c,a){var b=[], d=0;a=a.getElementsByTagName(c);if("*"===c){for(;c=a[d++];)1===c.nodeType&&b.push(c);return b}return a};O.find.CLASS=U.getElementsByClassName&&function(c,a){if("undefined"!==typeof a.getElementsByClassName&&D)return a.getElementsByClassName(c)};G=[];E=[];if(U.qsa=ua.test(B.querySelectorAll))g(function(c){q.appendChild(c).innerHTML="\x3ca id\x3d'"+H+"'\x3e\x3c/a\x3e\x3cselect id\x3d'"+H+"-\r\\' msallowcapture\x3d''\x3e\x3coption selected\x3d''\x3e\x3c/option\x3e\x3c/select\x3e";c.querySelectorAll("[msallowcapture^\x3d'']").length&& E.push("[*^$]\x3d[\\x20\\t\\r\\n\\f]*(?:''|\"\")");c.querySelectorAll("[selected]").length||E.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)");c.querySelectorAll("[id~\x3d"+H+"-]").length||E.push("~\x3d");c.querySelectorAll(":checked").length||E.push(":checked");c.querySelectorAll("a#"+H+"+*").length||E.push(".#.+[+~]")}),g(function(c){var a=B.createElement("input");a.setAttribute("type", "hidden");c.appendChild(a).setAttribute("name","D");c.querySelectorAll("[name\x3dd]").length&&E.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?\x3d");c.querySelectorAll(":enabled").length||E.push(":enabled",":disabled");c.querySelectorAll("*,:x");E.push(",.*:")});(U.matchesSelector=ua.test(K=q.matches||q.webkitMatchesSelector||q.mozMatchesSelector||q.oMatchesSelector||q.msMatchesSelector))&&g(function(c){U.disconnectedMatch=K.call(c,"div");K.call(c,"[s!\x3d'']:x");G.push("!\x3d",":((?:\\\\.|[\\w-]|[^\\x00-\\xa0])+)(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\\x00-\\xa0])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?\x3d)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|((?:\\\\.|[\\w-]|[^\\x00-\\xa0])+))|)[\\x20\\t\\r\\n\\f]*\\])*)|.*)\\)|)")}); E=E.length&&new RegExp(E.join("|"));G=G.length&&new RegExp(G.join("|"));J=(a=ua.test(q.compareDocumentPosition))||ua.test(q.contains)?function(c,a){var b=9===c.nodeType?c.documentElement:c;a=a&&a.parentNode;return c===a||!!(a&&1===a.nodeType&&(b.contains?b.contains(a):c.compareDocumentPosition&&c.compareDocumentPosition(a)&16))}:function(c,a){if(a)for(;a=a.parentNode;)if(a===c)return!0;return!1};da=a?function(c,a){if(c===a)return y=!0,0;var b=!c.compareDocumentPosition-!a.compareDocumentPosition; if(b)return b;b=(c.ownerDocument||c)===(a.ownerDocument||a)?c.compareDocumentPosition(a):1;return b&1||!U.sortDetached&&a.compareDocumentPosition(c)===b?c===B||c.ownerDocument===X&&J(X,c)?-1:a===B||a.ownerDocument===X&&J(X,a)?1:C?N(C,c)-N(C,a):0:b&4?-1:1}:function(c,a){if(c===a)return y=!0,0;var b=0,d=c.parentNode,g=a.parentNode,p=[c],e=[a];if(!d||!g)return c===B?-1:a===B?1:d?-1:g?1:C?N(C,c)-N(C,a):0;if(d===g)return h(c,a);for(;c=c.parentNode;)p.unshift(c);for(c=a;c=c.parentNode;)e.unshift(c);for(;p[b]=== e[b];)b++;return b?h(p[b],e[b]):p[b]===X?-1:e[b]===X?1:0};return B};a.matches=function(c,b){return a(c,null,null,b)};a.matchesSelector=function(c,b){(c.ownerDocument||c)!==B&&ea(c);b=b.replace(Da,"\x3d'$1']");if(!(!U.matchesSelector||!D||ca[b+" "]||G&&G.test(b)||E&&E.test(b)))try{var d=K.call(c,b);if(d||U.disconnectedMatch||c.document&&11!==c.document.nodeType)return d}catch(fc){}return 0c.nodeType)return!1;return!0},parent:function(c){return!O.pseudos.empty(c)},header:function(c){return T.test(c.nodeName)},input:function(c){return Y.test(c.nodeName)}, button:function(c){var a=c.nodeName.toLowerCase();return"input"===a&&"button"===c.type||"button"===a},text:function(c){var a;return"input"===c.nodeName.toLowerCase()&&"text"===c.type&&(null==(a=c.getAttribute("type"))||"text"===a.toLowerCase())},first:l(function(){return[0]}),last:l(function(c,a){return[a-1]}),eq:l(function(c,a,b){return[0>b?b+a:b]}),even:l(function(c,a){for(var b=0;bb?b+a:b;0<=--a;)c.push(a);return c}),gt:l(function(c,a,b){for(b=0>b?b+a:b;++b(?:<\/\1>|)$/,nb=/^.[^:#\[\.,]*$/;t.filter=function(c,a,b){var d=a[0];b&&(c= ":not("+c+")");return 1===a.length&&1===d.nodeType?t.find.matchesSelector(d,c)?[d]:[]:t.find.matches(c,t.grep(a,function(c){return 1===c.nodeType}))};t.fn.extend({find:function(c){var a,b=this.length,d=[],g=this;if("string"!==typeof c)return this.pushStack(t(c).filter(function(){for(a=0;a)[^>]*|#([\w-]*))$/;(t.fn.init=function(c,a,b){if(!c)return this;b=b||Bb;if("string"===typeof c){var d="\x3c"===c[0]&&"\x3e"===c[c.length-1]&&3<=c.length?[null,c,null]:Ab.exec(c);if(!d||!d[1]&&a)return!a||a.jquery?(a||b).find(c):this.constructor(a).find(c);if(d[1]){if(a=a instanceof t?a[0]:a,t.merge(this,t.parseHTML(d[1], a&&a.nodeType?a.ownerDocument||a:I,!0)),bb.test(d[1])&&t.isPlainObject(a))for(d in a)if(t.isFunction(this[d]))this[d](a[d]);else this.attr(d,a[d])}else(a=I.getElementById(d[2]))&&a.parentNode&&(this.length=1,this[0]=a),this.context=I,this.selector=c;return this}if(c.nodeType)return this.context=this[0]=c,this.length=1,this;if(t.isFunction(c))return b.ready!==n?b.ready(c):c(t);c.selector!==n&&(this.selector=c.selector,this.context=c.context);return t.makeArray(c,this)}).prototype=t.fn;var Bb=t(I); var Cb=/^(?:parents|prev(?:Until|All))/,Db={children:!0,contents:!0,next:!0,prev:!0};t.fn.extend({has:function(c){var a=t(c,this),b=a.length;return this.filter(function(){for(var c=0;cb.nodeType&&(h?-1c.button))for(;p!==this;p=p.parentNode||this)if(1===p.nodeType&&(!0!==p.disabled||"click"!==c.type)){var h=[];for(b=0;b]*)\/>/gi, Hb=/\s*$/g;t.extend({htmlPrefilter:function(c){return c.replace(Gb,"\x3c$1\x3e\x3c/$2\x3e")},clone:function(c,a,b){var d,g=c.cloneNode(!0),p=t.contains(c.ownerDocument,c);if(!(P.noCloneChecked||1!==c.nodeType&&11!==c.nodeType||t.isXMLDoc(c))){var h=m(g);var e=m(c);var l=0;for(d=e.length;lt.inArray(this,c)&&(t.cleanData(m(this)), b&&b.replaceChild(a,this))},c)}});t.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(c,a){t.fn[c]=function(c){for(var b=[],d=t(c),g=d.length-1,p=0;p<=g;p++)c=p===g?this:this.clone(!0),t(d[p])[a](c),xa.apply(b,c.get());return this.pushStack(b)}});var Ea,Wa={HTML:"block",BODY:"block"},Xa=/^margin/,Ja=new RegExp("^("+cb+")(?!px)[a-z%]+$","i"),Fa=function(c){var a=c.ownerDocument.defaultView;a&&a.opener||(a=f);return a.getComputedStyle(c)}, Na=function(c,a,b,d){var g,p={};for(g in a)p[g]=c.style[g],c.style[g]=a[g];b=b.apply(c,d||[]);for(g in a)c.style[g]=p[g];return b},za=I.documentElement;(function(){function c(){h.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%";h.innerHTML="";za.appendChild(p);var c=f.getComputedStyle(h);a="1%"!==c.top;g="2px"===c.marginLeft;b="4px"===c.width;h.style.marginRight="50%"; d="4px"===c.marginRight;za.removeChild(p)}var a,b,d,g,p=I.createElement("div"),h=I.createElement("div");h.style&&(h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",P.clearCloneStyle="content-box"===h.style.backgroundClip,p.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",p.appendChild(h),t.extend(P,{pixelPosition:function(){c();return a},boxSizingReliable:function(){null==b&&c();return b},pixelMarginRight:function(){null== b&&c();return d},reliableMarginLeft:function(){null==b&&c();return g},reliableMarginRight:function(){var c=h.appendChild(I.createElement("div"));c.style.cssText=h.style.cssText="-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0";c.style.marginRight=c.style.width="0";h.style.width="1px";za.appendChild(p);var a=!parseFloat(f.getComputedStyle(c).marginRight);za.removeChild(p);h.removeChild(c);return a}}))})();var Ib=/^(none|table(?!-c[ea]).+)/,Jb={position:"absolute", visibility:"hidden",display:"block"},fb={letterSpacing:"0",fontWeight:"400"},Za=["Webkit","O","Moz","ms"],Ya=I.createElement("div").style;t.extend({cssHooks:{opacity:{get:function(c,a){if(a)return c=J(c,"opacity"),""===c?"1":c}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(c,a,b,d){if(c&&3!==c.nodeType&&8!==c.nodeType&& c.style){var g,p=t.camelCase(a),h=c.style;a=t.cssProps[p]||(t.cssProps[p]=X(p)||p);var e=t.cssHooks[a]||t.cssHooks[p];if(b!==n){var m=typeof b;"string"===m&&(g=va.exec(b))&&g[1]&&(b=v(c,a,g),m="number");null!=b&&b===b&&("number"===m&&(b+=g&&g[3]||(t.cssNumber[p]?"":"px")),P.clearCloneStyle||""!==b||0!==a.indexOf("background")||(h[a]="inherit"),e&&"set"in e&&(b=e.set(c,b,d))===n||(h[a]=b))}else return e&&"get"in e&&(g=e.get(c,!1,d))!==n?g:h[a]}},css:function(c,a,b,d){var g;var p=t.camelCase(a);a=t.cssProps[p]|| (t.cssProps[p]=X(p)||p);(p=t.cssHooks[a]||t.cssHooks[p])&&"get"in p&&(g=p.get(c,!0,b));g===n&&(g=J(c,a,d));"normal"===g&&a in fb&&(g=fb[a]);return""===b||b?(c=parseFloat(g),!0===b||isFinite(c)?c||0:g):g}});t.each(["height","width"],function(c,a){t.cssHooks[a]={get:function(c,b,d){if(b)return Ib.test(t.css(c,"display"))&&0===c.offsetWidth?Na(c,Jb,function(){return ca(c,a,d)}):ca(c,a,d)},set:function(c,b,d){var g,p=d&&Fa(c);(d=d&&Q(c,a,d,"border-box"===t.css(c,"boxSizing",!1,p),p))&&(g=va.exec(b))&& "px"!==(g[3]||"px")&&(c.style[a]=b,b=t.css(c,a));return na(c,b,d)}}});t.cssHooks.marginLeft=H(P.reliableMarginLeft,function(c,a){if(a)return(parseFloat(J(c,"marginLeft"))||c.getBoundingClientRect().left-Na(c,{marginLeft:0},function(){return c.getBoundingClientRect().left}))+"px"});t.cssHooks.marginRight=H(P.reliableMarginRight,function(c,a){if(a)return Na(c,{display:"inline-block"},J,[c,"marginRight"])});t.each({margin:"",padding:"",border:"Width"},function(c,a){t.cssHooks[c+a]={expand:function(b){var d= 0,g={};for(b="string"===typeof b?b.split(" "):[b];4>d;d++)g[c+ka[d]+a]=b[d]||b[d-2]||b[0];return g}};Xa.test(c)||(t.cssHooks[c+a].set=na)});t.fn.extend({css:function(c,a){return fa(this,function(c,a,b){var d,g={},p=0;if(t.isArray(a)){b=Fa(c);for(d=a.length;pd.indexOf(" "+g+" ")&&(d+=g+" ");d=t.trim(d);e!==d&&b.setAttribute("class",d)}}return this},removeClass:function(c){var a,b,d,g,p,h=0;if(t.isFunction(c))return this.each(function(a){t(this).removeClass(c.call(this, a,Y(this)))});if(!arguments.length)return this.attr("class","");if("string"===typeof c&&c)for(a=c.match(ia)||[];b=this[h++];){var e=Y(b);if(d=1===b.nodeType&&(" "+e+" ").replace(Oa," ")){for(p=0;g=a[p++];)for(;-1d)?null:[],p=c?d+1:b.length,h=0>d?p:c?d:0;he.indexOf(":")&&"on"+e;c=c[t.expando]?c:new t.Event(e,"object"===typeof c&&c);c.isTrigger=d?2:3;c.namespace=m.join(".");c.rnamespace=c.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;c.result= n;c.target||(c.target=b);a=null==a?[c]:t.makeArray(a,[c]);m=t.event.special[e]||{};if(d||!m.trigger||!1!==m.trigger.apply(b,a)){if(!d&&!m.noBubble&&!t.isWindow(b)){var k=m.delegateType||e;gb.test(k+e)||(l=l.parentNode);for(;l;l=l.parentNode)h.push(l),g=l;g===(b.ownerDocument||I)&&h.push(g.defaultView||g.parentWindow||f)}for(g=0;(l=h[g++])&&!c.isPropagationStopped();)c.type=1c||304===c;if(b){var w=l;for(var r=C,B,q,D,E,G=w.contents,K=w.dataTypes;"*"===K[0];)K.shift(),B===n&&(B=w.mimeType||r.getResponseHeader("Content-Type"));if(B)for(q in G)if(G[q]&&G[q].test(B)){K.unshift(q);break}if(K[0]in b)D=K[0];else{for(q in b){if(!K[0]||w.converters[q+" "+K[0]]){D=q; break}E||(E=q)}D=D||E}D?(D!==K[0]&&K.unshift(D),w=b[D]):w=void 0}a:{b=l;B=w;q=C;D=p;var F;r={};G=b.dataTypes.slice();if(G[1])for(H in b.converters)r[H.toLowerCase()]=b.converters[H];for(E=G.shift();E;){b.responseFields[E]&&(q[b.responseFields[E]]=B);!J&&D&&b.dataFilter&&(B=b.dataFilter(B,b.dataType));var J=E;if(E=G.shift())if("*"===E)E=J;else if("*"!==J&&J!==E){var H=r[J+" "+E]||r["* "+E];if(!H)for(F in r)if(w=F.split(" "),w[1]===E&&(H=r[J+" "+w[0]]||r["* "+w[0]])){!0===H?H=r[F]:!0!==r[F]&&(E=w[0], G.unshift(w[1]));break}if(!0!==H)if(H&&b.throws)B=H(B);else try{B=H(B)}catch(zb){w={state:"parsererror",error:H?zb:"No conversion from "+J+" to "+E};break a}}}w={state:"success",data:B}}if(p)if(l.ifModified&&((m=C.getResponseHeader("Last-Modified"))&&(t.lastModified[y]=m),(m=C.getResponseHeader("etag"))&&(t.etag[y]=m)),204===c||"HEAD"===l.type)m="nocontent";else if(304===c)m="notmodified";else{m=w.state;var X=w.data;var Q=w.error;p=!Q}else if(Q=m,c||!m)m="error",0>c&&(c=0);C.status=c;C.statusText= (a||m)+"";p?A.resolveWith(v,[X,m,C]):A.rejectWith(v,[C,m,Q]);C.statusCode(u);u=n;e&&k.trigger(p?"ajaxSuccess":"ajaxError",[C,l,p?X:Q]);x.fireWith(v,[C,m]);e&&(k.trigger("ajaxComplete",[C,l]),--t.active||t.event.trigger("ajaxStop"))}}"object"===typeof c&&(a=c,c=n);a=a||{};var d,g,p,h,e,m,l=t.ajaxSetup({},a),v=l.context||l,k=l.context&&(v.nodeType||v.jquery)?t(v):t.event,A=t.Deferred(),x=t.Callbacks("once memory"),u=l.statusCode||{},w={},r={},z=0,B="canceled",C={readyState:0,getResponseHeader:function(c){var a; if(2===z){if(!p)for(p={};a=Sb.exec(g);)p[a[1].toLowerCase()]=a[2];a=p[c.toLowerCase()]}return null==a?null:a},getAllResponseHeaders:function(){return 2===z?g:null},setRequestHeader:function(c,a){var b=c.toLowerCase();z||(c=r[b]=r[b]||c,w[c]=a);return this},overrideMimeType:function(c){z||(l.mimeType=c);return this},statusCode:function(c){var a;if(c)if(2>z)for(a in c)u[a]=[u[a],c[a]];else C.always(c[C.status]);return this},abort:function(c){c=c||B;d&&d.abort(c);b(0,c);return this}};A.promise(C).complete= x.add;C.success=C.done;C.error=C.fail;l.url=((c||l.url||Ba.href)+"").replace(Rb,"").replace(Ub,Ba.protocol+"//");l.type=a.method||a.type||l.method||l.type;l.dataTypes=t.trim(l.dataType||"*").toLowerCase().match(ia)||[""];if(null==l.crossDomain){c=I.createElement("a");try{c.href=l.url,c.href=c.href,l.crossDomain=Ra.protocol+"//"+Ra.host!==c.protocol+"//"+c.host}catch(Ma){l.crossDomain=!0}}l.data&&l.processData&&"string"!==typeof l.data&&(l.data=t.param(l.data,l.traditional));R(ib,l,a,C);if(2===z)return C; (e=t.event&&l.global)&&0===t.active++&&t.event.trigger("ajaxStart");l.type=l.type.toUpperCase();l.hasContent=!Tb.test(l.type);var y=l.url;l.hasContent||(l.data&&(y=l.url+=(Qa.test(y)?"\x26":"?")+l.data,delete l.data),!1===l.cache&&(l.url=hb.test(y)?y.replace(hb,"$1_\x3d"+Pa++):y+(Qa.test(y)?"\x26":"?")+"_\x3d"+Pa++));l.ifModified&&(t.lastModified[y]&&C.setRequestHeader("If-Modified-Since",t.lastModified[y]),t.etag[y]&&C.setRequestHeader("If-None-Match",t.etag[y]));(l.data&&l.hasContent&&!1!==l.contentType|| a.contentType)&&C.setRequestHeader("Content-Type",l.contentType);C.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+jb+"; q\x3d0.01":""):l.accepts["*"]);for(m in l.headers)C.setRequestHeader(m,l.headers[m]);if(l.beforeSend&&(!1===l.beforeSend.call(v,C,l)||2===z))return C.abort();B="abort";for(m in{success:1,error:1,complete:1})C[m](l[m]);if(d=R(Ka,l,a,C)){C.readyState=1;e&&k.trigger("ajaxSend",[C,l]);if(2===z)return C;l.async&& 0z)b(-1,Ma);else throw Ma;}}else b(-1,"No Transport");return C},getJSON:function(c,a,b){return t.get(c,a,b,"json")},getScript:function(c,a){return t.get(c,n,a,"script")}});t.each(["get","post"],function(c,a){t[a]=function(c,b,d,g){t.isFunction(b)&&(g=g||d,d=b,b=n);return t.ajax(t.extend({url:c,type:a,dataType:g,data:b,success:d},t.isPlainObject(c)&&c))}});t._evalUrl=function(c){return t.ajax({url:c, type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})};t.fn.extend({wrapAll:function(c){if(t.isFunction(c))return this.each(function(a){t(this).wrapAll(c.call(this,a))});if(this[0]){var a=t(c,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&a.insertBefore(this[0]);a.map(function(){for(var c=this;c.firstElementChild;)c=c.firstElementChild;return c}).append(this)}return this},wrapInner:function(c){return t.isFunction(c)?this.each(function(a){t(this).wrapInner(c.call(this,a))}):this.each(function(){var a= t(this),b=a.contents();b.length?b.wrapAll(c):a.append(c)})},wrap:function(c){var a=t.isFunction(c);return this.each(function(b){t(this).wrapAll(a?c.call(this,b):c)})},unwrap:function(){return this.parent().each(function(){t.nodeName(this,"body")||t(this).replaceWith(this.childNodes)}).end()}});t.expr.filters.hidden=function(c){return!t.expr.filters.visible(c)};t.expr.filters.visible=function(c){return 0>1);var d=c[0];return d*(1.5-.5*b*d*d)}}else r.invsqrt=function(c){return 1/ Math.sqrt(c)}})();var e=null;n();var k={create:function(c){var a=new e(3);c?(a[0]=c[0],a[1]=c[1],a[2]=c[2]):a[0]=a[1]=a[2]=0;return a},createFrom:function(c,a,b){var d=new e(3);d[0]=c;d[1]=a;d[2]=b;return d},set:function(c,a){a[0]=c[0];a[1]=c[1];a[2]=c[2];return a},equal:function(c,a){return c===a||1E-6>Math.abs(c[0]-a[0])&&1E-6>Math.abs(c[1]-a[1])&&1E-6>Math.abs(c[2]-a[2])},add:function(c,a,b){if(!b||c===b)return c[0]+=a[0],c[1]+=a[1],c[2]+=a[2],c;b[0]=c[0]+a[0];b[1]=c[1]+a[1];b[2]=c[2]+a[2];return b}, subtract:function(c,a,b){if(!b||c===b)return c[0]-=a[0],c[1]-=a[1],c[2]-=a[2],c;b[0]=c[0]-a[0];b[1]=c[1]-a[1];b[2]=c[2]-a[2];return b},multiply:function(c,a,b){if(!b||c===b)return c[0]*=a[0],c[1]*=a[1],c[2]*=a[2],c;b[0]=c[0]*a[0];b[1]=c[1]*a[1];b[2]=c[2]*a[2];return b},negate:function(c,a){a||(a=c);a[0]=-c[0];a[1]=-c[1];a[2]=-c[2];return a},scale:function(c,a,b){if(!b||c===b)return c[0]*=a,c[1]*=a,c[2]*=a,c;b[0]=c[0]*a;b[1]=c[1]*a;b[2]=c[2]*a;return b},normalize:function(c,a){a||(a=c);var b=c[0], d=c[1];c=c[2];var g=Math.sqrt(b*b+d*d+c*c);if(!g)return a[0]=0,a[1]=0,a[2]=0,a;if(1===g)return a[0]=b,a[1]=d,a[2]=c,a;g=1/g;a[0]=b*g;a[1]=d*g;a[2]=c*g;return a},cross:function(c,a,b){b||(b=c);var d=c[0],g=c[1];c=c[2];var p=a[0],h=a[1];a=a[2];b[0]=g*a-c*h;b[1]=c*p-d*a;b[2]=d*h-g*p;return b},length:function(c){var a=c[0],b=c[1];c=c[2];return Math.sqrt(a*a+b*b+c*c)},squaredLength:function(c){var a=c[0],b=c[1];c=c[2];return a*a+b*b+c*c},dot:function(c,a){return c[0]*a[0]+c[1]*a[1]+c[2]*a[2]},direction:function(c, a,b){b||(b=c);var d=c[0]-a[0],g=c[1]-a[1];c=c[2]-a[2];a=Math.sqrt(d*d+g*g+c*c);if(!a)return b[0]=0,b[1]=0,b[2]=0,b;a=1/a;b[0]=d*a;b[1]=g*a;b[2]=c*a;return b},lerp:function(c,a,b,d){d||(d=c);d[0]=c[0]+b*(a[0]-c[0]);d[1]=c[1]+b*(a[1]-c[1]);d[2]=c[2]+b*(a[2]-c[2]);return d},dist:function(c,a){var b=a[0]-c[0],d=a[1]-c[1];c=a[2]-c[2];return Math.sqrt(b*b+d*d+c*c)}},b=null,d=new e(4);k.unproject=function(c,a,g,h,e){e||(e=c);b||(b=m.create());var p=b;d[0]=2*(c[0]-h[0])/h[2]-1;d[1]=2*(c[1]-h[1])/h[3]-1;d[2]= 2*c[2]-1;d[3]=1;m.multiply(g,a,p);if(!m.inverse(p))return null;m.multiplyVec4(p,d);if(0===d[3])return null;e[0]=d[0]/d[3];e[1]=d[1]/d[3];e[2]=d[2]/d[3];return e};var h=k.createFrom(1,0,0),a=k.createFrom(0,1,0),g=k.createFrom(0,0,1),l=k.create();k.rotationTo=function(c,b,d){d||(d=x.create());var p=k.dot(c,b);if(1<=p)x.set(u,d);else if(-.999999>p)k.cross(h,c,l),1E-6>k.length(l)&&k.cross(a,c,l),1E-6>k.length(l)&&k.cross(g,c,l),k.normalize(l),x.fromAngleAxis(Math.PI,l,d);else{p=Math.sqrt(2*(1+p));var e= 1/p;k.cross(c,b,l);d[0]=l[0]*e;d[1]=l[1]*e;d[2]=l[2]*e;d[3]=.5*p;x.normalize(d)}1d[3]&&(d[3]=-1);return d};k.str=function(c){return"["+c[0]+", "+c[1]+", "+c[2]+"]"};var v={create:function(c){var a=new e(9);c?(a[0]=c[0],a[1]=c[1],a[2]=c[2],a[3]=c[3],a[4]=c[4],a[5]=c[5],a[6]=c[6],a[7]=c[7],a[8]=c[8]):a[0]=a[1]=a[2]=a[3]=a[4]=a[5]=a[6]=a[7]=a[8]=0;return a},createFrom:function(c,a,b,d,g,h,m,l,v){var p=new e(9);p[0]=c;p[1]=a;p[2]=b;p[3]=d;p[4]=g;p[5]=h;p[6]=m;p[7]=l;p[8]=v;return p},determinant:function(c){var a= c[3],b=c[4],d=c[5],g=c[6],h=c[7],e=c[8];return c[0]*(e*b-d*h)+c[1]*(-e*a+d*g)+c[2]*(h*a-b*g)},inverse:function(c,a){var b=c[0],d=c[1],g=c[2],h=c[3],p=c[4],e=c[5],m=c[6],l=c[7];c=c[8];var f=c*p-e*l,k=-c*h+e*m,x=l*h-p*m,u=b*f+d*k+g*x;if(!u)return null;u=1/u;a||(a=v.create());a[0]=f*u;a[1]=(-c*d+g*l)*u;a[2]=(e*d-g*p)*u;a[3]=k*u;a[4]=(c*b-g*m)*u;a[5]=(-e*b+g*h)*u;a[6]=x*u;a[7]=(-l*b+d*m)*u;a[8]=(p*b-d*h)*u;return a},multiply:function(c,a,b){b||(b=c);var d=c[0],g=c[1],h=c[2],p=c[3],e=c[4],m=c[5],l=c[6], v=c[7];c=c[8];var f=a[0],k=a[1],x=a[2],u=a[3],w=a[4],A=a[5],r=a[6],n=a[7];a=a[8];b[0]=f*d+k*p+x*l;b[1]=f*g+k*e+x*v;b[2]=f*h+k*m+x*c;b[3]=u*d+w*p+A*l;b[4]=u*g+w*e+A*v;b[5]=u*h+w*m+A*c;b[6]=r*d+n*p+a*l;b[7]=r*g+n*e+a*v;b[8]=r*h+n*m+a*c;return b},multiplyVec2:function(c,a,b){b||(b=a);var d=a[0];a=a[1];b[0]=d*c[0]+a*c[3]+c[6];b[1]=d*c[1]+a*c[4]+c[7];return b},multiplyVec3:function(c,a,b){b||(b=a);var d=a[0],g=a[1];a=a[2];b[0]=d*c[0]+g*c[3]+a*c[6];b[1]=d*c[1]+g*c[4]+a*c[7];b[2]=d*c[2]+g*c[5]+a*c[8];return b}, set:function(c,a){a[0]=c[0];a[1]=c[1];a[2]=c[2];a[3]=c[3];a[4]=c[4];a[5]=c[5];a[6]=c[6];a[7]=c[7];a[8]=c[8];return a},equal:function(c,a){return c===a||1E-6>Math.abs(c[0]-a[0])&&1E-6>Math.abs(c[1]-a[1])&&1E-6>Math.abs(c[2]-a[2])&&1E-6>Math.abs(c[3]-a[3])&&1E-6>Math.abs(c[4]-a[4])&&1E-6>Math.abs(c[5]-a[5])&&1E-6>Math.abs(c[6]-a[6])&&1E-6>Math.abs(c[7]-a[7])&&1E-6>Math.abs(c[8]-a[8])},identity:function(c){c||(c=v.create());c[0]=1;c[1]=0;c[2]=0;c[3]=0;c[4]=1;c[5]=0;c[6]=0;c[7]=0;c[8]=1;return c},transpose:function(c, a){if(!a||c===a){a=c[1];var b=c[2],d=c[5];c[1]=c[3];c[2]=c[6];c[3]=a;c[5]=c[7];c[6]=b;c[7]=d;return c}a[0]=c[0];a[1]=c[3];a[2]=c[6];a[3]=c[1];a[4]=c[4];a[5]=c[7];a[6]=c[2];a[7]=c[5];a[8]=c[8];return a},toMat4:function(c,a){a||(a=m.create());a[15]=1;a[14]=0;a[13]=0;a[12]=0;a[11]=0;a[10]=c[8];a[9]=c[7];a[8]=c[6];a[7]=0;a[6]=c[5];a[5]=c[4];a[4]=c[3];a[3]=0;a[2]=c[2];a[1]=c[1];a[0]=c[0];return a},str:function(c){return"["+c[0]+", "+c[1]+", "+c[2]+", "+c[3]+", "+c[4]+", "+c[5]+", "+c[6]+", "+c[7]+", "+ c[8]+"]"}},m={create:function(c){var a=new e(16);c&&(a[0]=c[0],a[1]=c[1],a[2]=c[2],a[3]=c[3],a[4]=c[4],a[5]=c[5],a[6]=c[6],a[7]=c[7],a[8]=c[8],a[9]=c[9],a[10]=c[10],a[11]=c[11],a[12]=c[12],a[13]=c[13],a[14]=c[14],a[15]=c[15]);return a},createFrom:function(c,a,b,d,g,h,m,l,v,f,k,x,u,w,r,n){var p=new e(16);p[0]=c;p[1]=a;p[2]=b;p[3]=d;p[4]=g;p[5]=h;p[6]=m;p[7]=l;p[8]=v;p[9]=f;p[10]=k;p[11]=x;p[12]=u;p[13]=w;p[14]=r;p[15]=n;return p},set:function(c,a){a[0]=c[0];a[1]=c[1];a[2]=c[2];a[3]=c[3];a[4]=c[4]; a[5]=c[5];a[6]=c[6];a[7]=c[7];a[8]=c[8];a[9]=c[9];a[10]=c[10];a[11]=c[11];a[12]=c[12];a[13]=c[13];a[14]=c[14];a[15]=c[15];return a},equal:function(c,a){return c===a||1E-6>Math.abs(c[0]-a[0])&&1E-6>Math.abs(c[1]-a[1])&&1E-6>Math.abs(c[2]-a[2])&&1E-6>Math.abs(c[3]-a[3])&&1E-6>Math.abs(c[4]-a[4])&&1E-6>Math.abs(c[5]-a[5])&&1E-6>Math.abs(c[6]-a[6])&&1E-6>Math.abs(c[7]-a[7])&&1E-6>Math.abs(c[8]-a[8])&&1E-6>Math.abs(c[9]-a[9])&&1E-6>Math.abs(c[10]-a[10])&&1E-6>Math.abs(c[11]-a[11])&&1E-6>Math.abs(c[12]- a[12])&&1E-6>Math.abs(c[13]-a[13])&&1E-6>Math.abs(c[14]-a[14])&&1E-6>Math.abs(c[15]-a[15])},identity:function(c){c||(c=m.create());c[0]=1;c[1]=0;c[2]=0;c[3]=0;c[4]=0;c[5]=1;c[6]=0;c[7]=0;c[8]=0;c[9]=0;c[10]=1;c[11]=0;c[12]=0;c[13]=0;c[14]=0;c[15]=1;return c},transpose:function(c,a){if(!a||c===a){a=c[1];var b=c[2],d=c[3],g=c[6],h=c[7],p=c[11];c[1]=c[4];c[2]=c[8];c[3]=c[12];c[4]=a;c[6]=c[9];c[7]=c[13];c[8]=b;c[9]=g;c[11]=c[14];c[12]=d;c[13]=h;c[14]=p;return c}a[0]=c[0];a[1]=c[4];a[2]=c[8];a[3]=c[12]; a[4]=c[1];a[5]=c[5];a[6]=c[9];a[7]=c[13];a[8]=c[2];a[9]=c[6];a[10]=c[10];a[11]=c[14];a[12]=c[3];a[13]=c[7];a[14]=c[11];a[15]=c[15];return a},determinant:function(c){var a=c[0],b=c[1],d=c[2],g=c[3],h=c[4],e=c[5],m=c[6],l=c[7],v=c[8],f=c[9],k=c[10],x=c[11],u=c[12],w=c[13],r=c[14];c=c[15];return u*f*m*g-v*w*m*g-u*e*k*g+h*w*k*g+v*e*r*g-h*f*r*g-u*f*d*l+v*w*d*l+u*b*k*l-a*w*k*l-v*b*r*l+a*f*r*l+u*e*d*x-h*w*d*x-u*b*m*x+a*w*m*x+h*b*r*x-a*e*r*x-v*e*d*c+h*f*d*c+v*b*m*c-a*f*m*c-h*b*k*c+a*e*k*c},inverse:function(c, a){a||(a=c);var b=c[0],d=c[1],g=c[2],h=c[3],e=c[4],p=c[5],m=c[6],l=c[7],v=c[8],f=c[9],k=c[10],x=c[11],u=c[12],w=c[13],r=c[14];c=c[15];var n=b*p-d*e,z=b*m-g*e,y=b*l-h*e,q=d*m-g*p,V=d*l-h*p,Y=g*l-h*m,T=v*w-f*u,R=v*r-k*u,N=v*c-x*u,S=f*r-k*w,aa=f*c-x*w,Z=k*c-x*r,I=n*Z-z*aa+y*S+q*N-V*R+Y*T;if(!I)return null;I=1/I;a[0]=(p*Z-m*aa+l*S)*I;a[1]=(-d*Z+g*aa-h*S)*I;a[2]=(w*Y-r*V+c*q)*I;a[3]=(-f*Y+k*V-x*q)*I;a[4]=(-e*Z+m*N-l*R)*I;a[5]=(b*Z-g*N+h*R)*I;a[6]=(-u*Y+r*y-c*z)*I;a[7]=(v*Y-k*y+x*z)*I;a[8]=(e*aa-p*N+l* T)*I;a[9]=(-b*aa+d*N-h*T)*I;a[10]=(u*V-w*y+c*n)*I;a[11]=(-v*V+f*y-x*n)*I;a[12]=(-e*S+p*R-m*T)*I;a[13]=(b*S-d*R+g*T)*I;a[14]=(-u*q+w*z-r*n)*I;a[15]=(v*q-f*z+k*n)*I;return a},toRotationMat:function(c,a){a||(a=m.create());a[0]=c[0];a[1]=c[1];a[2]=c[2];a[3]=c[3];a[4]=c[4];a[5]=c[5];a[6]=c[6];a[7]=c[7];a[8]=c[8];a[9]=c[9];a[10]=c[10];a[11]=c[11];a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a},toMat3:function(c,a){a||(a=v.create());a[0]=c[0];a[1]=c[1];a[2]=c[2];a[3]=c[4];a[4]=c[5];a[5]=c[6];a[6]=c[8];a[7]=c[9]; a[8]=c[10];return a},toInverseMat3:function(c,a){var b=c[0],d=c[1],g=c[2],h=c[4],e=c[5],p=c[6],m=c[8],l=c[9];c=c[10];var f=c*e-p*l,k=-c*h+p*m,x=l*h-e*m,u=b*f+d*k+g*x;if(!u)return null;u=1/u;a||(a=v.create());a[0]=f*u;a[1]=(-c*d+g*l)*u;a[2]=(p*d-g*e)*u;a[3]=k*u;a[4]=(c*b-g*m)*u;a[5]=(-p*b+g*h)*u;a[6]=x*u;a[7]=(-l*b+d*m)*u;a[8]=(e*b-d*h)*u;return a},multiply:function(c,a,b){b||(b=c);var d=c[0],g=c[1],h=c[2],e=c[3],m=c[4],p=c[5],l=c[6],v=c[7],f=c[8],k=c[9],x=c[10],u=c[11],w=c[12],r=c[13],A=c[14];c=c[15]; var n=a[0],z=a[1],y=a[2],q=a[3];b[0]=n*d+z*m+y*f+q*w;b[1]=n*g+z*p+y*k+q*r;b[2]=n*h+z*l+y*x+q*A;b[3]=n*e+z*v+y*u+q*c;n=a[4];z=a[5];y=a[6];q=a[7];b[4]=n*d+z*m+y*f+q*w;b[5]=n*g+z*p+y*k+q*r;b[6]=n*h+z*l+y*x+q*A;b[7]=n*e+z*v+y*u+q*c;n=a[8];z=a[9];y=a[10];q=a[11];b[8]=n*d+z*m+y*f+q*w;b[9]=n*g+z*p+y*k+q*r;b[10]=n*h+z*l+y*x+q*A;b[11]=n*e+z*v+y*u+q*c;n=a[12];z=a[13];y=a[14];q=a[15];b[12]=n*d+z*m+y*f+q*w;b[13]=n*g+z*p+y*k+q*r;b[14]=n*h+z*l+y*x+q*A;b[15]=n*e+z*v+y*u+q*c;return b},multiplyVec3:function(c,a,b){b|| (b=a);var d=a[0],g=a[1];a=a[2];b[0]=c[0]*d+c[4]*g+c[8]*a+c[12];b[1]=c[1]*d+c[5]*g+c[9]*a+c[13];b[2]=c[2]*d+c[6]*g+c[10]*a+c[14];return b},multiplyVec4:function(c,a,b){b||(b=a);var d=a[0],g=a[1],h=a[2];a=a[3];b[0]=c[0]*d+c[4]*g+c[8]*h+c[12]*a;b[1]=c[1]*d+c[5]*g+c[9]*h+c[13]*a;b[2]=c[2]*d+c[6]*g+c[10]*h+c[14]*a;b[3]=c[3]*d+c[7]*g+c[11]*h+c[15]*a;return b},translate:function(c,a,b){var d=a[0],g=a[1];a=a[2];if(!b||c===b)return c[12]=c[0]*d+c[4]*g+c[8]*a+c[12],c[13]=c[1]*d+c[5]*g+c[9]*a+c[13],c[14]=c[2]* d+c[6]*g+c[10]*a+c[14],c[15]=c[3]*d+c[7]*g+c[11]*a+c[15],c;var h=c[0];var e=c[1];var m=c[2];var p=c[3];var l=c[4];var v=c[5];var f=c[6];var k=c[7];var x=c[8];var u=c[9];var w=c[10];var r=c[11];b[0]=h;b[1]=e;b[2]=m;b[3]=p;b[4]=l;b[5]=v;b[6]=f;b[7]=k;b[8]=x;b[9]=u;b[10]=w;b[11]=r;b[12]=h*d+l*g+x*a+c[12];b[13]=e*d+v*g+u*a+c[13];b[14]=m*d+f*g+w*a+c[14];b[15]=p*d+k*g+r*a+c[15];return b},scale:function(c,a,b){var d=a[0],g=a[1];a=a[2];if(!b||c===b)return c[0]*=d,c[1]*=d,c[2]*=d,c[3]*=d,c[4]*=g,c[5]*=g,c[6]*= g,c[7]*=g,c[8]*=a,c[9]*=a,c[10]*=a,c[11]*=a,c;b[0]=c[0]*d;b[1]=c[1]*d;b[2]=c[2]*d;b[3]=c[3]*d;b[4]=c[4]*g;b[5]=c[5]*g;b[6]=c[6]*g;b[7]=c[7]*g;b[8]=c[8]*a;b[9]=c[9]*a;b[10]=c[10]*a;b[11]=c[11]*a;b[12]=c[12];b[13]=c[13];b[14]=c[14];b[15]=c[15];return b},rotate:function(c,a,b,d){var g=b[0],h=b[1];b=b[2];var e=Math.sqrt(g*g+h*h+b*b);if(!e)return null;1!==e&&(e=1/e,g*=e,h*=e,b*=e);var m=Math.sin(a);var l=Math.cos(a);var p=1-l;a=c[0];e=c[1];var v=c[2];var f=c[3];var k=c[4];var x=c[5];var u=c[6];var w=c[7]; var r=c[8];var n=c[9];var A=c[10];var z=c[11];var y=g*g*p+l;var q=h*g*p+b*m;var C=b*g*p-h*m;var T=g*h*p-b*m;var R=h*h*p+l;var N=b*h*p+g*m;var S=g*b*p+h*m;g=h*b*p-g*m;h=b*b*p+l;d?c!==d&&(d[12]=c[12],d[13]=c[13],d[14]=c[14],d[15]=c[15]):d=c;d[0]=a*y+k*q+r*C;d[1]=e*y+x*q+n*C;d[2]=v*y+u*q+A*C;d[3]=f*y+w*q+z*C;d[4]=a*T+k*R+r*N;d[5]=e*T+x*R+n*N;d[6]=v*T+u*R+A*N;d[7]=f*T+w*R+z*N;d[8]=a*S+k*g+r*h;d[9]=e*S+x*g+n*h;d[10]=v*S+u*g+A*h;d[11]=f*S+w*g+z*h;return d},rotateX:function(c,a,b){var d=Math.sin(a);a=Math.cos(a); var g=c[4],h=c[5],e=c[6],m=c[7],l=c[8],p=c[9],v=c[10],f=c[11];b?c!==b&&(b[0]=c[0],b[1]=c[1],b[2]=c[2],b[3]=c[3],b[12]=c[12],b[13]=c[13],b[14]=c[14],b[15]=c[15]):b=c;b[4]=g*a+l*d;b[5]=h*a+p*d;b[6]=e*a+v*d;b[7]=m*a+f*d;b[8]=g*-d+l*a;b[9]=h*-d+p*a;b[10]=e*-d+v*a;b[11]=m*-d+f*a;return b},rotateY:function(c,a,b){var d=Math.sin(a);a=Math.cos(a);var g=c[0],h=c[1],e=c[2],m=c[3],l=c[8],p=c[9],v=c[10],f=c[11];b?c!==b&&(b[4]=c[4],b[5]=c[5],b[6]=c[6],b[7]=c[7],b[12]=c[12],b[13]=c[13],b[14]=c[14],b[15]=c[15]): b=c;b[0]=g*a+l*-d;b[1]=h*a+p*-d;b[2]=e*a+v*-d;b[3]=m*a+f*-d;b[8]=g*d+l*a;b[9]=h*d+p*a;b[10]=e*d+v*a;b[11]=m*d+f*a;return b},rotateZ:function(c,a,b){var d=Math.sin(a);a=Math.cos(a);var g=c[0],h=c[1],e=c[2],m=c[3],l=c[4],p=c[5],v=c[6],f=c[7];b?c!==b&&(b[8]=c[8],b[9]=c[9],b[10]=c[10],b[11]=c[11],b[12]=c[12],b[13]=c[13],b[14]=c[14],b[15]=c[15]):b=c;b[0]=g*a+l*d;b[1]=h*a+p*d;b[2]=e*a+v*d;b[3]=m*a+f*d;b[4]=g*-d+l*a;b[5]=h*-d+p*a;b[6]=e*-d+v*a;b[7]=m*-d+f*a;return b},frustum:function(c,a,b,d,g,h,e){e||(e= m.create());var l=a-c,p=d-b,v=h-g;e[0]=2*g/l;e[1]=0;e[2]=0;e[3]=0;e[4]=0;e[5]=2*g/p;e[6]=0;e[7]=0;e[8]=(a+c)/l;e[9]=(d+b)/p;e[10]=-(h+g)/v;e[11]=-1;e[12]=0;e[13]=0;e[14]=-(h*g*2)/v;e[15]=0;return e},perspective:function(c,a,b,d,g){c=b*Math.tan(c*Math.PI/360);a*=c;return m.frustum(-a,a,-c,c,b,d,g)},ortho:function(c,a,b,d,g,h,e){e||(e=m.create());var l=a-c,p=d-b,v=h-g;e[0]=2/l;e[1]=0;e[2]=0;e[3]=0;e[4]=0;e[5]=2/p;e[6]=0;e[7]=0;e[8]=0;e[9]=0;e[10]=-2/v;e[11]=0;e[12]=-(c+a)/l;e[13]=-(d+b)/p;e[14]=-(h+ g)/v;e[15]=1;return e},lookAt:function(c,a,b,d){d||(d=m.create());var g=c[0],h=c[1];c=c[2];var e=b[0];var l=b[1];var p=b[2];var v=a[0];b=a[1];var f=a[2];if(g===v&&h===b&&c===f)return m.identity(d);a=g-v;b=h-b;v=c-f;var k=1/Math.sqrt(a*a+b*b+v*v);a*=k;b*=k;v*=k;f=l*v-p*b;p=p*a-e*v;e=e*b-l*a;(k=Math.sqrt(f*f+p*p+e*e))?(k=1/k,f*=k,p*=k,e*=k):e=p=f=0;l=b*e-v*p;var x=v*f-a*e;var u=a*p-b*f;(k=Math.sqrt(l*l+x*x+u*u))?(k=1/k,l*=k,x*=k,u*=k):u=x=l=0;d[0]=f;d[1]=l;d[2]=a;d[3]=0;d[4]=p;d[5]=x;d[6]=b;d[7]=0; d[8]=e;d[9]=u;d[10]=v;d[11]=0;d[12]=-(f*g+p*h+e*c);d[13]=-(l*g+x*h+u*c);d[14]=-(a*g+b*h+v*c);d[15]=1;return d},fromRotationTranslation:function(c,a,b){b||(b=m.create());var d=c[0],g=c[1],h=c[2],e=c[3],l=d+d,p=g+g,v=h+h;c=d*l;var f=d*p;d*=v;var k=g*p;g*=v;h*=v;l*=e;p*=e;e*=v;b[0]=1-(k+h);b[1]=f+e;b[2]=d-p;b[3]=0;b[4]=f-e;b[5]=1-(c+h);b[6]=g+l;b[7]=0;b[8]=d+p;b[9]=g-l;b[10]=1-(c+k);b[11]=0;b[12]=a[0];b[13]=a[1];b[14]=a[2];b[15]=1;return b},str:function(c){return"["+c[0]+", "+c[1]+", "+c[2]+", "+c[3]+ ", "+c[4]+", "+c[5]+", "+c[6]+", "+c[7]+", "+c[8]+", "+c[9]+", "+c[10]+", "+c[11]+", "+c[12]+", "+c[13]+", "+c[14]+", "+c[15]+"]"}},x={create:function(c){var a=new e(4);c?(a[0]=c[0],a[1]=c[1],a[2]=c[2],a[3]=c[3]):a[0]=a[1]=a[2]=a[3]=0;return a},createFrom:function(c,a,b,d){var g=new e(4);g[0]=c;g[1]=a;g[2]=b;g[3]=d;return g},set:function(c,a){a[0]=c[0];a[1]=c[1];a[2]=c[2];a[3]=c[3];return a},equal:function(c,a){return c===a||1E-6>Math.abs(c[0]-a[0])&&1E-6>Math.abs(c[1]-a[1])&&1E-6>Math.abs(c[2]-a[2])&& 1E-6>Math.abs(c[3]-a[3])},identity:function(c){c||(c=x.create());c[0]=0;c[1]=0;c[2]=0;c[3]=1;return c}},u=x.identity();x.calculateW=function(c,a){var b=c[0],d=c[1],g=c[2];if(!a||c===a)return c[3]=-Math.sqrt(Math.abs(1-b*b-d*d-g*g)),c;a[0]=b;a[1]=d;a[2]=g;a[3]=-Math.sqrt(Math.abs(1-b*b-d*d-g*g));return a};x.dot=function(c,a){return c[0]*a[0]+c[1]*a[1]+c[2]*a[2]+c[3]*a[3]};x.inverse=function(c,a){var b=c[0],d=c[1],g=c[2],h=c[3];b=(b=b*b+d*d+g*g+h*h)?1/b:0;if(!a||c===a)return c[0]*=-b,c[1]*=-b,c[2]*= -b,c[3]*=b,c;a[0]=-c[0]*b;a[1]=-c[1]*b;a[2]=-c[2]*b;a[3]=c[3]*b;return a};x.conjugate=function(c,a){if(!a||c===a)return c[0]*=-1,c[1]*=-1,c[2]*=-1,c;a[0]=-c[0];a[1]=-c[1];a[2]=-c[2];a[3]=c[3];return a};x.length=function(c){var a=c[0],b=c[1],d=c[2];c=c[3];return Math.sqrt(a*a+b*b+d*d+c*c)};x.normalize=function(c,a){a||(a=c);var b=c[0],d=c[1],g=c[2];c=c[3];var h=Math.sqrt(b*b+d*d+g*g+c*c);if(0===h)return a[0]=0,a[1]=0,a[2]=0,a[3]=0,a;h=1/h;a[0]=b*h;a[1]=d*h;a[2]=g*h;a[3]=c*h;return a};x.add=function(c, a,b){if(!b||c===b)return c[0]+=a[0],c[1]+=a[1],c[2]+=a[2],c[3]+=a[3],c;b[0]=c[0]+a[0];b[1]=c[1]+a[1];b[2]=c[2]+a[2];b[3]=c[3]+a[3];return b};x.multiply=function(c,a,b){b||(b=c);var d=c[0],g=c[1],h=c[2];c=c[3];var e=a[0],m=a[1],l=a[2];a=a[3];b[0]=d*a+c*e+g*l-h*m;b[1]=g*a+c*m+h*e-d*l;b[2]=h*a+c*l+d*m-g*e;b[3]=c*a-d*e-g*m-h*l;return b};x.multiplyVec3=function(c,a,b){b||(b=a);var d=a[0],g=a[1],h=a[2];a=c[0];var e=c[1],m=c[2];c=c[3];var l=c*d+e*h-m*g,p=c*g+m*d-a*h,v=c*h+a*g-e*d;d=-a*d-e*g-m*h;b[0]=l*c+ d*-a+p*-m-v*-e;b[1]=p*c+d*-e+v*-a-l*-m;b[2]=v*c+d*-m+l*-e-p*-a;return b};x.scale=function(c,a,b){if(!b||c===b)return c[0]*=a,c[1]*=a,c[2]*=a,c[3]*=a,c;b[0]=c[0]*a;b[1]=c[1]*a;b[2]=c[2]*a;b[3]=c[3]*a;return b};x.toMat3=function(c,a){a||(a=v.create());var b=c[0],d=c[1],g=c[2],h=c[3],e=b+b,m=d+d,l=g+g;c=b*e;var p=b*m;b*=l;var f=d*m;d*=l;g*=l;e*=h;m*=h;h*=l;a[0]=1-(f+g);a[1]=p+h;a[2]=b-m;a[3]=p-h;a[4]=1-(c+g);a[5]=d+e;a[6]=b+m;a[7]=d-e;a[8]=1-(c+f);return a};x.toMat4=function(c,a){a||(a=m.create());var b= c[0],d=c[1],g=c[2],h=c[3],e=b+b,l=d+d,p=g+g;c=b*e;var v=b*l;b*=p;var f=d*l;d*=p;g*=p;e*=h;l*=h;h*=p;a[0]=1-(f+g);a[1]=v+h;a[2]=b-l;a[3]=0;a[4]=v-h;a[5]=1-(c+g);a[6]=d+e;a[7]=0;a[8]=b+l;a[9]=d-e;a[10]=1-(c+f);a[11]=0;a[12]=0;a[13]=0;a[14]=0;a[15]=1;return a};x.slerp=function(a,b,d,g){g||(g=a);var c=a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3];if(1<=Math.abs(c))return g!==a&&(g[0]=a[0],g[1]=a[1],g[2]=a[2],g[3]=a[3]),g;var h=Math.acos(c);var e=Math.sqrt(1-c*c);if(.001>Math.abs(e))return g[0]=.5*a[0]+.5*b[0], g[1]=.5*a[1]+.5*b[1],g[2]=.5*a[2]+.5*b[2],g[3]=.5*a[3]+.5*b[3],g;c=Math.sin((1-d)*h)/e;d=Math.sin(d*h)/e;g[0]=a[0]*c+b[0]*d;g[1]=a[1]*c+b[1]*d;g[2]=a[2]*c+b[2]*d;g[3]=a[3]*c+b[3]*d;return g};x.fromRotationMatrix=function(a,b){b||(b=x.create());var c=a[0]+a[4]+a[8];if(0a[0]&&(c=1);a[8]>a[3*c+c]&&(c=2);var g=d[c],h=d[g]; d=Math.sqrt(a[3*c+c]-a[3*g+g]-a[3*h+h]+1);b[c]=.5*d;d=.5/d;b[3]=(a[3*h+g]-a[3*g+h])*d;b[g]=(a[3*g+c]+a[3*c+g])*d;b[h]=(a[3*h+c]+a[3*c+h])*d}return b};v.toQuat4=x.fromRotationMatrix;(function(){var a=v.create();x.fromAxes=function(c,b,d,g){a[0]=b[0];a[3]=b[1];a[6]=b[2];a[1]=d[0];a[4]=d[1];a[7]=d[2];a[2]=c[0];a[5]=c[1];a[8]=c[2];return x.fromRotationMatrix(a,g)}})();x.identity=function(a){a||(a=x.create());a[0]=0;a[1]=0;a[2]=0;a[3]=1;return a};x.fromAngleAxis=function(a,b,d){d||(d=x.create());a*=.5; var c=Math.sin(a);d[3]=Math.cos(a);d[0]=c*b[0];d[1]=c*b[1];d[2]=c*b[2];return d};x.toAngleAxis=function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1]+a[2]*a[2];0Math.abs(a[0]- b[0])&&1E-6>Math.abs(a[1]-b[1])},negate:function(a,b){b||(b=a);b[0]=-a[0];b[1]=-a[1];return b},normalize:function(a,b){b||(b=a);var c=a[0]*a[0]+a[1]*a[1];0Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]-b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},identity:function(a){a||(a=z.create());a[0]=1;a[1]=0;a[2]=0;a[3]=1;return a},transpose:function(a,b){if(!b||a===b)return b=a[1],a[1]=a[2],a[2]=b,a;b[0]=a[0];b[1]=a[2];b[2]=a[1];b[3]=a[3];return b},determinant:function(a){return a[0]*a[3]-a[2]*a[1]},inverse:function(a,b){b||(b=a);var c=a[0],d=a[1],g=a[2];a=a[3];var h=c*a-g*d;if(!h)return null; h=1/h;b[0]=a*h;b[1]=-d*h;b[2]=-g*h;b[3]=c*h;return b},multiply:function(a,b,d){d||(d=a);var c=a[0],g=a[1],h=a[2];a=a[3];d[0]=c*b[0]+g*b[2];d[1]=c*b[1]+g*b[3];d[2]=h*b[0]+a*b[2];d[3]=h*b[1]+a*b[3];return d},rotate:function(a,b,d){d||(d=a);var c=a[0],g=a[1],h=a[2];a=a[3];var e=Math.sin(b);b=Math.cos(b);d[0]=c*b+g*e;d[1]=c*-e+g*b;d[2]=h*b+a*e;d[3]=h*-e+a*b;return d},multiplyVec2:function(a,b,d){d||(d=b);var c=b[0];b=b[1];d[0]=c*a[0]+b*a[1];d[1]=c*a[2]+b*a[3];return d},scale:function(a,b,d){d||(d=a); var c=a[1],g=a[2],h=a[3],e=b[0];b=b[1];d[0]=a[0]*e;d[1]=c*b;d[2]=g*e;d[3]=h*b;return d},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+a[3]+"]"}},y={create:function(a){var c=new e(4);a?(c[0]=a[0],c[1]=a[1],c[2]=a[2],c[3]=a[3]):(c[0]=0,c[1]=0,c[2]=0,c[3]=0);return c},createFrom:function(a,b,d,g){var c=new e(4);c[0]=a;c[1]=b;c[2]=d;c[3]=g;return c},add:function(a,b,d){d||(d=b);d[0]=a[0]+b[0];d[1]=a[1]+b[1];d[2]=a[2]+b[2];d[3]=a[3]+b[3];return d},subtract:function(a,b,d){d||(d=b);d[0]=a[0]- b[0];d[1]=a[1]-b[1];d[2]=a[2]-b[2];d[3]=a[3]-b[3];return d},multiply:function(a,b,d){d||(d=b);d[0]=a[0]*b[0];d[1]=a[1]*b[1];d[2]=a[2]*b[2];d[3]=a[3]*b[3];return d},divide:function(a,b,d){d||(d=b);d[0]=a[0]/b[0];d[1]=a[1]/b[1];d[2]=a[2]/b[2];d[3]=a[3]/b[3];return d},scale:function(a,b,d){d||(d=a);d[0]=a[0]*b;d[1]=a[1]*b;d[2]=a[2]*b;d[3]=a[3]*b;return d},set:function(a,b){b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];return b},equal:function(a,b){return a===b||1E-6>Math.abs(a[0]-b[0])&&1E-6>Math.abs(a[1]- b[1])&&1E-6>Math.abs(a[2]-b[2])&&1E-6>Math.abs(a[3]-b[3])},negate:function(a,b){b||(b=a);b[0]=-a[0];b[1]=-a[1];b[2]=-a[2];b[3]=-a[3];return b},length:function(a){var c=a[0],b=a[1],d=a[2];a=a[3];return Math.sqrt(c*c+b*b+d*d+a*a)},squaredLength:function(a){var c=a[0],b=a[1],d=a[2];a=a[3];return c*c+b*b+d*d+a*a},lerp:function(a,b,d,g){g||(g=a);g[0]=a[0]+d*(b[0]-a[0]);g[1]=a[1]+d*(b[1]-a[1]);g[2]=a[2]+d*(b[2]-a[2]);g[3]=a[3]+d*(b[3]-a[3]);return g},str:function(a){return"["+a[0]+", "+a[1]+", "+a[2]+", "+ a[3]+"]"}};f&&(f.glMatrixArrayType=e,f.MatrixArray=e,f.setMatrixArrayType=q,f.determineMatrixArrayType=n,f.glMath=r,f.vec2=w,f.vec3=k,f.vec4=y,f.mat2=z,f.mat3=v,f.mat4=m,f.quat4=x);return{glMatrixArrayType:e,MatrixArray:e,setMatrixArrayType:q,determineMatrixArrayType:n,glMath:r,vec2:w,vec3:k,vec4:y,mat2:z,mat3:v,mat4:m,quat4:x}}); (function(f){function q(a){return 0==a?0:0w?w=G:Gb.location&&(b.location=0);return v(a,b.location)},nearestPointOnCurve:function(a,d){a=e(a,d);return{point:b(d,d.length-1,a.location,null,null),location:a.location}},pointOnCurve:a,pointAlongCurveFrom:function(a,b,d){return l(a,b,d).point},perpendicularToCurveAt:function(a,b,d,g){b=l(a,b,null==g?0:g);a=v(a,b.location);g=Math.atan(-1/a);a=d/2*Math.sin(g);d=d/2*Math.cos(g);return[{x:b.point.x+d,y:b.point.y+a},{x:b.point.x-d,y:b.point.y-a}]},locationAlongCurveFrom:function(a,b,d){return l(a, b,d).location},getLength:function(b){for(var d=a(b,0),h=0,e=0,l;1>e;)e+=.005,l=a(b,e),h+=g(l,d),d=l;return h}}})(ChemDoodle.lib); ChemDoodle.lib.MarchingCubes=function(){var f=new Uint32Array([0,265,515,778,1030,1295,1541,1804,2060,2309,2575,2822,3082,3331,3593,3840,400,153,915,666,1430,1183,1941,1692,2460,2197,2975,2710,3482,3219,3993,3728,560,825,51,314,1590,1855,1077,1340,2620,2869,2111,2358,3642,3891,3129,3376,928,681,419,170,1958,1711,1445,1196,2988,2725,2479,2214,4010,3747,3497,3232,1120,1385,1635,1898,102,367,613,876,3180,3429,3695,3942,2154,2403,2665,2912,1520,1273,2035,1786,502,255,1013,764,3580,3317,4095,3830,2554, 2291,3065,2800,1616,1881,1107,1370,598,863,85,348,3676,3925,3167,3414,2650,2899,2137,2384,1984,1737,1475,1226,966,719,453,204,4044,3781,3535,3270,3018,2755,2505,2240,2240,2505,2755,3018,3270,3535,3781,4044,204,453,719,966,1226,1475,1737,1984,2384,2137,2899,2650,3414,3167,3925,3676,348,85,863,598,1370,1107,1881,1616,2800,3065,2291,2554,3830,4095,3317,3580,764,1013,255,502,1786,2035,1273,1520,2912,2665,2403,2154,3942,3695,3429,3180,876,613,367,102,1898,1635,1385,1120,3232,3497,3747,4010,2214,2479,2725, 2988,1196,1445,1711,1958,170,419,681,928,3376,3129,3891,3642,2358,2111,2869,2620,1340,1077,1855,1590,314,51,825,560,3728,3993,3219,3482,2710,2975,2197,2460,1692,1941,1183,1430,666,915,153,400,3840,3593,3331,3082,2822,2575,2309,2060,1804,1541,1295,1030,778,515,265,0]),q=[[],[0,8,3],[0,1,9],[1,8,3,9,8,1],[1,2,10],[0,8,3,1,2,10],[9,2,10,0,2,9],[2,8,3,2,10,8,10,9,8],[3,11,2],[0,11,2,8,11,0],[1,9,0,2,3,11],[1,11,2,1,9,11,9,8,11],[3,10,1,11,10,3],[0,10,1,0,8,10,8,11,10],[3,9,0,3,11,9,11,10,9],[9,8,10,10, 8,11],[4,7,8],[4,3,0,7,3,4],[0,1,9,8,4,7],[4,1,9,4,7,1,7,3,1],[1,2,10,8,4,7],[3,4,7,3,0,4,1,2,10],[9,2,10,9,0,2,8,4,7],[2,10,9,2,9,7,2,7,3,7,9,4],[8,4,7,3,11,2],[11,4,7,11,2,4,2,0,4],[9,0,1,8,4,7,2,3,11],[4,7,11,9,4,11,9,11,2,9,2,1],[3,10,1,3,11,10,7,8,4],[1,11,10,1,4,11,1,0,4,7,11,4],[4,7,8,9,0,11,9,11,10,11,0,3],[4,7,11,4,11,9,9,11,10],[9,5,4],[9,5,4,0,8,3],[0,5,4,1,5,0],[8,5,4,8,3,5,3,1,5],[1,2,10,9,5,4],[3,0,8,1,2,10,4,9,5],[5,2,10,5,4,2,4,0,2],[2,10,5,3,2,5,3,5,4,3,4,8],[9,5,4,2,3,11],[0,11, 2,0,8,11,4,9,5],[0,5,4,0,1,5,2,3,11],[2,1,5,2,5,8,2,8,11,4,8,5],[10,3,11,10,1,3,9,5,4],[4,9,5,0,8,1,8,10,1,8,11,10],[5,4,0,5,0,11,5,11,10,11,0,3],[5,4,8,5,8,10,10,8,11],[9,7,8,5,7,9],[9,3,0,9,5,3,5,7,3],[0,7,8,0,1,7,1,5,7],[1,5,3,3,5,7],[9,7,8,9,5,7,10,1,2],[10,1,2,9,5,0,5,3,0,5,7,3],[8,0,2,8,2,5,8,5,7,10,5,2],[2,10,5,2,5,3,3,5,7],[7,9,5,7,8,9,3,11,2],[9,5,7,9,7,2,9,2,0,2,7,11],[2,3,11,0,1,8,1,7,8,1,5,7],[11,2,1,11,1,7,7,1,5],[9,5,8,8,5,7,10,1,3,10,3,11],[5,7,0,5,0,9,7,11,0,1,0,10,11,10,0],[11,10, 0,11,0,3,10,5,0,8,0,7,5,7,0],[11,10,5,7,11,5],[10,6,5],[0,8,3,5,10,6],[9,0,1,5,10,6],[1,8,3,1,9,8,5,10,6],[1,6,5,2,6,1],[1,6,5,1,2,6,3,0,8],[9,6,5,9,0,6,0,2,6],[5,9,8,5,8,2,5,2,6,3,2,8],[2,3,11,10,6,5],[11,0,8,11,2,0,10,6,5],[0,1,9,2,3,11,5,10,6],[5,10,6,1,9,2,9,11,2,9,8,11],[6,3,11,6,5,3,5,1,3],[0,8,11,0,11,5,0,5,1,5,11,6],[3,11,6,0,3,6,0,6,5,0,5,9],[6,5,9,6,9,11,11,9,8],[5,10,6,4,7,8],[4,3,0,4,7,3,6,5,10],[1,9,0,5,10,6,8,4,7],[10,6,5,1,9,7,1,7,3,7,9,4],[6,1,2,6,5,1,4,7,8],[1,2,5,5,2,6,3,0,4,3,4, 7],[8,4,7,9,0,5,0,6,5,0,2,6],[7,3,9,7,9,4,3,2,9,5,9,6,2,6,9],[3,11,2,7,8,4,10,6,5],[5,10,6,4,7,2,4,2,0,2,7,11],[0,1,9,4,7,8,2,3,11,5,10,6],[9,2,1,9,11,2,9,4,11,7,11,4,5,10,6],[8,4,7,3,11,5,3,5,1,5,11,6],[5,1,11,5,11,6,1,0,11,7,11,4,0,4,11],[0,5,9,0,6,5,0,3,6,11,6,3,8,4,7],[6,5,9,6,9,11,4,7,9,7,11,9],[10,4,9,6,4,10],[4,10,6,4,9,10,0,8,3],[10,0,1,10,6,0,6,4,0],[8,3,1,8,1,6,8,6,4,6,1,10],[1,4,9,1,2,4,2,6,4],[3,0,8,1,2,9,2,4,9,2,6,4],[0,2,4,4,2,6],[8,3,2,8,2,4,4,2,6],[10,4,9,10,6,4,11,2,3],[0,8,2,2,8, 11,4,9,10,4,10,6],[3,11,2,0,1,6,0,6,4,6,1,10],[6,4,1,6,1,10,4,8,1,2,1,11,8,11,1],[9,6,4,9,3,6,9,1,3,11,6,3],[8,11,1,8,1,0,11,6,1,9,1,4,6,4,1],[3,11,6,3,6,0,0,6,4],[6,4,8,11,6,8],[7,10,6,7,8,10,8,9,10],[0,7,3,0,10,7,0,9,10,6,7,10],[10,6,7,1,10,7,1,7,8,1,8,0],[10,6,7,10,7,1,1,7,3],[1,2,6,1,6,8,1,8,9,8,6,7],[2,6,9,2,9,1,6,7,9,0,9,3,7,3,9],[7,8,0,7,0,6,6,0,2],[7,3,2,6,7,2],[2,3,11,10,6,8,10,8,9,8,6,7],[2,0,7,2,7,11,0,9,7,6,7,10,9,10,7],[1,8,0,1,7,8,1,10,7,6,7,10,2,3,11],[11,2,1,11,1,7,10,6,1,6,7,1],[8, 9,6,8,6,7,9,1,6,11,6,3,1,3,6],[0,9,1,11,6,7],[7,8,0,7,0,6,3,11,0,11,6,0],[7,11,6],[7,6,11],[3,0,8,11,7,6],[0,1,9,11,7,6],[8,1,9,8,3,1,11,7,6],[10,1,2,6,11,7],[1,2,10,3,0,8,6,11,7],[2,9,0,2,10,9,6,11,7],[6,11,7,2,10,3,10,8,3,10,9,8],[7,2,3,6,2,7],[7,0,8,7,6,0,6,2,0],[2,7,6,2,3,7,0,1,9],[1,6,2,1,8,6,1,9,8,8,7,6],[10,7,6,10,1,7,1,3,7],[10,7,6,1,7,10,1,8,7,1,0,8],[0,3,7,0,7,10,0,10,9,6,10,7],[7,6,10,7,10,8,8,10,9],[6,8,4,11,8,6],[3,6,11,3,0,6,0,4,6],[8,6,11,8,4,6,9,0,1],[9,4,6,9,6,3,9,3,1,11,3,6],[6, 8,4,6,11,8,2,10,1],[1,2,10,3,0,11,0,6,11,0,4,6],[4,11,8,4,6,11,0,2,9,2,10,9],[10,9,3,10,3,2,9,4,3,11,3,6,4,6,3],[8,2,3,8,4,2,4,6,2],[0,4,2,4,6,2],[1,9,0,2,3,4,2,4,6,4,3,8],[1,9,4,1,4,2,2,4,6],[8,1,3,8,6,1,8,4,6,6,10,1],[10,1,0,10,0,6,6,0,4],[4,6,3,4,3,8,6,10,3,0,3,9,10,9,3],[10,9,4,6,10,4],[4,9,5,7,6,11],[0,8,3,4,9,5,11,7,6],[5,0,1,5,4,0,7,6,11],[11,7,6,8,3,4,3,5,4,3,1,5],[9,5,4,10,1,2,7,6,11],[6,11,7,1,2,10,0,8,3,4,9,5],[7,6,11,5,4,10,4,2,10,4,0,2],[3,4,8,3,5,4,3,2,5,10,5,2,11,7,6],[7,2,3,7,6,2, 5,4,9],[9,5,4,0,8,6,0,6,2,6,8,7],[3,6,2,3,7,6,1,5,0,5,4,0],[6,2,8,6,8,7,2,1,8,4,8,5,1,5,8],[9,5,4,10,1,6,1,7,6,1,3,7],[1,6,10,1,7,6,1,0,7,8,7,0,9,5,4],[4,0,10,4,10,5,0,3,10,6,10,7,3,7,10],[7,6,10,7,10,8,5,4,10,4,8,10],[6,9,5,6,11,9,11,8,9],[3,6,11,0,6,3,0,5,6,0,9,5],[0,11,8,0,5,11,0,1,5,5,6,11],[6,11,3,6,3,5,5,3,1],[1,2,10,9,5,11,9,11,8,11,5,6],[0,11,3,0,6,11,0,9,6,5,6,9,1,2,10],[11,8,5,11,5,6,8,0,5,10,5,2,0,2,5],[6,11,3,6,3,5,2,10,3,10,5,3],[5,8,9,5,2,8,5,6,2,3,8,2],[9,5,6,9,6,0,0,6,2],[1,5,8,1, 8,0,5,6,8,3,8,2,6,2,8],[1,5,6,2,1,6],[1,3,6,1,6,10,3,8,6,5,6,9,8,9,6],[10,1,0,10,0,6,9,5,0,5,6,0],[0,3,8,5,6,10],[10,5,6],[11,5,10,7,5,11],[11,5,10,11,7,5,8,3,0],[5,11,7,5,10,11,1,9,0],[10,7,5,10,11,7,9,8,1,8,3,1],[11,1,2,11,7,1,7,5,1],[0,8,3,1,2,7,1,7,5,7,2,11],[9,7,5,9,2,7,9,0,2,2,11,7],[7,5,2,7,2,11,5,9,2,3,2,8,9,8,2],[2,5,10,2,3,5,3,7,5],[8,2,0,8,5,2,8,7,5,10,2,5],[9,0,1,5,10,3,5,3,7,3,10,2],[9,8,2,9,2,1,8,7,2,10,2,5,7,5,2],[1,3,5,3,7,5],[0,8,7,0,7,1,1,7,5],[9,0,3,9,3,5,5,3,7],[9,8,7,5,9,7],[5, 8,4,5,10,8,10,11,8],[5,0,4,5,11,0,5,10,11,11,3,0],[0,1,9,8,4,10,8,10,11,10,4,5],[10,11,4,10,4,5,11,3,4,9,4,1,3,1,4],[2,5,1,2,8,5,2,11,8,4,5,8],[0,4,11,0,11,3,4,5,11,2,11,1,5,1,11],[0,2,5,0,5,9,2,11,5,4,5,8,11,8,5],[9,4,5,2,11,3],[2,5,10,3,5,2,3,4,5,3,8,4],[5,10,2,5,2,4,4,2,0],[3,10,2,3,5,10,3,8,5,4,5,8,0,1,9],[5,10,2,5,2,4,1,9,2,9,4,2],[8,4,5,8,5,3,3,5,1],[0,4,5,1,0,5],[8,4,5,8,5,3,9,0,5,0,3,5],[9,4,5],[4,11,7,4,9,11,9,10,11],[0,8,3,4,9,7,9,11,7,9,10,11],[1,10,11,1,11,4,1,4,0,7,4,11],[3,1,4,3,4,8, 1,10,4,7,4,11,10,11,4],[4,11,7,9,11,4,9,2,11,9,1,2],[9,7,4,9,11,7,9,1,11,2,11,1,0,8,3],[11,7,4,11,4,2,2,4,0],[11,7,4,11,4,2,8,3,4,3,2,4],[2,9,10,2,7,9,2,3,7,7,4,9],[9,10,7,9,7,4,10,2,7,8,7,0,2,0,7],[3,7,10,3,10,2,7,4,10,1,10,0,4,0,10],[1,10,2,8,7,4],[4,9,1,4,1,7,7,1,3],[4,9,1,4,1,7,0,8,1,8,7,1],[4,0,3,7,4,3],[4,8,7],[9,10,8,10,11,8],[3,0,9,3,9,11,11,9,10],[0,1,10,0,10,8,8,10,11],[3,1,10,11,3,10],[1,2,11,1,11,9,9,11,8],[3,0,9,3,9,11,1,2,9,2,11,9],[0,2,11,8,0,11],[3,2,11],[2,3,8,2,8,10,10,8,9],[9,10, 2,0,9,2],[2,3,8,2,8,10,0,1,8,1,10,8],[1,10,2],[1,3,8,9,1,8],[0,9,1],[0,3,8],[]],n=[[0,0,0],[1,0,0],[1,1,0],[0,1,0],[0,0,1],[1,0,1],[1,1,1],[0,1,1]],r=[[0,1],[1,2],[2,3],[3,0],[4,5],[5,6],[6,7],[7,4],[0,4],[1,5],[2,6],[3,7]];return function(e,k){var b=[],d=[],h=0,a=new Float32Array(8),g=new Int32Array(12),l=new Int32Array(3);for(l[2]=0;l[2]m;++m){var x=n[m];x=e[h+x[0]+k[0]*(x[1]+k[1]*x[2])]; a[m]=x;v|=0m;++m)if(0!==(x&1<c;++c)u[c]=l[c]+z[c]+w*(y[c]-z[c]);b.push(u)}v=q[v];for(m=0;m=r&&(n.call(),k=(new Date).getTime());b.value=f.requestAnimFrame(e)}if(!(f.requestAnimationFrame||f.webkitRequestAnimationFrame||f.mozRequestAnimationFrame&&f.mozCancelRequestAnimationFrame|| f.oRequestAnimationFrame||f.msRequestAnimationFrame))return f.setInterval(n,r);let k=(new Date).getTime(),b={};b.value=f.requestAnimFrame(e);return b};q.clearRequestInterval=function(n){f.cancelAnimationFrame?f.cancelAnimationFrame(n.value):f.webkitCancelAnimationFrame?f.webkitCancelAnimationFrame(n.value):f.webkitCancelRequestAnimationFrame?f.webkitCancelRequestAnimationFrame(n.value):f.mozCancelRequestAnimationFrame?f.mozCancelRequestAnimationFrame(n.value):f.oCancelRequestAnimationFrame?f.oCancelRequestAnimationFrame(n.value): f.msCancelRequestAnimationFrame?f.msCancelRequestAnimationFrame(n.value):clearInterval(n)};q.requestTimeout=function(n,r){function e(){(new Date).getTime()-k>=r?n.call():b.value=f.requestAnimFrame(e)}if(!(f.requestAnimationFrame||f.webkitRequestAnimationFrame||f.mozRequestAnimationFrame&&f.mozCancelRequestAnimationFrame||f.oRequestAnimationFrame||f.msRequestAnimationFrame))return f.setTimeout(n,r);let k=(new Date).getTime(),b={};b.value=f.requestAnimFrame(e);return b};q.clearRequestTimeout=function(n){f.cancelAnimationFrame? f.cancelAnimationFrame(n.value):f.webkitCancelAnimationFrame?f.webkitCancelAnimationFrame(n.value):f.webkitCancelRequestAnimationFrame?f.webkitCancelRequestAnimationFrame(n.value):f.mozCancelRequestAnimationFrame?f.mozCancelRequestAnimationFrame(n.value):f.oCancelRequestAnimationFrame?f.oCancelRequestAnimationFrame(n.value):f.msCancelRequestAnimationFrame?f.msCancelRequestAnimationFrame(n.value):clearTimeout(n)};return q}(window); ChemDoodle.extensions=function(f,q,n,r){return{vec3AngleFrom:function(e,f){let b=q.length(e),d=q.length(f);e=q.dot(e,f);return n.acos(e/b/d)},contextRoundRect:function(e,f,b,d,h,a){e.beginPath();e.moveTo(f+a,b);e.lineTo(f+d-a,b);e.quadraticCurveTo(f+d,b,f+d,b+a);e.lineTo(f+d,b+h-a);e.quadraticCurveTo(f+d,b+h,f+d-a,b+h);e.lineTo(f+a,b+h);e.quadraticCurveTo(f,b+h,f,b+h-a);e.lineTo(f,b+a);e.quadraticCurveTo(f,b,f+a,b);e.closePath()},contextEllipse:function(e,f,b,d,h){let a=d/2*.5522848,g=h/2*.5522848, l=f+d,v=b+h;d=f+d/2;h=b+h/2;e.beginPath();e.moveTo(f,h);e.bezierCurveTo(f,h-g,d-a,b,d,b);e.bezierCurveTo(d+a,b,l,h-g,l,h);e.bezierCurveTo(l,h+g,d+a,v,d,v);e.bezierCurveTo(d-a,v,f,h+g,f,h);e.closePath()},getFontString:function(e,f,b,d){let h=[];b&&h.push("bold ");d&&h.push("italic ");h.push(e+"px ");for(let a=0,b=f.length;af)||+f});"function"!=typeof f.assign&&(f.assign=function(r,e){if(null==r)throw new TypeError("Cannot convert undefined or null to object");for(var k=f(r),b=1;bd&&(d=g,a=(b[h+1]+b[h])/2)}g=b[0]+2*r.PI-b[b.length-1];g>d&&(a=b[0]-g/2,d=g,0>a&&(a+=2*r.PI));return{angle:a,largest:d}};k.isBetween=function(b,h,a){if(h>a){let b=h;h=a;a=b}return b>=h&&b<=a};n(document).ready(function(){f&&f.iChemLabs&&f.iChemLabs.checkForUpdates&&f.iChemLabs.checkForUpdates({})});k.getRGB=function(d,h){let a=[0,0,0];b[d.toLowerCase()]&&(d=b[d.toLowerCase()]);return"#"===d.charAt(0)?(4===d.length&&(d="#"+d.charAt(1)+d.charAt(1)+d.charAt(2)+d.charAt(2)+d.charAt(3)+d.charAt(3)), [parseInt(d.substring(1,3),16)/255*h,parseInt(d.substring(3,5),16)/255*h,parseInt(d.substring(5,7),16)/255*h]):d.startsWith("rgba")?(d=d.replace(/rgba\(|\)/g,"").split(","),4!==d.length?a:[parseInt(d[0])/255*h,parseInt(d[1])/255*h,parseInt(d[2])/255*h,parseInt(d[3])/255*h]):d.startsWith("rgb")?(d=d.replace(/rgb\(|\)/g,"").split(","),3!==d.length?a:[parseInt(d[0])/255*h,parseInt(d[1])/255*h,parseInt(d[2])/255*h]):a};k.hsl2rgb=function(b,h,a){let d=function(a,b,d){0>d?d+=1:1d?b:d<2/3?a+(b-a)*(2/3-d)*6:a};if(0===h)a=h=b=a;else{let g=.5>a?a*(1+h):a+h-a*h,e=2*a-g;a=d(e,g,b+1/3);h=d(e,g,b);b=d(e,g,b-1/3)}return[255*a,255*h,255*b]};k.idx2color=function(b){b=b.toString(16);for(let d=0,a=6-b.length;de;e++){var f=d[e];(f=this.intersectLines(h.x,h.y,b.x,b.y,f.x1,f.y1,f.x2,f.y2))&&a.push(f)}if(0===a.length)return 0;h=0;for(let g=0,l=a.length;g=e&&0<=m&&1>=m?{x:b+m*a,y:h+m*g}:!1};k.clamp=function(b,h,a){return ba?a:b};k.rainbowAt=function(b,h,a){1>a.length?a.push("#000000","#FFFFFF"):2>a.length&&a.push("#FFFFFF");var d=h/(a.length-1);h=r.floor(b/d);b=(b-h*d)/d;d=k.getRGB(a[h],1);a=k.getRGB(a[h+1],1);return"rgb("+[255*(d[0]+(a[0]-d[0])*b),255*(d[1]+(a[1]- d[1])*b),255*(d[2]+(a[2]-d[2])*b)].join()+")"};k.angleBounds=function(b,h,a){let d=2*r.PI;for(;0>b;)b+=d;for(;b>d;)b-=d;a&&b>r.PI&&(b=2*r.PI-b);h&&(b=180*b/r.PI);return b};k.isPointInPoly=function(b,h){for(var a=!1,d=-1,e=b.length,f=e-1;++d=this.queue.length&&(this.queue=this.queue.slice(this.queueSpace),this.queueSpace=0));return f};f.getOldestElement=function(){let f;this.queue.length&&(f=this.queue[this.queueSpace]); return f}})(ChemDoodle.structures); (function(f,q,n){f.Point=function(f,e){this.x=f?f:0;this.y=e?e:0};f=f.Point.prototype;f.sub=function(f){this.x-=f.x;this.y-=f.y};f.add=function(f){this.x+=f.x;this.y+=f.y};f.distance=function(f){let e=f.x-this.x;f=f.y-this.y;return q.sqrt(e*e+f*f)};f.angleForStupidCanvasArcs=function(f){var e=f.x-this.x;f=f.y-this.y;for(e=0===e?0===f?0:0e?q.atan(f/e)+q.PI:0>f?q.atan(f/e)+2*q.PI:q.atan(f/e);0>e;)e+=2*q.PI;return e%=2*q.PI};f.angle=function(f){var e=f.x-this.x; f=this.y-f.y;for(e=0===e?0===f?0:0e?q.atan(f/e)+q.PI:0>f?q.atan(f/e)+2*q.PI:q.atan(f/e);0>e;)e+=2*q.PI;return e%=2*q.PI}})(ChemDoodle.structures,Math); (function(f,q,n,r){let e=/[ ,]+/,k=/\-+/,b=["Helvetica","Arial","Dialog"];q.Query=function(b){this.type=b;this.elements={v:[],not:!1};this.saturation=this.hydrogens=this.connectivityNoH=this.connectivity=this.chirality=this.charge=r;this.orders={v:[],not:!1};this.cache=this.ringCount=this.aromatic=this.stereo=r};q.Query.TYPE_ATOM=0;q.Query.TYPE_BOND=1;n=q.Query.prototype;n.parseRange=function(b){let d=[];b=b.split(e);for(let h=0,e=b.length;he.PI/2&&this.angleOfLeastInterference<3*e.PI/2&&(c=-m/2-l-z/2-k/2,b=!1,w=e.PI):this.angleOfLeastInterference<=e.PI/4||(this.angleOfLeastInterference<3*e.PI/4?(c=0,d=.9*-g.atoms_font_size_2D,0!==this.charge&&(d-=.3*g.atoms_font_size_2D),b=!1,w=e.PI/2):this.angleOfLeastInterference<=5*e.PI/4?(c=-m/2-l-z/2-k/2,b=!1,w=e.PI):this.angleOfLeastInterference<7*e.PI/4&&(c=0,d= .9*g.atoms_font_size_2D,b=!1,w=3*e.PI/2));a.font=v;a.fillText("H",this.x+c,this.y+d);a.font=h;a.fillText(u,this.x+c+z/2+l/2,this.y+d+.3*g.atoms_font_size_2D);this.textBounds.push({x:this.x+c-z/2,y:this.y+d-g.atoms_font_size_2D/2+1,w:z,h:g.atoms_font_size_2D-2});this.textBounds.push({x:this.x+c+z/2,y:this.y+d+.3*g.atoms_font_size_2D-g.atoms_font_size_2D/2+1,w:l,h:.8*g.atoms_font_size_2D-2})}else v=m/2+z/2,u=0,1===this.bondNumber?this.angleOfLeastInterference>e.PI/2&&this.angleOfLeastInterference<3* e.PI/2&&(v=-m/2-z/2-k/2,b=!1,w=e.PI):this.angleOfLeastInterference<=e.PI/4||(this.angleOfLeastInterference<3*e.PI/4?(v=0,u=.9*-g.atoms_font_size_2D,b=!1,w=e.PI/2):this.angleOfLeastInterference<=5*e.PI/4?(v=-m/2-z/2-k/2,b=!1,w=e.PI):this.angleOfLeastInterference<7*e.PI/4&&(v=0,u=.9*g.atoms_font_size_2D,b=!1,w=3*e.PI/2)),a.fillText("H",this.x+v,this.y+u),this.textBounds.push({x:this.x+v-z/2,y:this.y+u-g.atoms_font_size_2D/2+1,w:z,h:g.atoms_font_size_2D-2});b&&(h+=z)}0!==this.charge&&(m=this.charge.toFixed(0), m="1"===m?"+":"-1"===m?"\u2013":m.startsWith("-")?m.substring(1)+"\u2013":m+"+",k=a.measureText(m).width,h+=k/2,a.textAlign="center",a.textBaseline="middle",a.font=q.getFontString(e.floor(.8*g.atoms_font_size_2D),g.atoms_font_families_2D,g.atoms_font_bold_2D,g.atoms_font_italic_2D),a.fillText(m,this.x+h-1,this.y-g.atoms_font_size_2D/2+1),this.textBounds.push({x:this.x+h-k/2-1,y:this.y-1.8*g.atoms_font_size_2D/2+5,w:k,h:g.atoms_font_size_2D/2-1}))}else r.CondensedLabel?this.label.match(d)?(a.textAlign= "left",this.error&&(a.fillStyle=g.colorError),a.fillText(this.label,this.x,this.y),h=a.measureText(this.label).width,this.textBounds.push({x:this.x+1,y:this.y-g.atoms_font_size_2D/2+1,w:h,h:g.atoms_font_size_2D-2})):(this.condensed&&this.condensed.text===this.label||(this.condensed=new r.CondensedLabel(this,this.label)),this.condensed.draw(a,g)):(a.fillText(this.label,this.x,this.y),h=a.measureText(this.label).width,this.textBounds.push({x:this.x-h/2,y:this.y-g.atoms_font_size_2D/2+1,w:h,h:g.atoms_font_size_2D- 2}));if(0b?0:e.floor(b)};h.getBounds=function(){let a=new n.Bounds;a.expand(this.x,this.y);if(this.textBounds)for(let b=0,d=this.textBounds.length;bthis.ring.center.angle(this.a2)&&!(this.ring.center.angle(this.a1)-this.ring.center.angle(this.a2)>e.PI)||this.ring.center.angle(this.a1)-this.ring.center.angle(this.a2)<-e.PI;b.beginPath();D?(b.moveTo(r,n),b.lineTo(y,B)):(b.moveTo(z,q),b.lineTo(A,C));2!==this.bondOrder&&b.setLineDash([a.bonds_hashSpacing_2D, a.bonds_hashSpacing_2D]);b.stroke();b.setLineDash([])}}else{let g=d-c*u,e=f+k*u,l=d+c*u,v=f-k*u,x=h+c*u,p=m-k*u,w=h-c*u,r=m+k*u;b.beginPath();b.moveTo(g,e);b.lineTo(w,r);b.stroke();b.beginPath();b.moveTo(l,v);b.lineTo(x,p);2!==this.bondOrder&&b.setLineDash([a.bonds_hashWidth_2D,a.bonds_hashSpacing_2D]);b.stroke();b.setLineDash([])}break}case 3:{let g=a.bonds_useAbsoluteSaturationWidths_2D?a.bonds_saturationWidthAbs_2D:this.a1.distance(this.a2)*a.bonds_saturationWidth_2D,l=this.a1.angle(this.a2)+e.PI/ 2,c=e.cos(l),k=e.sin(l),v=d-c*g,u=f+k*g,x=d+c*g,w=f-k*g,r=h+c*g,n=m-k*g,q=h-c*g,J=m+k*g;b.beginPath();b.moveTo(v,u);b.lineTo(q,J);b.moveTo(x,w);b.lineTo(r,n);b.moveTo(d,f);b.lineTo(h,m);b.stroke()}}}};f.drawDecorations=function(b,a){if(this.isHover||this.isSelected){let d=2*e.PI,h=(this.a1.angleForStupidCanvasArcs(this.a2)+e.PI/2)%d;b.strokeStyle=this.isHover?a.colorHover:a.colorSelect;b.lineWidth=1.2;b.beginPath();a=(h+e.PI)%d;a%=2*e.PI;b.arc(this.a1.x,this.a1.y,7,h,a,!1);b.stroke();b.beginPath(); h+=e.PI;a=(h+e.PI)%d;b.arc(this.a2.x,this.a2.y,7,h,a,!1);b.stroke()}};f.drawLewisStyle=function(b,a,d,l,f,m){var g=this.a1.angle(this.a2);let h=g+e.PI/2;f-=d;m-=l;f=e.sqrt(f*f+m*m)/(this.bondOrder+1);m=f*e.cos(g);g=-f*e.sin(g);d+=m;l+=g;for(f=0;f=d.a1.closestDistance&&h.macro_atomToLigandDistance>=d.a2.closestDistance)&&d.render(b,this.residueSpecs?this.residueSpecs:h)}}if(h.macro_displayAtoms){0=d.closestDistance)&&d.render(b,this.residueSpecs?this.residueSpecs:h)}}if(h.bonds_display){d=[];var e=[];0b;b++)g[4*a+b]+=g[4*(a-1)+b];m[a]=new f.Atom("",g[12]/g[15],g[13]/g[15],g[14]/g[15])}d[l]=m}if(l&&this.arrow)for(let f=0,m=v;fl)if(b.strokeStyle="black",b.lineWidth=1,0===m%2){b.beginPath();b.moveTo(n,a-k);b.lineTo(n,a-k+2);b.stroke();let e=w.toFixed(5);for(;"0"===e.charAt(e.length-1);)e=e.substring(0,e.length-1);"."===e.charAt(e.length-1)&&(e=e.substring(0,e.length-1));let c=b.measureText(e).width;d.plots_flipXAxis&& (c*=-1);let h=n-c/2;if(d.plots_flipXAxis?hr)b.fillText(e,n,a-k+2),r=n+c/2;d.plots_showGrid&&(b.strokeStyle=d.plots_gridColor,b.lineWidth=d.plots_gridLineWidth,b.beginPath(),b.moveTo(n,a-k),b.lineTo(n,g),b.stroke())}else b.beginPath(),b.moveTo(n,a-k),b.lineTo(n,a-k+2),b.stroke();m++}if(d.plots_showYAxis||d.plots_showGrid)for(u=1/d.scale,b.textAlign="right",b.textBaseline="middle",m=0;10>=m;m++)if(w=u/10*m,r=g+(a-k-g)*(1-w*d.scale),d.plots_showGrid&&(b.strokeStyle=d.plots_gridColor,b.lineWidth= d.plots_gridLineWidth,b.beginPath(),b.moveTo(l,r),b.lineTo(h,r),b.stroke()),d.plots_showYAxis){b.strokeStyle="black";b.lineWidth=1;b.beginPath();b.moveTo(l,r);b.lineTo(l-3,r);b.stroke();n=100*w;w=e.max(0,3-e.floor(n).toString().length);n=n.toFixed(w);if(0=f&&c=f&&pthis.integrationSensitivity&&l.push(new q.Point(this.data[m].x,this.data[m].y));r||(b.moveTo(c,h),r=!0);b.lineTo(c,h);u++;0===u%1E3&&(b.stroke(),b.beginPath(), b.moveTo(c,h));if(n)break}else r&&(n=!0)}}else for(let e=0,l=this.data.length;e=f&&rl[0].x;if(this.flipXAxis&&!r||!this.flipXAxis&&r){for(r=l.length-2;0<=r;r--)l[r].y+=l[r+1].y;r=l[0].y}else{for(let a=1,b=l.length;a< b;a++)l[a].y+=l[a-1].y;r=l[l.length-1].y}for(let e=0,m=l.length;eb){var e=d;d=b;b=e}e=-1;let a=-Infinity,g=!1;for(let h=0,f=this.data.length;ha&&(g=!0,a=f.y,e=h);else if(g)break}if(-1=== e)return k;d=this.data[e];return new ChemDoodle.structures.Point(d.x,100*d.y)};r.getClosestPeakInternalCoordinates=function(b){var d=this.getInverseTransformedX(b);b=0;var h=Infinity;for(let g=0,f=this.data.length;gg)g=this.data[a].y,h=a;else break;for(g=b-1;0<=g;g--)if(this.data[g].y+.05>a)a=this.data[g].y,d=g;else break;b=this.data[d- b>h-b?h:d];return new ChemDoodle.structures.Point(b.x,100*b.y)}})(ChemDoodle.extensions,ChemDoodle.structures,ChemDoodle.math,ChemDoodle.lib.jQuery,Math); (function(f,q,n,r){q._Shape=function(){};q=q._Shape.prototype;q.drawDecorations=function(e,f){if(this.isHover){let b=this.getPoints();for(let d=0,h=b.length;dthis.b2.getCenter().x?this.textPos=this.ps[0].x>this.ps[1].x+5?this.ps[0]:this.ps[1]:this.textPos=this.ps[2].x>this.ps[3].x+ 5?this.ps[2]:this.ps[3];!this.error&&0e.PI&&(b=[a.angleOfLeastInterference]);if(a.bonds)for(let g=0,e=a.bonds.length;g2*e.PI;)b[a]-=2*e.PI;for(;0>b[a];)b[a]+=2*e.PI}return b},d=function(a,b){let d=3;if(a instanceof n.Atom){if(a.isLabelVisible(b)&&(d=8),0!==a.charge||0!==a.numRadical||0!==a.numLonePair)d=13}else a instanceof n.Point?d=0:1b.distance(r)?c=!1:l=!1);a.beginPath();a.moveTo(g.x,g.y);c&&a.lineTo(b.x,b.y);a.lineTo(f, m);l&&a.lineTo(z.x,z.y);a.closePath();a.fill();a.stroke();a.beginPath();a.moveTo(k.x,k.y);a.bezierCurveTo(r.x,r.y,u.x,u.y,w.x,w.y);a.stroke();y.push([k,r,u,w])};r.Pusher=function(a,b,d){this.o1=a;this.o2=b;this.numElectron=d?d:1};r=r.Pusher.prototype=new r._Shape;r.drawDecorations=function(a,b){if(this.isHover){var d=this.o1 instanceof n.Atom?new n.Point(this.o1.x,this.o1.y):this.o1.getCenter(),g=this.o2 instanceof n.Atom?new n.Point(this.o2.x,this.o2.y):this.o2.getCenter();d=[d,g];for(let e=0,h= d.length;ee.abs(m-e.PI)&&this.o1.molCenter===this.o2.molCenter&&(g+=e.PI/2,k-=e.PI/2,c.x=l.x+35*e.cos(g+e.PI),c.y=l.y-35*e.sin(g+e.PI),p.x=v.x+35*e.cos(k+e.PI),p.y=v.y-35*e.sin(k+e.PI)),h(a,d,this.o1,this.o2,l,c,p,v,this.numElectron,this.caches))}};r.getPoints=function(){return[]};r.isOver=function(a,b){for(let d=0,g=this.caches.length;de?(d=0,e+=h):ea;a++)d.push(b.x,b.y,k/2),d.push(b.x,b.y,-k/2),d.push(l.x,l.y,k/2),d.push(l.x,l.y,-k/2);for(l=0;4>l;l++)h.push(g[0],g[1],g[2]);h.push(0,0,1);h.push(0,0,-1);h.push(0,0,1);h.push(0,0,-1);a.add(b)}a.x/=b;a.y/=b;h.push(0,0,1);d.push(a.x,a.y,k/2);h.push(0,0,-1);d.push(a.x,a.y,-k/2);e=[];k=8*b;for(let a= 0,d=b;aa&&(e++,g=0);let l=e*c;f&&h.strokeText(d,g,l+c/2);h.fillText(d,g,l+c/2);w.x=g;w.y=l;u+= d;g+=r}this.text=u;this.data=n;this.charHeight=d;b.bindTexture(b.TEXTURE_2D,this.textureImage);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,b.RGBA,b.UNSIGNED_BYTE,l);b.bindTexture(b.TEXTURE_2D,null)};f.pushVertexData=function(b,d,e,a){let g=b.toString().split(""),f=this.getHeight(),h=this.getWidth();b=-this.textWidth(b)/2/k;let m=-this.charHeight/2/k;for(let l=0,v=g.length;ll;l++)w=l/60*e.PI,m.push(new n.Point(2*e.cos(w),-2*e.sin(w)));m.push(new n.Point(-2,0),new n.Point(-2,4),new n.Point(2,4));let C=new n.d3.Shape(m,1);this.render=function(c,g){this.bindBuffers(c);c.material.setDiffuseColor(c,g.macro_colorByChain?this.chainColor:g.nucleics_tubeColor);c.drawElements(c.TRIANGLES, this.vertexIndexBuffer.numItems,c.UNSIGNED_SHORT,0);if(this.partitions)for(let b=1,d=this.partitions.length;bl;l++){var m=this.ends[l];m=k.translate(k.identity(),[m.x,m.y,m.z]);var p=v/2;k.scale(m,[p,p,p]);c.shader.setMatrixUniforms(c,m);c.drawElements(c.TRIANGLES,c.sphereBuffer.vertexIndexBuffer.numItems,c.UNSIGNED_SHORT,0)}c.cylinderBuffer.bindBuffers(c); for(let a=0,d=h.length-1;ab.dot(p,b.cross(u, r))&&(w*=-1),k.rotateY(m,w);g.macro_colorByChain||("shapely"===g.nucleics_residueColor?q[l.name]?c.material.setDiffuseColor(c,q[l.name].shapelyColor):c.material.setDiffuseColor(c,q["*"].shapelyColor):"rainbow"===g.nucleics_residueColor&&c.material.setDiffuseColor(c,d.rainbowAt(a,n,g.macro_rainbowColors)));c.shader.setMatrixUniforms(c,m);c.drawElements(c.TRIANGLES,C.vertexIndexBuffer.numItems,c.UNSIGNED_SHORT,0)}}};r.Tube.prototype=new r._Mesh;r.CatmullTube=function(a,d,f,h){var k=[];a.push(a[a.length- 1]);for(let b=0,d=a.length-2;b<=d;b++){var l=a[0==b?0:b-1],m=a[b+0],v=a[b+1],c=a[b==d?b+1:b+2],p=[];for(let a=0;ag;g++){var e=this.ends[g];e=k.translate(k.identity(),[e.x,e.y,e.z]);let a=d.proteins_tubeThickness/2;k.scale(e,[a,a,a]);b.shader.setMatrixUniforms(b,e);b.drawElements(b.TRIANGLES,b.sphereBuffer.vertexIndexBuffer.numItems,b.UNSIGNED_SHORT,0)}}})(ChemDoodle.extensions,ChemDoodle.RESIDUE,ChemDoodle.structures,ChemDoodle.structures.d3,Math,ChemDoodle.lib.mat4, ChemDoodle.lib.vec3,ChemDoodle.math); (function(f,q,n){f.UnitCell=function(f){this.unitCell=f;let e=[],k=[];var b=function(b,f,a,g){e.push(b[0],b[1],b[2]);e.push(f[0],f[1],f[2]);e.push(a[0],a[1],a[2]);e.push(g[0],g[1],g[2]);for(b=0;4>b;b++)k.push(0,0,0)};b(f.o,f.x,f.xy,f.y);b(f.o,f.y,f.yz,f.z);b(f.o,f.z,f.xz,f.x);b(f.yz,f.y,f.xy,f.xyz);b(f.xyz,f.xz,f.z,f.yz);b(f.xy,f.x,f.xz,f.xyz);f=[];for(b=0;6>b;b++){let d=4*b;f.push(d,d+1,d+1,d+2,d+2,d+3,d+3,d)}this.storeData(e,k,f)};(f.UnitCell.prototype=new f._Mesh).render=function(f,e){f.shader.setMatrixUniforms(f); this.bindBuffers(f);f.material.setDiffuseColor(f,e.shapes_color);f.lineWidth(e.shapes_lineWidth);f.drawElements(f.LINES,this.vertexIndexBuffer.numItems,f.UNSIGNED_SHORT,0)}})(ChemDoodle.structures.d3,ChemDoodle.lib.vec3); (function(f,q,n,r){f.Framebuffer=function(){};f=f.Framebuffer.prototype;f.init=function(e){this.framebuffer=e.createFramebuffer()};f.setColorTexture=function(e,f,b){b=b===r?0:b;e.bindFramebuffer(e.FRAMEBUFFER,this.framebuffer);e.bindTexture(e.TEXTURE_2D,f);e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+b,e.TEXTURE_2D,f,0);e.bindTexture(e.TEXTURE_2D,null);e.bindFramebuffer(e.FRAMEBUFFER,null)};f.setColorRenderbuffer=function(e,f,b){b=b===r?0:b;e.bindFramebuffer(e.FRAMEBUFFER,this.framebuffer); e.bindRenderbuffer(e.RENDERBUFFER,f);e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0+b,e.RENDERBUFFER,f);e.bindRenderbuffer(e.RENDERBUFFER,null);e.bindFramebuffer(e.FRAMEBUFFER,null)};f.setDepthTexture=function(e,f){e.bindFramebuffer(e.FRAMEBUFFER,this.framebuffer);e.bindTexture(e.TEXTURE_2D,f);e.framebufferTexture2D(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.TEXTURE_2D,f,0);e.bindTexture(e.TEXTURE_2D,null);e.bindFramebuffer(e.FRAMEBUFFER,null)};f.setDepthRenderbuffer=function(e,f){e.bindFramebuffer(e.FRAMEBUFFER, this.framebuffer);e.bindRenderbuffer(e.RENDERBUFFER,f);e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,f);e.bindRenderbuffer(e.RENDERBUFFER,null);e.bindFramebuffer(e.FRAMEBUFFER,null)};f.bind=function(e,f,b){e.bindFramebuffer(e.FRAMEBUFFER,this.framebuffer);e.viewport(0,0,f,b)}})(ChemDoodle.structures.d3,ChemDoodle.math,document); (function(f,q,n,r){f.Renderbuffer=function(){};f=f.Renderbuffer.prototype;f.init=function(e,f){this.renderbuffer=e.createRenderbuffer();this.format=f};f.setParameter=function(e,f,b){this.width=f;this.height=b;e.bindRenderbuffer(e.RENDERBUFFER,this.renderbuffer);e.renderbufferStorage(e.RENDERBUFFER,this.format,this.width,this.height);e.bindRenderbuffer(e.RENDERBUFFER,null)}})(ChemDoodle.structures.d3,ChemDoodle.math,document); (function(f,q,n,r){q.SSAO=function(){};f=q.SSAO.prototype;f.initSampleKernel=function(e){let f=[];for(let d=0;db;b++)f.push(2*n.random()-1),f.push(2*n.random()-1),f.push(0);this.noiseTexture=e.createTexture();e.bindTexture(e.TEXTURE_2D,this.noiseTexture);e.texImage2D(e.TEXTURE_2D,0,e.RGB,4,4, 0,e.RGB,e.FLOAT,new Float32Array(f));e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT);e.bindTexture(e.TEXTURE_2D,null)}})(ChemDoodle.math,ChemDoodle.structures.d3,Math); (function(f,q,n,r){f.Texture=function(){};f=f.Texture.prototype;f.init=function(e,f,b,d){this.texture=e.createTexture();this.type=f;this.internalFormat=b;this.format=d!==r?d:b;e.bindTexture(e.TEXTURE_2D,this.texture);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE);e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE);e.bindTexture(e.TEXTURE_2D,null)};f.setParameter= function(e,f,b){this.width=f;this.height=b;e.bindTexture(e.TEXTURE_2D,this.texture);e.texImage2D(e.TEXTURE_2D,0,this.internalFormat,this.width,this.height,0,this.format,this.type,null);e.bindTexture(e.TEXTURE_2D,null)}})(ChemDoodle.structures.d3,ChemDoodle.math,document); (function(f,q,n,r,e){f._Shader=function(){};f=f._Shader.prototype;f.useShaderProgram=function(e){e.useProgram(this.gProgram);e.shader=this};f.init=function(e){let b=this.getShader(e,"vertex-shader");b||(b=this.loadDefaultVertexShader(e));let d=this.getShader(e,"fragment-shader");d||(d=this.loadDefaultFragmentShader(e));this.gProgram=e.createProgram();e.attachShader(this.gProgram,b);e.attachShader(this.gProgram,d);this.onShaderAttached(e);e.linkProgram(this.gProgram);e.getProgramParameter(this.gProgram, e.LINK_STATUS)||alert("Could not initialize shaders: "+e.getProgramInfoLog(this.gProgram));e.useProgram(this.gProgram);this.initUniformLocations(e);e.useProgram(null)};f.onShaderAttached=function(e){this.vertexPositionAttribute=0;this.vertexNormalAttribute=1;e.bindAttribLocation(this.gProgram,this.vertexPositionAttribute,"a_vertex_position");e.bindAttribLocation(this.gProgram,this.vertexNormalAttribute,"a_vertex_normal")};f.getShaderFromStr=function(f,b,d){b=f.createShader(b);f.shaderSource(b,d); f.compileShader(b);return f.getShaderParameter(b,f.COMPILE_STATUS)?b:(alert(shaderScript.type+" "+f.getShaderInfoLog(b)),f.deleteShader(b),e)};f.enableAttribsArray=function(e){e.enableVertexAttribArray(this.vertexPositionAttribute)};f.disableAttribsArray=function(e){e.disableVertexAttribArray(this.vertexPositionAttribute)};f.getShader=function(f,b){b=r.getElementById(b);if(!b)return e;var d=[];let h=b.firstChild;for(;h;)3===h.nodeType&&d.push(h.textContent),h=h.nextSibling;d=d.join("");if("x-shader/x-fragment"=== b.type)f=this.getShaderFromStr(f,f.FRAGMENT_SHADER,d);else if("x-shader/x-vertex"===b.type)f=this.getShaderFromStr(f,f.VERTEX_SHADER,d);else return e;return f};f.initUniformLocations=function(e){this.modelViewMatrixUniform=e.getUniformLocation(this.gProgram,"u_model_view_matrix");this.projectionMatrixUniform=e.getUniformLocation(this.gProgram,"u_projection_matrix")};f.loadDefaultVertexShader=function(e){};f.loadDefaultFragmentShader=function(e){};f.setMatrixUniforms=function(f,b){b===e?this.setModelViewMatrix(f, f.modelViewMatrix):this.setModelViewMatrix(f,n.multiply(f.modelViewMatrix,b,[]))};f.setProjectionMatrix=function(e,b){e.uniformMatrix4fv(this.projectionMatrixUniform,!1,b)};f.setModelViewMatrix=function(e,b){e.uniformMatrix4fv(this.modelViewMatrixUniform,!1,b)};f.setMaterialAmbientColor=function(e,b){};f.setMaterialDiffuseColor=function(e,b){};f.setMaterialSpecularColor=function(e,b){};f.setMaterialShininess=function(e,b){};f.setMaterialAlpha=function(e,b){}})(ChemDoodle.structures.d3,ChemDoodle.lib.mat3, ChemDoodle.lib.mat4,document); (function(f,q,n,r,e){f.FXAAShader=function(){};let k=f._Shader.prototype;f=f.FXAAShader.prototype=new f._Shader;f.initUniformLocations=function(b){k.initUniformLocations.call(this,b);this.buffersizeUniform=b.getUniformLocation(this.gProgram,"u_buffersize");this.antialiasUniform=b.getUniformLocation(this.gProgram,"u_antialias");this.edgeThresholdUniform=b.getUniformLocation(this.gProgram,"u_edge_threshold");this.edgeThresholdMinUniform=b.getUniformLocation(this.gProgram,"u_edge_threshold_min");this.searchStepsUniform= b.getUniformLocation(this.gProgram,"u_search_steps");this.searchThresholdUniform=b.getUniformLocation(this.gProgram,"u_search_threshold");this.subpixCapUniform=b.getUniformLocation(this.gProgram,"u_subpix_cap");this.subpixTrimUniform=b.getUniformLocation(this.gProgram,"u_subpix_trim")};f.setBuffersize=function(b,d,e){b.uniform2f(this.buffersizeUniform,d,e)};f.setAntialias=function(b,d){b.uniform1f(this.antialiasUniform,d)};f.setEdgeThreshold=function(b,d){b.uniform1f(this.edgeThresholdUniform,d)}; f.setEdgeThresholdMin=function(b,d){b.uniform1f(this.edgeThresholdMinUniform,d)};f.setSearchSteps=function(b,d){b.uniform1i(this.searchStepsUniform,d)};f.setSearchThreshold=function(b,d){b.uniform1f(this.searchThresholdUniform,d)};f.setSubpixCap=function(b,d){b.uniform1f(this.subpixCapUniform,d)};f.setSubpixTrim=function(b,d){b.uniform1f(this.subpixTrimUniform,d)};f.loadDefaultVertexShader=function(b){return this.getShaderFromStr(b,b.VERTEX_SHADER,"precision mediump float;attribute vec3 a_vertex_position;varying vec2 v_texcoord;void main() {gl_Position \x3d vec4(a_vertex_position, 1.);v_texcoord \x3d a_vertex_position.xy * .5 + .5;}")}; f.loadDefaultFragmentShader=function(b){return this.getShaderFromStr(b,b.FRAGMENT_SHADER,"precision mediump float;\nconst int fxaaMaxSearchSteps \x3d 128;\nuniform float u_edge_threshold;\nuniform float u_edge_threshold_min;\nuniform int u_search_steps;\nuniform float u_search_threshold;\nuniform float u_subpix_cap;\nuniform float u_subpix_trim;\nuniform sampler2D u_sampler0;\nuniform vec2 u_buffersize;\nuniform bool u_antialias;\nvarying vec2 v_texcoord;\nfloat FxaaLuma(vec3 rgb) {\nreturn rgb.y * (0.587/0.299) + rgb.x;\n}\nvec3 FxaaLerp3(vec3 a, vec3 b, float amountOfA) {\nreturn (vec3(-amountOfA) * b) + ((a * vec3(amountOfA)) + b);\n}\nvec4 FxaaTexOff(sampler2D tex, vec2 pos, vec2 off, vec2 rcpFrame) {\nreturn texture2D(tex, pos + off * rcpFrame);\n}\nvec3 FxaaPixelShader(vec2 pos, sampler2D tex, vec2 rcpFrame) {\nfloat subpix_trim_scale \x3d (1.0/(1.0 - u_subpix_trim));\nvec3 rgbN \x3d FxaaTexOff(tex, pos.xy, vec2( 0.,-1.), rcpFrame).xyz;\nvec3 rgbW \x3d FxaaTexOff(tex, pos.xy, vec2(-1., 0.), rcpFrame).xyz;\nvec3 rgbM \x3d FxaaTexOff(tex, pos.xy, vec2( 0., 0.), rcpFrame).xyz;\nvec3 rgbE \x3d FxaaTexOff(tex, pos.xy, vec2( 1., 0.), rcpFrame).xyz;\nvec3 rgbS \x3d FxaaTexOff(tex, pos.xy, vec2( 0., 1.), rcpFrame).xyz;\nfloat lumaN \x3d FxaaLuma(rgbN);\nfloat lumaW \x3d FxaaLuma(rgbW);\nfloat lumaM \x3d FxaaLuma(rgbM);\nfloat lumaE \x3d FxaaLuma(rgbE);\nfloat lumaS \x3d FxaaLuma(rgbS);\nfloat rangeMin \x3d min(lumaM, min(min(lumaN, lumaW), min(lumaS, lumaE)));\nfloat rangeMax \x3d max(lumaM, max(max(lumaN, lumaW), max(lumaS, lumaE)));\nfloat range \x3d rangeMax - rangeMin;\nif(range \x3c max(u_edge_threshold_min, rangeMax * u_edge_threshold)) {\nreturn rgbM;\n}\nvec3 rgbL \x3d rgbN + rgbW + rgbM + rgbE + rgbS;\nfloat lumaL \x3d (lumaN + lumaW + lumaE + lumaS) * 0.25;\nfloat rangeL \x3d abs(lumaL - lumaM);\nfloat blendL \x3d max(0.0, (rangeL / range) - u_subpix_trim) * subpix_trim_scale;\nblendL \x3d min(u_subpix_cap, blendL);\nvec3 rgbNW \x3d FxaaTexOff(tex, pos.xy, vec2(-1.,-1.), rcpFrame).xyz;\nvec3 rgbNE \x3d FxaaTexOff(tex, pos.xy, vec2( 1.,-1.), rcpFrame).xyz;\nvec3 rgbSW \x3d FxaaTexOff(tex, pos.xy, vec2(-1., 1.), rcpFrame).xyz;\nvec3 rgbSE \x3d FxaaTexOff(tex, pos.xy, vec2( 1., 1.), rcpFrame).xyz;\nrgbL +\x3d (rgbNW + rgbNE + rgbSW + rgbSE);\nrgbL *\x3d vec3(1.0/9.0);\nfloat lumaNW \x3d FxaaLuma(rgbNW);\nfloat lumaNE \x3d FxaaLuma(rgbNE);\nfloat lumaSW \x3d FxaaLuma(rgbSW);\nfloat lumaSE \x3d FxaaLuma(rgbSE);\nfloat edgeVert \x3d\nabs((0.25 * lumaNW) + (-0.5 * lumaN) + (0.25 * lumaNE)) +\nabs((0.50 * lumaW ) + (-1.0 * lumaM) + (0.50 * lumaE )) +\nabs((0.25 * lumaSW) + (-0.5 * lumaS) + (0.25 * lumaSE));\nfloat edgeHorz \x3d\nabs((0.25 * lumaNW) + (-0.5 * lumaW) + (0.25 * lumaSW)) +\nabs((0.50 * lumaN ) + (-1.0 * lumaM) + (0.50 * lumaS )) +\nabs((0.25 * lumaNE) + (-0.5 * lumaE) + (0.25 * lumaSE));\nbool horzSpan \x3d edgeHorz \x3e\x3d edgeVert;\nfloat lengthSign \x3d horzSpan ? -rcpFrame.y : -rcpFrame.x;\nif(!horzSpan) {\nlumaN \x3d lumaW;\nlumaS \x3d lumaE;\n}\nfloat gradientN \x3d abs(lumaN - lumaM);\nfloat gradientS \x3d abs(lumaS - lumaM);\nlumaN \x3d (lumaN + lumaM) * 0.5;\nlumaS \x3d (lumaS + lumaM) * 0.5;\nif (gradientN \x3c gradientS) {\nlumaN \x3d lumaS;\nlumaN \x3d lumaS;\ngradientN \x3d gradientS;\nlengthSign *\x3d -1.0;\n}\nvec2 posN;\nposN.x \x3d pos.x + (horzSpan ? 0.0 : lengthSign * 0.5);\nposN.y \x3d pos.y + (horzSpan ? lengthSign * 0.5 : 0.0);\ngradientN *\x3d u_search_threshold;\nvec2 posP \x3d posN;\nvec2 offNP \x3d horzSpan ? vec2(rcpFrame.x, 0.0) : vec2(0.0, rcpFrame.y);\nfloat lumaEndN \x3d lumaN;\nfloat lumaEndP \x3d lumaN;\nbool doneN \x3d false;\nbool doneP \x3d false;\nposN +\x3d offNP * vec2(-1.0, -1.0);\nposP +\x3d offNP * vec2( 1.0, 1.0);\nfor(int i \x3d 0; i \x3c fxaaMaxSearchSteps; i++) {\nif(i \x3e\x3d u_search_steps) break;\nif(!doneN) {\nlumaEndN \x3d FxaaLuma(texture2D(tex, posN.xy).xyz);\n}\nif(!doneP) {\nlumaEndP \x3d FxaaLuma(texture2D(tex, posP.xy).xyz);\n}\ndoneN \x3d doneN || (abs(lumaEndN - lumaN) \x3e\x3d gradientN);\ndoneP \x3d doneP || (abs(lumaEndP - lumaN) \x3e\x3d gradientN);\nif(doneN \x26\x26 doneP) {\nbreak;\n}\nif(!doneN) {\nposN -\x3d offNP;\n}\nif(!doneP) {\nposP +\x3d offNP;\n}\n}\nfloat dstN \x3d horzSpan ? pos.x - posN.x : pos.y - posN.y;\nfloat dstP \x3d horzSpan ? posP.x - pos.x : posP.y - pos.y;\nbool directionN \x3d dstN \x3c dstP;\nlumaEndN \x3d directionN ? lumaEndN : lumaEndP;\nif(((lumaM - lumaN) \x3c 0.0) \x3d\x3d ((lumaEndN - lumaN) \x3c 0.0)) {\nlengthSign \x3d 0.0;\n}\nfloat spanLength \x3d (dstP + dstN);\ndstN \x3d directionN ? dstN : dstP;\nfloat subPixelOffset \x3d (0.5 + (dstN * (-1.0/spanLength))) * lengthSign;\nvec3 rgbF \x3d texture2D(tex, vec2(\npos.x + (horzSpan ? 0.0 : subPixelOffset),\npos.y + (horzSpan ? subPixelOffset : 0.0))).xyz;\nreturn FxaaLerp3(rgbL, rgbF, blendL);\n}\nvoid main() {\ngl_FragColor \x3d texture2D(u_sampler0, v_texcoord);\nif(u_antialias) {\ngl_FragColor.xyz \x3d FxaaPixelShader(v_texcoord, u_sampler0, 1. / u_buffersize).xyz;\n}\n}")}})(ChemDoodle.structures.d3, ChemDoodle.lib.mat3,ChemDoodle.lib.mat4,document); (function(f,q,n,r,e){f.LabelShader=function(){};let k=f._Shader.prototype;f=f.LabelShader.prototype=new f._Shader;f.initUniformLocations=function(b){k.initUniformLocations.call(this,b);this.dimensionUniform=b.getUniformLocation(this.gProgram,"u_dimension")};f.onShaderAttached=function(b){k.onShaderAttached.call(this,b);this.vertexTexCoordAttribute=2;b.bindAttribLocation(this.gProgram,this.vertexTexCoordAttribute,"a_vertex_texcoord")};f.loadDefaultVertexShader=function(b){return this.getShaderFromStr(b, b.VERTEX_SHADER,"precision mediump float;attribute vec3 a_vertex_position;attribute vec3 a_vertex_normal;attribute vec2 a_vertex_texcoord;uniform mat4 u_model_view_matrix;uniform mat4 u_projection_matrix;uniform vec2 u_dimension;varying vec2 v_texcoord;void main() {gl_Position \x3d u_model_view_matrix * vec4(a_vertex_position, 1.);vec4 depth_pos \x3d vec4(gl_Position);depth_pos.z +\x3d a_vertex_normal.z;gl_Position \x3d u_projection_matrix * gl_Position;depth_pos \x3d u_projection_matrix * depth_pos;gl_Position /\x3d gl_Position.w;gl_Position.xy +\x3d a_vertex_normal.xy / u_dimension * 2.;gl_Position.z \x3d depth_pos.z / depth_pos.w;v_texcoord \x3d a_vertex_texcoord;}")}; f.loadDefaultFragmentShader=function(b){let d=[b.depthTextureExt?"#define CWC_DEPTH_TEX\n":"","precision mediump float;uniform sampler2D u_image;varying vec2 v_texcoord;void main(void) {gl_FragColor \x3d texture2D(u_image, v_texcoord);}"].join("");return this.getShaderFromStr(b,b.FRAGMENT_SHADER,d)};f.enableAttribsArray=function(b){k.enableAttribsArray.call(this,b);b.enableVertexAttribArray(this.vertexNormalAttribute);b.enableVertexAttribArray(this.vertexTexCoordAttribute)};f.disableAttribsArray= function(b){k.disableAttribsArray.call(this,b);b.disableVertexAttribArray(this.vertexNormalAttribute);b.disableVertexAttribArray(this.vertexTexCoordAttribute)};f.setDimension=function(b,d,e){b.uniform2f(this.dimensionUniform,d,e)}})(ChemDoodle.structures.d3,ChemDoodle.lib.mat3,ChemDoodle.lib.mat4,document); (function(f,q,n,r,e){f.LightingShader=function(){};let k=f._Shader.prototype;f=f.LightingShader.prototype=new f._Shader;f.initUniformLocations=function(b){k.initUniformLocations.call(this,b);this.positionSampleUniform=b.getUniformLocation(this.gProgram,"u_position_sample");this.colorSampleUniform=b.getUniformLocation(this.gProgram,"u_color_sample");this.ssaoSampleUniform=b.getUniformLocation(this.gProgram,"u_ssao_sample");this.outlineSampleUniform=b.getUniformLocation(this.gProgram,"u_outline_sample")}; f.loadDefaultVertexShader=function(b){return this.getShaderFromStr(b,b.VERTEX_SHADER,"precision mediump float;attribute vec3 a_vertex_position;varying vec2 v_texcoord;void main() {gl_Position \x3d vec4(a_vertex_position, 1.);v_texcoord \x3d a_vertex_position.xy * .5 + .5;}")};f.loadDefaultFragmentShader=function(b){return this.getShaderFromStr(b,b.FRAGMENT_SHADER,"precision mediump float;uniform sampler2D u_position_sample;uniform sampler2D u_color_sample;uniform sampler2D u_ssao_sample;uniform sampler2D u_outline_sample;varying vec2 v_texcoord;void main() {vec4 position \x3d texture2D(u_position_sample, v_texcoord);vec4 color \x3d texture2D(u_color_sample, v_texcoord);vec4 ao \x3d texture2D(u_ssao_sample, v_texcoord);float outline \x3d texture2D(u_outline_sample, v_texcoord).r;if(position.w \x3d\x3d 0. \x26\x26 outline \x3d\x3d 1.) {return;}gl_FragColor \x3d vec4(color.rgb * ao.r * outline, 1.);}")}})(ChemDoodle.structures.d3, ChemDoodle.lib.mat3,ChemDoodle.lib.mat4,document); (function(f,q,n,r,e){f.NormalShader=function(){};let k=f._Shader.prototype;f=f.NormalShader.prototype=new f._Shader;f.initUniformLocations=function(b){k.initUniformLocations.call(this,b);this.normalMatrixUniform=b.getUniformLocation(this.gProgram,"u_normal_matrix")};f.loadDefaultVertexShader=function(b){return this.getShaderFromStr(b,b.VERTEX_SHADER,"precision mediump float;attribute vec3 a_vertex_position;attribute vec3 a_vertex_normal;uniform mat4 u_model_view_matrix;uniform mat4 u_projection_matrix;uniform mat3 u_normal_matrix;varying vec3 v_normal;void main() {v_normal \x3d length(a_vertex_normal)\x3d\x3d0. ? a_vertex_normal : u_normal_matrix * a_vertex_normal;gl_Position \x3d u_projection_matrix * u_model_view_matrix * vec4(a_vertex_position, 1.);}")};f.loadDefaultFragmentShader= function(b){return this.getShaderFromStr(b,b.FRAGMENT_SHADER,"precision mediump float;varying vec3 v_normal;void main(void) {vec3 normal \x3d length(v_normal)\x3d\x3d0. ? vec3(0., 0., 1.) : normalize(v_normal);gl_FragColor \x3d vec4(normal, 0.);}")};f.enableAttribsArray=function(b){k.enableAttribsArray.call(this,b);b.enableVertexAttribArray(this.vertexNormalAttribute)};f.disableAttribsArray=function(b){k.disableAttribsArray.call(this,b);b.disableVertexAttribArray(this.vertexNormalAttribute)};f.setModelViewMatrix= function(b,d){k.setModelViewMatrix.call(this,b,d);d=q.transpose(n.toInverseMat3(d,[]));b.uniformMatrix3fv(this.normalMatrixUniform,!1,d)}})(ChemDoodle.structures.d3,ChemDoodle.lib.mat3,ChemDoodle.lib.mat4,document); (function(f,q,n,r,e){f.OutlineShader=function(){};let k=f._Shader.prototype;f=f.OutlineShader.prototype=new f._Shader;f.initUniformLocations=function(b){k.initUniformLocations.call(this,b);this.normalSampleUniform=b.getUniformLocation(this.gProgram,"u_normal_sample");this.depthSampleUniform=b.getUniformLocation(this.gProgram,"u_depth_sample");this.gbufferTextureSizeUniform=b.getUniformLocation(this.gProgram,"u_gbuffer_texture_size");this.normalThresholdUniform=b.getUniformLocation(this.gProgram,"u_normal_threshold"); this.depthThresholdUniform=b.getUniformLocation(this.gProgram,"u_depth_threshold");this.thicknessUniform=b.getUniformLocation(this.gProgram,"u_thickness")};f.loadDefaultVertexShader=function(b){return this.getShaderFromStr(b,b.VERTEX_SHADER,"precision mediump float;attribute vec3 a_vertex_position;varying vec2 v_texcoord;void main() {gl_Position \x3d vec4(a_vertex_position, 1.);v_texcoord \x3d a_vertex_position.xy * .5 + .5;}")};f.loadDefaultFragmentShader=function(b){return this.getShaderFromStr(b, b.FRAGMENT_SHADER,"precision mediump float;uniform sampler2D u_normal_sample;uniform sampler2D u_depth_sample;uniform float u_normal_threshold;uniform float u_depth_threshold;uniform float u_thickness;uniform vec2 u_gbuffer_texture_size;varying vec2 v_texcoord;void main() {vec3 normal \x3d texture2D(u_normal_sample, v_texcoord).xyz;float depth \x3d texture2D(u_depth_sample, v_texcoord).r;vec2 texelSize \x3d u_thickness/u_gbuffer_texture_size * .5;vec2 offsets[8];offsets[0] \x3d vec2(-texelSize.x, -texelSize.y);offsets[1] \x3d vec2(-texelSize.x, 0);offsets[2] \x3d vec2(-texelSize.x, texelSize.y);offsets[3] \x3d vec2(0, -texelSize.y);offsets[4] \x3d vec2(0, texelSize.y);offsets[5] \x3d vec2(texelSize.x, -texelSize.y);offsets[6] \x3d vec2(texelSize.x, 0);offsets[7] \x3d vec2(texelSize.x, texelSize.y);float edge \x3d 0.;for (int i \x3d 0; i \x3c 8; i++) {vec3 sampleNorm \x3d texture2D(u_normal_sample, v_texcoord + offsets[i]).xyz;if(normal \x3d\x3d vec3(.0, .0, .0)) {if(sampleNorm !\x3d vec3(.0, .0, .0)) {edge \x3d 1.0;break;}continue;}if (dot(sampleNorm, normal) \x3c u_normal_threshold) {edge \x3d 1.0;break;}float sampleDepth \x3d texture2D(u_depth_sample, v_texcoord + offsets[i]).r;if (abs(sampleDepth - depth) \x3e u_depth_threshold) {edge \x3d 1.0;break;}}edge \x3d 1. - edge;gl_FragColor \x3d vec4(edge, edge, edge, 1.);}")}; f.setGbufferTextureSize=function(b,d,e){b.uniform2f(this.gbufferTextureSizeUniform,d,e)};f.setNormalThreshold=function(b,d){b.uniform1f(this.normalThresholdUniform,d)};f.setDepthThreshold=function(b,d){b.uniform1f(this.depthThresholdUniform,d)};f.setThickness=function(b,d){b.uniform1f(this.thicknessUniform,d)}})(ChemDoodle.structures.d3,ChemDoodle.lib.mat3,ChemDoodle.lib.mat4,document); (function(f,q,n,r,e){f.PhongShader=function(){};let k=f._Shader.prototype;f=f.PhongShader.prototype=new f._Shader;f.initUniformLocations=function(b){k.initUniformLocations.call(this,b);this.shadowUniform=b.getUniformLocation(this.gProgram,"u_shadow");this.flatColorUniform=b.getUniformLocation(this.gProgram,"u_flat_color");this.normalMatrixUniform=b.getUniformLocation(this.gProgram,"u_normal_matrix");this.lightModelViewMatrixUniform=b.getUniformLocation(this.gProgram,"u_light_model_view_matrix");this.lightProjectionMatrixUniform= b.getUniformLocation(this.gProgram,"u_light_projection_matrix");this.lightDiffuseColorUniform=b.getUniformLocation(this.gProgram,"u_light_diffuse_color");this.lightSpecularColorUniform=b.getUniformLocation(this.gProgram,"u_light_specular_color");this.lightDirectionUniform=b.getUniformLocation(this.gProgram,"u_light_direction");this.materialAmbientColorUniform=b.getUniformLocation(this.gProgram,"u_material_ambient_color");this.materialDiffuseColorUniform=b.getUniformLocation(this.gProgram,"u_material_diffuse_color"); this.materialSpecularColorUniform=b.getUniformLocation(this.gProgram,"u_material_specular_color");this.materialShininessUniform=b.getUniformLocation(this.gProgram,"u_material_shininess");this.materialAlphaUniform=b.getUniformLocation(this.gProgram,"u_material_alpha");this.fogModeUniform=b.getUniformLocation(this.gProgram,"u_fog_mode");this.fogColorUniform=b.getUniformLocation(this.gProgram,"u_fog_color");this.fogStartUniform=b.getUniformLocation(this.gProgram,"u_fog_start");this.fogEndUniform=b.getUniformLocation(this.gProgram, "u_fog_end");this.fogDensityUniform=b.getUniformLocation(this.gProgram,"u_fog_density");this.shadowDepthSampleUniform=b.getUniformLocation(this.gProgram,"u_shadow_depth_sample");this.shadowTextureSizeUniform=b.getUniformLocation(this.gProgram,"u_shadow_texture_size");this.shadowIntensityUniform=b.getUniformLocation(this.gProgram,"u_shadow_intensity");this.gammaCorrectionUniform=b.getUniformLocation(this.gProgram,"u_gamma_inverted");this.pointSizeUniform=b.getUniformLocation(this.gProgram,"u_point_size")}; f.loadDefaultVertexShader=function(b){return this.getShaderFromStr(b,b.VERTEX_SHADER,"precision mediump float;attribute vec3 a_vertex_position;attribute vec3 a_vertex_normal;uniform vec3 u_light_diffuse_color;uniform vec3 u_material_ambient_color;uniform vec3 u_material_diffuse_color;uniform mat4 u_model_view_matrix;uniform mat4 u_projection_matrix;uniform mat3 u_normal_matrix;uniform mat4 u_light_model_view_matrix;uniform mat4 u_light_projection_matrix;uniform bool u_shadow;varying vec3 v_viewpos;varying vec4 v_shadcoord;varying vec3 v_diffuse;varying vec3 v_ambient;varying vec3 v_normal;uniform float u_point_size;void main() {v_normal \x3d length(a_vertex_normal)\x3d\x3d0. ? a_vertex_normal : u_normal_matrix * a_vertex_normal;v_ambient \x3d u_material_ambient_color;v_diffuse \x3d u_material_diffuse_color * u_light_diffuse_color;if(u_shadow) {v_shadcoord \x3d u_light_projection_matrix * u_light_model_view_matrix * vec4(a_vertex_position, 1.);v_shadcoord /\x3d v_shadcoord.w;}vec4 viewPos \x3d u_model_view_matrix * vec4(a_vertex_position, 1.);v_viewpos \x3d viewPos.xyz / viewPos.w;gl_Position \x3d u_projection_matrix * viewPos;gl_Position /\x3d gl_Position.w;gl_PointSize \x3d u_point_size;}")}; f.loadDefaultFragmentShader=function(b){let d=[b.depthTextureExt?"#define CWC_DEPTH_TEX\n":"","precision mediump float;uniform vec3 u_light_specular_color;uniform vec3 u_light_direction;uniform vec3 u_material_specular_color;uniform float u_material_shininess;uniform float u_material_alpha;uniform int u_fog_mode;uniform vec3 u_fog_color;uniform float u_fog_density;uniform float u_fog_start;uniform float u_fog_end;uniform bool u_shadow;uniform float u_shadow_intensity;uniform bool u_flat_color;uniform float u_gamma_inverted;uniform sampler2D u_shadow_depth_sample;uniform vec2 u_shadow_texture_size;varying vec3 v_viewpos;varying vec4 v_shadcoord;varying vec3 v_diffuse;varying vec3 v_ambient;varying vec3 v_normal;\n#ifndef CWC_DEPTH_TEX\nfloat unpack (vec4 colour) {const vec4 bitShifts \x3d vec4(1.,1. / 255.,1. / (255. * 255.),1. / (255. * 255. * 255.));return dot(colour, bitShifts);}\n#endif\nfloat shadowMapDepth(vec4 shadowMapColor) {float zShadowMap;\n#ifdef CWC_DEPTH_TEX\nzShadowMap \x3d shadowMapColor.r;\n#else\nzShadowMap \x3d unpack(shadowMapColor);\n#endif\nreturn zShadowMap;}void main(void) {vec3 color \x3d v_diffuse;if(length(v_normal)!\x3d0.){vec3 normal \x3d normalize(v_normal);vec3 lightDir \x3d normalize(-u_light_direction);float nDotL \x3d dot(normal, lightDir);float shadow \x3d 0.0;if(u_shadow) {vec3 depthCoord \x3d .5 + v_shadcoord.xyz / v_shadcoord.w * .5;if(depthCoord.z \x3c\x3d 1. \x26\x26 depthCoord.z \x3e\x3d 0.) {float bias \x3d max(.05 * (1. - nDotL), .005);vec2 texelSize \x3d 1. / u_shadow_texture_size;for(int x \x3d -1; x \x3c\x3d 1; ++x) {for(int y \x3d -1; y \x3c\x3d 1; ++y) {vec4 shadowMapColor \x3d texture2D(u_shadow_depth_sample, depthCoord.xy + vec2(x, y) * texelSize);float zShadowMap \x3d shadowMapDepth(shadowMapColor);shadow +\x3d zShadowMap + bias \x3c depthCoord.z ? 1. : 0.;}}shadow /\x3d 9.;shadow *\x3d u_shadow_intensity;}}if(!u_flat_color) {vec3 viewDir \x3d normalize(-v_viewpos);vec3 halfDir \x3d normalize(lightDir + viewDir);float nDotHV \x3d max(dot(halfDir, normal), 0.);vec3 specular \x3d u_material_specular_color * u_light_specular_color;color*\x3dmax(nDotL, 0.);color+\x3dspecular * pow(nDotHV, u_material_shininess);}color \x3d (1.-shadow)*color+v_ambient;}gl_FragColor \x3d vec4(pow(color, vec3(u_gamma_inverted)), u_material_alpha);if(u_fog_mode !\x3d 0){float fogCoord \x3d 1.-clamp((u_fog_end - gl_FragCoord.z/gl_FragCoord.w) / (u_fog_end - u_fog_start), 0., 1.);float fogFactor \x3d 1.;if(u_fog_mode \x3d\x3d 1){fogFactor \x3d 1.-fogCoord;}else if(u_fog_mode \x3d\x3d 2) {fogFactor \x3d clamp(exp(-u_fog_density*fogCoord), 0., 1.);}else if(u_fog_mode \x3d\x3d 3) {fogFactor \x3d clamp(exp(-pow(u_fog_density*fogCoord, 2.)), 0., 1.);}gl_FragColor \x3d mix(vec4(u_fog_color, 1.), gl_FragColor, fogFactor);}}"].join(""); return this.getShaderFromStr(b,b.FRAGMENT_SHADER,d)};f.enableAttribsArray=function(b){k.enableAttribsArray.call(this,b);b.enableVertexAttribArray(this.vertexNormalAttribute)};f.disableAttribsArray=function(b){k.disableAttribsArray.call(this,b);b.disableVertexAttribArray(this.vertexNormalAttribute)};f.setMatrixUniforms=function(b,d){if(d===e)this.setModelViewMatrix(b,b.modelViewMatrix),this.setLightModelViewMatrix(b,b.lightViewMatrix);else{let e=n.multiply(b.modelViewMatrix,d,[]);d=n.multiply(b.lightViewMatrix, d,[]);this.setModelViewMatrix(b,e);this.setLightModelViewMatrix(b,d)}};f.setModelViewMatrix=function(b,d){k.setModelViewMatrix.call(this,b,d);d=q.transpose(n.toInverseMat3(d,[]));b.uniformMatrix3fv(this.normalMatrixUniform,!1,d)};f.setFlatColor=function(b,d){b.uniform1i(this.flatColorUniform,d)};f.setShadow=function(b,d){b.uniform1i(this.shadowUniform,d)};f.setFogMode=function(b,d){b.uniform1i(this.fogModeUniform,d)};f.setFogColor=function(b,d){b.uniform3fv(this.fogColorUniform,d)};f.setFogStart= function(b,d){b.uniform1f(this.fogStartUniform,d)};f.setFogEnd=function(b,d){b.uniform1f(this.fogEndUniform,d)};f.setFogDensity=function(b,d){b.uniform1f(this.fogDensityUniform,d)};f.setMaterialAmbientColor=function(b,d){b.uniform3fv(this.materialAmbientColorUniform,d)};f.setMaterialDiffuseColor=function(b,d){b.uniform3fv(this.materialDiffuseColorUniform,d)};f.setMaterialSpecularColor=function(b,d){b.uniform3fv(this.materialSpecularColorUniform,d)};f.setMaterialShininess=function(b,d){b.uniform1f(this.materialShininessUniform, d)};f.setMaterialAlpha=function(b,d){b.uniform1f(this.materialAlphaUniform,d)};f.setLightDiffuseColor=function(b,d){b.uniform3fv(this.lightDiffuseColorUniform,d)};f.setLightSpecularColor=function(b,d){b.uniform3fv(this.lightSpecularColorUniform,d)};f.setLightDirection=function(b,d){b.uniform3fv(this.lightDirectionUniform,d)};f.setLightModelViewMatrix=function(b,d){b.uniformMatrix4fv(this.lightModelViewMatrixUniform,!1,d)};f.setLightProjectionMatrix=function(b,d){b.uniformMatrix4fv(this.lightProjectionMatrixUniform, !1,d)};f.setShadowTextureSize=function(b,d,e){b.uniform2f(this.shadowTextureSizeUniform,d,e)};f.setShadowIntensity=function(b,d){b.uniform1f(this.shadowIntensityUniform,d)};f.setGammaCorrection=function(b,d){b.uniform1f(this.gammaCorrectionUniform,1/d)};f.setPointSize=function(b,d){b.uniform1f(this.pointSizeUniform,d)}})(ChemDoodle.structures.d3,ChemDoodle.lib.mat3,ChemDoodle.lib.mat4,document); (function(f,q,n,r,e){f.PickShader=function(){};let k=f._Shader.prototype;f=f.PickShader.prototype=new f._Shader;f.initUniformLocations=function(b){k.initUniformLocations.call(this,b);this.materialDiffuseColorUniform=b.getUniformLocation(this.gProgram,"u_material_diffuse_color")};f.loadDefaultVertexShader=function(b){return this.getShaderFromStr(b,b.VERTEX_SHADER,"precision mediump float;attribute vec3 a_vertex_position;uniform mat4 u_model_view_matrix;uniform mat4 u_projection_matrix;void main() {gl_Position \x3d u_projection_matrix * u_model_view_matrix * vec4(a_vertex_position, 1.);gl_Position /\x3d gl_Position.w;}")}; f.loadDefaultFragmentShader=function(b){let d=[b.depthTextureExt?"#define CWC_DEPTH_TEX\n":"","precision mediump float;uniform vec3 u_material_diffuse_color;void main(void) {gl_FragColor \x3d vec4(u_material_diffuse_color, 1.);}"].join("");return this.getShaderFromStr(b,b.FRAGMENT_SHADER,d)};f.setMaterialDiffuseColor=function(b,d){b.uniform3fv(this.materialDiffuseColorUniform,d)}})(ChemDoodle.structures.d3,ChemDoodle.lib.mat3,ChemDoodle.lib.mat4,document); (function(f,q,n,r,e){f.PositionShader=function(){};f=f.PositionShader.prototype=new f._Shader;f.loadDefaultVertexShader=function(e){return this.getShaderFromStr(e,e.VERTEX_SHADER,"precision mediump float;attribute vec3 a_vertex_position;uniform mat4 u_model_view_matrix;uniform mat4 u_projection_matrix;varying vec4 v_position;void main() {vec4 viewPos \x3d u_model_view_matrix * vec4(a_vertex_position, 1.);gl_Position \x3d u_projection_matrix * viewPos;v_position \x3d viewPos / viewPos.w;}")};f.loadDefaultFragmentShader= function(e){return this.getShaderFromStr(e,e.FRAGMENT_SHADER,"precision mediump float;varying vec4 v_position;void main(void) {gl_FragColor \x3d v_position;}")}})(ChemDoodle.structures.d3,ChemDoodle.lib.mat3,ChemDoodle.lib.mat4,document); (function(f,q,n,r,e){f.QuadShader=function(){};f=f.QuadShader.prototype=new f._Shader;f.loadDefaultVertexShader=function(e){return this.getShaderFromStr(e,e.VERTEX_SHADER,"precision mediump float;attribute vec3 a_vertex_position;varying vec2 v_texcoord;void main() {gl_Position \x3d vec4(a_vertex_position, 1.);v_texcoord \x3d a_vertex_position.xy * .5 + .5;}")};f.loadDefaultFragmentShader=function(e){return this.getShaderFromStr(e,e.FRAGMENT_SHADER,"precision mediump float;uniform sampler2D u_image;varying vec2 v_texcoord;void main() {gl_FragColor \x3d texture2D(u_image, v_texcoord);}")}})(ChemDoodle.structures.d3, ChemDoodle.lib.mat3,ChemDoodle.lib.mat4,document); (function(f,q,n,r,e,k,b){function d(a,b,d,e,h,n){d=a[0]*n+d-n;e=a[1]*n+e-n;a=a[2]*n+h-n;h=-1;for(let g=0,f=b.length;gk.abs(n.x-d)&&.001>k.abs(n.y-e)&&.001>k.abs(n.z-a)){h=g;break}-1==h&&(h=b.length,b.push(new f.Atom("C",d,e,a)));return h}let h=function(a,b,d){this.i1=a;this.i2=b;this.i3=d};q._Surface=function(){};q=q._Surface.prototype=new q._Mesh;q.generate=function(a,b,d,e,f,h,k,n){a=[];b=f[4]-e;for(d=0;dy.length)w.x=q.x,w.y=q.y,w.z=q.z;else{c=1;5>y.length&&(c=.5);for(let a=0,b=y.length;ad[a].atoms.length)e=d[a];d=!1;for(let a=0,f=this.rings.length;ab.x;)b.x++; for(;1<=b.y;)b.y--;for(;0>b.y;)b.y++;for(;1<=b.z;)b.z--;for(;0>b.z;)b.z++}let f=[];for(let a=0,b=e.length;ac.atoms[a].distance3D(d)){b=!0;break}if(!b){for(let a=0,c=f.length;af[a].distance3D(d)){b=!0;break}b||f.push(d)}}c.atoms=c.atoms.concat(f)}let R=[];for(let a=0;ag&&-4=h.start&&e<=h.end){f?a.helix=!0:a.sheet=!0;e===h.end&&(a.arrow=!0);break}}}q.PDBInterpreter=function(){};b=q.PDBInterpreter.prototype=new q._Interpreter;b.calculateRibbonDistances=!1;b.deduceResidueBonds=!1;b.read=function(a,b){let g=new n.Molecule;g.chains=[];if(!a)return g;var h=a.split("\n");b||(b=1);var m=[];let q=[];let u=[];a=[];let w=[];for(let f=0,l=h.length;fp;p++){var A=new n.Residue(-1);A.cp1=y;A.cp2=y;u.push(A)}u[u.length-1].resSeq!==c&&(p=new n.Residue(c),p.name=e(z.substring(17,20)),3===p.name.length?p.name=p.name.substring(0,1)+p.name.substring(1).toLowerCase():2===p.name.length&&"D"===p.name.charAt(0)&&(p.name=p.name.substring(1)),u.push(p),A=z.substring(21,22),d(p,m,A,c,!0),d(p,q,A,c,!1));z=e(z.substring(12,16));c=u[u.length- 1];if("CA"===z||"P"===z||"O5'"===z)c.cp1||(c.cp1=y);else if("N3"===z&&("C"===c.name||"U"===c.name||"T"===c.name)||"N1"===z&&("A"===c.name||"G"===c.name))c.cp3=y;else if("C2"===z)c.cp4=y;else if("C4"===z&&("C"===c.name||"U"===c.name||"T"===c.name)||"C6"===z&&("A"===c.name||"G"===c.name))c.cp5=y;else if("O"===z||"C6"===z&&("C"===c.name||"U"===c.name||"T"===c.name)||"N9"===z){if(!u[u.length-1].cp2){if("C6"===z||"N9"===z)var C=y;c.cp2=y}}else"C"===z&&(C=y)}}else if(z.startsWith("HETATM"))y=e(z.substring(76, 78)),0===y.length&&(y=e(z.substring(12,16))),1c;c++)if(p=e(z.substring(11+5*c,16+5*c)),0!==p.length&&(p=parseInt(p),w[p])){p= w[p];A=!1;for(let a=0,b=g.bonds.length;ae;e++)f=new n.Residue(-1),f.cp1=d,f.cp2=b[b.length-1].cp2,b.push(f);a.chains.push(b)}};b.calculateDistances=function(a,b){let d=[];for(let b=0,e=a.atoms.length;bD.length&&f.metadata.push(D),h=[B],D.startsWith("##TITLE\x3d"))f.title=D.substring(8).trim();else if(D.startsWith("##XUNITS\x3d"))f.xUnit= D.substring(9).trim(),this.convertHZ2PPM&&"HZ"===f.xUnit.toUpperCase()&&(f.xUnit="PPM",C=!0);else if(D.startsWith("##YUNITS\x3d"))f.yUnit=D.substring(9).trim();else{if(!D.startsWith("##XYPAIRS\x3d"))if(D.startsWith("##FIRSTX\x3d"))m=parseFloat(D.substring(9).trim());else if(D.startsWith("##LASTX\x3d"))v=parseFloat(D.substring(8).trim());else if(D.startsWith("##FIRSTY\x3d"))q=parseFloat(D.substring(9).trim());else if(D.startsWith("##NPOINTS\x3d"))u=parseFloat(D.substring(10).trim());else if(D.startsWith("##XFACTOR\x3d"))r= parseFloat(D.substring(10).trim());else if(D.startsWith("##YFACTOR\x3d"))z=parseFloat(D.substring(10).trim());else if(D.startsWith("##DELTAX\x3d"))parseFloat(D.substring(9).trim());else if(D.startsWith("##.OBSERVE FREQUENCY\x3d"))this.convertHZ2PPM&&(y=parseFloat(D.substring(21).trim()));else if(D.startsWith("##.SHIFT REFERENCE\x3d"))this.convertHZ2PPM&&(p=D.substring(19).split(","),c=parseInt(p[2].trim()),p=parseFloat(p[3].trim()));else if(D.startsWith("##XYDATA\x3d")){C||(y=1);B=A=!1;D=D.split("\n"); var E=(v-m)/(u-1),K=m-E,G=q,J=0;let a;for(let c=1,g=D.length;c]+/;f.assignments=[];for(let a=1,b=B.length;aa.p.distance(b)){for(let a=0,d=b.assigned.as.length;aMath.abs(this.spectrum.getTransformedX(b.x,this.styles,this.spectrum.memory.width, this.spectrum.memory.offsetLeft)-a.p.x)){for(let a=0,d=b.as.length;a=this.spectrum.memory.offsetLeft&&bd;d++)for(let a=0,h=e[d].length;ab;b++)this.center(),f._Canvas3D&&this instanceof f._Canvas3D||a.check(),this.afterLoadContent&&this.afterLoadContent(),this.repaint()};l.loadContent=function(a,b){this.molecules=a?a:[];this.shapes=b?b:[];for(a=0;2>a;a++){this.center();if(!(f._Canvas3D&&this instanceof f._Canvas3D))for(let a=0,b=this.molecules.length;athis.width-20||a>this.height-20)this.styles.scale=.85*b.min(this.width/d,this.height/a)};l.bondExists=function(a,b){for(let d=0,e=this.molecules.length;db-u.lastTouch?u.dbltap?(u.prehandleEvent(a),u.dbltap(a)):u.dblclick?(u.prehandleEvent(a),u.dblclick(a)):u.touchstart?(u.prehandleEvent(a),u.touchstart(a)):u.mousedown&&(u.prehandleEvent(a),u.mousedown(a)):u.touchstart?(u.prehandleEvent(a),u.touchstart(a),this.hold&&clearTimeout(this.hold),this.touchhold&&(this.hold=setTimeout(function(){u.touchhold(a)},1E3))):u.mousedown&&(u.prehandleEvent(a),u.mousedown(a)); u.lastTouch=b}),l.bind("touchmove",function(a){this.hold&&(clearTimeout(this.hold),this.hold=g);if(!q.supports_gesture()&&2===a.originalEvent.touches.length&&u.gesturechange){var d=a.originalEvent.touches,f=new e.Point(d[0].pageX,d[0].pageY),c=new e.Point(d[1].pageX,d[1].pageY);d=f.distance(c);f=f.angle(c);a.originalEvent.scale=d/u.implementedGestureDist;a.originalEvent.rotation=180*(u.implementedGestureAngle-f)/b.PI;u.prehandleEvent(a);u.gesturechange(a)}if(1(new Date).getTime()-u.lastTouch&&(u.tap?(u.prehandleEvent(a),u.tap(a)):u.click&&(u.prehandleEvent(a),u.click(a)))}),l.bind("gesturestart",function(a){u.gesturestart&&(u.prehandleEvent(a),u.gesturestart(a))}),l.bind("gesturechange",function(a){u.gesturechange&&(u.prehandleEvent(a),u.gesturechange(a))}),l.bind("gestureend",function(a){u.gestureend&& (u.prehandleEvent(a),u.gestureend(a))})):(l.click(function(a){switch(a.which){case 1:u.click&&(u.prehandleEvent(a),u.click(a));break;case 2:u.middleclick&&(u.prehandleEvent(a),u.middleclick(a));break;case 3:u.rightclick&&(u.prehandleEvent(a),u.rightclick(a))}}),l.dblclick(function(a){u.dblclick&&(u.prehandleEvent(a),u.dblclick(a))}),l.mousedown(function(a){switch(a.which){case 1:r.CANVAS_DRAGGING=u;u.mousedown&&(u.prehandleEvent(a),u.mousedown(a));break;case 2:u.middlemousedown&&(u.prehandleEvent(a), u.middlemousedown(a));break;case 3:u.rightmousedown&&(u.prehandleEvent(a),u.rightmousedown(a))}}),l.mousemove(function(a){!r.CANVAS_DRAGGING&&u.mousemove&&(u.prehandleEvent(a),u.mousemove(a))}),l.mouseout(function(a){r.CANVAS_OVER=g;u.mouseout&&(u.prehandleEvent(a),u.mouseout(a))}),l.mouseover(function(a){r.CANVAS_OVER=u;u.mouseover&&(u.prehandleEvent(a),u.mouseover(a))}),l.mouseup(function(a){switch(a.which){case 1:u.mouseup&&(u.prehandleEvent(a),u.mouseup(a));break;case 2:u.middlemouseup&&(u.prehandleEvent(a), u.middlemouseup(a));break;case 3:u.rightmouseup&&(u.prehandleEvent(a),u.rightmouseup(a))}}),l.mousewheel(function(a,b){u.mousewheel&&(u.prehandleEvent(a),u.mousewheel(a,b))}));this.subCreate&&this.subCreate()};l.prehandleEvent=function(a){a.originalEvent.changedTouches&&(a.pageX=a.originalEvent.changedTouches[0].pageX,a.pageY=a.originalEvent.changedTouches[0].pageY);this.doEventDefault||(a.preventDefault(),a.returnValue=!1);a.offset=k("#"+this.id).offset();a.p=new e.Point(a.pageX-a.offset.left,a.pageY- a.offset.top)}})(ChemDoodle,ChemDoodle.featureDetection,ChemDoodle.math,ChemDoodle.monitor,ChemDoodle.structures,ChemDoodle.lib.jQuery,Math,document,window,navigator.userAgent); (function(f,q,n){f._AnimatorCanvas=function(f,e,k){f&&this.create(f,e,k)};f=f._AnimatorCanvas.prototype=new f._Canvas;f.timeout=33;f.startAnimation=function(){this.stopAnimation();this.lastTime=(new Date).getTime();let f=this;this.nextFrame&&(this.handle=q.requestInterval(function(){let e=(new Date).getTime();f.nextFrame(e-f.lastTime);f.repaint();f.lastTime=e},this.timeout))};f.stopAnimation=function(){this.handle&&(q.clearRequestInterval(this.handle),this.handle=n)};f.isRunning=function(){return this.handle!== n}})(ChemDoodle,ChemDoodle.animations); (function(f,q,n){f.FileCanvas=function(f,e,k,b){f&&this.create(f,e,k);q.writeln('\x3cbr\x3e\x3cform name\x3d"FileForm" enctype\x3d"multipart/form-data" method\x3d"POST" action\x3d"'+b+'" target\x3d"HiddenFileFrame"\x3e\x3cinput type\x3d"file" name\x3d"f" /\x3e\x3cinput type\x3d"submit" name\x3d"submitbutton" value\x3d"Show File" /\x3e\x3c/form\x3e\x3ciframe id\x3d"HFF-'+f+'" name\x3d"HiddenFileFrame" height\x3d"0" width\x3d"0" style\x3d"display:none;" onLoad\x3d"GetMolFromFrame(\'HFF-'+f+"', "+f+ ')"\x3e\x3c/iframe\x3e');this.emptyMessage="Click below to load file";this.repaint()};f.FileCanvas.prototype=new f._Canvas})(ChemDoodle,document); (function(f,q){f.HyperlinkCanvas=function(f,q,e,k,b,d){f&&this.create(f,q,e);this.urlOrFunction=k;this.color=b?b:"blue";this.size=d?d:2};f=f.HyperlinkCanvas.prototype=new f._Canvas;f.openInNewWindow=!0;f.hoverImage=q;f.drawChildExtras=function(f){this.e&&(this.hoverImage?f.drawImage(this.hoverImage,0,0):(f.strokeStyle=this.color,f.lineWidth=2*this.size,f.strokeRect(0,0,this.width,this.height)))};f.setHoverImage=function(f){this.hoverImage=new Image;this.hoverImage.src=f};f.click=function(f){this.e= q;this.repaint();this.urlOrFunction instanceof Function?this.urlOrFunction():this.openInNewWindow?window.open(this.urlOrFunction):location.href=this.urlOrFunction};f.mouseout=function(f){this.e=q;this.repaint()};f.mouseover=function(f){this.e=f;this.repaint()}})(ChemDoodle); (function(f,q,n,r,e){f.MolGrabberCanvas=function(e,b,d){e&&this.create(e,b,d);b=[];b.push('\x3cbr\x3e\x3cinput type\x3d"text" id\x3d"');b.push(e);b.push('_query" size\x3d"32" value\x3d"" /\x3e');b.push(this.getInputFields());r.getElementById(e);n("#"+e).after(b.join(""));let f=this;n("#"+e+"_submit").click(function(){f.search()});n("#"+e+"_query").keypress(function(a){13===a.which&&f.search()});this.emptyMessage="Enter search term below";this.repaint()};f=f.MolGrabberCanvas.prototype=new f._Canvas; f.setSearchTerm=function(e){n("#"+this.id+"_query").val(e);this.search()};f.getInputFields=function(){let e=[];e.push("\x3cbr\x3e\x3cnobr\x3e");e.push('\x3cselect id\x3d"');e.push(this.id);e.push('_select"\x3e');e.push('\x3coption value\x3d"chemexper"\x3eChemExper');e.push('\x3coption value\x3d"chemspider"\x3eChemSpider');e.push('\x3coption value\x3d"pubchem" selected\x3ePubChem');e.push("\x3c/select\x3e");e.push('\x3cbutton type\x3d"button" id\x3d"');e.push(this.id);e.push('_submit"\x3eShow Molecule\x3c/button\x3e'); e.push("\x3c/nobr\x3e");return e.join("")};f.search=function(){this.emptyMessage="Searching...";this.clear();let e=this;q.getMoleculeFromDatabase(n("#"+this.id+"_query").val(),{database:n("#"+this.id+"_select").val()},function(b){e.loadMolecule(b)})}})(ChemDoodle,ChemDoodle.iChemLabs,ChemDoodle.lib.jQuery,document); (function(f,q,n,r){let e=[],k=[1,0,0],b=[0,1,0],d=[0,0,1];f.RotatorCanvas=function(b,a,d,e){b&&this.create(b,a,d);this.rotate3D=e};f=f.RotatorCanvas.prototype=new f._AnimatorCanvas;q=q.PI/15;f.xIncrement=q;f.yIncrement=q;f.zIncrement=q;f.nextFrame=function(f){if(0===this.molecules.length&&0===this.shapes.length)this.stopAnimation();else if(f/=1E3,this.rotate3D){n.identity(e);n.rotate(e,this.xIncrement*f,k);n.rotate(e,this.yIncrement*f,b);n.rotate(e,this.zIncrement*f,d);for(let b=0,d=this.molecules.length;b< d;b++){f=this.molecules[b];for(let b=0,d=f.atoms.length;bthis.frames.length-1&&(this.curIndex=0);this.alpha=1;let e=this.frames[this.curIndex];this.loadContent(e.mols,e.shapes);this.phase=1;let f=this,b=1;this.innerHandle=setInterval(function(){f.alpha=(15-b)/15;f.repaint();15===b&&f.breakInnerHandle();b++},33)}else 1=== this.phase&&(this.alpha=0,this.repaint())};f.addFrame=function(e,f){0===this.frames.length&&this.loadContent(e,f);this.frames.push({mols:e,shapes:f})}})(ChemDoodle,ChemDoodle.animations,ChemDoodle.math); (function(f,q,n,r,e,k){f.TransformCanvas=function(b,d,e,a){b&&this.create(b,d,e);this.rotate3D=a};f=f.TransformCanvas.prototype=new f._Canvas;f.lastPoint=k;f.rotationMultMod=1.3;f.lastPinchScale=1;f.lastGestureRotate=0;f.mousedown=function(b){this.lastPoint=b.p};f.dblclick=function(b){this.center();this.repaint()};f.drag=function(b){if(!this.lastPoint.multi){if(q.ALT){var d=new n.Point(b.p.x,b.p.y);d.sub(this.lastPoint);for(let a=0,b=this.molecules.length;athis.styles.scale&&(this.styles.scale=.01);this.repaint()};f.multitouchmove=function(b,d){if(2===d)if(this.lastPoint.multi){d=new n.Point(b.p.x,b.p.y);d.sub(this.lastPoint);for(let a=0,b=this.molecules.length;athis.styles.scale&&(this.styles.scale=.01),this.lastPinchScale=b.originalEvent.scale);if(0!==this.lastGestureRotate-b.originalEvent.rotation){let d=(this.lastGestureRotate-b.originalEvent.rotation)/180*r.PI,e=new n.Point(this.width/2,this.height/2);for(let a=0,b=this.molecules.length;a< b;a++){let b=this.molecules[a];for(let a=0,f=b.atoms.length;ab%10?e.lineTo(b,n.round(this.height/2)): e.moveTo(b,n.round(this.height/2));e.stroke()}};e.mousewheel=function(e,b){this.styles.scale-=b/10;.01>this.styles.scale&&(this.styles.scale=.01);this.repaint()};e.dblclick=function(e){this.spectrum.setup();this.styles.scale=1;this.repaint()};e.multitouchmove=function(e,b){2===b&&(this.dragRange&&this.dragRange.multi?(this.spectrum.translate(e.p.x-this.dragRange.x,this.width),this.dragRange.x=e.p.x,this.dragRange.y=e.p.x,this.repaint()):(this.dragRange=new f.structures.Point(e.p.x,e.p.x),this.dragRange.multi= !0))};e.gesturechange=function(e){this.styles.scale*=e.originalEvent.scale/this.lastPinchScale;.01>this.styles.scale&&(this.styles.scale=.01);this.lastPinchScale=e.originalEvent.scale;this.repaint()};e.gestureend=function(e){this.lastPinchScale=1}})(ChemDoodle,ChemDoodle.monitor,Math); (function(f,q,n,r){f.SeekerCanvas=function(e,b,d,f){e&&this.create(e,b,d);this.seekType=f};let e=f.SeekerCanvas.prototype=new f._SpectrumCanvas;e.superRepaint=e.innerRepaint;e.innerRepaint=function(e){this.superRepaint(e);if(this.spectrum&&0this.width-2&&(h-=6+a);b=b.y;0>b-this.styles.text_font_size-2&&(b+=this.styles.text_font_size);e.fillRect(h,b-this.styles.text_font_size,a,this.styles.text_font_size);e.fillStyle="black";e.fillText(d,h,b)}};e.mouseout=function(e){this.p=r;this.repaint()};e.mousemove=function(e){this.p= {x:e.p.x-2,y:e.p.y-3};this.repaint()};e.touchstart=function(e){this.mousemove(e)};e.touchmove=function(e){this.mousemove(e)};e.touchend=function(e){this.mouseout(e)};f.SeekerCanvas.SEEK_POINTER="pointer";f.SeekerCanvas.SEEK_PLOT="plot";f.SeekerCanvas.SEEK_PEAK="peak"})(ChemDoodle,ChemDoodle.extensions,Math); (function(f,q,n,r,e,k,b,d,h,a,g,l,v,m){f._Canvas3D=function(a,b,d){a&&this.create(a,b,d)};a=f._Canvas3D.prototype=new f._Canvas;let x=f._Canvas.prototype;a.rotationMatrix=m;a.lastPoint=m;a.emptyMessage="WebGL is Unavailable!";a.lastPinchScale=1;a.lastGestureRotate=0;a.afterLoadContent=function(){var a=new n.Bounds;for(let b=0,c=this.molecules.length;bb.PI/2&&(d[a].guidePointsSmall.reverse(),d[a].guidePointsLarge.reverse(),g.scale(d[a].D,-1));for(let a=2,b=d.length-3;athis.frameNumber&&(this.frameNumber=1,this.reverse=!1)):(this.frameNumber++,this.frameNumber>=this.frames.length&&(2===this.playMode?(this.frameNumber-=2,this.reverse=!0):(this.frameNumber=0,0===this.playMode&&this.stopAnimation())))};n.center=function(){var f=new q.Atom,e=this.frames[0];for(let k=0,b=e.mols.length;k a.atomicNumber||71a.atomicNumber||103=a.atomicNumber&&(this.cells.push(new k(a,b,d,this.cellDimension)),b+=this.cellDimension,e++)}d+=2*this.cellDimension;b=3*this.cellDimension+this.padding;for(e=57;104>e;e++)if(a=f.ELEMENT[f.SYMBOLS[e]],90===a.atomicNumber&&(d+=this.cellDimension,b=3*this.cellDimension+this.padding),58<=a.atomicNumber&&71>=a.atomicNumber||90<=a.atomicNumber&&103>=a.atomicNumber)this.cells.push(new k(a,b,d,this.cellDimension)),b+=this.cellDimension}; r.drawCell=function(b,d,e){let a=b.createRadialGradient(e.x+e.dimension/3,e.y+e.dimension/3,1.5*e.dimension,e.x+e.dimension/3,e.y+e.dimension/3,e.dimension/10);a.addColorStop(0,"#000000");a.addColorStop(.7,e.element.jmolColor);a.addColorStop(1,"#FFFFFF");b.fillStyle=a;q.contextRoundRect(b,e.x,e.y,e.dimension,e.dimension,e.dimension/8);if(e===this.hovered||e===this.selected||e.selected)b.lineWidth=2,b.strokeStyle="#c10000",b.stroke(),b.fillStyle="white";b.fill();b.font=q.getFontString(d.text_font_size, d.text_font_families);b.fillStyle=d.text_color;b.textAlign="center";b.textBaseline="middle";b.fillText(e.element.symbol,e.x+e.dimension/2,e.y+e.dimension/2)};r.click=function(b){this.hovered&&(this.allowMultipleSelections?this.hovered.selected=!this.hovered.selected:this.selected=this.hovered,this.repaint())};r.touchstart=function(b){this.mousemove(b)};r.mousemove=function(b){let d=b.p.x;b=b.p.y;this.hovered=e;for(let e=0,a=this.cells.length;e