function xpathParse(F){if(xpathdebug){Log.write("XPath parse "+F);}xpathParseInit();var q=xpathCacheLookup(F);if(q){if(xpathdebug){Log.write(" ... cached");}return q;}if(F.match(/^(\$|@)?\w+$/i)){var j=makeSimpleExpr(F);xpathParseCache[F]=j;if(xpathdebug){Log.write(" ... simple");}return j;}if(F.match(/^\w+(\/\w+)*$/i)){var j=makeSimpleExpr2(F);xpathParseCache[F]=j;if(xpathdebug){Log.write(" ... simple 2");}return j;}var S=F;if(xpathdebug){Timer.start("XPath parse",S);}var H=[];var p=null;var l=null;var t=false;var D=0;var T=0;var I=0;while(!t){D++;F=F.replace(/^\s*/,"");l=p;p=null;var m=null;var G="";for(var R=0;R<xpathTokenRules.length;++R){var V=xpathTokenRules[R].re.exec(F);T++;if(V&&V.length>0&&V[0].length>G.length){m=xpathTokenRules[R];G=V[0];break;}}if(m&&(m==TOK_DIV||m==TOK_MOD||m==TOK_AND||m==TOK_OR)&&(!l||l.tag==TOK_AT||l.tag==TOK_DSLASH||l.tag==TOK_SLASH||l.tag==TOK_AXIS||l.tag==TOK_DOLLAR)){m=TOK_QNAME;}if(m){F=F.substr(G.length);if(xpathdebug){Log.write("token: "+G+" -- "+m.label);}p={tag:m,match:G,prec:m.prec?m.prec:0,expr:makeTokenExpr(G)};}else{if(xpathdebug){Log.write("DONE");}t=true;}while(xpathReduce(H,p)){I++;if(xpathdebug){Log.write("stack: "+stackToString(H));}}}if(xpathdebug){Log.write(stackToString(H));}if(H.length!=1){throw "XPath parse error "+S+":\n"+stackToString(H);}var V=H[0].expr;xpathParseCache[S]=V;if(xpathdebug){Timer.end("XPath parse",S);}if(xpathdebug){Log.write("XPath parse: "+D+" / "+T+" / "+I);}return V;}var xpathParseCache={};function xpathCacheLookup(q){return xpathParseCache[q];}function xpathReduce(D,q){var G=null;if(D.length>0){var T=D[D.length-1];var j=xpathRules[T.tag.key];if(j){for(var p=0;p<j.length;++p){var l=j[p];var t=xpathMatchStack(D,l[1]);if(t.length){G={tag:l[0],rule:l,match:t};G.prec=xpathGrammarPrecedence(G);break;}}}}var R;if(G&&(!q||G.prec>q.prec||(q.tag.left&&G.prec>=q.prec))){for(var p=0;p<G.match.matchlength;++p){D.pop();}if(xpathdebug){Log.write("reduce "+G.tag.label+" "+G.prec+" ahead "+(q?q.tag.label+" "+q.prec+(q.tag.left?" left":""):" none "));}var S=mapExpr(G.match,function(H){return H.expr;});G.expr=G.rule[3].apply(null,S);D.push(G);R=true;}else{if(q){if(xpathdebug){Log.write("shift "+q.tag.label+" "+q.prec+(q.tag.left?" left":"")+" over "+(G?G.tag.label+" "+G.prec:" none"));}D.push(q);}R=false;}return R;}function xpathMatchStack(j,D){var G=j.length;var l=D.length;var t,m;var T=[];T.matchlength=0;var R=0;for(t=l-1,m=G-1;t>=0&&m>=0;--t,m-=R){R=0;var q=[];if(D[t]==Q_MM){t-=1;T.push(q);while(m-R>=0&&j[m-R].tag==D[t]){q.push(j[m-R]);R+=1;T.matchlength+=1;}}else{if(D[t]==Q_01){t-=1;T.push(q);while(m-R>=0&&R<2&&j[m-R].tag==D[t]){q.push(j[m-R]);R+=1;T.matchlength+=1;}}else{if(D[t]==Q_1M){t-=1;T.push(q);if(j[m].tag==D[t]){while(m-R>=0&&j[m-R].tag==D[t]){q.push(j[m-R]);R+=1;T.matchlength+=1;}}else{return [];}}else{if(j[m].tag==D[t]){T.push(j[m]);R+=1;T.matchlength+=1;}else{return [];}}}}reverseInplace(q);q.expr=mapExpr(q,function(p){return p.expr;});}reverseInplace(T);if(t==-1){return T;}else{return [];}}function xpathTokenPrecedence(q){return q.prec||2;}function xpathGrammarPrecedence(T){var t=0;if(T.rule){if(T.rule.length>=3&&T.rule[2]>=0){t=T.rule[2];}else{for(var R=0;R<T.rule[1].length;++R){var G=xpathTokenPrecedence(T.rule[1][R]);t=Math.max(t,G);}}}else{if(T.tag){t=xpathTokenPrecedence(T.tag);}else{if(T.length){for(var q=0;q<T.length;++q){var G=xpathGrammarPrecedence(T[q]);t=Math.max(t,G);}}}}return t;}function stackToString(q){var p="";for(var t=0;t<q.length;++t){if(p){p+="\n";}p+=q[t].tag.label;}return p;}function ExprContext(R,q,t,p){this.node=R;this.position=q||0;this.nodelist=t||[R];this.variables={};this.parent=p||null;this.root=p?p.root:R.ownerDocument;}ExprContext.prototype.clone=function(t,q,p){return new ExprContext(t||this.node,typeof q!="undefined"?q:this.position,p||this.nodelist,this);};ExprContext.prototype.setVariable=function(q,p){this.variables[q]=p;};ExprContext.prototype.getVariable=function(q){if(typeof this.variables[q]!="undefined"){return this.variables[q];}else{if(this.parent){return this.parent.getVariable(q);}else{return null;}}};ExprContext.prototype.setNode=function(p,q){this.node=p;this.position=q;};function StringValue(q){this.value=q;this.type="string";}StringValue.prototype.stringValue=function(){return this.value;};StringValue.prototype.booleanValue=function(){return this.value.length>0;};StringValue.prototype.numberValue=function(){return this.value-0;};StringValue.prototype.nodeSetValue=function(){throw this+" "+Error().stack;};function BooleanValue(q){this.value=q;this.type="boolean";}BooleanValue.prototype.stringValue=function(){return ""+this.value;};BooleanValue.prototype.booleanValue=function(){return this.value;};BooleanValue.prototype.numberValue=function(){return this.value?1:0;};BooleanValue.prototype.nodeSetValue=function(){throw this+" "+Error().stack;};function NumberValue(q){this.value=q;this.type="number";}NumberValue.prototype.stringValue=function(){return ""+this.value;};NumberValue.prototype.booleanValue=function(){return !!this.value;};NumberValue.prototype.numberValue=function(){return this.value-0;};NumberValue.prototype.nodeSetValue=function(){throw this+" "+Error().stack;};function NodeSetValue(q){this.value=q;this.type="node-set";}NodeSetValue.prototype.stringValue=function(){if(this.value.length==0){return "";}else{return xmlValue(this.value[0]);}};NodeSetValue.prototype.booleanValue=function(){return this.value.length>0;};NodeSetValue.prototype.numberValue=function(){return this.stringValue()-0;};NodeSetValue.prototype.nodeSetValue=function(){return this.value;};function TokenExpr(q){this.value=q;}TokenExpr.prototype.evaluate=function(){return new StringValue(this.value);};function LocationExpr(){this.absolute=false;this.steps=[];}LocationExpr.prototype.appendStep=function(q){this.steps.push(q);};LocationExpr.prototype.prependStep=function(t){var q=this.steps;this.steps=[t];for(var p=0;p<q.length;++p){this.steps.push(q[p]);}};LocationExpr.prototype.evaluate=function(q){var t;if(this.absolute){t=q.root;}else{t=q.node;}var p=[];xPathStep(p,this.steps,0,t,q);return new NodeSetValue(p);};function xPathStep(q,G,p,T,D){var j=G[p];var R=D.clone(T);var l=j.evaluate(R).nodeSetValue();for(var t=0;t<l.length;++t){if(p==G.length-1){q.push(l[t]);}else{xPathStep(q,G,p+1,l[t],D);}}}function StepExpr(p,t,q){this.axis=p;this.nodetest=t;this.predicate=q||[];}StepExpr.prototype.appendPredicate=function(q){this.predicate.push(q);};StepExpr.prototype.evaluate=function(q){var t=q.node;var T=[];if(this.axis==xpathAxis.ANCESTOR_OR_SELF){T.push(t);for(var D=t.parentNode;D;D=t.parentNode){T.push(D);}}else{if(this.axis==xpathAxis.ANCESTOR){for(var D=t.parentNode;D;D=t.parentNode){T.push(D);}}else{if(this.axis==xpathAxis.ATTRIBUTE){copyArray(T,t.attributes);}else{if(this.axis==xpathAxis.CHILD){copyArray(T,t.childNodes);}else{if(this.axis==xpathAxis.DESCENDANT_OR_SELF){T.push(t);xpathCollectDescendants(T,t);}else{if(this.axis==xpathAxis.DESCENDANT){xpathCollectDescendants(T,t);}else{if(this.axis==xpathAxis.FOLLOWING){for(var D=t.parentNode;D;D=D.parentNode){for(var l=D.nextSibling;l;l=l.nextSibling){T.push(l);xpathCollectDescendants(T,l);}}}else{if(this.axis==xpathAxis.FOLLOWING_SIBLING){for(var D=t.nextSibling;D;D=t.nextSibling){T.push(D);}}else{if(this.axis==xpathAxis.NAMESPACE){alert("not implemented: axis namespace");}else{if(this.axis==xpathAxis.PARENT){if(t.parentNode){T.push(t.parentNode);}}else{if(this.axis==xpathAxis.PRECEDING){for(var D=t.parentNode;D;D=D.parentNode){for(var l=D.previousSibling;l;l=l.previousSibling){T.push(l);xpathCollectDescendantsReverse(T,l);}}}else{if(this.axis==xpathAxis.PRECEDING_SIBLING){for(var D=t.previousSibling;D;D=t.previousSibling){T.push(D);}}else{if(this.axis==xpathAxis.SELF){T.push(t);}else{throw "ERROR -- NO SUCH AXIS: "+this.axis;}}}}}}}}}}}}}var p=T;T=[];for(var R=0;R<p.length;++R){var D=p[R];if(this.nodetest.evaluate(q.clone(D,R,p)).booleanValue()){T.push(D);}}for(var R=0;R<this.predicate.length;++R){var p=T;T=[];for(var G=0;G<p.length;++G){var D=p[G];if(this.predicate[R].evaluate(q.clone(D,G,p)).booleanValue()){T.push(D);}}}return new NodeSetValue(T);};function NodeTestAny(){this.value=new BooleanValue(true);}NodeTestAny.prototype.evaluate=function(q){return this.value;};function NodeTestElement(){}NodeTestElement.prototype.evaluate=function(q){return new BooleanValue(q.node.nodeType==DOM_ELEMENT_NODE);};function NodeTestText(){}NodeTestText.prototype.evaluate=function(q){return new BooleanValue(q.node.nodeType==DOM_TEXT_NODE);};function NodeTestComment(){}NodeTestComment.prototype.evaluate=function(q){return new BooleanValue(q.node.nodeType==DOM_COMMENT_NODE);};function NodeTestPI(q){this.target=q;}NodeTestPI.prototype.evaluate=function(q){return new BooleanValue(q.node.nodeType==DOM_PROCESSING_INSTRUCTION_NODE&&(!this.target||q.node.nodeName==this.target));};function NodeTestNC(q){this.regex=new RegExp("^"+q+":");this.nsprefix=q;}NodeTestNC.prototype.evaluate=function(q){var p=q.node;return new BooleanValue(this.regex.match(p.nodeName));};function NodeTestName(q){this.name=q;}NodeTestName.prototype.evaluate=function(q){var p=q.node;return new BooleanValue(p.nodeName==this.name);};function PredicateExpr(q){this.expr=q;}PredicateExpr.prototype.evaluate=function(q){var p=this.expr.evaluate(q);if(p.type=="number"){return new BooleanValue(q.position==p.numberValue()-1);}else{return new BooleanValue(p.booleanValue());}};function FunctionCallExpr(q){this.name=q;this.args=[];}FunctionCallExpr.prototype.appendArg=function(q){this.args.push(q);};FunctionCallExpr.prototype.evaluate=function(q){var p=""+this.name.value;var t=this.xpathfunctions[p];if(t){return t.call(this,q);}else{Log.write("XPath NO SUCH FUNCTION "+p);return new BooleanValue(false);}};FunctionCallExpr.prototype.xpathfunctions={"last":function(q){assert(this.args.length==0);return new NumberValue(q.nodelist.length);},"position":function(q){assert(this.args.length==0);return new NumberValue(q.position+1);},"count":function(q){assert(this.args.length==1);var p=this.args[0].evaluate(q);return new NumberValue(p.nodeSetValue().length);},"id":function(j){assert(this.args.length==1);var R=this.args.evaluate(j);var G=[];var q;if(R.type=="node-set"){q=[];for(var t=0;t<R.length;++t){var l=xmlValue(R[t]).split(/\s+/);for(var D=0;D<l.length;++D){q.push(l[D]);}}}else{q=R.split(/\s+/);}var T=j.node.ownerDocument;for(var t=0;t<q.length;++t){var p=T.getElementById(q[t]);if(p){G.push(p);}}return new NodeSetValue(G);},"local-name":function(q){alert("not implmented yet: XPath function local-name()");},"namespace-uri":function(q){alert("not implmented yet: XPath function namespace-uri()");},"name":function(q){assert(this.args.length==1||this.args.length==0);var p;if(this.args.length==0){p=[q.node];}else{p=this.args[0].evaluate(q).nodeSetValue();}if(p.length==0){return new StringValue("");}else{return new StringValue(p[0].nodeName);}},"string":function(q){assert(this.args.length==1||this.args.length==0);if(this.args.length==0){return new StringValue(new NodeSetValue([q.node]).stringValue());}else{return new StringValue(this.args[0].evaluate(q).stringValue());}},"concat":function(q){var p="";for(var t=0;t<this.args.length;++t){p+=this.args[t].evaluate(q).stringValue();}return new StringValue(p);},"starts-with":function(q){assert(this.args.length==2);var t=this.args[0].evaluate(q).stringValue();var p=this.args[1].evaluate(q).stringValue();return new BooleanValue(t.indexOf(p)==0);},"contains":function(q){assert(this.args.length==2);var t=this.args[0].evaluate(q).stringValue();var p=this.args[1].evaluate(q).stringValue();return new BooleanValue(t.indexOf(p)!=-1);},"substring-before":function(q){assert(this.args.length==2);var G=this.args[0].evaluate(q).stringValue();var R=this.args[1].evaluate(q).stringValue();var t=G.indexOf(R);var p;if(t==-1){p="";}else{p=G.substr(0,t);}return new StringValue(p);},"substring-after":function(q){assert(this.args.length==2);var G=this.args[0].evaluate(q).stringValue();var R=this.args[1].evaluate(q).stringValue();var t=G.indexOf(R);var p;if(t==-1){p="";}else{p=G.substr(t+R.length);}return new StringValue(p);},"substring":function(q){assert(this.args.length==2||this.args.length==3);var T=this.args[0].evaluate(q).stringValue();var R=this.args[1].evaluate(q).numberValue();var t;if(this.args.length==2){var l=Math.max(0,Math.round(R)-1);t=T.substr(l);}else{var p=this.args[2].evaluate(q).numberValue();var D=Math.round(R)-1;var l=Math.max(0,D);var G=Math.round(p)-Math.max(0,-D);t=T.substr(l,G);}return new StringValue(t);},"string-length":function(q){var p;if(this.args.length>0){p=this.args[0].evaluate(q).stringValue();}else{p=new NodeSetValue([q.node]).stringValue();}return new NumberValue(p.length);},"normalize-space":function(q){var p;if(this.args.length>0){p=this.args[0].evaluate(q).stringValue();}else{p=new NodeSetValue([q.node]).stringValue();}p=p.replace(/^\s*/,"").replace(/\s*$/,"").replace(/\s+/g," ");return new StringValue(p);},"translate":function(q){assert(this.args.length==3);var G=this.args[0].evaluate(q).stringValue();var R=this.args[1].evaluate(q).stringValue();var p=this.args[2].evaluate(q).stringValue();for(var t=0;t<R.length;++t){G=G.replace(new RegExp(R.charAt(t),"g"),p.charAt(t));}return new StringValue(G);},"boolean":function(q){assert(this.args.length==1);return new BooleanValue(this.args[0].evaluate(q).booleanValue());},"not":function(q){assert(this.args.length==1);var p=!this.args[0].evaluate(q).booleanValue();return new BooleanValue(p);},"true":function(q){assert(this.args.length==0);return new BooleanValue(true);},"false":function(q){assert(this.args.length==0);return new BooleanValue(false);},"lang":function(q){assert(this.args.length==1);var t=this.args[0].evaluate(q).stringValue();var G;var R=q.node;while(R&&R!=R.parentNode){G=R.getAttribute("xml:lang");if(G){break;}R=R.parentNode;}if(!G){return new BooleanValue(false);}else{var p=new RegExp("^"+t+"$","i");return new BooleanValue(G.match(p)||G.replace(/_.*$/,"").match(p));}},"number":function(q){assert(this.args.length==1||this.args.length==0);if(this.args.length==1){return new NumberValue(this.args[0].evaluate(q).numberValue());}else{return new NumberValue(new NodeSetValue([q.node]).numberValue());}},"sum":function(q){assert(this.args.length==1);var R=this.args[0].evaluate(q).nodeSetValue();var t=0;for(var p=0;p<R.length;++p){t+=xmlValue(R[p])-0;}return new NumberValue(t);},"floor":function(q){assert(this.args.length==1);var p=this.args[0].evaluate(q).numberValue();return new NumberValue(Math.floor(p));},"ceiling":function(q){assert(this.args.length==1);var p=this.args[0].evaluate(q).numberValue();return new NumberValue(Math.ceil(p));},"round":function(q){assert(this.args.length==1);var p=this.args[0].evaluate(q).numberValue();return new NumberValue(Math.round(p));},"ext-join":function(q){assert(this.args.length==2);var p=this.args[0].evaluate(q).nodeSetValue();var G=this.args[1].evaluate(q).stringValue();var t="";for(var R=0;R<p.length;++R){if(t){t+=G;}t+=xmlValue(p[R]);}return new StringValue(t);},"ext-if":function(q){assert(this.args.length==3);if(this.args[0].evaluate(q).booleanValue()){return this.args[1].evaluate(q);}else{return this.args[2].evaluate(q);}},"ext-sprintf":function(q){assert(this.args.length>=1);var p=[];for(var t=0;t<this.args.length;++t){p.push(this.args[t].evaluate(q).stringValue());}return new StringValue(sprintf.apply(null,p));},"ext-cardinal":function(q){assert(this.args.length>=1);var R=this.args[0].evaluate(q).numberValue();var p=[];for(var t=0;t<R;++t){p.push(q.node);}return new NodeSetValue(p);}};function UnionExpr(p,q){this.expr1=p;this.expr2=q;}UnionExpr.prototype.evaluate=function(t){var p=this.expr1.evaluate(t).nodeSetValue();var q=this.expr2.evaluate(t).nodeSetValue();var T=p.length;for(var R=0;R<q.length;++R){for(var G=0;G<T;++G){if(p[G]==q[R]){G=T;}}p.push(q[R]);}return new NodeSetValue(q);};function PathExpr(p,q){this.filter=p;this.rel=q;}PathExpr.prototype.evaluate=function(p){var R=this.filter.evaluate(p).nodeSetValue();var q=[];for(var G=0;G<R.length;++G){var t=this.rel.evaluate(p.clone(R[G],G,R)).nodeSetValue();for(var T=0;T<t.length;++T){q.push(t[T]);}}return new NodeSetValue(q);};function FilterExpr(p,q){this.expr=p;this.predicate=q;}FilterExpr.prototype.evaluate=function(q){var t=this.expr.evaluate(q).nodeSetValue();for(var G=0;G<this.predicate.length;++G){var p=t;t=[];for(var R=0;R<p.length;++R){var T=p[R];if(this.predicate[G].evaluate(q.clone(T,R,p)).booleanValue()){t.push(T);}}}return new NodeSetValue(t);};function UnaryMinusExpr(q){this.expr=q;}UnaryMinusExpr.prototype.evaluate=function(q){return new NumberValue(-this.expr.evaluate(q).numberValue());};function BinaryExpr(p,t,q){this.expr1=p;this.expr2=q;this.op=t;}BinaryExpr.prototype.evaluate=function(q){var p;switch(this.op.value){case "or":p=new BooleanValue(this.expr1.evaluate(q).booleanValue()||this.expr2.evaluate(q).booleanValue());break;case "and":p=new BooleanValue(this.expr1.evaluate(q).booleanValue()&&this.expr2.evaluate(q).booleanValue());break;case "+":p=new NumberValue(this.expr1.evaluate(q).numberValue()+this.expr2.evaluate(q).numberValue());break;case "-":p=new NumberValue(this.expr1.evaluate(q).numberValue()-this.expr2.evaluate(q).numberValue());break;case "*":p=new NumberValue(this.expr1.evaluate(q).numberValue()*this.expr2.evaluate(q).numberValue());break;case "mod":p=new NumberValue(this.expr1.evaluate(q).numberValue()%this.expr2.evaluate(q).numberValue());break;case "div":p=new NumberValue(this.expr1.evaluate(q).numberValue()/this.expr2.evaluate(q).numberValue());break;case "=":p=this.compare(q,function(R,t){return R==t;});break;case "!=":p=this.compare(q,function(R,t){return R!=t;});break;case "<":p=this.compare(q,function(R,t){return R<t;});break;case "<=":p=this.compare(q,function(R,t){return R<=t;});break;case ">":p=this.compare(q,function(R,t){return R>t;});break;case ">=":p=this.compare(q,function(R,t){return R>=t;});break;default:alert("BinaryExpr.evaluate: "+this.op.value);}return p;};BinaryExpr.prototype.compare=function(H,D){var S=this.expr1.evaluate(H);var j=this.expr2.evaluate(H);var l;if(S.type=="node-set"&&j.type=="node-set"){var T=S.nodeSetValue();var G=j.nodeSetValue();l=false;for(var t=0;t<T.length;++t){for(var p=0;p<G.length;++p){if(D(xmlValue(T[t]),xmlValue(G[p]))){l=true;p=G.length;t=T.length;}}}}else{if(S.type=="node-set"||j.type=="node-set"){if(S.type=="number"){var F=S.numberValue();var q=j.nodeSetValue();l=false;for(var R=0;R<q.length;++R){var m=xmlValue(q[R])-0;if(D(F,m)){l=true;break;}}}else{if(j.type=="number"){var q=S.nodeSetValue();var F=j.numberValue();l=false;for(var R=0;R<q.length;++R){var m=xmlValue(q[R])-0;if(D(m,F)){l=true;break;}}}else{if(S.type=="string"){var F=S.stringValue();var q=j.nodeSetValue();l=false;for(var R=0;R<q.length;++R){var m=xmlValue(q[R]);if(D(F,m)){l=true;break;}}}else{if(j.type=="string"){var q=S.nodeSetValue();var F=j.stringValue();l=false;for(var R=0;R<q.length;++R){var m=xmlValue(q[R]);if(D(m,F)){l=true;break;}}}else{l=D(S.booleanValue(),j.booleanValue());}}}}}else{if(S.type=="boolean"||j.type=="boolean"){l=D(S.booleanValue(),j.booleanValue());}else{if(S.type=="number"||j.type=="number"){l=D(S.numberValue(),j.numberValue());}else{l=D(S.stringValue(),j.stringValue());}}}}return new BooleanValue(l);};function LiteralExpr(q){this.value=q;}LiteralExpr.prototype.evaluate=function(q){return new StringValue(this.value);};function NumberExpr(q){this.value=q;}NumberExpr.prototype.evaluate=function(q){return new NumberValue(this.value);};function VariableExpr(q){this.name=q;}VariableExpr.prototype.evaluate=function(q){return q.getVariable(this.name);};function makeTokenExpr(q){return new TokenExpr(q);}function passExpr(q){return q;}function makeLocationExpr1(p,q){q.absolute=true;return q;}function makeLocationExpr2(p,q){q.absolute=true;q.prependStep(makeAbbrevStep(p.value));return q;}function makeLocationExpr3(p){var q=new LocationExpr();q.appendStep(makeAbbrevStep("."));q.absolute=true;return q;}function makeLocationExpr4(p){var q=new LocationExpr();q.absolute=true;q.appendStep(makeAbbrevStep(p.value));return q;}function makeLocationExpr5(p){var q=new LocationExpr();q.appendStep(p);return q;}function makeLocationExpr6(q,p,t){q.appendStep(t);return q;}function makeLocationExpr7(q,p,t){q.appendStep(makeAbbrevStep(p.value));return q;}function makeStepExpr1(q){return makeAbbrevStep(q.value);}function makeStepExpr2(q){return makeAbbrevStep(q.value);}function makeStepExpr3(q,p,t){return new StepExpr(q.value,t);}function makeStepExpr4(q,p){return new StepExpr("attribute",p);}function makeStepExpr5(q){return new StepExpr("child",q);}function makeStepExpr6(p,q){p.appendPredicate(q);return p;}function makeAbbrevStep(q){switch(q){case "//":return new StepExpr("descendant-or-self",new NodeTestAny);case ".":return new StepExpr("self",new NodeTestAny);case "..":return new StepExpr("parent",new NodeTestAny);}}function makeNodeTestExpr1(q){return new NodeTestElement;}function makeNodeTestExpr2(q,p,t){return new NodeTestNC(q.value);}function makeNodeTestExpr3(q){return new NodeTestName(q.value);}function makeNodeTestExpr4(t,q){var p=t.value.replace(/\s*\($/,"");switch(p){case "node":return new NodeTestAny;case "text":return new NodeTestText;case "comment":return new NodeTestComment;case "processing-instruction":return new NodeTestPI;}}function makeNodeTestExpr5(R,t,q){var p=R.replace(/\s*\($/,"");if(p!="processing-instruction"){throw p+" "+Error().stack;}return new NodeTestPI(t.value);}function makePredicateExpr(t,p,q){return new PredicateExpr(p);}function makePrimaryExpr(t,p,q){return p;}function makeFunctionCallExpr1(p,t,q){return new FunctionCallExpr(p);}function makeFunctionCallExpr2(G,l,R,t,q){var p=new FunctionCallExpr(G);p.appendArg(R);for(var T=0;T<t.length;++T){p.appendArg(t[T]);}return p;}function makeArgumentExpr(q,p){return p;}function makeUnionExpr(t,q,p){return new UnionExpr(t,p);}function makePathExpr1(t,p,q){return new PathExpr(t,q);}function makePathExpr2(t,p,q){q.prependStep(makeAbbrevStep(p.value));return new PathExpr(t,q);}function makeFilterExpr(p,q){if(q.length>0){return new FilterExpr(p,q);}else{return p;}}function makeUnaryMinusExpr(q,p){return new UnaryMinusExpr(p);}function makeBinaryExpr(p,t,q){return new BinaryExpr(p,t,q);}function makeLiteralExpr(q){var p=q.value.substring(1,q.value.length-1);return new LiteralExpr(p);}function makeNumberExpr(q){return new NumberExpr(q.value);}function makeVariableReference(q,p){return new VariableExpr(p.value);}function makeSimpleExpr(t){if(t.charAt(0)=="$"){return new VariableExpr(t.substr(1));}else{if(t.charAt(0)=="@"){var p=new NodeTestName(t.substr(1));var q=new StepExpr("attribute",p);var R=new LocationExpr();R.appendStep(q);return R;}else{if(t.match(/^[0-9]+$/)){return new NumberExpr(t);}else{var p=new NodeTestName(t);var q=new StepExpr("child",p);var R=new LocationExpr();R.appendStep(q);return R;}}}}function makeSimpleExpr2(G){var t=G.split("/");var T=new LocationExpr();for(var R=0;R<t.length;R++){var p=new NodeTestName(t[R]);var q=new StepExpr("child",p);T.appendStep(q);}return T;}var xpathAxis={ANCESTOR_OR_SELF:"ancestor-or-self",ANCESTOR:"ancestor",ATTRIBUTE:"attribute",CHILD:"child",DESCENDANT_OR_SELF:"descendant-or-self",DESCENDANT:"descendant",FOLLOWING_SIBLING:"following-sibling",FOLLOWING:"following",NAMESPACE:"namespace",PARENT:"parent",PRECEDING_SIBLING:"preceding-sibling",PRECEDING:"preceding",SELF:"self"};var xpathAxesRe=[xpathAxis.ANCESTOR_OR_SELF,xpathAxis.ANCESTOR,xpathAxis.ATTRIBUTE,xpathAxis.CHILD,xpathAxis.DESCENDANT_OR_SELF,xpathAxis.DESCENDANT,xpathAxis.FOLLOWING_SIBLING,xpathAxis.FOLLOWING,xpathAxis.NAMESPACE,xpathAxis.PARENT,xpathAxis.PRECEDING_SIBLING,xpathAxis.PRECEDING,xpathAxis.SELF].join("|");var TOK_PIPE={label:"|",prec:17,re:new RegExp("^\\|")};var TOK_DSLASH={label:"//",prec:19,re:new RegExp("^//")};var TOK_SLASH={label:"/",prec:30,re:new RegExp("^/")};var TOK_AXIS={label:"::",prec:20,re:new RegExp("^::")};var TOK_COLON={label:":",prec:1000,re:new RegExp("^:")};var TOK_AXISNAME={label:"[axis]",re:new RegExp("^("+xpathAxesRe+")")};var TOK_PARENO={label:"(",prec:34,re:new RegExp("^\\(")};var TOK_PARENC={label:")",re:new RegExp("^\\)")};var TOK_DDOT={label:"..",prec:34,re:new RegExp("^\\.\\.")};var TOK_DOT={label:".",prec:34,re:new RegExp("^\\.")};var TOK_AT={label:"@",prec:34,re:new RegExp("^@")};var TOK_COMMA={label:",",re:new RegExp("^,")};var TOK_OR={label:"or",prec:10,re:new RegExp("^or\\b")};var TOK_AND={label:"and",prec:11,re:new RegExp("^and\\b")};var TOK_EQ={label:"=",prec:12,re:new RegExp("^=")};var TOK_NEQ={label:"!=",prec:12,re:new RegExp("^!=")};var TOK_GE={label:">=",prec:13,re:new RegExp("^>=")};var TOK_GT={label:">",prec:13,re:new RegExp("^>")};var TOK_LE={label:"<=",prec:13,re:new RegExp("^<=")};var TOK_LT={label:"<",prec:13,re:new RegExp("^<")};var TOK_PLUS={label:"+",prec:14,re:new RegExp("^\\+"),left:true};var TOK_MINUS={label:"-",prec:14,re:new RegExp("^\\-"),left:true};var TOK_DIV={label:"div",prec:15,re:new RegExp("^div\\b"),left:true};var TOK_MOD={label:"mod",prec:15,re:new RegExp("^mod\\b"),left:true};var TOK_BRACKO={label:"[",prec:32,re:new RegExp("^\\[")};var TOK_BRACKC={label:"]",re:new RegExp("^\\]")};var TOK_DOLLAR={label:"$",re:new RegExp("^\\$")};var TOK_NCNAME={label:"[ncname]",re:new RegExp("^[a-z][-\\w]*","i")};var TOK_ASTERISK={label:"*",prec:15,re:new RegExp("^\\*"),left:true};var TOK_LITERALQ={label:"[litq]",prec:20,re:new RegExp("^'[^\\']*'")};var TOK_LITERALQQ={label:"[litqq]",prec:20,re:new RegExp("^\"[^\\\"]*\"")};var TOK_NUMBER={label:"[number]",prec:35,re:new RegExp("^\\d+(\\.\\d*)?")};var TOK_QNAME={label:"[qname]",re:new RegExp("^([a-z][-\\w]*:)?[a-z][-\\w]*","i")};var TOK_NODEO={label:"[nodetest-start]",re:new RegExp("^(processing-instruction|comment|text|node)\\(")};var xpathTokenRules=[TOK_DSLASH,TOK_SLASH,TOK_DDOT,TOK_DOT,TOK_AXIS,TOK_COLON,TOK_AXISNAME,TOK_NODEO,TOK_PARENO,TOK_PARENC,TOK_BRACKO,TOK_BRACKC,TOK_AT,TOK_COMMA,TOK_OR,TOK_AND,TOK_NEQ,TOK_EQ,TOK_GE,TOK_GT,TOK_LE,TOK_LT,TOK_PLUS,TOK_MINUS,TOK_ASTERISK,TOK_PIPE,TOK_MOD,TOK_DIV,TOK_LITERALQ,TOK_LITERALQQ,TOK_NUMBER,TOK_QNAME,TOK_NCNAME,TOK_DOLLAR];var XPathLocationPath={label:"LocationPath"};var XPathRelativeLocationPath={label:"RelativeLocationPath"};var XPathAbsoluteLocationPath={label:"AbsoluteLocationPath"};var XPathStep={label:"Step"};var XPathNodeTest={label:"NodeTest"};var XPathPredicate={label:"Predicate"};var XPathLiteral={label:"Literal"};var XPathExpr={label:"Expr"};var XPathPrimaryExpr={label:"PrimaryExpr"};var XPathVariableReference={label:"Variablereference"};var XPathNumber={label:"Number"};var XPathFunctionCall={label:"FunctionCall"};var XPathArgumentRemainder={label:"ArgumentRemainder"};var XPathPathExpr={label:"PathExpr"};var XPathUnionExpr={label:"UnionExpr"};var XPathFilterExpr={label:"FilterExpr"};var XPathDigits={label:"Digits"};var xpathNonTerminals=[XPathLocationPath,XPathRelativeLocationPath,XPathAbsoluteLocationPath,XPathStep,XPathNodeTest,XPathPredicate,XPathLiteral,XPathExpr,XPathPrimaryExpr,XPathVariableReference,XPathNumber,XPathFunctionCall,XPathArgumentRemainder,XPathPathExpr,XPathUnionExpr,XPathFilterExpr,XPathDigits];var Q_01={label:"?"};var Q_MM={label:"*"};var Q_1M={label:"+"};var ASSOC_LEFT=true;var xpathGrammarRules=[[XPathLocationPath,[XPathRelativeLocationPath],18,passExpr],[XPathLocationPath,[XPathAbsoluteLocationPath],18,passExpr],[XPathAbsoluteLocationPath,[TOK_SLASH,XPathRelativeLocationPath],18,makeLocationExpr1],[XPathAbsoluteLocationPath,[TOK_DSLASH,XPathRelativeLocationPath],18,makeLocationExpr2],[XPathAbsoluteLocationPath,[TOK_SLASH],0,makeLocationExpr3],[XPathAbsoluteLocationPath,[TOK_DSLASH],0,makeLocationExpr4],[XPathRelativeLocationPath,[XPathStep],31,makeLocationExpr5],[XPathRelativeLocationPath,[XPathRelativeLocationPath,TOK_SLASH,XPathStep],31,makeLocationExpr6],[XPathRelativeLocationPath,[XPathRelativeLocationPath,TOK_DSLASH,XPathStep],31,makeLocationExpr7],[XPathStep,[TOK_DOT],33,makeStepExpr1],[XPathStep,[TOK_DDOT],33,makeStepExpr2],[XPathStep,[TOK_AXISNAME,TOK_AXIS,XPathNodeTest],33,makeStepExpr3],[XPathStep,[TOK_AT,XPathNodeTest],33,makeStepExpr4],[XPathStep,[XPathNodeTest],33,makeStepExpr5],[XPathStep,[XPathStep,XPathPredicate],33,makeStepExpr6],[XPathNodeTest,[TOK_ASTERISK],33,makeNodeTestExpr1],[XPathNodeTest,[TOK_NCNAME,TOK_COLON,TOK_ASTERISK],33,makeNodeTestExpr2],[XPathNodeTest,[TOK_QNAME],33,makeNodeTestExpr3],[XPathNodeTest,[TOK_NODEO,TOK_PARENC],33,makeNodeTestExpr4],[XPathNodeTest,[TOK_NODEO,XPathLiteral,TOK_PARENC],33,makeNodeTestExpr5],[XPathPredicate,[TOK_BRACKO,XPathExpr,TOK_BRACKC],33,makePredicateExpr],[XPathPrimaryExpr,[XPathVariableReference],33,passExpr],[XPathPrimaryExpr,[TOK_PARENO,XPathExpr,TOK_PARENC],33,makePrimaryExpr],[XPathPrimaryExpr,[XPathLiteral],30,passExpr],[XPathPrimaryExpr,[XPathNumber],30,passExpr],[XPathPrimaryExpr,[XPathFunctionCall],30,passExpr],[XPathFunctionCall,[TOK_QNAME,TOK_PARENO,TOK_PARENC],-1,makeFunctionCallExpr1],[XPathFunctionCall,[TOK_QNAME,TOK_PARENO,XPathExpr,XPathArgumentRemainder,Q_MM,TOK_PARENC],-1,makeFunctionCallExpr2],[XPathArgumentRemainder,[TOK_COMMA,XPathExpr],-1,makeArgumentExpr],[XPathUnionExpr,[XPathPathExpr],20,passExpr],[XPathUnionExpr,[XPathUnionExpr,TOK_PIPE,XPathPathExpr],20,makeUnionExpr],[XPathPathExpr,[XPathLocationPath],20,passExpr],[XPathPathExpr,[XPathFilterExpr],19,passExpr],[XPathPathExpr,[XPathFilterExpr,TOK_SLASH,XPathRelativeLocationPath],20,makePathExpr1],[XPathPathExpr,[XPathFilterExpr,TOK_DSLASH,XPathRelativeLocationPath],20,makePathExpr2],[XPathFilterExpr,[XPathPrimaryExpr,XPathPredicate,Q_MM],20,makeFilterExpr],[XPathExpr,[XPathPrimaryExpr],16,passExpr],[XPathExpr,[XPathUnionExpr],16,passExpr],[XPathExpr,[TOK_MINUS,XPathExpr],-1,makeUnaryMinusExpr],[XPathExpr,[XPathExpr,TOK_OR,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_AND,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_EQ,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_NEQ,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_LT,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_LE,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_GT,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_GE,XPathExpr],-1,makeBinaryExpr],[XPathExpr,[XPathExpr,TOK_PLUS,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_MINUS,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_ASTERISK,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_DIV,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathExpr,[XPathExpr,TOK_MOD,XPathExpr],-1,makeBinaryExpr,ASSOC_LEFT],[XPathLiteral,[TOK_LITERALQ],-1,makeLiteralExpr],[XPathLiteral,[TOK_LITERALQQ],-1,makeLiteralExpr],[XPathNumber,[TOK_NUMBER],-1,makeNumberExpr],[XPathVariableReference,[TOK_DOLLAR,TOK_QNAME],200,makeVariableReference]];var xpathRules=[];function xpathParseInit(){if(xpathRules.length){return ;}xpathGrammarRules.sort(function(j,D){var m=j[1].length;var S=D[1].length;if(m<S){return 1;}else{if(m>S){return -1;}else{return 0;}}});var q=1;for(var t=0;t<xpathNonTerminals.length;++t){xpathNonTerminals[t].key=q++;}for(t=0;t<xpathTokenRules.length;++t){xpathTokenRules[t].key=q++;}if(xpathdebug){Log.write("XPath parse INIT: "+q+" rules");}function G(S,D,j){if(!S[D]){S[D]=[];}S[D].push(j);}for(t=0;t<xpathGrammarRules.length;++t){var l=xpathGrammarRules[t];var T=l[1];for(var p=T.length-1;p>=0;--p){if(T[p]==Q_1M){G(xpathRules,T[p-1].key,l);break;}else{if(T[p]==Q_MM||T[p]==Q_01){G(xpathRules,T[p-1].key,l);--p;}else{G(xpathRules,T[p].key,l);break;}}}}if(xpathdebug){Log.write("XPath parse INIT: "+xpathRules.length+" rule bins");}var R=0;mapExec(xpathRules,function(D){if(D){R+=D.length;}});if(xpathdebug){Log.write("XPath parse INIT: "+(R/xpathRules.length)+" average bin size");}}function xpathCollectDescendants(p,q){for(var t=q.firstChild;t;t=t.nextSibling){p.push(t);arguments.callee(p,t);}}function xpathCollectDescendantsReverse(p,q){for(var t=q.lastChild;t;t=t.previousSibling){p.push(t);arguments.callee(p,t);}}function xpathDomEval(t,p){var R=xpathParse(t);var q=R.evaluate(new ExprContext(p));return q;}function xpathSort(D,T){if(T.length==0){return ;}var F=[];for(var l=0;l<D.nodelist.length;++l){var t=D.nodelist[l];var R={node:t,key:[]};var p=D.clone(t,0,[t]);for(var G=0;G<T.length;++G){var H=T[G];var m=H.expr.evaluate(p);var S;if(H.type=="text"){S=m.stringValue();}else{if(H.type=="number"){S=m.numberValue();}}R.key.push({value:S,order:H.order});}R.key.push({value:l,order:"ascending"});F.push(R);}F.sort(xpathSortByKey);var q=[];for(var l=0;l<F.length;++l){q.push(F[l].node);}D.nodelist=q;D.setNode(q[0],0);}function xpathSortByKey(R,t){for(var q=0;q<R.key.length;++q){var p=R.key[q].order=="descending"?-1:1;if(R.key[q].value>t.key[q].value){return +1*p;}else{if(R.key[q].value<t.key[q].value){return -1*p;}}}return 0;}function el(q){return document.getElementById(q);}function px(q){return q+"px";}function stringSplit(t,G){var p=t.indexOf(G);if(p==-1){return [t];}var R=[];R.push(t.substr(0,p));while(p!=-1){var q=t.indexOf(G,p+1);if(q!=-1){R.push(t.substr(p+1,q-p-1));}else{R.push(t.substr(p+1));}p=q;}return R;}function xmlValue(t){if(!t){return "";}var q="";if(t.nodeType==DOM_TEXT_NODE||t.nodeType==DOM_CDATA_SECTION_NODE||t.nodeType==DOM_ATTRIBUTE_NODE){q+=t.nodeValue;}else{if(t.nodeType==DOM_ELEMENT_NODE||t.nodeType==DOM_DOCUMENT_NODE||t.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){for(var p=0;p<t.childNodes.length;++p){q+=arguments.callee(t.childNodes[p]);}}}return q;}function xmlText(R){var p="";if(R.nodeType==DOM_TEXT_NODE){p+=xmlEscapeText(R.nodeValue);}else{if(R.nodeType==DOM_ELEMENT_NODE){p+="<"+R.nodeName;for(var t=0;t<R.attributes.length;++t){var q=R.attributes[t];if(q&&q.nodeName&&q.nodeValue){p+=" "+q.nodeName;p+="=\""+xmlEscapeAttr(q.nodeValue)+"\"";}}if(R.childNodes.length==0){p+="/>";}else{p+=">";for(var t=0;t<R.childNodes.length;++t){p+=arguments.callee(R.childNodes[t]);}p+="</"+R.nodeName+">";}}else{if(R.nodeType==DOM_DOCUMENT_NODE||R.nodeType==DOM_DOCUMENT_FRAGMENT_NODE){for(var t=0;t<R.childNodes.length;++t){p+=arguments.callee(R.childNodes[t]);}}}}return p;}function mapExec(t,p){for(var q=0;q<t.length;++q){p(t[q]);}}function mapExpr(R,t){var q=[];for(var p=0;p<R.length;++p){q.push(t(R[p]));}return q;}function reverseInplace(R){for(var q=0;q<R.length/2;++q){var t=R[q];var p=R.length-q-1;R[q]=R[p];R[p]=t;}}function copyArray(t,p){for(var q=0;q<p.length;++q){t.push(p[q]);}}function assert(q){if(!q){throw "assertion failed";}}var DOM_ELEMENT_NODE=1;var DOM_ATTRIBUTE_NODE=2;var DOM_TEXT_NODE=3;var DOM_CDATA_SECTION_NODE=4;var DOM_ENTITY_REFERENCE_NODE=5;var DOM_ENTITY_NODE=6;var DOM_PROCESSING_INSTRUCTION_NODE=7;var DOM_COMMENT_NODE=8;var DOM_DOCUMENT_NODE=9;var DOM_DOCUMENT_TYPE_NODE=10;var DOM_DOCUMENT_FRAGMENT_NODE=11;var DOM_NOTATION_NODE=12;var xpathdebug=false;var xsltdebug=false;function xmlEscapeText(q){return q.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");}function xmlEscapeAttr(q){return xmlEscapeText(q).replace(/\"/g,"&quot;");}function xmlEscapeTags(q){return q.replace(/</g,"&lt;").replace(/>/g,"&gt;");}var logging__=true;function Log(){}Log.lines=[];Log.write=function(q){if(logging__){this.lines.push(xmlEscapeText(q));this.show();}};Log.writeXML=function(p){if(logging__){var R=p.replace(/</g,"\n<");var t=xmlEscapeText(R);var q=t.replace(/\s*\n(\s|\n)*/g,"<br/>");this.lines.push(q);this.show();}};Log.writeRaw=function(q){if(logging__){this.lines.push(q);this.show();}};Log.clear=function(){if(logging__){var q=this.div();q.innerHTML="";this.lines=[];}};Log.show=function(){var q=this.div();q.innerHTML+=this.lines.join("<br/>")+"<br/>";this.lines=[];q.scrollTop=q.scrollHeight;};Log.div=function(){var q=document.getElementById("log");if(!q){q=document.createElement("div");q.id="log";q.style.position="absolute";q.style.right="5px";q.style.top="5px";q.style.width="250px";q.style.height="150px";q.style.overflow="auto";q.style.backgroundColor="#f0f0f0";q.style.border="1px solid gray";q.style.fontSize="10px";q.style.padding="5px";document.body.appendChild(q);}return q;};function Timer(){}Timer.start=function(){};Timer.end=function(){};