laya.debugtool.min.js 208 KB

1
  1. !function(t,e){"use strict";class a{constructor(){}static toUpCase(t){return t.toUpperCase()}static toLowCase(t){return t.toLowerCase()}static toUpHead(t){return t.length<=1?t.toUpperCase():t.charAt(0).toUpperCase()+t.substr(1)}static toLowHead(t){return t.length<=1?t.toLowerCase():t.charAt(0).toLowerCase()+t.substr(1)}static packageToFolderPath(t){return t.replace(".","/")}static insert(t,e,a){return t.substring(0,a)+e+t.substr(a)}static insertAfter(t,e,i,s=!1){var l;return(l=s?t.lastIndexOf(i):t.indexOf(i))>=0?a.insert(t,e,l+i.length):t}static insertBefore(t,e,i,s=!1){var l;return(l=s?t.lastIndexOf(i):t.indexOf(i))>=0?a.insert(t,e,l):t}static insertParamToFun(t,e){var i,s;return i=a.getParamArr(t),s=e.join(","),i.length>0&&(s=","+s),a.insertBefore(t,s,")",!0)}static trim(t,e=null){var i,s,l;for(e||(e=[" ","\r","\n","\t",String.fromCharCode(65279)]),i=t,l=e.length,s=0;s<l;s++)i=a.getReplace(i,e[s],"");return i}static isEmpty(t){return t.length<1||a.emptyStrDic.hasOwnProperty(t)}static trimLeft(t){var e,i;for(e=0,i=t.length;a.isEmpty(t.charAt(e))&&e<i;)e++;return e<i?t.substr(e):""}static trimRight(t){var e;for(e=t.length-1;a.isEmpty(t.charAt(e))&&e>=0;)e--;return t.substring(0,e),e>=0?t.substring(0,e+1):""}static trimSide(t){var e;return e=a.trimLeft(t),e=a.trimRight(e)}static isOkFileName(t){if(""==a.trimSide(t))return!1;var e,i;for(i=t.length,e=0;e<i;e++)if(a.specialChars[t.charAt(e)])return!1;return!0}static trimButEmpty(t){return a.trim(t,["\r","\n","\t"])}static removeEmptyStr(t){var e,i;for(e=e=t.length-1;e>=0;e--)i=t[e],i=a.trimSide(i),a.isEmpty(i)?t.splice(e,1):t[e]=i;return t}static ifNoAddToTail(t,e){return t.indexOf(e)>=0?t:t+e}static trimEmptyLine(t){var e,i,s;for(e=(i=t.split("\n")).length-1;e>=0;e--)s=i[e],a.isEmptyLine(s)&&i.splice(e,1);return i.join("\n")}static isEmptyLine(t){return""==(t=a.trim(t))}static removeCommentLine(t){var e,i,s,l,r,n;for(e=[],i=0,r=t.length;i<r;){if(l=s=t[i],(n=s.indexOf("/**"))>=0)for(l=s.substring(0,n-1),a.addIfNotEmpty(e,l);i<r;){if((n=(s=t[i]).indexOf("*/"))>=0){l=s.substring(n+2),a.addIfNotEmpty(e,l);break}i++}else s.indexOf("//")>=0&&0==a.trim(s).indexOf("//")||a.addIfNotEmpty(e,l);i++}return e}static addIfNotEmpty(t,e){e&&(""!=a.trim(e)&&t.push(e))}static trimExt(t,e){var i,s,l;for(i=a.trim(t),l=e.length,s=0;s<l;s++)i=a.getReplace(i,e[s],"");return i}static getBetween(t,e,a,i=!1){if(!t)return"";if(!e)return"";if(!a)return"";var s,l;if((s=t.indexOf(e))<0)return"";if(i){if((l=t.lastIndexOf(a))<s)return""}else l=t.indexOf(a,s+1);return l<0?"":t.substring(s+e.length,l)}static getSplitLine(t,e=" "){return t.split(e)}static getLeft(t,e){var a;return a=t.indexOf(e),t.substr(0,a)}static getRight(t,e){var a;return a=t.indexOf(e),t.substr(a+1)}static delelteItem(t){for(;t.length>0&&""==t[0];)t.shift()}static getWords(t){var e=a.getSplitLine(t);return a.delelteItem(e),e}static getLinesI(t,e,a){var i,s=[];for(i=t;i<=e;i++)s.push(a[i]);return s}static structfy(t,e=4,i=!0){var s,l,r,n,o,h;for(i&&(t=a.trimEmptyLine(t)),l=0,r=a.getEmptyStr(0),o=(s=t.split("\n")).length,n=0;n<o;n++)h=s[n],h=a.trimLeft(h),h=a.trimRight(h),l+=a.getPariCount(h),h.indexOf("}")>=0&&(r=a.getEmptyStr(l*e)),h=r+h,s[n]=h,r=a.getEmptyStr(l*e);return s.join("\n")}static getEmptyStr(t){if(!a.emptyDic.hasOwnProperty(t)){var e,i,s;for(i=t,s="",e=0;e<i;e++)s+=" ";a.emptyDic[t]=s}return a.emptyDic[t]}static getPariCount(t,e="{",a="}"){var i,s,l,r,n;for((i={})[e]=1,i[a]=-1,l=t.length,n=0,s=0;s<l;s++)r=t.charAt(s),i.hasOwnProperty(r)&&(n+=i[r]);return n}static readInt(t,e=0){var a,i,s,l,r;for(a=0,l=!1,r=t.length,s=e;s<r;s++)if(i=t.charAt(s),Number(i)>0||"0"==i)(a=10*a+Number(i))>0&&(l=!0);else if(l)return a;return a}static getReplace(t,e,a){return t?t.replace(new RegExp(e,"g"),a):""}static getWordCount(t,e){var a=new RegExp(e,"g");return t.match(a).length}static getResolvePath(t,e){if(a.isAbsPath(t))return t;var i,s,l,r,n,o;for(i="\\",e.indexOf("/")>=0&&(i="/"),e.charAt(e.length-1)==i&&(e=e.substr(0,e.length-1)),s=".."+i,l="."+i,r=a.getWordCount(t,s),t=a.getReplace(t,s,""),t=a.getReplace(t,l,""),o=r,n=0;n<o;n++)e=a.removeLastSign(t,i);return e+i+t}static isAbsPath(t){return t.indexOf(":")>=0}static removeLastSign(t,e){var a;return a=t.lastIndexOf(e),t=t.substring(0,a)}static getParamArr(t){var e;return e=a.getBetween(t,"(",")",!0),a.trim(e).length<1?[]:e.split(",")}static copyStr(t){return t.substring(0)}static ArrayToString(t){return"[{items}]".replace(new RegExp("\\{items\\}","g"),a.getArrayItems(t))}static getArrayItems(t){var e,i,s;if(t.length<1)return"";for(e=a.parseItem(t[0]),s=t.length,i=1;i<s;i++)e+=","+a.parseItem(t[i]);return e}static parseItem(t){return""}static initAlphaSign(){a.alphaSigns||(a.alphaSigns={},a.addSign("a","z",a.alphaSigns),a.addSign("A","Z",a.alphaSigns),a.addSign("0","9",a.alphaSigns))}static addSign(t,e,a){var i,s,l;for(l=t.charCodeAt(0),s=e.charCodeAt(0),i=l;i<=s;i++)a[String.fromCharCode(i)]=!0,console.log("add :"+String.fromCharCode(i))}static isPureAlphaNum(t){if(a.initAlphaSign(),!t)return!0;var e,i;for(i=t.length,e=0;e<i;e++)if(!a.alphaSigns[t.charAt(e)])return!1;return!0}}a.emptyStrDic={" ":!0,"\r":!0,"\n":!0,"\t":!0},a.specialChars={"*":!0,"&":!0,"%":!0,"#":!0,"?":!0},a.emptyDic={},a.alphaSigns=null;class i{constructor(){}static getFlatKey(t,e){return""==t?e:t+i.sign+e}static flatObj(t,e=null,a=""){var s;for(s in e=e||{},t)t[s]instanceof Object?i.flatObj(t[s],e,i.getFlatKey(a,s)):(t[s],e[i.getFlatKey(a,s)]=t[s]);return e}static recoverObj(t){var e,a={};for(e in t)i.setKeyValue(a,e,t[e]);return a}static differ(t,e){var a;t=i.flatObj(t),e=i.flatObj(e);var s={};for(a in t)e.hasOwnProperty(a)||(s[a]="被删除");for(a in e)e[a]!=t[a]&&(s[a]={pre:t[a],now:e[a]});return s}static traceDifferObj(t){var e,a;for(e in t)t[e]instanceof String?console.log(e+":",t[e]):(a=t[e],console.log(e+":","now:",a.now,"pre:",a.pre))}static setKeyValue(t,e,a){if(e.indexOf(i.sign)>=0){for(var s,l=e.split(i.sign);l.length>1;)if(t[s=l.shift()]||(t[s]={},console.log("addKeyObj:",s)),!(t=t[s]))return void console.log("wrong flatKey:",e);t[l.shift()]=a}else t[e]=a}static clearObj(t){var e;for(e in t)delete t[e]}static copyObjFast(t){var e;return e=i.getJsonString(t),i.getObj(e)}static copyObj(t){if(t instanceof Array)return i.copyArr(t);var e,a={};for(e in t)null===t[e]||void 0===t[e]?a[e]=t[e]:t[e]instanceof Array?a[e]=i.copyArr(t[e]):t[e]instanceof Object?a[e]=i.copyObj(t[e]):a[e]=t[e];return a}static copyArr(t){var e,a,s;for(e=[],s=t.length,a=0;a<s;a++)e.push(i.copyObj(t[a]));return e}static concatArr(t,e){if(!e)return t;if(!t)return e;var a,i=e.length;for(a=0;a<i;a++)t.push(e[a]);return t}static insertArrToArr(t,e,a=0){a<0&&(a=0),a>t.length&&(a=t.length);var i,s,l;t.length;for(t.length+=e.length,l=e.length,i=t.length-1;i>=a;i--)t[i]=t[i-l];for(s=e.length,i=0;i<s;i++)t[a+i]=e[i];return t}static clearArr(t){return t?(t.length=0,t):t}static removeFromArr(t,e){var a,i;for(i=t.length,a=0;a<i;a++)if(t[a]==e)return void t[a].splice(a,1)}static setValueArr(t,e){return t||(t=[]),t.length=0,i.concatArr(t,e)}static getFrom(t,e,a){var i;for(i=0;i<a;i++)t.push(e[i]);return t}static getFromR(t,e,a){var i;for(i=0;i<a;i++)t.push(e.pop());return t}static enableDisplayTree(t){for(;t;)t.mouseEnabled=!0,t=t.parent}static getJsonString(t){return JSON.stringify(t)}static getObj(t){return JSON.parse(t)}static getKeyArr(t){var e,a;for(a in e=[],t)e.push(a);return e}static getObjValues(t,e){var a,i,s;for(s=t.length,a=[],i=0;i<s;i++)a.push(t[i][e]);return a}static hasKeys(t,e){var a,i;for(i=e.length,a=0;a<i;a++)if(!t.hasOwnProperty(e[a]))return!1;return!0}static copyValueByArr(t,e,a){var i,s=a.length;for(i=0;i<s;i++)null!==e[a[i]]&&(t[a[i]]=e[a[i]])}static getNoSameArr(t){var e,a,i,s;for(i=[],a=t.length,e=0;e<a;e++)s=t[e],i.indexOf(s)<0&&i.push(s);return i}static insertValue(t,e){var a;for(a in e)t[a]=e[a]}static replaceValue(t,e){var a;for(a in t)e.hasOwnProperty(t[a])&&(t[a]=e[t[a]]),t[a]instanceof Object&&i.replaceValue(t[a],e)}static setKeyValues(t,e,a){var i,s;for(s=t.length,i=0;i<s;i++)t[i][e]=a}static findItemPos(t,e,a){var i,s;for(s=t.length,i=0;i<s;i++)if(t[i][e]==a)return i;return-1}static setObjValue(t,e,a){return t[e]=a,t}static setAutoTypeValue(t,e,a){return t.hasOwnProperty(e)&&i.isNumber(t[e])?t[e]=parseFloat(a):t[e]=a,t}static getAutoValue(t){var e=parseFloat(t);return"string"==typeof t&&e+""===a.trimSide(t)?e:t}static isNumber(t){return parseFloat(t)==t}static isNaNS(t){return"NaN"==t.toString()}static isNaN(t){return"number"!=typeof t&&("string"!=typeof t||"NaN"==parseFloat(t).toString())}static getStrTypedValue(t){return"false"!=t&&("true"==t||("null"==t||"undefined"==t?null:i.getAutoValue(t)))}static createKeyValueDic(t,e){var a,i,s,l;for(a={},s=t.length,i=0;i<s;i++)a[(l=t[i])[e]]=l;return a}}i.sign="_";class s{constructor(){}static defineProperty(t,e,a){Object.defineProperty(t,e,a)}static getOwnPropertyDescriptor(t,e){return Object.getOwnPropertyDescriptor(t,e)}static getOwnPropertyDescriptors(t){return Object.getOwnPropertyDescriptors(t)}static getOwnPropertyNames(t){return Object.getOwnPropertyNames(t)}static getObjectGetSetKeys(t,e=null){var a,i;for(i in e||(e=[]),a=s.getOwnPropertyNames(t))(i=a[i]).indexOf("_$get_")>=0&&(i=i.replace("_$get_",""),e.push(i));return t.__proto__&&s.getObjectGetSetKeys(t.__proto__,e),e}static getObjectDisplayAbleKeys(t,e=null){e||(e=[]);for(let a in t){let i=typeof t[a];"_"!=a.charAt(0)&&this.displayTypes[i]&&e.push(a)}let a=t;for(;a;){let t=Object.getOwnPropertyDescriptors(a);for(let a in t){t[a].get&&e.push(a)}a=Object.getPrototypeOf(a)}return s.getObjectGetSetKeys(t,e),e=i.getNoSameArr(e)}static getClassName(t){return t instanceof Function?t.name:t.constructor.name}static getNodeClassAndName(t){return t?t.name?s.getClassName(t)+"("+t.name+")":s.getClassName(t):"null"}static getClassNameByClz(t){return t.name}static getClassByName(t){return window.eval(t)}static createObjByName(t){return new(s.getClassByName(t))}}s.displayTypes={boolean:!0,number:!0,string:!0};class l{constructor(){}static closeAllLog(){var t;t=l.emptyLog,e.Browser.window.console.log=t}static emptyLog(){}static traceObj(t){var e,a;for(e in l.tempArr.length=0,t)l.tempArr.push(e+":"+t[e]);return a=l.tempArr.join("\n"),console.log(a),a}static traceObjR(t){var e,a;for(e in l.tempArr.length=0,t)l.tempArr.push(t[e]+":"+e);return a=l.tempArr.join("\n"),console.log(a),a}static traceSize(t){l._debugtrace("Size: x:"+t.x+" y:"+t.y+" w:"+t.width+" h:"+t.height+" scaleX:"+t.scaleX+" scaleY:"+t.scaleY)}static traceSplit(t){console.log("---------------------"+t+"---------------------------")}static group(t){console.group(t)}static groupEnd(){console.groupEnd()}static getCallStack(t=1,e=1){var a,i;for(a=(a=l.getCallStack).caller.caller,i="";a&&t>0;)e<=0&&(i+=a+"<-",t--),a=a.caller,e--;return i}static getCallLoc(t=2){var e;try{l.Erroer.i++}catch(i){var a;e=(a=this.e.stack.replace(/Error\n/).split(/\n/))[t]?a[t].replace(/^\s+|\s+$/,""):"unknow"}return e}static traceCallStack(){var t;try{l.Erroer.i++}catch(e){t=this.e.stack}return console.log(t),t}static getPlaceHolder(t){if(!l.holderDic.hasOwnProperty(t)){var e,a;for(e="",a=0;a<t;a++)e+="-";l.holderDic[t]=e}return l.holderDic[t]}static traceTree(t,e=0,a=!0){var i,s;if(a&&console.log("traceTree"),t)if(t.numChildren<1)console.log(t);else{for(l.group(t),s=t.numChildren,e++,i=0;i<s;i++)l.traceTree(t.getChildAt(i),e,!1);l.groupEnd()}}static getClassName(t){return t.constructor.name}static traceSpriteInfo(t,a=!0,i=!0,s=!0){t instanceof e.Sprite?t?(l.traceSplit("traceSpriteInfo"),l._debugtrace(l.getClassName(t)+":"+t.name),s?l.traceTree(t):console.log(t),i&&l.traceSize(t),a&&console.log("bounds:"+t.getBounds())):console.log("null Sprite"):console.log("not Sprite")}}l.tempArr=[],l.Erroer=null,l.holderDic={};class r{constructor(){this.data={},this.preO={},this.changeO={}}reset(){this.data={},this.count=0}add(t,e=1){this.count++,this.data.hasOwnProperty(t)||(this.data[t]=0),this.data[t]=this.data[t]+e}getKeyCount(t){return this.data.hasOwnProperty(t)||(this.data[t]=0),this.data[t]}getKeyChange(t){return this.changeO[t]?this.changeO[t]:0}record(){var t;for(t in this.changeO)this.changeO[t]=0;for(t in this.data)this.preO[t]||(this.preO[t]=0),this.changeO[t]=this.data[t]-this.preO[t],this.preO[t]=this.data[t]}getCount(t){var e,a=0;for(e in t)a+=t[e];return a}traceSelf(t=null){var e;return t||(t=this.data),e=this.getCount(t),console.log("total:"+e),"total:"+e+"\n"+l.traceObj(t)}traceSelfR(t=null){var e;return t||(t=this.data),e=this.getCount(t),console.log("total:"+e),"total:"+e+"\n"+l.traceObjR(t)}}class n{constructor(){this.oX=0,this.oY=0,this.hX=1,this.hY=0,this.vX=0,this.vY=1}get x(){return this.oX}get y(){return this.oY}get width(){return Math.sqrt((this.hX-this.oX)*(this.hX-this.oX)+(this.hY-this.oY)*(this.hY-this.oY))}get height(){return Math.sqrt((this.vX-this.oX)*(this.vX-this.oX)+(this.vY-this.oY)*(this.vY-this.oY))}get rotation(){return this.rotationRad/Math.PI*180}get rotationRad(){var t=this.hX-this.oX,e=this.hY-this.oY;return Math.atan2(e,t)}get rotationV(){return this.rotationRadV/Math.PI*180}get rotationRadV(){var t=this.vX-this.oX,e=this.vY-this.oY;return Math.atan2(e,t)}initByPoints(t,e,a){this.oX=t.x,this.oY=t.y,this.hX=e.x,this.hY=e.y,this.vX=a.x,this.vY=a.y}static createByPoints(t,e,a){var i;return(i=new n).initByPoints(t,e,a),i}static getGlobalPoints(t,a,i){return t.localToGlobal(new e.Point(a,i))}static getGlobalRecInfo(t,e=0,a=0,i=1,s=0,l=0,r=1){return n.createByPoints(n.getGlobalPoints(t,e,a),n.getGlobalPoints(t,i,s),n.getGlobalPoints(t,l,r))}}class o{constructor(){}static setResizeAble(t,a,i=150,s=150){t.on(e.Event.MOUSE_DOWN,null,o.onMouseDown,[a,i,s])}static onMouseDown(t,a,i,s){if(o.clearEvents(),t){var l;for(o.preMousePoint.setTo(e.Laya.stage.mouseX,e.Laya.stage.mouseY),o.preTarSize.setTo(t.width,t.height),o.preScale.setTo(1,1),l=t;l&&l!=e.Laya.stage;)o.preScale.x*=l.scaleX,o.preScale.y*=l.scaleY,l=l.parent;e.Laya.stage.on(e.Event.MOUSE_UP,null,o.onMouseMoveEnd),e.Laya.timer.loop(100,null,o.onMouseMoving,[t,a,i])}}static onMouseMoving(t,a,i,s){var l=(e.Laya.stage.mouseX-o.preMousePoint.x)/o.preScale.x+o.preTarSize.x,r=(e.Laya.stage.mouseY-o.preMousePoint.y)/o.preScale.y+o.preTarSize.y;t.width=l>a?l:a,t.height=r>i?r:i}static onMouseMoveEnd(t){o.clearEvents()}static clearEvents(){e.Laya.timer.clear(null,o.onMouseMoving),e.Laya.stage.off(e.Event.MOUSE_UP,null,o.onMouseMoveEnd)}}o.preMousePoint=new e.Point,o.preTarSize=new e.Point,o.preScale=new e.Point;class h{constructor(){}static getObjectsUnderPoint(t,a,i,s=null,l=null){if(s=s||[],null!=l&&!l(t))return s;if(t.getBounds().contains(a,i)){s.push(t);var r=new e.Point;r.setTo(a,i),a=(r=t.fromParentPoint(r)).x,i=r.y;for(var n=t._children.length-1;n>-1;n--){var o=t._children[n];o instanceof e.Sprite&&h.getObjectsUnderPoint(o,a,i,s,l)}}return s}static getObjectsUnderGlobalPoint(t,a=null){var i=new e.Point;return i.setTo(e.Laya.stage.mouseX,e.Laya.stage.mouseY),t.parent&&(i=t.parent.globalToLocal(i)),h.getObjectsUnderPoint(t,i.x,i.y,null,a)}static findFirstObjectsUnderGlobalPoint(){var t,a,i;if(!(t=h.getObjectsUnderGlobalPoint(e.Laya.stage)))return null;for(a=t.length-1;a>=0;a--)if((i=t[a])&&i.numChildren<1)return i;return i}static visibleAndEnableObjFun(t){return t.visible&&t.mouseEnabled}static visibleObjFun(t){return t.visible}static getMousePoint(t){var a=new e.Point;return a.setTo(e.Laya.stage.mouseX,e.Laya.stage.mouseY),a=t.globalToLocal(a)}static isChildE(t,e){if(!t)return!1;for(;e;){if(e.parent==t)return!0;e=e.parent}return!1}static isInTree(t,e){return t==e||h.isChildE(t,e)}static setTop(t){var e;t&&t.parent&&(e=t.parent).setChildIndex(t,e.numChildren-1)}static clearItemRelativeInfo(t){t.getLayout().left="NaN",t.getLayout().right="NaN",t.getLayout().top="NaN",t.getLayout().bottom="NaN"}static swap(t,e){var a,i,s;t!=e&&(a=t.parent.getChildIndex(t),i=e.parent.getChildIndex(e),s=e.parent,t.parent.addChildAt(e,a),s.addChildAt(t,i))}static insertToTarParent(t,e,a=!1){var i,s;t&&(s=t.parent)&&(i=s.getChildIndex(t),a&&i++,h.insertToParent(s,e,i))}static insertToParent(t,e,a=-1){var i,s;if(t)for(a<0&&(a=t.numChildren),s=e.length,i=0;i<s;i++)h.transParent(e[i],t),t.addChildAt(e[i],a)}static transParent(t,a){var i,s;t&&a&&(t.parent&&(i=t.parent,s=new e.Point(t.x,t.y),s=i.localToGlobal(s),s=a.globalToLocal(s),t.pos(s.x,s.y)))}static transPoint(t,e,a){return a=t.localToGlobal(a),a=e.globalToLocal(a)}static removeItems(t){var e,a;for(a=t.length,e=0;e<a;e++)t[e].removeSelf()}static addItems(t,e){var a,i;for(i=t.length,a=0;a<i;a++)e.addChild(t[a])}static getAllChild(t){if(!t)return[];var e,a,i=[];for(a=t.numChildren,e=0;e<a;e++)i.push(t.getChildAt(e));return i}static upDis(t){var e,a;t&&t.parent&&((a=(e=t.parent).getChildIndex(t)+1)>=e.numChildren&&(a=e.numChildren-1),console.log("setChildIndex:"+a),e.setChildIndex(t,a))}static downDis(t){var e,a;t&&t.parent&&((a=(e=t.parent).getChildIndex(t)-1)<0&&(a=0),console.log("setChildIndex:"+a),e.setChildIndex(t,a))}static setResizeAbleEx(t){var e;(e=t.getChildByName("resizeBtn"))&&o.setResizeAble(e,t)}static setResizeAble(t){t.on(e.Event.CLICK,null,h.resizeHandler,[t])}static setDragingItem(t,a){t.on(e.Event.MOUSE_DOWN,null,h.dragingHandler,[a]),a.on(e.Event.DRAG_END,null,h.dragingEnd,[a])}static dragingHandler(t){t&&t.startDrag()}static dragingEnd(t){h.intFyDisPos(t),console.log(t.x,t.y)}static showToStage(t,a=0,i=0){var s=t.getBounds();t.x=e.Laya.stage.mouseX+a,t.y=e.Laya.stage.mouseY+i,t.x+s.width>e.Laya.stage.width&&(t.x-=s.width+a),t.y+s.height>e.Laya.stage.height&&(t.y-=s.height+i),h.intFyDisPos(t)}static intFyDisPos(t){t&&(t.x=Math.round(t.x),t.y=Math.round(t.y))}static showOnly(t,e){var a,i;for(i=t.length,a=0;a<i;a++)t[a].visible=t[a]==e}static showOnlyByIndex(t,e){h.showOnly(t,t[e])}static addOnly(t,e,a){var i,s;for(s=t.length,i=0;i<s;i++)t[i]!=e?t[i].removeSelf():a.addChild(t[i])}static addOnlyByIndex(t,e,a){h.addOnly(t,t[e],a)}}h.tempP=new e.Point;class d extends e.Sprite{constructor(){super(),this.recWidth=10,this.drawMe()}drawMe(){var t;(t=this.graphics).clear(),t.drawRect(0,0,this.recWidth,this.recWidth,"#22ff22"),this.size(this.recWidth,this.recWidth)}posTo(t,e){this.x=t-.5*this.recWidth,this.y=e-.5*this.recWidth}}class c{constructor(){this.preValue=0}get value(){return this.target&&(this._tValue=this.target[this.key]),this._tValue}set value(t){this._tValue=t,this.target&&(this.target[this.key]=t)}get dValue(){return this.value-this.preValue}get scaleValue(){return this.value/this.preValue}record(){this.preValue=this.value}showValueByAdd(t){this.value=this.preValue+t}showValueByScale(t){this.value=this.preValue*t}recover(){this.value=this.preValue}dispose(){this.target=null}static create(t,e){var a;return(a=new c).target=t,a.key=e,a}}class b extends e.Sprite{constructor(t="X"){super(),this.lineLen=160,this.arrowLen=10,this.lenControl=new d,this.rotationControl=new d,this.sign="Y",this.lenChanger=c.create(this,"lineLen"),this.lenControlXChanger=c.create(this.lenControl,"x"),this._isMoving=!1,this.sign=t,this.addChild(this.lenControl),this.addChild(this.rotationControl),this.lenControl.on(e.Event.MOUSE_DOWN,this,this.controlMouseDown),this.drawMe()}drawMe(){var t;(t=this.graphics).clear(),t.drawLine(0,0,this.lineLen,0,"#ffff00"),t.drawLine(this.lineLen,0,this.lineLen-this.arrowLen,-this.arrowLen,"#ff0000"),t.drawLine(this.lineLen,0,this.lineLen-this.arrowLen,this.arrowLen,"#ff0000"),t.fillText(this.sign,50,-5,"","#ff0000","left"),this._isMoving&&this._targetChanger&&t.fillText(this._targetChanger.key+":"+this._targetChanger.value.toFixed(2),this.lineLen-15,-25,"","#ffff00","center"),this.lenControl.posTo(this.lineLen-15,0),this.rotationControl.posTo(this.lineLen+10,0),this.size(this.arrowLen,this.lineLen)}set targetChanger(t){this._targetChanger&&this._targetChanger.dispose(),this._targetChanger=t}get targetChanger(){return this._targetChanger}clearMoveEvents(){e.Laya.stage.off(e.Event.MOUSE_MOVE,this,this.stageMouseMove),e.Laya.stage.off(e.Event.MOUSE_UP,this,this.stageMouseUp)}controlMouseDown(t){this.clearMoveEvents(),this.lenControlXChanger.record(),this.lenChanger.record(),this.targetChanger&&this.targetChanger.record(),this._isMoving=!0,e.Laya.stage.on(e.Event.MOUSE_MOVE,this,this.stageMouseMove),e.Laya.stage.on(e.Event.MOUSE_UP,this,this.stageMouseUp)}stageMouseMove(t){this.lenControlXChanger.value=this.mouseX,this.lenChanger.showValueByScale(this.lenControlXChanger.scaleValue),this.targetChanger&&this.targetChanger.showValueByScale(this.lenControlXChanger.scaleValue),this.drawMe()}stageMouseUp(t){this._isMoving=!1,this.noticeChange(),this.clearMoveEvents(),this.lenControlXChanger.recover(),this.lenChanger.recover(),this.drawMe()}noticeChange(){var t;t=this.lenChanger.dValue,console.log("lenChange:",t)}}class u extends e.Sprite{constructor(){super(),this.xAxis=new b("X"),this.yAxis=new b("Y"),this.controlBox=new d,this._lenType=[["width","height"],["scaleX","scaleY"]],this._type=1,this._point=new e.Point,this.oPoint=new e.Point,this.myRotationChanger=c.create(this,"rotation"),this.targetRotationChanger=c.create(null,"rotation"),this.stageMouseRotationChanger=new c,this.mouseEnabled=!0,this.size(1,1),this.initMe(),this.xAxis.rotationControl.on(e.Event.MOUSE_DOWN,this,this.controlMouseDown),this.yAxis.rotationControl.on(e.Event.MOUSE_DOWN,this,this.controlMouseDown),this.controlBox.on(e.Event.MOUSE_DOWN,this,this.controlBoxMouseDown),this.on(e.Event.DRAG_MOVE,this,this.dragging)}set target(t){this._target=t,this.updateChanges()}updateChanges(){var t;this._target&&(t=this._lenType[this._type],this.xAxis.targetChanger=c.create(this._target,t[0]),this.yAxis.targetChanger=c.create(this._target,t[1]))}set type(t){this._type=t,this.updateChanges()}get type(){return this._type}switchType(){this._type++,this._type=this._type%this._lenType.length,this.type=this._type}controlBoxMouseDown(t){this.startDrag()}dragging(){this._target&&(this._point.setTo(this.x,this.y),h.transPoint(this.parent,this._target.parent,this._point),this._target.pos(this._point.x,this._point.y))}get target(){return this._target}initMe(){this.addChild(this.xAxis),this.addChild(this.yAxis),this.yAxis.rotation=90,this.addChild(this.controlBox),this.controlBox.posTo(0,0)}clearMoveEvents(){e.Laya.stage.off(e.Event.MOUSE_MOVE,this,this.stageMouseMove),e.Laya.stage.off(e.Event.MOUSE_UP,this,this.stageMouseUp)}controlMouseDown(t){this.targetRotationChanger.target=this.target,this.clearMoveEvents(),this.oPoint.setTo(0,0),this.myRotationChanger.record(),this.oPoint=this.localToGlobal(this.oPoint),this.stageMouseRotationChanger.value=this.getStageMouseRatation(),this.stageMouseRotationChanger.record(),this.targetRotationChanger.record(),e.Laya.stage.on(e.Event.MOUSE_MOVE,this,this.stageMouseMove),e.Laya.stage.on(e.Event.MOUSE_UP,this,this.stageMouseUp)}getStageMouseRatation(){return e.MathUtil.getRotation(this.oPoint.x,this.oPoint.y,e.Laya.stage.mouseX,e.Laya.stage.mouseY)}stageMouseMove(t){var e;this.stageMouseRotationChanger.value=this.getStageMouseRatation(),e=-this.stageMouseRotationChanger.dValue,this.target?this.targetRotationChanger.showValueByAdd(e):this.myRotationChanger.showValueByAdd(e)}stageMouseUp(t){this.noticeChange(),this.clearMoveEvents()}noticeChange(){console.log("rotate:",-this.stageMouseRotationChanger.dValue)}}class Z{constructor(){Z.init(),this.arrowAxis=new u,this.arrowAxis.mouseEnabled=!0}static init(){Z._container?h.setTop(Z._container):(Z._container=new e.Sprite,Z._container.mouseEnabled=!0,e.Laya.stage.addChild(Z._container))}set target(t){this._target=t,t?(Z._container.addChild(this.arrowAxis),e.Laya.timer.loop(100,this,this.updateMe)):(this.arrowAxis.removeSelf(),e.Laya.timer.clear(this,this.updateMe)),this.arrowAxis.target=t,this.updateMe()}get target(){return this._target}set type(t){this.arrowAxis.type=t}get type(){return this.arrowAxis.type}switchType(){this.arrowAxis.switchType()}updateMe(){this._target&&(this.recInfo=n.getGlobalRecInfo(this._target,0,0,1,0,0,1),console.log("rotation:",this.recInfo.rotation),console.log("pos:",this.recInfo.x,this.recInfo.y),console.log("scale:",this.recInfo.width,this.recInfo.height),this.arrowAxis.x=this.recInfo.x,this.arrowAxis.y=this.recInfo.y,this.arrowAxis.rotation=this.recInfo.rotation,this.arrowAxis.yAxis.rotation=this.recInfo.rotationV-this.recInfo.rotation)}static get I(){return Z._instance||(Z._instance=new Z),Z._instance}static set I(t){Z._instance=t}}class m{constructor(){}static getArgArr(t){var e;e=[];var a,i=t.length;for(a=0;a<i;a++)e.push(t[a]);return e}static dTrace(...t){(t=m.getArgArr(t)).push(l.getCallLoc(2)),console.log.apply(console,t),t.join(" ")}static timeStart(t){console.time(t)}static timeEnd(t){console.timeEnd(t)}static traceTable(t){console.table(t)}}class G{constructor(){}static run(t,e=3){var a,i;G.infoDic.hasOwnProperty(t)||(G.infoDic[t]=new r),a=G.infoDic[t],i=l.getCallLoc(e)+"\n"+l.getCallStack(1,e-3),a.add(i),G._runShowDic[t]&&(console.log("Create:"+t),console.log(i))}static showClassCreate(t){G._runShowDic[t]=!0}static hideClassCreate(t){G._runShowDic[t]=!1}static getRunInfo(t){return G.infoDic[t],G.infoDic[t]}static runTest(t,e,a="runTest"){var i;for(m.timeStart(a),i=0;i<e;i++)t();m.timeEnd(a)}static runTest2(t,a,i="runTest"){var s,l;for(s=e.Browser.now(),l=0;l<a;l++)t();return e.Browser.now()-s}}G.infoDic={},G._runShowDic={};class W{constructor(){}static walkTarget(t,e,a=null){var i,s,l;for(e.apply(a,[t]),s=t.numChildren,i=0;i<s;i++)l=t.getChildAt(i),W.walkTarget(l,e,l)}static walkTargetEX(t,e,a=null,i=null){var s,l,r,n;if(null==i||i(t))for(e.apply(a,[t]),l=(n=t._children).length,s=0;s<l;s++)r=n[s],W.walkTarget(r,e,r)}static walkChildren(t,e,a=null){!t||t.numChildren<1||W.walkArr(h.getAllChild(t),e,a)}static walkArr(t,e,a=null){var i,s;if(t)for(s=t.length,i=0;i<s;i++)e.apply(a,[t[i],i])}}class p extends e.Sprite{constructor(){super(),this.nodeRecInfoLayer=new e.Sprite,this.lineLayer=new e.Sprite,this.txtLayer=new e.Sprite,this.popLayer=new e.Sprite,this.graphicLayer=new e.Sprite,this.cacheViewLayer=new e.Sprite,this.nodeRecInfoLayer.name="nodeRecInfoLayer",this.lineLayer.name="lineLayer",this.txtLayer.name="txtLayer",this.popLayer.name="popLayer",this.graphicLayer.name="graphicLayer",this.cacheViewLayer.name="cacheViewLayer",this.addChild(this.lineLayer),this.addChild(this.cacheViewLayer),this.addChild(this.nodeRecInfoLayer),this.addChild(this.txtLayer),this.addChild(this.popLayer),this.addChild(this.graphicLayer),p.I=this,this.zOrder=999,e.Laya.stage.on(e.Event.DOUBLE_CLICK,this,this.setTop)}static init(){p.I||(new p,e.Laya.stage.addChild(p.I))}setTop(){h.setTop(this)}isDebugItem(t){return h.isInTree(this,t)}}class g{constructor(){this.tID=1}getID(){return this.tID++}static getAID(){return g._ID.getID()}static idObjE(t,e="default"){return t[g.idSign]||(e||(e="default"),g._idDic[e]||(g._idDic[e]=new g),t[g.idSign]=g._idDic[e].getAID()),t}static setObjID(t,e){return t[g.idSign]=e,t}static idObj(t){return t[g.idSign]||(t[g.idSign]=g.getAID()),t}static getObjID(t){return t?t[g.idSign]:-1}}g._ID=new g,g._idDic={default:new g},g.idSign="_M_id_";class R extends e.Sprite{constructor(){super(),this._infoTxt=new e.Text,this._infoTxt.color="#ff0000",this._infoTxt.bgColor="#00ff00",this._infoTxt.fontSize=12}static init(){R.NodeInfoContainer||(p.init(),R.NodeInfoContainer=p.I,e.Laya.stage.addChild(R.NodeInfoContainer))}static getNodeInfoByNode(t){var e;return g.idObj(t),e=g.getObjID(t),R._nodeInfoDic[e]||(R._nodeInfoDic[e]=new R),R._nodeInfoDic[e]}static hideAllInfos(){var t;for(t in R._nodeInfoDic)R._nodeInfoDic[t].removeSelf();R.clearRelations()}removeSelf(){return this._infoTxt.removeSelf(),super.removeSelf()}showToUI(){R.NodeInfoContainer.nodeRecInfoLayer.addChild(this),this._infoTxt.removeSelf(),R.NodeInfoContainer.txtLayer.addChild(this._infoTxt),this.findOkPos()}randomAPos(t){this._infoTxt.x=this.x+e.Laya.stage.width*Math.random(),this._infoTxt.y=this.y+t*Math.random()}findOkPos(){var t;t=20,this.randomAPos(t)}isPosOk(){var t,a,i,s,l;if(a=(i=R.NodeInfoContainer.nodeRecInfoLayer._children).length,(l=this._infoTxt.getBounds()).x<0)return!1;if(l.y<0)return!1;if(l.right>e.Laya.stage.width)return!1;for(t=0;t<a;t++)if((s=i[t])!=this._infoTxt&&l.intersects(s.getBounds()))return!1;return!0}static showNodeInfo(t){var e;(e=R.getNodeInfoByNode(t)).showInfo(t),e.showToUI()}static showDisInfos(t){var e;if(e=t,t){for(;t;)R.showNodeInfo(t),t=t.parent;h.setTop(R.NodeInfoContainer),R.apdtTxtInfoPoss(e),R.updateRelations()}}static apdtTxtInfoPoss(t){var a,i,s,l,r,n,o;for(a=[];t;)a.push(t),t=t.parent;for(s=a.length,n=e.Laya.stage.width-150,o=100,(t=a[0])&&(l=R.getNodeInfoByNode(t))&&(r=l._infoTxt,n=e.Laya.stage.width-r.width-10,o=r.height+10),a=a.reverse(),i=0;i<s;i++)t=a[i],(l=R.getNodeInfoByNode(t))&&(r=l._infoTxt).pos(n,o*i)}static clearRelations(){R.NodeInfoContainer.lineLayer.graphics.clear()}static updateRelations(){var t,e,a;for(e in(t=R.NodeInfoContainer.lineLayer.graphics).clear(),R._nodeInfoDic)(a=R._nodeInfoDic[e]).parent&&t.drawLine(a.x,a.y,a._infoTxt.x,a._infoTxt.y,"#0000ff")}static getNodeValue(t,e){var a;switch(R._nodePoint.setTo(0,0),e){case"x":a=t.x+" (g:"+t.localToGlobal(R._nodePoint).x+")";break;case"y":a=t.y+" (g:"+t.localToGlobal(R._nodePoint).y+")";break;default:a=t[e]}return a}showInfo(t){if(this._tar=t,t){var a,i,l,r;for(R._txts.length=0,i=R.showValues.length,t.name?R._txts.push(s.getClassName(t)+"("+t.name+")"):R._txts.push(s.getClassName(t)),a=0;a<i;a++)l=R.showValues[a],R._txts.push(l+":"+R.getNodeValue(t,l));this._infoTxt.text=R._txts.join("\n"),this.graphics.clear(),!(r=t._getBoundPointsM(!0))||r.length<1||(r=e.GrahamScan.pListToPointList(r,!0),W.walkArr(r,t.localToGlobal,t),r=e.GrahamScan.pointListToPlist(r),R._disBoundRec=e.Rectangle._getWrapRec(r,R._disBoundRec),this.graphics.drawRect(0,0,R._disBoundRec.width,R._disBoundRec.height,null,"#00ffff"),this.pos(R._disBoundRec.x,R._disBoundRec.y))}}fresh(){this.showInfo(this._tar)}clearMe(){this._tar=null}recover(){e.Pool.recover("NodeInfosItem",this)}}R.showValues=["x","y","scaleX","scaleY","width","height","visible","mouseEnabled"],R._nodeInfoDic={},R._disBoundRec=new e.Rectangle,R._txts=[],R._nodePoint=new e.Point;class X extends e.Sprite{constructor(){super(),this._stateDic={},this.isWorkState=!1}static init(){X.I||(X.I=new X,R.init())}showDisInfo(t){this.recoverNodes(),R.showDisInfos(t),this.showOnly(t),this.isWorkState=!0}showOnly(t){t&&(this.hideBrothers(t),this.showOnly(t.parent))}recoverNodes(){var t,e,a;for(t in R.hideAllInfos(),this._stateDic)if(a=(e=this._stateDic[t]).target)try{a.visible=e.visible}catch(t){}this.isWorkState=!1}hideOtherChain(t){if(t)for(;t;)this.hideBrothers(t),t=t.parent}hideChilds(t){var e,a,i,s;if(t)for(a=(i=t._children).length,e=0;e<a;e++)(s=i[e])!=R.NodeInfoContainer&&(this.saveNodeInfo(s),s.visible=!1)}hideBrothers(t){var e,a,i,s,l;if(t&&(e=t.parent))for(i=(s=e._children).length,a=0;a<i;a++)(l=s[a])!=R.NodeInfoContainer&&l!=t&&(this.saveNodeInfo(l),l.visible=!1)}saveNodeInfo(t){var e;(g.idObj(t),this._stateDic.hasOwnProperty(g.getObjID(t)))||((e={}).target=t,e.visible=t.visible,this._stateDic[g.getObjID(t)]=e)}recoverNodeInfo(t){var e;(g.idObj(t),this._stateDic.hasOwnProperty(g.getObjID(t)))&&(e=this._stateDic[g.getObjID(t)],t.visible=e.visible)}}class V{constructor(){}}V.defaultFitlerStr="x,y,width,height,scaleX,scaleY,alpha,renderCost",V.RenderCostMaxTime=3e3;class y{constructor(){this.timeDic={},this.resultDic={},this.countDic={},this.resultCountDic={},this.nodeDic={},this.isWorking=!1,this.working=!0}static get I(){return y._instance||(y._instance=new y),y._instance}static set I(t){y._instance=t}render(t,e){this.addTime(t,e)}addTime(t,e){var a;g.idObj(t),a=g.getObjID(t),this.timeDic.hasOwnProperty(a)||(this.timeDic[a]=0),this.timeDic[a]=this.timeDic[a]+e,this.countDic.hasOwnProperty(a)||(this.countDic[a]=0),this.countDic[a]=this.countDic[a]+1,this.nodeDic[a]=t}getTime(t){var e;return g.idObj(t),e=g.getObjID(t),this.resultDic[e]?this.resultDic[e]:0}getCount(t){var e;return g.idObj(t),e=g.getObjID(t),this.resultCountDic[e]}reset(){var t;for(t in this.timeDic)this.timeDic[t]=0,this.countDic[t]=0;i.clearObj(this.nodeDic)}updates(){i.clearObj(this.resultDic),i.insertValue(this.resultDic,this.timeDic),i.clearObj(this.resultCountDic),i.insertValue(this.resultCountDic,this.countDic),this.reset()}set working(t){this.isWorking=t,t?e.Laya.timer.loop(V.RenderCostMaxTime,this,this.updates):e.Laya.timer.clear(this,this.updates)}}class Y{constructor(){}static getFilterdTree(t,e){var a,i,s,l,r,n,o;for(e||(e=Y.defaultKeys),a={},l=e.length,s=0;s<l;s++)a[i=e[s]]=t[i];for(l=(r=t._children).length,o=[],s=0;s<l;s++)n=r[s],o.push(Y.getFilterdTree(n,e));return a.childs=o,a}static getNodeValue(t,a){var i,s;if(t instanceof e.Sprite)switch(s=t,a){case"gRec":i=Y.getGRec(s).toString();break;case"gAlpha":i=Y.getGAlpha(s)+"";break;case"cmdCount":i=Y.getNodeCmdCount(s)+"";break;case"cmdAll":i=Y.getNodeCmdTotalCount(s)+"";break;case"nodeAll":i=""+Y.getNodeCount(s);break;case"nodeVisible":i=""+Y.getNodeCount(s,!0);break;case"nodeRender":i=""+Y.getRenderNodeCount(s);break;case"nodeReCache":i=""+Y.getReFreshRenderNodeCount(s);break;case"renderCost":i=""+y.I.getTime(s);break;case"renderCount":i=""+y.I.getCount(s);break;default:i=t[a]+""}else i=t[a]+"";return i}static getPropertyDesO(t,a){a||(a=Y.defaultKeys);var i,l,r,n,o={};if(o.label="object"==typeof t?""+s.getNodeClassAndName(t):""+t,o.type="",o.path=t,o.childs=[],o.isDirectory=!1,t instanceof e.Node){for(o.des=s.getNodeClassAndName(t),o.isDirectory=!0,r=a.length,l=0;l<r;l++)i=a[l],n=Y.getPropertyDesO(t[i],a),t.hasOwnProperty(i)?n.label=i+":"+n.des:n.label=i+":"+Y.getNodeValue(t,i),o.childs.push(n);i="_children",(n=Y.getPropertyDesO(t[i],a)).label=i+":"+n.des,n.isChilds=!0,o.childs.push(n)}else if(t instanceof Array){var h;for(o.des="Array["+t.length+"]",o.isDirectory=!0,r=(h=t).length,l=0;l<r;l++)(n=Y.getPropertyDesO(h[l],a)).label=l+":"+n.des,o.childs.push(n)}else if("object"==typeof t)for(i in o.des=s.getNodeClassAndName(t),o.isDirectory=!0,t)(n=Y.getPropertyDesO(t[i],a)).label=i+":"+n.des,o.childs.push(n);else o.des=""+t;return o.hasChild=o.childs.length>0,o}static adptShowKeys(t){var e;for(e=t.length-1;e>=0;e--)t[e]=a.trimSide(t[e]),t[e].length<1&&t.splice(e,1);return t}static getNodeTreeData(t,e){var a,i;return Y.adptShowKeys(e),a=Y.getPropertyDesO(t,e),i=[],Y.getTreeArr(a,i),i}static getTreeArr(t,e,a=!0){a&&e.push(t);var i,s=t.childs,l=s.length;for(i=0;i<l;i++)s[i].nodeParent=a?t:null,s[i].isDirectory?Y.getTreeArr(s[i],e):e.push(s[i])}static traceStage(){console.log(Y.getFilterdTree(e.Laya.stage,null)),console.log("treeArr:",Y.getNodeTreeData(e.Laya.stage,null))}static getNodeCount(t,e=!1){if(e&&!t.visible)return 0;var a,i,s,l;for(a=1,s=(l=t._children).length,i=0;i<s;i++)a+=Y.getNodeCount(l[i],e);return a}static getGVisible(t){for(;t;){if(!t.visible)return!1;t=t.parent}return!0}static getGAlpha(t){var e;for(e=1;t;)e*=t.alpha,t=t.parent;return e}static getGPos(t){var a;return a=new e.Point,t.localToGlobal(a),a}static getGRec(t){var a,i;return!(a=t._getBoundPointsM(!0))||a.length<1?e.Rectangle.TEMP.setTo(0,0,0,0):(a=e.GrahamScan.pListToPointList(a,!0),W.walkArr(a,t.localToGlobal,t),a=e.GrahamScan.pointListToPlist(a),i=e.Rectangle._getWrapRec(a,i))}static getGGraphicRec(t){var a,i;return!(a=t.getGraphicBounds()._getBoundPoints())||a.length<1?e.Rectangle.TEMP.setTo(0,0,0,0):(a=e.GrahamScan.pListToPointList(a,!0),W.walkArr(a,t.localToGlobal,t),a=e.GrahamScan.pointListToPlist(a),i=e.Rectangle._getWrapRec(a,i))}static getNodeCmdCount(t){return t.graphics?t.graphics.cmds?t.graphics.cmds.length:t.graphics._one?1:0:0}static getNodeCmdTotalCount(t){var e,a,i,s;for(i=(s=t._children).length,e=Y.getNodeCmdCount(t),a=0;a<i;a++)e+=Y.getNodeCmdTotalCount(s[a]);return e}static getRenderNodeCount(t){if("none"!=t.cacheAs)return 1;var e,a,i,s;for(i=(s=t._children).length,e=1,a=0;a<i;a++)e+=Y.getRenderNodeCount(s[a]);return e}static getReFreshRenderNodeCount(t){var e,a,i,s;for(i=(s=t._children).length,e=1,a=0;a<i;a++)e+=Y.getRenderNodeCount(s[a]);return e}static showCachedSpriteRecs(){Y.g=p.I.graphicLayer.graphics,Y.g.clear(),W.walkTarget(e.Laya.stage,Y.drawCachedBounds,null)}static drawCachedBounds(t){var e;"none"!=t.cacheAs&&(p.I.isDebugItem(t)||(e=Y.getGRec(t),Y.g.drawRect(e.x,e.y,e.width,e.height,null,"#0000ff",2)))}}Y.defaultKeys=["x","y","width","height"];class L{constructor(t="",e=!0){this.autoTrace=!0,this.sign="",this.sign=t,this.autoTrace=e}update(t,e=null){e&&console.log(e);var a,s=i.copyObj(t);return this.obj||(this.obj={}),a=i.differ(this.obj,s),this.obj=s,this.autoTrace&&(console.log(this.sign+" differ:"),i.traceDifferObj(a)),a}static differ(t,e,a=null){return L._differO[t]||(L._differO[t]=new L(t,!0)),L._differO[t].update(e,a)}}L._differO={};class x{constructor(){}static hook(t,e,a=null,i=null){x.hookFuns(t,e,[a,t[e],i],1)}static hookAllFun(t){var e,a;for(e in a=s.getOwnPropertyNames(t))e=a[e],x.special[e]||(console.log("try hook:",e),t[e]instanceof Function&&(console.log("hook:",e),x.hookFuns(t,e,[x.getTraceMsg("call:"+e),t[e]],1)));t.__proto__?x.hookAllFun(t.__proto__):console.log("end:",t)}static getTraceMsg(t){return function(){console.log(t)}}static hookFuns(t,e,a,i=-1){var s,l=t[e];(s=function(...t){var e,s,l;for(l=a.length,s=0;s<l;s++)a[s]&&(s==i?e=a[s].apply(this,t):a[s].apply(this,t));return e}).pre=l,t[e]=s}static removeHook(t,e){null!=t[e].pre&&(t[e]=t[e].pre)}static debugHere(){}static traceLoc(t=0,e=""){console.log(e,"fun loc:",l.getCallLoc(3+t))}static getLocFun(t=0,e=""){return t+=1,function(){x.traceLoc(t,e)}}}x.special={length:!0,name:!0,arguments:!0,caller:!0,prototype:!0,is:!0,isExtensible:!0,isFrozen:!0,isSealed:!0,preventExtensions:!0,seal:!0,apply:!0,call:!0,bind:!0,freeze:!0,unobserve:!0};class v{constructor(){}static hookVar(t,e,a=null,i=null){a||(a=[]),i||(i=[]);var l,r=t,n=t[e],o={},mSet=function(t){console.log("var hook set "+e+":",t),n=t},mGet=function(){return console.log("var hook get"+e+":",n),n};if(l=s.getOwnPropertyDescriptor(t,e))return o.set=mSet,o.get=mGet,o.enumerable=l.enumerable,a.push(o.set),i.push(o.get),x.hookFuns(o,"set",a),x.hookFuns(o,"get",i,i.length-1),void s.defineProperty(t,e,o);for(;!l&&t.__proto__;)t=t.__proto__,l=s.getOwnPropertyDescriptor(t,e);l&&(o.set=l.set?l.set:mSet,o.get=l.get?l.get:mGet,o.enumerable=l.enumerable,a.push(o.set),i.push(o.get),x.hookFuns(o,"set",a),x.hookFuns(o,"get",i,i.length-1),s.defineProperty(r,e,o)),l||(console.log("get des fail add directly"),o.set=mSet,o.get=mGet,a.push(o.set),i.push(o.get),x.hookFuns(o,"set",a),x.hookFuns(o,"get",i,i.length-1),s.defineProperty(t,e,o))}static getLocFun(t="",e=0){return e+=1,function(){x.traceLoc(e,t)}}}class w{constructor(){}static watch(t,e,a){v.hookVar(t,e,a)}static traceChange(t,e,a="var changed:"){v.hookVar(t,e,[w.getTraceValueFun(e),v.getLocFun(a)])}static debugChange(t,e){v.hookVar(t,e,[v.getLocFun("debug loc"),x.debugHere])}static differChange(t,e,a,i=""){v.hookVar(t,e,[w.getDifferFun(t,e,a,i)])}static getDifferFun(t,e,a,i=""){return function(){L.differ(a,t[e],i)}}static traceValue(t){console.log("value:",t)}static getTraceValueFun(t){return function(e){console.log("set "+t+" :",e)}}}class N{constructor(){}static getMenuShowEvent(){return e.Browser.onMobile?e.Event.DOUBLE_CLICK:e.Event.RIGHT_CLICK}static initBasicFunctions(){N.debugLayer||(p.init(),N.debugLayer=p.I.graphicLayer,N.debugLayer.mouseEnabled=!1,N.debugLayer.mouseThrough=!0,N.showStatu=!0,e.Laya.stage.on(e.Event.KEY_DOWN,null,N.keyHandler),N.export())}static dTrace(t){null!=N._traceFun&&N._traceFun(t),console.log(t)}static keyHandler(t){var e;if(e=String.fromCharCode(t.keyCode),t.altKey){switch(t.keyCode){case 38:N.showParent();break;case 40:N.showChild();break;case 37:N.showBrother(N.target,1);break;case 39:N.showBrother(N.target,-1)}N.dealCMDKey(e)}}static dealCMDKey(t){switch(t){case"上":N.showParent();break;case"下":N.showChild();break;case"左":N.showBrother(N.target,1);break;case"右":N.showBrother(N.target,-1);break;case"B":N.showAllBrother();break;case"C":N.showAllChild();break;case"E":N.traceDisMouseEnable();break;case"S":N.traceDisSizeChain();break;case"D":h.downDis(N.target);break;case"U":h.upDis(N.target);break;case"N":N.getNodeInfo();break;case"M":N.showAllUnderMosue();break;case"I":case"O":break;case"L":Z.I.switchType();break;case"Q":N.showNodeInfo();break;case"F":N.showToolPanel();break;case"P":N.showToolFilter();break;case"V":N.selectNodeUnderMouse();break;case"A":break;case"K":Y.traceStage();break;case"T":N.switchNodeTree();break;case"R":case"X":break;case"mCMD":N.traceCMD();break;case"allCMD":N.traceCMDR()}}static switchNodeTree(){}static selectNodeUnderMouse(){N.showDisBound()}static showToolPanel(){}static showToolFilter(){}static showNodeInfo(){X.I.isWorkState?X.I.recoverNodes():X.I.showDisInfo(N.target)}static switchDisController(){Z.I.target?Z.I.target=null:N.target&&(Z.I.target=N.target)}static get isThisShow(){return!1}static showParent(t=null){if(t||(t=N.target),!t)return console.log("no targetAvalible"),null;N.target=t.parent,N.autoWork()}static showChild(t=null){if(t||(t=N.target),!t)return console.log("no targetAvalible"),null;t.numChildren>0&&(N.target=t.getChildAt(0),N.autoWork())}static showAllChild(t=null){if(t||(t=N.target),!t)return console.log("no targetAvalible"),null;N.selectedNodes=h.getAllChild(t),N.showSelected()}static showAllUnderMosue(){N.selectedNodes=h.getObjectsUnderGlobalPoint(e.Laya.stage),N.showSelected()}static showParentChain(t=null){if(t){var e;for(N.selectedNodes=[],e=t.parent;e;)N.selectedNodes.push(e),e=e.parent;N.showSelected()}}static showAllBrother(t=null){if(t||(t=N.target),!t)return console.log("no targetAvalible"),null;t.parent&&(N.selectedNodes=h.getAllChild(t.parent),N.showSelected())}static showBrother(t,e=1){if(t||(t=N.target),!t)return console.log("no targetAvalible"),null;var a,i;(a=t.parent)&&(i=a.getChildIndex(t),(i+=e)<0&&(i+=a.numChildren),i>=a.numChildren&&(i-=a.numChildren),N.target=a.getChildAt(i),N.autoWork())}static set showStatu(t){t?e.Stat.show():(e.Stat.hide(),N.clearDebugLayer())}static clearDebugLayer(){N.debugLayer.graphics&&N.debugLayer.graphics.clear()}static set target(t){N._target=t}static get target(){return N._target}static showSelected(){var t,e;if(N.autoShowSelected&&(N.selectedNodes&&!(N.selectedNodes.length<1)))for(console.log("selected:",N.selectedNodes),e=N.selectedNodes.length,N.clearDebugLayer(),t=0;t<e;t++)N.showDisBound(N.selectedNodes[t],!1)}static getClassCreateInfo(t){return G.getRunInfo(t)}static set showBound(t){N._showBound=t,N._showBound||N.clearDebugLayer()}static get showBound(){return N._showBound}static autoWork(){N.isThisShow&&(N.showBound&&N.showDisBound(),N.autoTraceSpriteInfo&&N.target&&l.traceSpriteInfo(N.target,N.autoTraceBounds,N.autoTraceSize,N.autoTraceTree),N.target&&(N.autoTraceCMD&&N.traceCMD(),N.autoTraceCMDR&&N.traceCMDR(),N.autoTraceEnable&&N.traceDisMouseEnable(N.target)))}static traceDisMouseEnable(t=null){if(console.log("----------------traceDisMouseEnable--------------------"),t||(t=N.target),!t)return console.log("no targetAvalible"),null;var e;for(e=[],N.selectedNodes=[];t;)e.push(s.getNodeClassAndName(t)+": mouseEnabled:"+t.mouseEnabled+" hitFirst:"+t.hitTestPrior),N.selectedNodes.push(t),t=t.parent;return console.log(e.join("\n")),N.showSelected(),e.join("\n")}static traceDisSizeChain(t=null){if(console.log("---------------------traceDisSizeChain-------------------"),t||(t=N.target),!t)return console.log("no targetAvalible"),null;var e;for(N.selectedNodes=[],e=[];t;)e.push(s.getNodeClassAndName(t)+": x:"+t.x+" y:"+t.y+" w:"+t.width+" h:"+t.height+" scaleX:"+t.scaleX+" scaleY:"+t.scaleY),N.selectedNodes.push(t),t=t.parent;return console.log(e.join("\n")),N.showSelected(),e.join("\n")}static showDisBound(t=null,a=!0,i="#ff0000"){if(t||(t=N.target),!t)return console.log("no targetAvalible"),null;var s;a&&N.clearDebugLayer(),!(s=t._getBoundPointsM(!0))||s.length<1||(s=e.GrahamScan.pListToPointList(s,!0),W.walkArr(s,t.localToGlobal,t),s=e.GrahamScan.pointListToPlist(s),N._disBoundRec=e.Rectangle._getWrapRec(s,N._disBoundRec),N.debugLayer.graphics.drawRect(N._disBoundRec.x,N._disBoundRec.y,N._disBoundRec.width,N._disBoundRec.height,null,i),p.I.setTop())}static showDisBoundToSprite(t=null,a=null,i="#ff0000",s=1){var l;!(l=t._getBoundPointsM(!0))||l.length<1||(l=e.GrahamScan.pListToPointList(l,!0),W.walkArr(l,t.localToGlobal,t),l=e.GrahamScan.pointListToPlist(l),N._disBoundRec=e.Rectangle._getWrapRec(l,N._disBoundRec),a.graphics.drawRect(N._disBoundRec.x,N._disBoundRec.y,N._disBoundRec.width,N._disBoundRec.height,null,i,s))}static getNodeInfo(){return N.counter.reset(),W.walkTarget(e.Laya.stage,N.addNodeInfo),console.log("node info:"),N.counter.traceSelf(),N.counter.data}static findByClass(t){return N._classList=[],N._tFindClass=t,W.walkTarget(e.Laya.stage,N.addClassNode),N.selectedNodes=N._classList,N.showSelected(),N._classList}static addClassNode(t){t.constructor.name==N._tFindClass&&N._classList.push(t)}static traceCMD(t=null){if(t||(t=N.target),!t)return console.log("no targetAvalible"),null;var a;for(console.log("self CMDs:"),console.log(t.graphics.cmds),a=e.RenderSprite.renders[t._renderType],console.log("renderSprite:",a),N._rSpList.length=0;a&&a._sign>0;)N._rSpList.push(N.cmdToTypeO[a._sign]),a=a._next;return console.log("fun:",N._rSpList.join(",")),N.counter.reset(),N.addCMDs(t.graphics.cmds),N.counter.traceSelf(),N.counter.data}static addCMDs(t){W.walkArr(t,N.addCMD)}static addCMD(t){N.counter.add(t.callee)}static traceCMDR(t=null){return t||(t=N.target),t?(N.counter.reset(),W.walkTarget(t,N.getCMdCount),console.log("cmds include children"),N.counter.traceSelf(),N.counter.data):(console.log("no targetAvalible"),0)}static getCMdCount(t){return t&&t instanceof e.Sprite&&t.graphics.cmds?(N.addCMDs(t.graphics.cmds),t.graphics.cmds.length):0}static addNodeInfo(t){var e;e=t.constructor.name,N.counter.add(e)}static find(t,a=!0){var i;return i=N.findTarget(e.Laya.stage,t),N.selectedNodes=i,N.selectedNodes&&(N.target=N.selectedNodes[0]),a&&N.showSelected(),i}static findByName(t){return N.nameFilter.name=t,N.find(N.nameFilter)}static findNameStartWith(t){return N.nameFilter.name=N.getStartWithFun(t),N.find(N.nameFilter)}static findNameHas(t,e=!0){return N.nameFilter.name=N.getHasFun(t),N.find(N.nameFilter,e)}static getStartWithFun(t){return function(e){return!!e&&0==e.indexOf(t)}}static getHasFun(t){return function(e){return!!e&&e.indexOf(t)>=0}}static findTarget(t,a){var i,s,l,r=[];for(N.isFit(t,a)&&r.push(t),s=t.numChildren,i=0;i<s;i++)(l=t.getChildAt(i))instanceof e.Sprite&&(r=r.concat(N.findTarget(l,a)));return r}static findClassHas(t,a){var i,l,r,n=[];for(s.getClassName(t).indexOf(a)>=0&&n.push(t),l=t.numChildren,i=0;i<l;i++)(r=t.getChildAt(i))instanceof e.Sprite&&(n=n.concat(N.findClassHas(r,a)));return n}static isFit(t,e){if(!t)return!1;if(!e)return!0;if(e instanceof Function)return e(t);var a;for(a in e)if(e[a]instanceof Function){if(!e[a](t[a]))return!1}else if(t[a]!=e[a])return!1;return!0}static log(...t){var e;e=m.getArgArr(t),null!=N._logFun&&N._logFun(e.join(" "))}static export(){var t,e;for(e in t=window,N._exportsDic)t[e]=N._exportsDic[e]}}N.enableCacheAnalyse=!1,N.enableNodeCreateAnalyse=!0,N.text=new e.Stat,N.selectedNodes=[],N.autoShowSelected=!0,N._showBound=!0,N.autoTraceEnable=!1,N.autoTraceBounds=!1,N.autoTraceSize=!1,N.autoTraceTree=!0,N.autoTraceCMD=!0,N.autoTraceCMDR=!1,N.autoTraceSpriteInfo=!0,N.cmdToTypeO={},N._rSpList=[],N.counter=new r,N.nameFilter={name:"name"},N._exportsDic={DebugTool:N,Watcher:w},l._debugtrace=N.dTrace;class I{constructor(t=null){this._xd_=!0,this._allocated_=8,this._pos_=0,this._length=0,t?(this._u8d_=new Uint8Array(t),this._d_=new DataView(this._u8d_.buffer),this._length=this._d_.byteLength):this._resizeBuffer(this._allocated_)}static getSystemEndian(){if(!I._sysEndian){var t=new ArrayBuffer(2);new DataView(t).setInt16(0,256,!0),I._sysEndian=256===new Int16Array(t)[0]?I.LITTLE_ENDIAN:I.BIG_ENDIAN}return I._sysEndian}get buffer(){var t=this._d_.buffer;return t.byteLength===this._length?t:t.slice(0,this._length)}get endian(){return this._xd_?I.LITTLE_ENDIAN:I.BIG_ENDIAN}set endian(t){this._xd_=t===I.LITTLE_ENDIAN}set length(t){this._allocated_<t?this._resizeBuffer(this._allocated_=Math.floor(Math.max(t,2*this._allocated_))):this._allocated_>t&&this._resizeBuffer(this._allocated_=t),this._length=t}get length(){return this._length}_resizeBuffer(t){try{var e=new Uint8Array(t);null!=this._u8d_&&(this._u8d_.length<=t?e.set(this._u8d_):e.set(this._u8d_.subarray(0,t))),this._u8d_=e,this._d_=new DataView(e.buffer)}catch(e){throw"Invalid typed array length:"+t}}getString(){return this.readString()}readString(){return this._rUTF(this.getUint16())}getFloat32Array(t,e){return this.readFloat32Array(t,e)}readFloat32Array(t,e){var a=t+e;a=a>this._length?this._length:a;var i=new Float32Array(this._d_.buffer.slice(t,a));return this._pos_=a,i}getUint8Array(t,e){return this.readUint8Array(t,e)}readUint8Array(t,e){var a=t+e;a=a>this._length?this._length:a;var i=new Uint8Array(this._d_.buffer.slice(t,a));return this._pos_=a,i}getInt16Array(t,e){return this.readInt16Array(t,e)}readInt16Array(t,e){var a=t+e;a=a>this._length?this._length:a;var i=new Int16Array(this._d_.buffer.slice(t,a));return this._pos_=a,i}getFloat32(){return this.readFloat32()}readFloat32(){if(this._pos_+4>this._length)throw"getFloat32 error - Out of bounds";var t=this._d_.getFloat32(this._pos_,this._xd_);return this._pos_+=4,t}getFloat64(){return this.readFloat64()}readFloat64(){if(this._pos_+8>this._length)throw"getFloat64 error - Out of bounds";var t=this._d_.getFloat64(this._pos_,this._xd_);return this._pos_+=8,t}writeFloat32(t){this._ensureWrite(this._pos_+4),this._d_.setFloat32(this._pos_,t,this._xd_),this._pos_+=4}writeFloat64(t){this._ensureWrite(this._pos_+8),this._d_.setFloat64(this._pos_,t,this._xd_),this._pos_+=8}getInt32(){return this.readInt32()}readInt32(){if(this._pos_+4>this._length)throw"getInt32 error - Out of bounds";var t=this._d_.getInt32(this._pos_,this._xd_);return this._pos_+=4,t}getUint32(){return this.readUint32()}readUint32(){if(this._pos_+4>this._length)throw"getUint32 error - Out of bounds";var t=this._d_.getUint32(this._pos_,this._xd_);return this._pos_+=4,t}writeInt32(t){this._ensureWrite(this._pos_+4),this._d_.setInt32(this._pos_,t,this._xd_),this._pos_+=4}writeUint32(t){this._ensureWrite(this._pos_+4),this._d_.setUint32(this._pos_,t,this._xd_),this._pos_+=4}getInt16(){return this.readInt16()}readInt16(){if(this._pos_+2>this._length)throw"getInt16 error - Out of bounds";var t=this._d_.getInt16(this._pos_,this._xd_);return this._pos_+=2,t}getUint16(){return this.readUint16()}readUint16(){if(this._pos_+2>this._length)throw"getUint16 error - Out of bounds";var t=this._d_.getUint16(this._pos_,this._xd_);return this._pos_+=2,t}writeUint16(t){this._ensureWrite(this._pos_+2),this._d_.setUint16(this._pos_,t,this._xd_),this._pos_+=2}writeInt16(t){this._ensureWrite(this._pos_+2),this._d_.setInt16(this._pos_,t,this._xd_),this._pos_+=2}getUint8(){return this.readUint8()}readUint8(){if(this._pos_+1>this._length)throw"getUint8 error - Out of bounds";return this._d_.getUint8(this._pos_++)}writeUint8(t){this._ensureWrite(this._pos_+1),this._d_.setUint8(this._pos_,t),this._pos_++}_getUInt8(t){return this._readUInt8(t)}_readUInt8(t){return this._d_.getUint8(t)}_getUint16(t){return this._readUint16(t)}_readUint16(t){return this._d_.getUint16(t,this._xd_)}_getMatrix(){return this._readMatrix()}_readMatrix(){return new e.Matrix(this.getFloat32(),this.getFloat32(),this.getFloat32(),this.getFloat32(),this.getFloat32(),this.getFloat32())}_rUTF(t){for(var e,a="",i=this._pos_+t,s=String.fromCharCode,l=this._u8d_;this._pos_<i;)(e=l[this._pos_++])<128?0!=e&&(a+=s(e)):a+=s(e<224?(63&e)<<6|127&l[this._pos_++]:e<240?(31&e)<<12|(127&l[this._pos_++])<<6|127&l[this._pos_++]:(15&e)<<18|(127&l[this._pos_++])<<12|l[this._pos_++]<<6&127|127&l[this._pos_++]);return a}getCustomString(t){return this.readCustomString(t)}readCustomString(t){for(var e,a="",i=0,s=String.fromCharCode,l=this._u8d_;t>0;)if((e=l[this._pos_])<128)a+=s(e),this._pos_++,t--;else for(i=e-128,this._pos_++,t-=i;i>0;)e=l[this._pos_++],a+=s(l[this._pos_++]<<8|e),i--;return a}get pos(){return this._pos_}set pos(t){this._pos_=t}get bytesAvailable(){return this._length-this._pos_}clear(){this._pos_=0,this.length=0}__getBuffer(){return this._d_.buffer}writeUTFBytes(t){for(var e=0,a=(t+="").length;e<a;e++){var i=t.charCodeAt(e);i<=127?this.writeByte(i):i<=2047?(this._ensureWrite(this._pos_+2),this._u8d_.set([192|i>>6,128|63&i],this._pos_),this._pos_+=2):i<=65535?(this._ensureWrite(this._pos_+3),this._u8d_.set([224|i>>12,128|i>>6&63,128|63&i],this._pos_),this._pos_+=3):(this._ensureWrite(this._pos_+4),this._u8d_.set([240|i>>18,128|i>>12&63,128|i>>6&63,128|63&i],this._pos_),this._pos_+=4)}}writeUTFString(t){var e=this.pos;this.writeUint16(1),this.writeUTFBytes(t);var a=this.pos-e-2;this._d_.setUint16(e,a,this._xd_)}readUTFString(){return this.readUTFBytes(this.getUint16())}getUTFString(){return this.readUTFString()}readUTFBytes(t=-1){if(0===t)return"";var e=this.bytesAvailable;if(t>e)throw"readUTFBytes error - Out of bounds";return t=t>0?t:e,this._rUTF(t)}getUTFBytes(t=-1){return this.readUTFBytes(t)}writeByte(t){this._ensureWrite(this._pos_+1),this._d_.setInt8(this._pos_,t),this._pos_+=1}readByte(){if(this._pos_+1>this._length)throw"readByte error - Out of bounds";return this._d_.getInt8(this._pos_++)}getByte(){return this.readByte()}_ensureWrite(t){this._length<t&&(this._length=t),this._allocated_<t&&(this.length=t)}writeArrayBuffer(t,e=0,a=0){if(e<0||a<0)throw"writeArrayBuffer error - Out of bounds";0==a&&(a=t.byteLength-e),this._ensureWrite(this._pos_+a);var i=new Uint8Array(t);this._u8d_.set(i.subarray(e,e+a),this._pos_),this._pos_+=a}}I.BIG_ENDIAN="bigEndian",I.LITTLE_ENDIAN="littleEndian",I._sysEndian=null;class f{constructor(){}static init(){if(!f.lookup){f.lookup=new Uint8Array(256);for(var t=0;t<f.chars.length;t++)f.lookup[f.chars.charCodeAt(t)]=t}}static encode(t){var e,a=new Uint8Array(t),i=a.length,s="";for(e=0;e<i;e+=3)s+=f.chars[a[e]>>2],s+=f.chars[(3&a[e])<<4|a[e+1]>>4],s+=f.chars[(15&a[e+1])<<2|a[e+2]>>6],s+=f.chars[63&a[e+2]];return i%3==2?s=s.substring(0,s.length-1)+"=":i%3==1&&(s=s.substring(0,s.length-2)+"=="),s}static encodeStr(t){var e;return(e=new I).writeUTFString(t),f.encodeByte(e)}static encodeStr2(t){var e;return(e=new I).writeUTFBytes(t),f.encodeByte(e)}static encodeByte(t,e=0,a=-1){return a<0&&(a=t.length),f.encode(t.buffer.slice(e,a))}static decodeToByte(t){return new I(f.decode(t))}static decode(t){f.init();var e,a,i,s,l,r=.75*t.length,n=t.length,o=0;"="===t[t.length-1]&&(r--,"="===t[t.length-2]&&r--);var h=new ArrayBuffer(r),d=new Uint8Array(h);for(e=0;e<n;e+=4)a=f.lookup[t.charCodeAt(e)],i=f.lookup[t.charCodeAt(e+1)],s=f.lookup[t.charCodeAt(e+2)],l=f.lookup[t.charCodeAt(e+3)],d[o++]=a<<2|i>>4,d[o++]=(15&i)<<4|s>>2,d[o++]=(3&s)<<6|63&l;return h}}f.chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f.lookup=null;class A{constructor(){}static init(){var t;t=f.decodeToByte(A.data).readUTFBytes(),window.eval(t)}}A.data="ZnVuY3Rpb24gZGh0bWx4RXZlbnQoZSx0LGkpe2UuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIodCxpLCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrdCxpKX1mdW5jdGlvbiBkaHRtbFhUcmVlT2JqZWN0KGUsdCxpLG4pe2lmKGRodG1seEV2ZW50LmluaXRUb3VjaCYmZGh0bWx4RXZlbnQuaW5pdFRvdWNoKCksX2lzSUUpdHJ5e2RvY3VtZW50LmV4ZWNDb21tYW5kKCJCYWNrZ3JvdW5kSW1hZ2VDYWNoZSIsITEsITApfWNhdGNoKG8pe310aGlzLnBhcmVudE9iamVjdD0ib2JqZWN0IiE9dHlwZW9mIGU/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSk6ZSx0aGlzLnBhcmVudE9iamVjdC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIix0aGlzLl9pdGltX2RnPSEwLHRoaXMuZGxtdHI9IiwiLHRoaXMuZHJvcExvd2VyPSExLHRoaXMuZW5hYmxlSUVJbWFnZUZpeCghMCksdGhpcy54bWxzdGF0ZT0wLHRoaXMubXl0eXBlPSJ0cmVlIix0aGlzLnNtY2hlY2s9ITAsdGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PWksdGhpcy5yb290SWQ9bix0aGlzLmNoaWxkQ2FsYz1udWxsLHRoaXMuZGVmX2ltZ194PSIxOHB4Iix0aGlzLmRlZl9pbWdfeT0iMThweCIsdGhpcy5kZWZfbGluZV9pbWdfeD0iMThweCIsdGhpcy5kZWZfbGluZV9pbWdfeT0iMjRweCIsdGhpcy5fZHJhZ2dlZD1uZXcgQXJyYXksdGhpcy5fc2VsZWN0ZWQ9bmV3IEFycmF5LHRoaXMuc3R5bGVfcG9pbnRlcj0icG9pbnRlciIsdGhpcy5fYWltZ3M9ITAsdGhpcy5odG1sY0E9IiBbIix0aGlzLmh0bWxjQj0iXSIsdGhpcy5sV2luPXdpbmRvdyx0aGlzLmNNZW51PTAsdGhpcy5tbGl0ZW1zPTAsdGhpcy5pY29uVVJMPSIiLHRoaXMuZGFkbW9kZT0wLHRoaXMuc2xvd1BhcnNlPSExLHRoaXMuYXV0b1Njcm9sbD0hMCx0aGlzLmhmTW9kZT0wLHRoaXMubm9kZUN1dD1uZXcgQXJyYXksdGhpcy5YTUxzb3VyY2U9MCx0aGlzLlhNTGxvYWRpbmdXYXJuaW5nPTAsdGhpcy5faWRwdWxsPXt9LHRoaXMuX3B1bGxTaXplPTAsdGhpcy50cmVlTGluZXNPbj0hMCx0aGlzLnRzY2hlY2s9ITEsdGhpcy50aW1nZW49ITAsdGhpcy5kcGNweT0hMSx0aGlzLl9sZF9pZD1udWxsLHRoaXMuX2R5bkRlbGV0ZUJyYW5jaGVzPXt9LHRoaXMuX29pZV9vblhMRT1bXSx0aGlzLmltUGF0aD13aW5kb3cuZGh4X2dsb2JhbEltZ1BhdGh8fCIiLHRoaXMuY2hlY2tBcnJheT1uZXcgQXJyYXkoImljb25VbmNoZWNrQWxsLmdpZiIsImljb25DaGVja0FsbC5naWYiLCJpY29uQ2hlY2tHcmF5LmdpZiIsImljb25VbmNoZWNrRGlzLmdpZiIsImljb25DaGVja0Rpcy5naWYiLCJpY29uQ2hlY2tEaXMuZ2lmIiksdGhpcy5yYWRpb0FycmF5PW5ldyBBcnJheSgicmFkaW9fb2ZmLmdpZiIsInJhZGlvX29uLmdpZiIsInJhZGlvX29uLmdpZiIsInJhZGlvX29mZi5naWYiLCJyYWRpb19vbi5naWYiLCJyYWRpb19vbi5naWYiKSx0aGlzLmxpbmVBcnJheT1uZXcgQXJyYXkoImxpbmUyLmdpZiIsImxpbmUzLmdpZiIsImxpbmU0LmdpZiIsYmxhbmtfYmFzZTY0LGJsYW5rX2Jhc2U2NCwibGluZTEuZ2lmIiksdGhpcy5taW51c0FycmF5PW5ldyBBcnJheSgibWludXMyLmdpZiIsIm1pbnVzMy5naWYiLCJtaW51czQuZ2lmIiwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRWdBWUFKRUNBTEd2clo2ZG5mVDA5QUFBQUNINUJBRUFBQUlBTEFBQUFBQVNBQmdBQUFJY2xJK3B5KzBQbzV5MFdoc0NEV0IzbUdYZnd3SG1oYWJxeXJaVEFRQTciLCJtaW51czUuZ2lmIiksdGhpcy5wbHVzQXJyYXk9bmV3IEFycmF5KCJwbHVzMi5naWYiLCJwbHVzMy5naWYiLCJwbHVzNC5naWYiLCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFZ0FZQUpFQ0FLR2duN0d2cmZUMDlBQUFBQ0g1QkFFQUFBSUFMQUFBQUFBU0FCZ0FBQUljbEkrcHkrMFBvNXkwVW5CRHlIc0NMUUZmT0U2ZGhhYnF5clpKQVFBNyIsInBsdXM1LmdpZiIpLHRoaXMuaW1hZ2VBcnJheT1uZXcgQXJyYXkoImRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEVnQVNBS0VDQUplWGw3R3ZyZi8vLy8vLy95SDVCQUVLQUFJQUxBQUFBQUFTQUJJQUFBSXpsSStwQXUyOURBaTAxamlUWFJuTm0zVEhCNDVCYUoyZXVsQm94TENTL0s2d09OODBYcHQ2citCOUhrU2FJSVdFS1EwRkFEcz0iLCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFZ0FTQUtFQ0FKZVhsN0d2cmYvLy8vLy8veUg1QkFFS0FBSUFMQUFBQUFBU0FCSUFBQUl6bEkrcHl3Y1BtM21oV2drQ3NqQk92VmtpbUVsRzlabENCbFhkKzJYampMS2c1R3FvZVpYcXZzT1FYSy9palVaVEtWVUZBRHM9IiwiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoRWdBU0FLRUNBSmVYbDdHdnJmLy8vLy8vL3lINUJBRUtBQUlBTEFBQUFBQVNBQklBQUFJd2xJK3B5d2NQbTNtaFdna0NzakJPdlZraW1FbEc5WmxDdVlJWTZUWXMrNmJtSERPNGlnZmREM0dOaGhlVjBWUUFBRHM9IiksdGhpcy5jdXRJbWc9bmV3IEFycmF5KDAsMCwwKSx0aGlzLmN1dEltYWdlPSJidXRfY3V0LmdpZiIsZGh4NC5fZXZlbnRhYmxlKHRoaXMpLHRoaXMuaHRtbE5vZGU9bmV3IGRodG1sWFRyZWVJdGVtT2JqZWN0KHRoaXMucm9vdElkLCIiLDAsdGhpcyksdGhpcy5odG1sTm9kZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5odG1sTm9kZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5jbGFzc05hbWU9ImhpZGRlblJvdyIsdGhpcy5hbGxUcmVlPXRoaXMuX2NyZWF0ZVNlbGYoKSx0aGlzLmFsbFRyZWUuYXBwZW5kQ2hpbGQodGhpcy5odG1sTm9kZS5odG1sTm9kZSksZGh0bWx4LiRjdXN0b21TY3JvbGwmJmRodG1seC5DdXN0b21TY3JvbGwuZW5hYmxlKHRoaXMpLF9pc0ZGJiYodGhpcy5hbGxUcmVlLmNoaWxkTm9kZXNbMF0ud2lkdGg9IjEwMCUiLHRoaXMuYWxsVHJlZS5jaGlsZE5vZGVzWzBdLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iKTt2YXIgcj10aGlzO2lmKHRoaXMuYWxsVHJlZS5vbnNlbGVjdHN0YXJ0PW5ldyBGdW5jdGlvbigicmV0dXJuIGZhbHNlOyIpLF9pc01hY09TJiYodGhpcy5hbGxUcmVlLm9uY29udGV4dG1lbnU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuX2RvQ29udENsaWNrKGV8fHdpbmRvdy5ldmVudCwhMCl9KSx0aGlzLmFsbFRyZWUub25tb3VzZWRvd249ZnVuY3Rpb24oZSl7cmV0dXJuIHIuX2RvQ29udENsaWNrKGV8fHdpbmRvdy5ldmVudCl9LHRoaXMuWE1MTG9hZGVyPXRoaXMuX3BhcnNlWE1MVHJlZSxfaXNJRSYmdGhpcy5wcmV2ZW50SUVDYXNoaW5nKCEwKSx0aGlzLnNlbGVjdGlvbkJhcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLnNlbGVjdGlvbkJhci5jbGFzc05hbWU9InNlbGVjdGlvbkJhciIsdGhpcy5zZWxlY3Rpb25CYXIuaW5uZXJIVE1MPSImbmJzcDsiLHRoaXMuc2VsZWN0aW9uQmFyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuYWxsVHJlZS5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkJhciksd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7dHJ5e3IuZGVzdHJ1Y3RvcigpfWNhdGNoKGUpe319LCExKSx3aW5kb3cuYXR0YWNoRXZlbnQmJndpbmRvdy5hdHRhY2hFdmVudCgib251bmxvYWQiLGZ1bmN0aW9uKCl7dHJ5e3IuZGVzdHJ1Y3RvcigpfWNhdGNoKGUpe319KSx0aGlzLnNldEltYWdlc1BhdGg9dGhpcy5zZXRJbWFnZVBhdGgsdGhpcy5zZXRJY29uc1BhdGg9dGhpcy5zZXRJY29uUGF0aCx0aGlzLnNldFNraW4oIm1hdGVyaWFsIiksZGh0bWx4LmltYWdlX3BhdGgpe3ZhciBsPWRodG1seC5pbWFnZV9wYXRoLHM9dGhpcy5wYXJlbnRPYmplY3QuY2xhc3NOYW1lLm1hdGNoKC9kaHh0cmVlX2RoeF8oW2Etel9dKikvaSk7bnVsbCE9cyYmbnVsbCE9c1sxXSYmKGwrPSJkaHh0cmVlXyIrc1sxXSsiLyIpLHRoaXMuc2V0SW1hZ2VQYXRoKGwpfXJldHVybiB0aGlzfWZ1bmN0aW9uIGNPYmplY3QoKXtyZXR1cm4gdGhpc31mdW5jdGlvbiBkaHRtbFhUcmVlSXRlbU9iamVjdChlLHQsaSxuLG8scil7cmV0dXJuIHRoaXMuaHRtbE5vZGU9IiIsdGhpcy5hY29sb3I9IiIsdGhpcy5zY29sb3I9IiIsdGhpcy50cj0wLHRoaXMuY2hpbGRzQ291bnQ9MCx0aGlzLnRlbXBET01NPTAsdGhpcy50ZW1wRE9NVT0wLHRoaXMuZHJhZ1NwYW49MCx0aGlzLmRyYWdNb3ZlPTAsdGhpcy5zcGFuPTAsdGhpcy5jbG9zZWJsZT0xLHRoaXMuY2hpbGROb2Rlcz1uZXcgQXJyYXksdGhpcy51c2VyRGF0YT1uZXcgY09iamVjdCx0aGlzLmNoZWNrc3RhdGU9MCx0aGlzLnRyZWVOb2Q9bix0aGlzLmxhYmVsPXQsdGhpcy5wYXJlbnRPYmplY3Q9aSx0aGlzLmFjdGlvbkhhbmRsZXI9byx0aGlzLmltYWdlcz1uZXcgQXJyYXkobi5pbWFnZUFycmF5WzBdLG4uaW1hZ2VBcnJheVsxXSxuLmltYWdlQXJyYXlbMl0pLHRoaXMuaWQ9bi5fZ2xvYmFsSWRTdG9yYWdlQWRkKGUsdGhpcyksdGhpcy5odG1sTm9kZT10aGlzLnRyZWVOb2QuY2hlY2tCb3hPZmY/dGhpcy50cmVlTm9kLl9jcmVhdGVJdGVtKDEsdGhpcyxyKTp0aGlzLnRyZWVOb2QuX2NyZWF0ZUl0ZW0oMCx0aGlzLHIpLHRoaXMuaHRtbE5vZGUub2JqQmVsb25nPXRoaXMsdGhpc31mdW5jdGlvbiBqc29uUG9pbnRlcihlLHQpe3RoaXMuZD1lLHRoaXMuZHA9dH1mdW5jdGlvbiBkaHhfaW5pdF90cmVlcygpe2Zvcih2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGl2IiksdD0wO3Q8ZS5sZW5ndGg7dCsrKSJkaHRtbHhUcmVlIj09ZVt0XS5jbGFzc05hbWUmJmRodG1sWFRyZWVGcm9tSFRNTChlW3RdKX12YXIgYmxhbmtfYmFzZTY0PSJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhFZ0FTQUlBQUFQLy8vLy8vL3lINUJBVVVBQUVBTEFBQUFBQVNBQklBQUFJUGpJK3B5KzBQbzV5MDJvdXozcHdYQURzPSI7InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cuZGh4JiYod2luZG93LmRoeD13aW5kb3cuZGh4ND17dmVyc2lvbjoiNS4wIixza2luOm51bGwsbGFzdElkOjEsbmV3SWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYXN0SWQrK30semltOntkYXRhOnt9LHN0ZXA6NSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiAxMDB9LGxhc3Q6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmZpcnN0KCk7Zm9yKHZhciB0IGluIHRoaXMuZGF0YSllPU1hdGgubWF4KGUsdGhpcy5kYXRhW3RdKTtyZXR1cm4gZX0scmVzZXJ2ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kYXRhW2VdPXRoaXMubGFzdCgpK3RoaXMuc3RlcCx0aGlzLmRhdGFbZV19LGNsZWFyOmZ1bmN0aW9uKGUpe251bGwhPXRoaXMuZGF0YVtlXSYmKHRoaXMuZGF0YVtlXT1udWxsLGRlbGV0ZSB0aGlzLmRhdGFbZV0pfX0sczJiOmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZS50b0xvd2VyQ2FzZSgpKSwxPT1lfHwxPT1lfHwidHJ1ZSI9PWV8fCIxIj09ZXx8InllcyI9PWV8fCJ5Ij09ZXx8Im9uIj09ZX0sczJqOmZ1bmN0aW9uKHMpe3ZhciBvYmo9bnVsbDtkaHg0LnRlbXA9bnVsbDt0cnl7ZXZhbCgiZGh4NC50ZW1wPSIrcyl9Y2F0Y2goZSl7ZGh4NC50ZW1wPW51bGx9cmV0dXJuIG9iaj1kaHg0LnRlbXAsZGh4NC50ZW1wPW51bGwsb2JqfSxhYnNMZWZ0OmZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmKGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSkpLHRoaXMuZ2V0T2Zmc2V0KGUpLmxlZnR9LGFic1RvcDpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpKSx0aGlzLmdldE9mZnNldChlKS50b3B9LF9hT2ZzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLGk9MDtlOyl0Kz1wYXJzZUludChlLm9mZnNldFRvcCksaSs9cGFyc2VJbnQoZS5vZmZzZXRMZWZ0KSxlPWUub2Zmc2V0UGFyZW50O3JldHVybnt0b3A6dCxsZWZ0Oml9fSxfYU9mc1JlY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPWRvY3VtZW50LmJvZHksbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbz13aW5kb3cucGFnZVlPZmZzZXR8fG4uc2Nyb2xsVG9wfHxpLnNjcm9sbFRvcCxyPXdpbmRvdy5wYWdlWE9mZnNldHx8bi5zY3JvbGxMZWZ0fHxpLnNjcm9sbExlZnQsbD1uLmNsaWVudFRvcHx8aS5jbGllbnRUb3B8fDAscz1uLmNsaWVudExlZnR8fGkuY2xpZW50TGVmdHx8MCxhPXQudG9wK28tbCxkPXQubGVmdCtyLXM7cmV0dXJue3RvcDpNYXRoLnJvdW5kKGEpLGxlZnQ6TWF0aC5yb3VuZChkKX19LGdldE9mZnNldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3Q/dGhpcy5fYU9mc1JlY3QoZSk6dGhpcy5fYU9mcyhlKX0sX2lzT2JqOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYib2JqZWN0Ij09dHlwZW9mIGUmJiJ1bmRlZmluZWQiPT10eXBlb2YgZS5sZW5ndGh9LF9jb3B5T2JqOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2lzT2JqKGUpKXt2YXIgdD17fTtmb3IodmFyIGkgaW4gZSl0W2ldPSJvYmplY3QiPT10eXBlb2YgZVtpXSYmbnVsbCE9ZVtpXT90aGlzLl9jb3B5T2JqKGVbaV0pOmVbaV19ZWxzZSBmb3IodmFyIHQ9W10saT0wO2k8ZS5sZW5ndGg7aSsrKXRbaV09Im9iamVjdCI9PXR5cGVvZiBlW2ldJiZudWxsIT1lW2ldP3RoaXMuX2NvcHlPYmooZVtpXSk6ZVtpXTtyZXR1cm4gdH19LHdpbmRvdy5kaHg0LmlzSUU9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIik+PTB8fG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudCIpPj0wLHdpbmRvdy5kaHg0LmlzSUU2PW51bGw9PXdpbmRvdy5YTUxIdHRwUmVxdWVzdCYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIik+PTAsd2luZG93LmRoeDQuaXNJRTc9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDcuMCIpPj0wJiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQiKTwwLHdpbmRvdy5kaHg0LmlzSUU4PW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSA4LjAiKT49MCYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJUcmlkZW50Iik+PTAsd2luZG93LmRoeDQuaXNJRTk9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDkuMCIpPj0wJiZuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQiKT49MCx3aW5kb3cuZGh4NC5pc0lFMTA9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIDEwLjAiKT49MCYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJUcmlkZW50Iik+PTAmJjEhPXdpbmRvdy5uYXZpZ2F0b3IucG9pbnRlckVuYWJsZWQsd2luZG93LmRoeDQuaXNJRTExPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudCIpPj0wJiYxPT13aW5kb3cubmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkLHdpbmRvdy5kaHg0LmlzRWRnZT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkVkZ2UiKT49MCx3aW5kb3cuZGh4NC5pc09wZXJhPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiT3BlcmEiKT49MCx3aW5kb3cuZGh4NC5pc0Nocm9tZT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZSIpPj0wJiYhd2luZG93LmRoeDQuaXNFZGdlLHdpbmRvdy5kaHg0LmlzS0hUTUw9KG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiU2FmYXJpIik+PTB8fG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiS29ucXVlcm9yIik+PTApJiYhd2luZG93LmRoeDQuaXNFZGdlLHdpbmRvdy5kaHg0LmlzRkY9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94Iik+PTAsd2luZG93LmRoeDQuaXNJUGFkPW5hdmlnYXRvci51c2VyQWdlbnQuc2VhcmNoKC9pUGFkL2dpKT49MCx3aW5kb3cuZGh4NC5kbmQ9e2V2czp7fSxwX2VuOih3aW5kb3cuZGh4NC5pc0lFfHx3aW5kb3cuZGh4NC5pc0VkZ2UpJiYod2luZG93Lm5hdmlnYXRvci5wb2ludGVyRW5hYmxlZHx8d2luZG93Lm5hdmlnYXRvci5tc1BvaW50ZXJFbmFibGVkKSxfbVRvdWNoOmZ1bmN0aW9uKGUpe3JldHVybiB3aW5kb3cuZGh4NC5pc0lFMTAmJmUucG9pbnRlclR5cGU9PWUuTVNQT0lOVEVSX1RZUEVfTU9VU0V8fHdpbmRvdy5kaHg0LmlzSUUxMSYmIm1vdXNlIj09ZS5wb2ludGVyVHlwZXx8d2luZG93LmRoeDQuaXNFZGdlJiYibW91c2UiPT1lLnBvaW50ZXJUeXBlfSxfdG91Y2hPbjpmdW5jdGlvbihlKXtudWxsPT1lJiYoZT1kb2N1bWVudC5ib2R5KSxlLnN0eWxlLnRvdWNoQWN0aW9uPWUuc3R5bGUubXNUb3VjaEFjdGlvbj0iIixlPW51bGx9LF90b3VjaE9mZjpmdW5jdGlvbihlKXtudWxsPT1lJiYoZT1kb2N1bWVudC5ib2R5KSxlLnN0eWxlLnRvdWNoQWN0aW9uPWUuc3R5bGUubXNUb3VjaEFjdGlvbj0ibm9uZSIsZT1udWxsfX0sMT09d2luZG93Lm5hdmlnYXRvci5wb2ludGVyRW5hYmxlZD93aW5kb3cuZGh4NC5kbmQuZXZzPXtzdGFydDoicG9pbnRlcmRvd24iLG1vdmU6InBvaW50ZXJtb3ZlIixlbmQ6InBvaW50ZXJ1cCJ9OjE9PXdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZD93aW5kb3cuZGh4NC5kbmQuZXZzPXtzdGFydDoiTVNQb2ludGVyRG93biIsbW92ZToiTVNQb2ludGVyTW92ZSIsZW5kOiJNU1BvaW50ZXJVcCJ9OiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXImJih3aW5kb3cuZGh4NC5kbmQuZXZzPXtzdGFydDoidG91Y2hzdGFydCIsbW92ZToidG91Y2htb3ZlIixlbmQ6InRvdWNoZW5kIn0pKSwidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdy5kaHg0Ll9ldmVudGFibGUmJih3aW5kb3cuZGh4NC5fZXZlbnRhYmxlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuImNsZWFyIj09dD8oZS5kZXRhY2hBbGxFdmVudHMoKSxlLmRoeGV2cz1udWxsLGUuYXR0YWNoRXZlbnQ9bnVsbCxlLmRldGFjaEV2ZW50PW51bGwsZS5jaGVja0V2ZW50PW51bGwsZS5jYWxsRXZlbnQ9bnVsbCxlLmRldGFjaEFsbEV2ZW50cz1udWxsLGU9bnVsbCx2b2lkIDApOihlLmRoeGV2cz17ZGF0YTp7fX0sZS5hdHRhY2hFdmVudD1mdW5jdGlvbihlLHQpe2U9U3RyaW5nKGUpLnRvTG93ZXJDYXNlKCksdGhpcy5kaHhldnMuZGF0YVtlXXx8KHRoaXMuZGh4ZXZzLmRhdGFbZV09e30pO3ZhciBpPXdpbmRvdy5kaHg0Lm5ld0lkKCk7cmV0dXJuIHRoaXMuZGh4ZXZzLmRhdGFbZV1baV09dCxpfSxlLmRldGFjaEV2ZW50PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLmRoeGV2cy5kYXRhKXt2YXIgaT0wO2Zvcih2YXIgbiBpbiB0aGlzLmRoeGV2cy5kYXRhW3RdKW49PWU/KHRoaXMuZGh4ZXZzLmRhdGFbdF1bbl09bnVsbCxkZWxldGUgdGhpcy5kaHhldnMuZGF0YVt0XVtuXSk6aSsrOzA9PWkmJih0aGlzLmRoeGV2cy5kYXRhW3RdPW51bGwsZGVsZXRlIHRoaXMuZGh4ZXZzLmRhdGFbdF0pfX0sZS5jaGVja0V2ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPVN0cmluZyhlKS50b0xvd2VyQ2FzZSgpLG51bGwhPXRoaXMuZGh4ZXZzLmRhdGFbZV19LGUuY2FsbEV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoZT1TdHJpbmcoZSkudG9Mb3dlckNhc2UoKSxudWxsPT10aGlzLmRoeGV2cy5kYXRhW2VdKXJldHVybiEwO3ZhciBpPSEwO2Zvcih2YXIgbiBpbiB0aGlzLmRoeGV2cy5kYXRhW2VdKWk9dGhpcy5kaHhldnMuZGF0YVtlXVtuXS5hcHBseSh0aGlzLHQpJiZpO3JldHVybiBpfSxlLmRldGFjaEFsbEV2ZW50cz1mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLmRoeGV2cy5kYXRhKXtmb3IodmFyIHQgaW4gdGhpcy5kaHhldnMuZGF0YVtlXSl0aGlzLmRoeGV2cy5kYXRhW2VdW3RdPW51bGwsZGVsZXRlIHRoaXMuZGh4ZXZzLmRhdGFbZV1bdF07dGhpcy5kaHhldnMuZGF0YVtlXT1udWxsLGRlbGV0ZSB0aGlzLmRoeGV2cy5kYXRhW2VdfX0sZT1udWxsLHZvaWQgMCl9LGRoeDQuX2V2ZW50YWJsZShkaHg0KSksInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cuZGh0bWx4JiYod2luZG93LmRodG1seD17ZXh0ZW5kOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpIGluIHQpZVtpXXx8KGVbaV09dFtpXSk7cmV0dXJuIGV9LGV4dGVuZF9hcGk6ZnVuY3Rpb24oZSx0LGkpe3ZhciBuPXdpbmRvd1tlXTtuJiYod2luZG93W2VdPWZ1bmN0aW9uKGUpe2lmKGUmJiJvYmplY3QiPT10eXBlb2YgZSYmIWUudGFnTmFtZSl7dmFyIGk9bi5hcHBseSh0aGlzLHQuX2luaXQ/dC5faW5pdChlKTphcmd1bWVudHMpO2Zvcih2YXIgbyBpbiBkaHRtbHgpdFtvXSYmdGhpc1t0W29dXShkaHRtbHhbb10pO2Zvcih2YXIgbyBpbiBlKXRbb10/dGhpc1t0W29dXShlW29dKTowPT09by5pbmRleE9mKCJvbiIpJiZ0aGlzLmF0dGFjaEV2ZW50KG8sZVtvXSl9ZWxzZSB2YXIgaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdC5fcGF0Y2gmJnQuX3BhdGNoKHRoaXMpLGl8fHRoaXN9LHdpbmRvd1tlXS5wcm90b3R5cGU9bi5wcm90b3R5cGUsaSYmZGh0bWx4LmV4dGVuZCh3aW5kb3dbZV0ucHJvdG90eXBlLGkpKX0sdXJsOmZ1bmN0aW9uKGUpe3JldHVybi0xIT1lLmluZGV4T2YoIj8iKT8iJiI6Ij8ifX0pLF9pc0ZGPSExLF9pc0lFPSExLF9pc09wZXJhPSExLF9pc0tIVE1MPSExLF9pc01hY09TPSExLF9pc0Nocm9tZT0hMSxfRkZydj0hMSxfS0hUTUxydj0hMSxfT3BlcmFSdj0hMSwtMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNYWNpbnRvc2giKSYmKF9pc01hY09TPSEwKSxuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZigiY2hyb21lIik+LTEmJihfaXNDaHJvbWU9ITApLC0xIT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlNhZmFyaSIpfHwtMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJLb25xdWVyb3IiKT8oX0tIVE1McnY9cGFyc2VGbG9hdChuYXZpZ2F0b3IudXNlckFnZW50LnN1YnN0cihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlNhZmFyaSIpKzcsNSkpLF9LSFRNTHJ2PjUyNT8oX2lzRkY9ITAsX0ZGcnY9MS45KTpfaXNLSFRNTD0hMCk6LTEhPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiT3BlcmEiKT8oX2lzT3BlcmE9ITAsX09wZXJhUnY9cGFyc2VGbG9hdChuYXZpZ2F0b3IudXNlckFnZW50LnN1YnN0cihuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk9wZXJhIikrNiwzKSkpOi0xIT1uYXZpZ2F0b3IuYXBwTmFtZS5pbmRleE9mKCJNaWNyb3NvZnQiKT8oX2lzSUU9ITAsKC0xIT1uYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCJNU0lFIDguMCIpfHwtMSE9bmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZigiTVNJRSA5LjAiKXx8LTEhPW5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoIk1TSUUgMTAuMCIpfHxkb2N1bWVudC5kb2N1bWVudE1vZGU+NykmJiJCYWNrQ29tcGF0IiE9ZG9jdW1lbnQuY29tcGF0TW9kZSYmKF9pc0lFPTgpKToiTmV0c2NhcGUiPT1uYXZpZ2F0b3IuYXBwTmFtZSYmLTEhPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudCIpP19pc0lFPTg6KF9pc0ZGPSEwLF9GRnJ2PXBhcnNlRmxvYXQobmF2aWdhdG9yLnVzZXJBZ2VudC5zcGxpdCgicnY6IilbMV0pKSwidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdy5kaHRtbHhFdmVudCxudWxsPT1kaHRtbHhFdmVudC50b3VjaERlbGF5JiYoZGh0bWx4RXZlbnQudG91Y2hEZWxheT0yZTMpLCJ1bmRlZmluZWQiPT10eXBlb2YgZGh0bWx4RXZlbnQuaW5pdFRvdWNoJiYoZGh0bWx4RXZlbnQuaW5pdFRvdWNoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2lmKGkpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIik7ZS5pbml0RXZlbnQoImRibGNsaWNrIiwhMCwhMCksaS5kaXNwYXRjaEV2ZW50KGUpLHQ9aT1udWxsfX12YXIgdCxpLG4sbztkaHRtbHhFdmVudChkb2N1bWVudC5ib2R5LCJ0b3VjaHN0YXJ0IixmdW5jdGlvbihyKXtpPXIudG91Y2hlc1swXS50YXJnZXQsbj1yLnRvdWNoZXNbMF0uY2xpZW50WCxvPXIudG91Y2hlc1swXS5jbGllbnRZLHQ9d2luZG93LnNldFRpbWVvdXQoZSxkaHRtbHhFdmVudC50b3VjaERlbGF5KX0pLGRodG1seEV2ZW50KGRvY3VtZW50LmJvZHksInRvdWNobW92ZSIsZnVuY3Rpb24oZSl7dCYmKE1hdGguYWJzKGUudG91Y2hlc1swXS5jbGllbnRYLW4pPjUwfHxNYXRoLmFicyhlLnRvdWNoZXNbMF0uY2xpZW50WS1vKT41MCkmJih3aW5kb3cuY2xlYXJUaW1lb3V0KHQpLHQ9aT0hMSl9KSxkaHRtbHhFdmVudChkb2N1bWVudC5ib2R5LCJ0b3VjaGVuZCIsZnVuY3Rpb24oKXt0JiYod2luZG93LmNsZWFyVGltZW91dCh0KSx0PWk9ITEpfSksZGh0bWx4RXZlbnQuaW5pdFRvdWNoPWZ1bmN0aW9uKCl7fX0pLGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9kb0NvbnRDbGljaz1mdW5jdGlvbihlLHQpe2lmKCF0JiYyIT1lLmJ1dHRvbilyZXR1cm4gdGhpcy5fYWNNZW51JiYodGhpcy5fYWNNZW51LmhpZGVDb250ZXh0TWVudT90aGlzLl9hY01lbnUuaGlkZUNvbnRleHRNZW51KCk6dGhpcy5jTWVudS5fY29udGV4dEVuZCgpKSwhMDtmb3IodmFyIGk9X2lzSUU/ZS5zcmNFbGVtZW50OmUudGFyZ2V0O2kmJiJCT0RZIiE9aS50YWdOYW1lJiYhaS5wYXJlbnRPYmplY3Q7KWk9aS5wYXJlbnROb2RlO2lmKCFpfHwhaS5wYXJlbnRPYmplY3QpcmV0dXJuITA7dmFyIG49aS5wYXJlbnRPYmplY3Q7aWYodGhpcy5jYWxsRXZlbnQoIm9uUmlnaHRDbGljayIsW24uaWQsZV0pfHwoKGUuc3JjRWxlbWVudHx8ZS50YXJnZXQpLm9uY29udGV4dG1lbnU9ZnVuY3Rpb24oZSl7cmV0dXJuKGV8fGV2ZW50KS5jYW5jZWxCdWJibGU9ITAsITF9KSx0aGlzLl9hY01lbnU9bi5jTWVudXx8dGhpcy5jTWVudSx0aGlzLl9hY01lbnUpe2lmKCF0aGlzLmNhbGxFdmVudCgib25CZWZvcmVDb250ZXh0TWVudSIsW24uaWRdKSlyZXR1cm4hMDtpZihfaXNNYWNPU3x8KChlLnNyY0VsZW1lbnR8fGUudGFyZ2V0KS5vbmNvbnRleHRtZW51PWZ1bmN0aW9uKGUpe3JldHVybihlfHxldmVudCkuY2FuY2VsQnViYmxlPSEwLCExfSksdGhpcy5fYWNNZW51LnNob3dDb250ZXh0TWVudSl7dmFyIG89d2luZG93LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxyPXdpbmRvdy5kb2N1bWVudC5ib2R5LGw9bmV3IEFycmF5KG8uc2Nyb2xsTGVmdHx8ci5zY3JvbGxMZWZ0LG8uc2Nyb2xsVG9wfHxyLnNjcm9sbFRvcCk7aWYoX2lzSUUpdmFyIHM9ZS5jbGllbnRYK2xbMF0sYT1lLmNsaWVudFkrbFsxXTtlbHNlIHZhciBzPWUucGFnZVgsYT1lLnBhZ2VZO3RoaXMuX2FjTWVudS5zaG93Q29udGV4dE1lbnUocy0xLGEtMSksdGhpcy5jb250ZXh0SUQ9bi5pZCxlLmNhbmNlbEJ1YmJsZT0hMCx0aGlzLl9hY01lbnUuX3NraXBfaGlkZT0hMH1lbHNlIGkuY29udGV4dE1lbnVJZD1uLmlkLGkuY29udGV4dE1lbnU9dGhpcy5fYWNNZW51LGkuYT10aGlzLl9hY01lbnUuX2NvbnRleHRTdGFydCxpLmEoaSxlKSxpLmE9bnVsbDtyZXR1cm4hMX1yZXR1cm4hMH0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZW5hYmxlSUVJbWFnZUZpeD1mdW5jdGlvbihlKXtlPyh0aGlzLl9nZXRJbWc9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtyZXR1cm4gZS5pbm5lckhUTUw9IiZuYnNwOyIsZS5jbGFzc05hbWU9ImRoeF9iZ19pbWdfZml4IixlfSx0aGlzLl9zZXRTcmM9ZnVuY3Rpb24oZSx0KXtlLnN0eWxlLmJhY2tncm91bmRJbWFnZT0idXJsKCIrdCsiKSJ9LHRoaXMuX2dldFNyYz1mdW5jdGlvbihlKXt2YXIgdD1lLnN0eWxlLmJhY2tncm91bmRJbWFnZTtyZXR1cm4gdC5zdWJzdHIoNCx0Lmxlbmd0aC01KS5yZXBsYWNlKC8oXiIpfCgiJCkvZywiIil9KToodGhpcy5fZ2V0SW1nPWZ1bmN0aW9uKGUpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGU9PXRoaXMucm9vdElkPyJkaXYiOiJpbWciKX0sdGhpcy5fc2V0U3JjPWZ1bmN0aW9uKGUsdCl7ZS5zcmM9dH0sdGhpcy5fZ2V0U3JjPWZ1bmN0aW9uKGUpe3JldHVybiBlLnNyY30pfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5kZXN0cnVjdG9yPWZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuX2lkcHVsbCl7dmFyIHQ9dGhpcy5faWRwdWxsW2VdO3QmJih0LnBhcmVudE9iamVjdD1udWxsLHQudHJlZU5vZD1udWxsLHQuY2hpbGROb2Rlcz1udWxsLHQuc3Bhbj1udWxsLHQudHIubm9kZW09bnVsbCx0LnRyPW51bGwsdC5odG1sTm9kZS5vYmpCZWxvbmc9bnVsbCx0Lmh0bWxOb2RlPW51bGwsdGhpcy5faWRwdWxsW2VdPW51bGwpfXRoaXMucGFyZW50T2JqZWN0LmlubmVySFRNTD0iIix0aGlzLmFsbFRyZWUub25zZWxlY3RzdGFydD1udWxsLHRoaXMuYWxsVHJlZS5vbmNvbnRleHRtZW51PW51bGwsdGhpcy5hbGxUcmVlLm9ubW91c2Vkb3duPW51bGw7Zm9yKHZhciBlIGluIHRoaXMpdGhpc1tlXT1udWxsfSxjT2JqZWN0LnByb3RvdHlwZT1uZXcgT2JqZWN0LGNPYmplY3QucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGU9dGhpcyxuZXcgZX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2dsb2JhbElkU3RvcmFnZUFkZD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGUsMSwxKT8oZT1lKyJfIisobmV3IERhdGUpLnZhbHVlT2YoKSx0aGlzLl9nbG9iYWxJZFN0b3JhZ2VBZGQoZSx0KSk6KHRoaXMuX2lkcHVsbFtlXT10LHRoaXMuX3B1bGxTaXplKyssZSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9nbG9iYWxJZFN0b3JhZ2VTdWI9ZnVuY3Rpb24oZSl7dGhpcy5faWRwdWxsW2VdJiYodGhpcy5fdW5zZWxlY3RJdGVtKHRoaXMuX2lkcHVsbFtlXSksdGhpcy5faWRwdWxsW2VdPW51bGwsdGhpcy5fcHVsbFNpemUtLSksdGhpcy5fbG9ja2VyJiZ0aGlzLl9sb2NrZXJbZV0mJih0aGlzLl9sb2NrZXJbZV09ITEpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fZ2xvYmFsSWRTdG9yYWdlRmluZD1mdW5jdGlvbihlLHQsaSxuKXt2YXIgbz10aGlzLl9pZHB1bGxbZV07aWYobyl7aWYoby51blBhcnNlZCYmIWkmJnRoaXMucmVQYXJzZShvLDApLHRoaXMuX3NybmQmJiFvLmh0bWxOb2RlJiZ0aGlzLl9idWlsZFNSTkQobyxpKSxuJiZ0aGlzLl9lZHNicHNBKWZvcih2YXIgcj0wO3I8dGhpcy5fZWRzYnBzQS5sZW5ndGg7cisrKWlmKHRoaXMuX2Vkc2Jwc0Fbcl1bMl09PWUpcmV0dXJuIGRoeDQuY2FsbEV2ZW50KCJvbmdldEl0ZW1FcnJvciIsWyJSZXF1ZXN0ZWQgaXRlbSBzdGlsbCBpbiBwYXJzaW5nIHByb2Nlc3MuIixlXSksbnVsbDtyZXR1cm4gb31yZXR1cm4gdGhpcy5zbG93UGFyc2UmJjAhPWUmJiF0P3RoaXMucHJlUGFyc2UoZSk6bnVsbH0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2RyYXdOZXdUcj1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKSxuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7cmV0dXJuIGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSksbi5jb2xTcGFuPTMsbi5hcHBlbmRDaGlsZChlKSx0LmFwcGVuZENoaWxkKGkpLHQuYXBwZW5kQ2hpbGQobiksdH0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0LGkpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKGk9dCx0PW51bGwpLCJqc29uIj09PWkpcmV0dXJuIHRoaXMuX2xvYWRKU09OT2JqZWN0KGUsdCk7aWYoImNzdiI9PT1pKXJldHVybiB0aGlzLl9sb2FkQ1NWU3RyaW5nKGUsdCk7aWYoImpzYXJyYXkiPT09aSlyZXR1cm4gdGhpcy5fbG9hZEpTQXJyYXkoZSx0KTt2YXIgbj10aGlzO3RoaXMucGFyc0NvdW50fHx0aGlzLmNhbGxFdmVudCgib25YTFMiLFtuLG51bGxdKSx0aGlzLnhtbHN0YXRlPTEsdGhpcy5YTUxMb2FkZXIoe3Jlc3BvbnNlWE1MOmRoeDQuYWpheC5wYXJzZShlKX0sdCl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9hdHRhY2hDaGlsZE5vZGU9ZnVuY3Rpb24oZSx0LGksbixvLHIsbCxzLGEsZCxoKXtkJiZkLnBhcmVudE9iamVjdCYmKGU9ZC5wYXJlbnRPYmplY3QpLDA9PWUuWE1MbG9hZCYmdGhpcy5YTUxzb3VyY2UmJiF0aGlzLlhNTGxvYWRpbmdXYXJuaW5nJiYoZS5YTUxsb2FkPTEsdGhpcy5fbG9hZER5blhNTChlLmlkKSk7dmFyIGM9ZS5jaGlsZHNDb3VudCx1PWUuY2hpbGROb2RlcztpZihoJiZoLnRyLnByZXZpb3VzU2libGluZyYmKGgudHIucHJldmlvdXNTaWJsaW5nLnByZXZpb3VzU2libGluZz9kPWgudHIucHJldmlvdXNTaWJsaW5nLm5vZGVtOnM9cy5yZXBsYWNlKCJUT1AiLCIiKSsiLFRPUCIpLGQpe3ZhciBwLF87Zm9yKHA9MDtjPnA7cCsrKWlmKHVbcF09PWQpe2ZvcihfPWM7XyE9cDtfLS0pdVsxK19dPXVbX107YnJlYWt9cCsrLGM9cH1pZihzKWZvcih2YXIgbT1zLnNwbGl0KCIsIiksZz0wO2c8bS5sZW5ndGg7ZysrKXN3aXRjaChtW2ddKXtjYXNlIlRPUCI6Zm9yKGUuY2hpbGRzQ291bnQ+MCYmKGQ9bmV3IE9iamVjdCxkLnRyPWUuY2hpbGROb2Rlc1swXS50ci5wcmV2aW91c1NpYmxpbmcpLGUuX2hhc190b3A9ITAscD1jO3A+MDtwLS0pdVtwXT11W3AtMV07Yz0wfXZhciBmOyhmPXRoaXMuX2lkcHVsbFt0XSkmJi0xPT1mLnNwYW58fChmPXVbY109bmV3IGRodG1sWFRyZWVJdGVtT2JqZWN0KHQsaSxlLHRoaXMsbiwxKSx0PXVbY10uaWQsZS5jaGlsZHNDb3VudCsrKSxmLmh0bWxOb2RlfHwoZi5sYWJlbD1pLGYuaHRtbE5vZGU9dGhpcy5fY3JlYXRlSXRlbSh0aGlzLmNoZWNrQm94T2ZmPzE6MCxmKSxmLmh0bWxOb2RlLm9iakJlbG9uZz1mKSxvJiYoZi5pbWFnZXNbMF09byksciYmKGYuaW1hZ2VzWzFdPXIpLGwmJihmLmltYWdlc1syXT1sKTt2YXIgYj10aGlzLl9kcmF3TmV3VHIoZi5odG1sTm9kZSk7aWYoKHRoaXMuWE1MbG9hZGluZ1dhcm5pbmd8fHRoaXMuX2hBZEkpJiYoZi5odG1sTm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT0ibm9uZSIpLGQmJmQudHImJmQudHIubmV4dFNpYmxpbmc/ZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmluc2VydEJlZm9yZShiLGQudHIubmV4dFNpYmxpbmcpOnRoaXMucGFyc2luZ09uPT1lLmlkP3RoaXMucGFyc2VkQXJyYXlbdGhpcy5wYXJzZWRBcnJheS5sZW5ndGhdPWI6ZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmFwcGVuZENoaWxkKGIpLGQmJiFkLnNwYW4mJihkPW51bGwpLHRoaXMuWE1Mc291cmNlJiYoZi5YTUxsb2FkPWEmJjAhPWE/MDoxKSxmLnRyPWIsYi5ub2RlbT1mLDA9PWUuaXRlbUlkJiYoYi5jaGlsZE5vZGVzWzBdLmNsYXNzTmFtZT0iaGlkZGVuUm93IiksKGUuX3JfbG9naWN8fHRoaXMuX2ZyYnRyKSYmdGhpcy5fc2V0U3JjKGYuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV0uY2hpbGROb2Rlc1swXSx0aGlzLmltUGF0aCt0aGlzLnJhZGlvQXJyYXlbMF0pLHMpZm9yKHZhciBtPXMuc3BsaXQoIiwiKSxnPTA7ZzxtLmxlbmd0aDtnKyspc3dpdGNoKG1bZ10pe2Nhc2UiU0VMRUNUIjp0aGlzLnNlbGVjdEl0ZW0odCwhMSk7YnJlYWs7Y2FzZSJDQUxMIjp0aGlzLnNlbGVjdEl0ZW0odCwhMCk7YnJlYWs7Y2FzZSJDSElMRCI6Zi5YTUxsb2FkPTA7YnJlYWs7Y2FzZSJDSEVDS0VEIjp0aGlzLlhNTGxvYWRpbmdXYXJuaW5nP3RoaXMuc2V0Q2hlY2tMaXN0Kz10aGlzLmRsbXRyK3Q6dGhpcy5zZXRDaGVjayh0LDEpO2JyZWFrO2Nhc2UiSENIRUNLRUQiOnRoaXMuX3NldENoZWNrKGYsInVuc3VyZSIpO2JyZWFrO2Nhc2UiT1BFTiI6Zi5vcGVuTWU9MX1pZighdGhpcy5YTUxsb2FkaW5nV2FybmluZyYmKHRoaXMuX2dldE9wZW5TdGF0ZShlKTwwJiYhdGhpcy5faEFkSSYmdGhpcy5vcGVuSXRlbShlLmlkKSxkJiYodGhpcy5fY29ycmVjdFBsdXMoZCksdGhpcy5fY29ycmVjdExpbmUoZCkpLHRoaXMuX2NvcnJlY3RQbHVzKGUpLHRoaXMuX2NvcnJlY3RMaW5lKGUpLHRoaXMuX2NvcnJlY3RQbHVzKGYpLGUuY2hpbGRzQ291bnQ+PTImJih0aGlzLl9jb3JyZWN0UGx1cyh1W2UuY2hpbGRzQ291bnQtMl0pLHRoaXMuX2NvcnJlY3RMaW5lKHVbZS5jaGlsZHNDb3VudC0yXSkpLDIhPWUuY2hpbGRzQ291bnQmJnRoaXMuX2NvcnJlY3RQbHVzKHVbMF0pLHRoaXMudHNjaGVjayYmdGhpcy5fY29ycmVjdENoZWNrU3RhdGVzKGUpLHRoaXMuX29ucmFkaCkpaWYoMT09dGhpcy54bWxzdGF0ZSl7dmFyIHY9dGhpcy5vblhMRTt0aGlzLm9uWExFPWZ1bmN0aW9uKGUpe3RoaXMuX29ucmFkaCh0KSx2JiZ2KGUpfX1lbHNlIHRoaXMuX29ucmFkaCh0KTtyZXR1cm4gZn0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX3BhcnNlSXRlbT1mdW5jdGlvbihlLHQsaSxuKXt2YXIgbztpZih0aGlzLl9zcm5kJiYoIXRoaXMuX2lkcHVsbFtvPWUuZ2V0KCJpZCIpXXx8IXRoaXMuX2lkcHVsbFtvXS5zcGFuKSlyZXR1cm4gdGhpcy5fYWRkSXRlbVNSTkQodC5pZCxvLGUpLHZvaWQgMDt2YXIgcj1lLmdldF9hbGwoKTtpZigib2JqZWN0Ij09dHlwZW9mIHRoaXMud2FpdFVwZGF0ZVhNTCYmIXRoaXMud2FpdFVwZGF0ZVhNTFtyLmlkXSlyZXR1cm4gdGhpcy5fcGFyc2UoZSxyLmlkLDEpLHZvaWQgMDsobnVsbD09PXIudGV4dHx8InVuZGVmaW5lZCI9PXR5cGVvZiByLnRleHQpJiYoci50ZXh0PWUuc3ViKCJpdGVtdGV4dCIpLHIudGV4dCYmKHIudGV4dD1yLnRleHQuY29udGVudCgpKSk7dmFyIGw9W107aWYoci5zZWxlY3QmJmwucHVzaCgiU0VMRUNUIiksci50b3AmJmwucHVzaCgiVE9QIiksci5jYWxsJiYodGhpcy5ub2RlQXNraW5nQ2FsbD1yLmlkKSwtMT09ci5jaGVja2VkP2wucHVzaCgiSENIRUNLRUQiKTpyLmNoZWNrZWQmJmwucHVzaCgiQ0hFQ0tFRCIpLHIub3BlbiYmbC5wdXNoKCJPUEVOIiksdGhpcy53YWl0VXBkYXRlWE1MKWlmKHRoaXMuX2dsb2JhbElkU3RvcmFnZUZpbmQoci5pZCkpdmFyIHM9dGhpcy51cGRhdGVJdGVtKHIuaWQsci50ZXh0LHIuaW0wLHIuaW0xLHIuaW0yLHIuY2hlY2tlZCxyLmNoaWxkKTtlbHNlezA9PXRoaXMubnBsP2wucHVzaCgiVE9QIik6aT10LmNoaWxkTm9kZXNbdGhpcy5ucGxdO3ZhciBzPXRoaXMuX2F0dGFjaENoaWxkTm9kZSh0LHIuaWQsci50ZXh0LDAsci5pbTAsci5pbTEsci5pbTIsbC5qb2luKCIsIiksci5jaGlsZCwwLGkpO3IuaWQ9cy5pZCxpPW51bGx9ZWxzZSB2YXIgcz10aGlzLl9hdHRhY2hDaGlsZE5vZGUodCxyLmlkLHIudGV4dCwwLHIuaW0wLHIuaW0xLHIuaW0yLGwuam9pbigiLCIpLHIuY2hpbGQsbnx8MCxpKTtpZihyLnRvb2x0aXAmJihzLnNwYW4ucGFyZW50Tm9kZS5wYXJlbnROb2RlLnRpdGxlPXIudG9vbHRpcCksci5zdHlsZSYmKHMuc3Bhbi5zdHlsZS5jc3NUZXh0P3Muc3Bhbi5zdHlsZS5jc3NUZXh0Kz0iOyIrci5zdHlsZTpzLnNwYW4uc2V0QXR0cmlidXRlKCJzdHlsZSIscy5zcGFuLmdldEF0dHJpYnV0ZSgic3R5bGUiKSsiOyAiK3Iuc3R5bGUpKSxyLnJhZGlvJiYocy5fcl9sb2dpYz0hMCksci5ub2NoZWNrYm94KXt2YXIgYT1zLnNwYW4ucGFyZW50Tm9kZS5wcmV2aW91c1NpYmxpbmcucHJldmlvdXNTaWJsaW5nO2Euc3R5bGUuZGlzcGxheT0ibm9uZSIscy5ub2NoZWNrYm94PSEwfXIuZGlzYWJsZWQmJihudWxsIT1yLmNoZWNrZWQmJnRoaXMuX3NldENoZWNrKHMsci5jaGVja2VkKSx0aGlzLmRpc2FibGVDaGVja2JveChzLDEpKSxzLl9hY2M9ci5jaGlsZHx8MCx0aGlzLnBhcnNlckV4dGVuc2lvbiYmdGhpcy5wYXJzZXJFeHRlbnNpb24uX3BhcnNlRXh0ZW5zaW9uLmNhbGwodGhpcyxlLHIsdD90LmlkOjApLHRoaXMuc2V0SXRlbUNvbG9yKHMsci5hQ29sLHIuc0NvbCksIjEiPT1yLmxvY2tlZCYmdGhpcy5sb2NrSXRlbShzLmlkLCEwLCEwKSwoci5pbXdpZHRofHxyLmltaGVpZ2h0KSYmdGhpcy5zZXRJY29uU2l6ZShyLmltd2lkdGgsci5pbWhlaWdodCxzKSwoIjAiPT1yLmNsb3NlYWJsZXx8IjEiPT1yLmNsb3NlYWJsZSkmJnRoaXMuc2V0SXRlbUNsb3NlYWJsZShzLHIuY2xvc2VhYmxlKTt2YXIgZD0iIjtyLnRvcG9mZnNldCYmdGhpcy5zZXRJdGVtVG9wT2Zmc2V0KHMsci50b3BvZmZzZXQpLHRoaXMuc2xvd1BhcnNlJiYib2JqZWN0IiE9dHlwZW9mIHRoaXMud2FpdFVwZGF0ZVhNTD8oIXMuY2hpbGRzQ291bnQmJmUuc3ViX2V4aXN0cygiaXRlbSIpJiYocy51blBhcnNlZD1lLmNsb25lKCkpLGUuZWFjaCgidXNlcmRhdGEiLGZ1bmN0aW9uKGUpe3RoaXMuc2V0VXNlckRhdGEoci5pZCxlLmdldCgibmFtZSIpLGUuY29udGVudCgpKX0sdGhpcykpOmUuc3ViX2V4aXN0cygiaXRlbSIpJiYoZD10aGlzLl9wYXJzZShlLHIuaWQsMSkpLCIiIT1kJiYodGhpcy5ub2RlQXNraW5nQ2FsbD1kKSxlLmVhY2goInVzZXJkYXRhIixmdW5jdGlvbih0KXt0aGlzLnNldFVzZXJEYXRhKGUuZ2V0KCJpZCIpLHQuZ2V0KCJuYW1lIiksdC5jb250ZW50KCkpfSx0aGlzKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX3BhcnNlPWZ1bmN0aW9uKGUsdCxpLG4pe2lmKHRoaXMuX3NybmQmJiF0aGlzLnBhcmVudE9iamVjdC5vZmZzZXRIZWlnaHQpe3ZhciBvPXRoaXM7cmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5fcGFyc2UoZSx0LGksbil9LDEwMCl9aWYoZS5leGlzdHMoKSl7aWYodGhpcy5za2lwTG9jaz0hMCwhdCl7dD1lLmdldCgiaWQiKSx0aGlzLl9keW5EZWxldGVCcmFuY2hlc1t0XSYmKHRoaXMuZGVsZXRlQ2hpbGRJdGVtcyh0KSx0aGlzLl9keW5EZWxldGVCcmFuY2hlc1t0XS0tLHRoaXMuX2R5bkRlbGV0ZUJyYW5jaGVzW3RdfHxkZWxldGUgdGhpcy5fZHluRGVsZXRlQnJhbmNoZXNbdF0pO3ZhciByPWUuZ2V0KCJkaHhfc2VjdXJpdHkiKTtyJiYoZGh0bWx4LnNlY3VyaXR5X2tleT1yKSxlLmdldCgicmFkaW8iKSYmKHRoaXMuaHRtbE5vZGUuX3JfbG9naWM9ITApLHRoaXMucGFyc2luZ09uPXQsdGhpcy5wYXJzZWRBcnJheT1uZXcgQXJyYXksdGhpcy5zZXRDaGVja0xpc3Q9IiIsdGhpcy5ub2RlQXNraW5nQ2FsbD0iIn12YXIgbD10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKHQpO2lmKCFsKXJldHVybiBkaHg0LmNhbGxFdmVudCgib25EYXRhU3RydWN0dXJlRXJyb3IiLFsiWE1MIHJlZmVycyB0byBub3QgZXhpc3RpbmcgcGFyZW50Il0pO2lmKHRoaXMucGFyc0NvdW50PXRoaXMucGFyc0NvdW50P3RoaXMucGFyc0NvdW50KzE6MSx0aGlzLlhNTGxvYWRpbmdXYXJuaW5nPTEsIWwuY2hpbGRzQ291bnR8fG58fHRoaXMuX2Vkc2Jwc3x8bC5faGFzX3RvcCl2YXIgcz0wO2Vsc2UgdmFyIHM9MDtpZih0aGlzLm5wbD0wLGUuZWFjaCgiaXRlbSIsZnVuY3Rpb24obixvKXtyZXR1cm4gbC5YTUxsb2FkPTEsdGhpcy5fcGFyc2VJdGVtKG4sbCwwLHMpLHRoaXMuX2Vkc2JwcyYmdGhpcy5ucGw9PXRoaXMuX2Vkc2Jwc0M/KHRoaXMuX2Rpc3RyaWJ1dGVkU3RhcnQoZSxvKzEsdCxpLGwuY2hpbGRzQ291bnQpLC0xKToodGhpcy5ucGwrKyx2b2lkIDApfSx0aGlzLG4pLCFpKXtpZihlLmVhY2goInVzZXJkYXRhIixmdW5jdGlvbih0KXt0aGlzLnNldFVzZXJEYXRhKGUuZ2V0KCJpZCIpLHQuZ2V0KCJuYW1lIiksdC5jb250ZW50KCkpfSx0aGlzKSxsLlhNTGxvYWQ9MSx0aGlzLndhaXRVcGRhdGVYTUwpe3RoaXMud2FpdFVwZGF0ZVhNTD0hMTtmb3IodmFyIGE9bC5jaGlsZHNDb3VudC0xO2E+PTA7YS0tKWwuY2hpbGROb2Rlc1thXS5fZG1hcmsmJnRoaXMuZGVsZXRlSXRlbShsLmNoaWxkTm9kZXNbYV0uaWQpfWZvcih2YXIgYT0odGhpcy5fZ2xvYmFsSWRTdG9yYWdlRmluZCh0aGlzLnBhcnNpbmdPbiksMCk7YTx0aGlzLnBhcnNlZEFycmF5Lmxlbmd0aDthKyspbC5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmFwcGVuZENoaWxkKHRoaXMucGFyc2VkQXJyYXlbYV0pO3RoaXMucGFyc2VkQXJyYXk9W10sdGhpcy5sYXN0TG9hZGVkWE1MSWQ9dCx0aGlzLlhNTGxvYWRpbmdXYXJuaW5nPTA7Zm9yKHZhciBkPXRoaXMuc2V0Q2hlY2tMaXN0LnNwbGl0KHRoaXMuZGxtdHIpLGg9MDtoPGQubGVuZ3RoO2grKylkW2hdJiZ0aGlzLnNldENoZWNrKGRbaF0sMSk7dGhpcy5YTUxzb3VyY2UmJnRoaXMudHNjaGVjayYmdGhpcy5zbWNoZWNrJiZsLmlkIT10aGlzLnJvb3RJZCYmKDA9PT1sLmNoZWNrc3RhdGU/dGhpcy5fc2V0U3ViQ2hlY2tlZCgwLGwpOjE9PT1sLmNoZWNrc3RhdGUmJnRoaXMuX3NldFN1YkNoZWNrZWQoMSxsKSksdGhpcy5fcmVkcmF3RnJvbSh0aGlzLG51bGwsbiksZS5nZXQoIm9yZGVyIikmJiJub25lIiE9ZS5nZXQoIm9yZGVyIikmJnRoaXMuX3Jlb3JkZXJCcmFuY2gobCxlLmdldCgib3JkZXIiKSwhMCksIiIhPXRoaXMubm9kZUFza2luZ0NhbGwmJnRoaXMuY2FsbEV2ZW50KCJvbkNsaWNrIixbdGhpcy5ub2RlQXNraW5nQ2FsbCx0aGlzLmdldFNlbGVjdGVkSXRlbUlkKCldKSx0aGlzLl9icmFuY2hVcGRhdGUmJnRoaXMuX2JyYW5jaFVwZGF0ZU5leHQoZSl9aWYoMT09dGhpcy5wYXJzQ291bnQpe2lmKHRoaXMucGFyc2luZ09uPW51bGwsdGhpcy5fc3JuZCYmbC5pZCE9dGhpcy5yb290SWQmJih0aGlzLnByZXBhcmVTUihsLmlkKSx0aGlzLlhNTHNvdXJjZSYmdGhpcy5vcGVuSXRlbShsLmlkKSksZS50aHJvdWdoKCJpdGVtIiwib3BlbiIsbnVsbCxmdW5jdGlvbihlKXt0aGlzLm9wZW5JdGVtKGUuZ2V0KCJpZCIpKX0sdGhpcyksIXRoaXMuX2Vkc2Jwc3x8IXRoaXMuX2Vkc2Jwc0EubGVuZ3RoKXt2YXIgYz10aGlzO3dpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Yy5jYWxsRXZlbnQoIm9uWExFIixbYyx0XSl9LDEpLHRoaXMueG1sc3RhdGU9MH10aGlzLnNraXBMb2NrPSExfXRoaXMucGFyc0NvdW50LS07dmFyIGM9dGhpcztyZXR1cm4gdGhpcy5fZWRzYnBzJiZ3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2MuX2Rpc3RyaWJ1dGVkU3RlcCh0KX0sdGhpcy5fZWRzYnBzRCksIWkmJnRoaXMub25YTEUmJnRoaXMub25YTEUodGhpcyx0KSx0aGlzLm5vZGVBc2tpbmdDYWxsfX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX3JlZHJhd0Zyb209ZnVuY3Rpb24oZSx0LGksbil7aWYodClvPXQ7ZWxzZXt2YXIgbz1lLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGUubGFzdExvYWRlZFhNTElkKTtpZihlLmxhc3RMb2FkZWRYTUxJZD0tMSwhbylyZXR1cm4gMH1mb3IodmFyIHI9MCxsPWk/aS0xOjA7bDxvLmNoaWxkc0NvdW50O2wrKylpZih0aGlzLl9icmFuY2hVcGRhdGUmJjEhPXRoaXMuX2dldE9wZW5TdGF0ZShvKXx8dCYmMSE9bnx8KG8uY2hpbGROb2Rlc1tsXS5odG1sTm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT0iIiksMT09by5jaGlsZE5vZGVzW2xdLm9wZW5NZSYmKHRoaXMuX29wZW5JdGVtKG8uY2hpbGROb2Rlc1tsXSksby5jaGlsZE5vZGVzW2xdLm9wZW5NZT0wKSxlLl9yZWRyYXdGcm9tKGUsby5jaGlsZE5vZGVzW2xdKSxudWxsIT10aGlzLmNoaWxkQ2FsYyl7aWYoKG8uY2hpbGROb2Rlc1tsXS51blBhcnNlZHx8IW8uY2hpbGROb2Rlc1tsXS5YTUxsb2FkJiZ0aGlzLlhNTHNvdXJjZSkmJihvLmNoaWxkTm9kZXNbbF0uc3Bhbi5pbm5lckhUTUw9by5jaGlsZE5vZGVzW2xdLl9hY2M/by5jaGlsZE5vZGVzW2xdLmxhYmVsK3RoaXMuaHRtbGNBK28uY2hpbGROb2Rlc1tsXS5fYWNjK3RoaXMuaHRtbGNCOm8uY2hpbGROb2Rlc1tsXS5sYWJlbCksby5jaGlsZE5vZGVzW2xdLmNoaWxkTm9kZXMubGVuZ3RoJiZ0aGlzLmNoaWxkQ2FsYyl7aWYoMT09dGhpcy5jaGlsZENhbGMmJihvLmNoaWxkTm9kZXNbbF0uc3Bhbi5pbm5lckhUTUw9by5jaGlsZE5vZGVzW2xdLmxhYmVsK3RoaXMuaHRtbGNBK28uY2hpbGROb2Rlc1tsXS5jaGlsZHNDb3VudCt0aGlzLmh0bWxjQiksMj09dGhpcy5jaGlsZENhbGMpe3ZhciBzPW8uY2hpbGROb2Rlc1tsXS5jaGlsZHNDb3VudC0oby5jaGlsZE5vZGVzW2xdLnB1cmVDaGlsZHN8fDApO3MmJihvLmNoaWxkTm9kZXNbbF0uc3Bhbi5pbm5lckhUTUw9by5jaGlsZE5vZGVzW2xdLmxhYmVsK3RoaXMuaHRtbGNBK3MrdGhpcy5odG1sY0IpLG8ucHVyZUNoaWxkcz9vLnB1cmVDaGlsZHMrKzpvLnB1cmVDaGlsZHM9MX1pZigzPT10aGlzLmNoaWxkQ2FsYyYmKG8uY2hpbGROb2Rlc1tsXS5zcGFuLmlubmVySFRNTD1vLmNoaWxkTm9kZXNbbF0ubGFiZWwrdGhpcy5odG1sY0Erby5jaGlsZE5vZGVzW2xdLl9hY2MrdGhpcy5odG1sY0IpLDQ9PXRoaXMuY2hpbGRDYWxjKXt2YXIgcz1vLmNoaWxkTm9kZXNbbF0uX2FjYztzJiYoby5jaGlsZE5vZGVzW2xdLnNwYW4uaW5uZXJIVE1MPW8uY2hpbGROb2Rlc1tsXS5sYWJlbCt0aGlzLmh0bWxjQStzK3RoaXMuaHRtbGNCKX19ZWxzZSA0PT10aGlzLmNoaWxkQ2FsYyYmcisrO3IrPW8uY2hpbGROb2Rlc1tsXS5fYWNjLDM9PXRoaXMuY2hpbGRDYWxjJiZyKyt9by51blBhcnNlZHx8IW8uWE1MbG9hZCYmdGhpcy5YTUxzb3VyY2V8fChvLl9hY2M9ciksZS5fY29ycmVjdExpbmUobyksZS5fY29ycmVjdFBsdXMobyksdGhpcy5jaGlsZENhbGMmJiF0JiZlLl9maXhDaGlsZENvdW50TGFiZWwobyl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9jcmVhdGVTZWxmPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGUuY2xhc3NOYW1lPSJjb250YWluZXJUYWJsZVN0eWxlIixlLnN0eWxlLndpZHRoPXRoaXMud2lkdGgsZS5zdHlsZS5oZWlnaHQ9dGhpcy5oZWlnaHQsdGhpcy5wYXJlbnRPYmplY3QuYXBwZW5kQ2hpbGQoZSksZX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX3hjbG9zZUFsbD1mdW5jdGlvbihlKXtpZighZS51blBhcnNlZCl7aWYodGhpcy5yb290SWQhPWUuaWQpe2lmKCFlLmh0bWxOb2RlKXJldHVybjtmb3IodmFyIHQ9ZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMsaT10Lmxlbmd0aCxuPTE7aT5uO24rKyl0W25dLnN0eWxlLmRpc3BsYXk9Im5vbmUiO3RoaXMuX2NvcnJlY3RQbHVzKGUpfWZvcih2YXIgbj0wO248ZS5jaGlsZHNDb3VudDtuKyspZS5jaGlsZE5vZGVzW25dLmNoaWxkc0NvdW50JiZ0aGlzLl94Y2xvc2VBbGwoZS5jaGlsZE5vZGVzW25dKX19LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl94b3BlbkFsbD1mdW5jdGlvbihlKXt0aGlzLl9IaWRlU2hvdyhlLDIpO2Zvcih2YXIgdD0wO3Q8ZS5jaGlsZHNDb3VudDt0KyspdGhpcy5feG9wZW5BbGwoZS5jaGlsZE5vZGVzW3RdKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2NvcnJlY3RQbHVzPWZ1bmN0aW9uKGUpe2lmKGUuaHRtbE5vZGUpe3ZhciB0PWUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0ubGFzdENoaWxkLGk9ZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1syXS5jaGlsZE5vZGVzWzBdLG49dGhpcy5saW5lQXJyYXk7aWYodGhpcy5YTUxzb3VyY2UmJiFlLlhNTGxvYWQpe3ZhciBuPXRoaXMucGx1c0FycmF5O2lmKHRoaXMuX3NldFNyYyhpLHRoaXMuaWNvblVSTCtlLmltYWdlc1syXSksdGhpcy5fdHh0aW1nKXJldHVybiB0LmlubmVySFRNTD0iWytdIn1lbHNlIGlmKGUuY2hpbGRzQ291bnR8fGUudW5QYXJzZWQpaWYoZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV0mJiJub25lIiE9ZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMV0uc3R5bGUuZGlzcGxheSl7aWYoIWUud3NpZ24pdmFyIG49dGhpcy5taW51c0FycmF5O2lmKHRoaXMuX3NldFNyYyhpLHRoaXMuaWNvblVSTCtlLmltYWdlc1sxXSksdGhpcy5fdHh0aW1nKXJldHVybiB0LmlubmVySFRNTD0iWy1dIn1lbHNle2lmKCFlLndzaWduKXZhciBuPXRoaXMucGx1c0FycmF5O2lmKHRoaXMuX3NldFNyYyhpLHRoaXMuaWNvblVSTCtlLmltYWdlc1syXSksdGhpcy5fdHh0aW1nKXJldHVybiB0LmlubmVySFRNTD0iWytdIn1lbHNlIHRoaXMuX3NldFNyYyhpLHRoaXMuaWNvblVSTCtlLmltYWdlc1swXSk7dmFyIG89MjtlLnRyZWVOb2QudHJlZUxpbmVzT24/KGUucGFyZW50T2JqZWN0JiYobz10aGlzLl9nZXRDb3VudFN0YXR1cyhlLmlkLGUucGFyZW50T2JqZWN0KSksdGhpcy5fc2V0U3JjKHQsdGhpcy5pbVBhdGgrbltvXSkpOnRoaXMuX3NldFNyYyh0LHRoaXMuaW1QYXRoK25bM10pfX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2NvcnJlY3RMaW5lPWZ1bmN0aW9uKGUpe2lmKGUuaHRtbE5vZGUpe3ZhciB0PWUucGFyZW50T2JqZWN0O2lmKHQpaWYoMCE9dGhpcy5fZ2V0TGluZVN0YXR1cyhlLmlkLHQpJiZ0aGlzLnRyZWVMaW5lc09uKWZvcih2YXIgaT0xO2k8PWUuY2hpbGRzQ291bnQmJmUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2ldO2krKyllLmh0bWxOb2RlLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1tpXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmJhY2tncm91bmRJbWFnZT0idXJsKCIrdGhpcy5pbVBhdGgrdGhpcy5saW5lQXJyYXlbNV0rIikiLGUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZFJlcGVhdD0icmVwZWF0LXkiO2Vsc2UgZm9yKHZhciBpPTE7aTw9ZS5jaGlsZHNDb3VudCYmZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbaV07aSsrKWUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZEltYWdlPSIiLGUuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXNbMF0uc3R5bGUuYmFja2dyb3VuZFJlcGVhdD0iIn19LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9nZXRMaW5lU3RhdHVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQuY2hpbGROb2Rlc1t0LmNoaWxkc0NvdW50LTFdLmlkPT1lPzA6MX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX0hpZGVTaG93PWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2xvY2tlcnx8dGhpcy5za2lwTG9ja3x8IXRoaXMuX2xvY2tlcltlLmlkXSl7aWYodGhpcy5YTUxzb3VyY2UmJiFlLlhNTGxvYWQpe2lmKDE9PXQpcmV0dXJuO3JldHVybiBlLlhNTGxvYWQ9MSx0aGlzLl9sb2FkRHluWE1MKGUuaWQpLHZvaWQgMH1lLnVuUGFyc2VkJiZ0aGlzLnJlUGFyc2UoZSk7dmFyIGk9ZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMsbj1pLmxlbmd0aDtpZihuPjEpeyJub25lIj09aVsxXS5zdHlsZS5kaXNwbGF5JiYxIT10fHwyPT10P25vZGVzdHlsZT0iIjoodGhpcy5hbGxUcmVlLmNoaWxkTm9kZXNbMF0uYm9yZGVyPSIxIix0aGlzLmFsbFRyZWUuY2hpbGROb2Rlc1swXS5ib3JkZXI9IjAiLG5vZGVzdHlsZT0ibm9uZSIpO2Zvcih2YXIgbz0xO24+bztvKyspaVtvXS5zdHlsZS5kaXNwbGF5PW5vZGVzdHlsZX10aGlzLl9jb3JyZWN0UGx1cyhlKX19LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9nZXRPcGVuU3RhdGU9ZnVuY3Rpb24oZSl7aWYoIWUuaHRtbE5vZGUpcmV0dXJuIDA7dmFyIHQ9ZS5odG1sTm9kZS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXM7cmV0dXJuIHQubGVuZ3RoPD0xPzA6Im5vbmUiIT10WzFdLnN0eWxlLmRpc3BsYXk/MTotMX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUub25Sb3dDbGljazI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE9iamVjdC50cmVlTm9kO3JldHVybiBlLmNhbGxFdmVudCgib25EYmxDbGljayIsW3RoaXMucGFyZW50T2JqZWN0LmlkLGVdKT8odGhpcy5wYXJlbnRPYmplY3QuY2xvc2VibGUmJiIwIiE9dGhpcy5wYXJlbnRPYmplY3QuY2xvc2VibGU/ZS5fSGlkZVNob3codGhpcy5wYXJlbnRPYmplY3QpOmUuX0hpZGVTaG93KHRoaXMucGFyZW50T2JqZWN0LDIpLGUuY2hlY2tFdmVudCgib25PcGVuRW5kIikmJihlLnhtbHN0YXRlPyhlLl9vaWVfb25YTEUucHVzaChlLm9uWExFKSxlLm9uWExFPWUuX2VwbkZIZSk6ZS5jYWxsRXZlbnQoIm9uT3BlbkVuZCIsW3RoaXMucGFyZW50T2JqZWN0LmlkLGUuX2dldE9wZW5TdGF0ZSh0aGlzLnBhcmVudE9iamVjdCldKSksITEpOiExfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5vblJvd0NsaWNrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wYXJlbnRPYmplY3QudHJlZU5vZDtyZXR1cm4gZS5jYWxsRXZlbnQoIm9uT3BlblN0YXJ0IixbdGhpcy5wYXJlbnRPYmplY3QuaWQsZS5fZ2V0T3BlblN0YXRlKHRoaXMucGFyZW50T2JqZWN0KV0pPyh0aGlzLnBhcmVudE9iamVjdC5jbG9zZWJsZSYmIjAiIT10aGlzLnBhcmVudE9iamVjdC5jbG9zZWJsZT9lLl9IaWRlU2hvdyh0aGlzLnBhcmVudE9iamVjdCk6ZS5fSGlkZVNob3codGhpcy5wYXJlbnRPYmplY3QsMiksZS5jaGVja0V2ZW50KCJvbk9wZW5FbmQiKSYmKGUueG1sc3RhdGU/KGUuX29pZV9vblhMRS5wdXNoKGUub25YTEUpLGUub25YTEU9ZS5fZXBuRkhlKTplLmNhbGxFdmVudCgib25PcGVuRW5kIixbdGhpcy5wYXJlbnRPYmplY3QuaWQsZS5fZ2V0T3BlblN0YXRlKHRoaXMucGFyZW50T2JqZWN0KV0pKSx2b2lkIDApOjB9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLmdldFNlbGVjdGVkSXRlbUlkPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBBcnJheSx0PTA7dDx0aGlzLl9zZWxlY3RlZC5sZW5ndGg7dCsrKWVbdF09dGhpcy5fc2VsZWN0ZWRbdF0uaWQ7cmV0dXJuIGUuam9pbih0aGlzLmRsbXRyKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX3NlbGVjdEl0ZW09ZnVuY3Rpb24oZSx0KXtpZih0aGlzLmNoZWNrRXZlbnQoIm9uU2VsZWN0IikmJih0aGlzLl9vblNTQ0ZvbGQ9dGhpcy5nZXRTZWxlY3RlZEl0ZW1JZCgpKSx0aGlzLl9hbXNlbCYmdCYmKHQuY3RybEtleXx8dC5tZXRhS2V5fHx0LnNoaWZ0S2V5KXx8dGhpcy5fdW5zZWxlY3RJdGVtcygpLGUuaV9zZWwmJnRoaXMuX2Ftc2VsJiZ0JiYodC5jdHJsS2V5fHx0Lm1ldGFLZXkpKXRoaXMuX3Vuc2VsZWN0SXRlbShlKTtlbHNlIGlmKCEoZS5pX3NlbHx8dGhpcy5fYW1zZWxTJiYwIT10aGlzLl9zZWxlY3RlZC5sZW5ndGgmJnRoaXMuX3NlbGVjdGVkWzBdLnBhcmVudE9iamVjdCE9ZS5wYXJlbnRPYmplY3QpKWlmKHRoaXMuX2Ftc2VsJiZ0JiZ0LnNoaWZ0S2V5JiYwIT10aGlzLl9zZWxlY3RlZC5sZW5ndGgmJnRoaXMuX3NlbGVjdGVkW3RoaXMuX3NlbGVjdGVkLmxlbmd0aC0xXS5wYXJlbnRPYmplY3Q9PWUucGFyZW50T2JqZWN0KXt2YXIgaT10aGlzLl9nZXRJbmRleCh0aGlzLl9zZWxlY3RlZFt0aGlzLl9zZWxlY3RlZC5sZW5ndGgtMV0pLG49dGhpcy5fZ2V0SW5kZXgoZSk7aWYoaT5uKXt2YXIgbz1pO2k9bixuPW99Zm9yKHZhciByPWk7bj49cjtyKyspZS5wYXJlbnRPYmplY3QuY2hpbGROb2Rlc1tyXS5pX3NlbHx8dGhpcy5fbWFya0l0ZW0oZS5wYXJlbnRPYmplY3QuY2hpbGROb2Rlc1tyXSl9ZWxzZSB0aGlzLl9tYXJrSXRlbShlKTtpZih0aGlzLmNoZWNrRXZlbnQoIm9uU2VsZWN0Iikpe3ZhciBsPXRoaXMuZ2V0U2VsZWN0ZWRJdGVtSWQoKTtsIT10aGlzLl9vblNTQ0ZvbGQmJnRoaXMuY2FsbEV2ZW50KCJvblNlbGVjdCIsW2xdKX19LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9tYXJrSXRlbT1mdW5jdGlvbihlKXtlLnNjb2xvciYmKGUuc3Bhbi5zdHlsZS5jb2xvcj1lLnNjb2xvciksZS5zcGFuLmNsYXNzTmFtZT0ic2VsZWN0ZWRUcmVlUm93IixlLnNwYW4ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNsYXNzTmFtZT0ic2VsZWN0ZWRUcmVlUm93RnVsbCIsZS5pX3NlbD0hMCx0aGlzLl9zZWxlY3RlZFt0aGlzLl9zZWxlY3RlZC5sZW5ndGhdPWV9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLmdldEluZGV4QnlJZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGUpO3JldHVybiB0P3RoaXMuX2dldEluZGV4KHQpOm51bGx9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9nZXRJbmRleD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5wYXJlbnRPYmplY3QsaT0wO2k8dC5jaGlsZHNDb3VudDtpKyspaWYodC5jaGlsZE5vZGVzW2ldPT1lKXJldHVybiBpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fdW5zZWxlY3RJdGVtPWZ1bmN0aW9uKGUpe2lmKGUmJmUuaV9zZWwpe2Uuc3Bhbi5jbGFzc05hbWU9InN0YW5kYXJ0VHJlZVJvdyIsZS5zcGFuLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jbGFzc05hbWU9IiIsZS5hY29sb3ImJihlLnNwYW4uc3R5bGUuY29sb3I9ZS5hY29sb3IpLGUuaV9zZWw9ITE7Zm9yKHZhciB0PTA7dDx0aGlzLl9zZWxlY3RlZC5sZW5ndGg7dCsrKWlmKCF0aGlzLl9zZWxlY3RlZFt0XS5pX3NlbCl7dGhpcy5fc2VsZWN0ZWQuc3BsaWNlKHQsMSk7YnJlYWt9fX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX3Vuc2VsZWN0SXRlbXM9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPHRoaXMuX3NlbGVjdGVkLmxlbmd0aDtlKyspe3ZhciB0PXRoaXMuX3NlbGVjdGVkW2VdO3Quc3Bhbi5jbGFzc05hbWU9InN0YW5kYXJ0VHJlZVJvdyIsdC5zcGFuLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jbGFzc05hbWU9IiIsdC5hY29sb3ImJih0LnNwYW4uc3R5bGUuY29sb3I9dC5hY29sb3IpLHQuaV9zZWw9ITF9dGhpcy5fc2VsZWN0ZWQ9bmV3IEFycmF5fSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5vblJvd1NlbGVjdD1mdW5jdGlvbihlLHQsaSl7ZT1lfHx3aW5kb3cuZXZlbnQ7dmFyIG49dGhpcy5wYXJlbnRPYmplY3Q7dCYmKG49dC5wYXJlbnRPYmplY3QpO3ZhciBvPW4udHJlZU5vZCxyPW8uZ2V0U2VsZWN0ZWRJdGVtSWQoKTtlJiZlLnNraXBVblNlbHx8by5fc2VsZWN0SXRlbShuLGUpLGl8fChuLmFjdGlvbkhhbmRsZXI/bi5hY3Rpb25IYW5kbGVyKG4uaWQscik6by5jYWxsRXZlbnQoIm9uQ2xpY2siLFtuLmlkLHJdKSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLl9jcmVhdGVJdGVtPWZ1bmN0aW9uKGUsdCxpKXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpO24uY2VsbFNwYWNpbmc9MCxuLmNlbGxQYWRkaW5nPTAsbi5ib3JkZXI9MCx0aGlzLmhmTW9kZSYmKG4uc3R5bGUudGFibGVMYXlvdXQ9ImZpeGVkIiksbi5zdHlsZS5tYXJnaW49MCxuLnN0eWxlLnBhZGRpbmc9MDt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7aWYobC5jbGFzc05hbWU9InN0YW5kYXJ0VHJlZUltYWdlIix0aGlzLl90eHRpbWcpe3ZhciBzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2wuYXBwZW5kQ2hpbGQocykscy5jbGFzc05hbWU9ImRoeF90cmVlX3RleHRTaWduIn1lbHNle3ZhciBzPXRoaXMuX2dldEltZyh0LmlkKTtzLmJvcmRlcj0iMCIsIklNRyI9PXMudGFnTmFtZSYmKHMuYWxpZ249ImFic21pZGRsZSIpLGwuYXBwZW5kQ2hpbGQocykscy5zdHlsZS5wYWRkaW5nPTAscy5zdHlsZS5tYXJnaW49MCxzLnN0eWxlLndpZHRoPXRoaXMuZGVmX2xpbmVfaW1nX3h9dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKSxkPXRoaXMuX2dldEltZyh0aGlzLmNCUk9mP3RoaXMucm9vdElkOnQuaWQpO2QuY2hlY2tlZD0wLHRoaXMuX3NldFNyYyhkLHRoaXMuaW1QYXRoK3RoaXMuY2hlY2tBcnJheVswXSksZC5zdHlsZS53aWR0aD0iMThweCIsZC5zdHlsZS5oZWlnaHQ9IjE4cHgiLGV8fChhLnN0eWxlLmRpc3BsYXk9Im5vbmUiKSxhLmFwcGVuZENoaWxkKGQpLHRoaXMuY0JST2Z8fCJJTUciIT1kLnRhZ05hbWV8fChkLmFsaWduPSJhYnNtaWRkbGUiKSxkLm9uY2xpY2s9dGhpcy5vbkNoZWNrQm94Q2xpY2ssZC50cmVlTm9kPXRoaXMsZC5wYXJlbnRPYmplY3Q9dCxhLndpZHRoPXdpbmRvdy5fS0hUTUxydj8iMTZweCI6IjIwcHgiO3ZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7aC5jbGFzc05hbWU9InN0YW5kYXJ0VHJlZUltYWdlIjt2YXIgYz10aGlzLl9nZXRJbWcodGhpcy50aW1nZW4/dC5pZDp0aGlzLnJvb3RJZCk7Yy5vbm1vdXNlZG93bj10aGlzLl9wcmV2ZW50TnNEcmFnLGMub25kcmFnc3RhcnQ9dGhpcy5fcHJldmVudE5zRHJhZyxjLmJvcmRlcj0iMCIsdGhpcy5fYWltZ3MmJihjLnBhcmVudE9iamVjdD10LCJJTUciPT1jLnRhZ05hbWUmJihjLmFsaWduPSJhYnNtaWRkbGUiKSxjLm9uY2xpY2s9dGhpcy5vblJvd1NlbGVjdCksaXx8dGhpcy5fc2V0U3JjKGMsdGhpcy5pY29uVVJMK3RoaXMuaW1hZ2VBcnJheVswXSksaC5hcHBlbmRDaGlsZChjKSxjLnN0eWxlLnBhZGRpbmc9MCxjLnN0eWxlLm1hcmdpbj0wLHRoaXMudGltZ2VuPyhoLnN0eWxlLndpZHRoPWMuc3R5bGUud2lkdGg9dGhpcy5kZWZfaW1nX3gsYy5zdHlsZS5oZWlnaHQ9dGhpcy5kZWZfaW1nX3kpOihjLnN0eWxlLndpZHRoPSIwcHgiLGMuc3R5bGUuaGVpZ2h0PSIwcHgiLChfaXNPcGVyYXx8d2luZG93Ll9LSFRNTHJ2KSYmKGguc3R5bGUuZGlzcGxheT0ibm9uZSIpKTsKdmFyIHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTtyZXR1cm4gdS5jbGFzc05hbWU9ImRoeFRleHRDZWxsIHN0YW5kYXJ0VHJlZVJvdyIsdC5zcGFuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSx0LnNwYW4uY2xhc3NOYW1lPSJzdGFuZGFydFRyZWVSb3ciLHRoaXMubWxpdGVtcz8odC5zcGFuLnN0eWxlLndpZHRoPXRoaXMubWxpdGVtcyx0LnNwYW4uc3R5bGUuZGlzcGxheT0iYmxvY2siKTp1Lm5vV3JhcD0hMCxkaHg0LmlzSUU4P3Uuc3R5bGUud2lkdGg9Ijk5OTk5cHgiOndpbmRvdy5fS0hUTUxydnx8KHUuc3R5bGUud2lkdGg9IjEwMCUiKSx0LnNwYW4uaW5uZXJIVE1MPXQubGFiZWwsdS5hcHBlbmRDaGlsZCh0LnNwYW4pLHUucGFyZW50T2JqZWN0PXQsbC5wYXJlbnRPYmplY3Q9dCx1Lm9uY2xpY2s9dGhpcy5vblJvd1NlbGVjdCxsLm9uY2xpY2s9dGhpcy5vblJvd0NsaWNrLHUub25kYmxjbGljaz10aGlzLm9uUm93Q2xpY2syLHRoaXMuZXR0aXAmJihyLnRpdGxlPXQubGFiZWwpLHRoaXMuZHJhZ0FuZERyb3BPZmYmJih0aGlzLl9haW1ncyYmKHRoaXMuZHJhZ2dlci5hZGREcmFnZ2FibGVJdGVtKGgsdGhpcyksaC5wYXJlbnRPYmplY3Q9dCksdGhpcy5kcmFnZ2VyLmFkZERyYWdnYWJsZUl0ZW0odSx0aGlzKSksdC5zcGFuLnN0eWxlLnBhZGRpbmdMZWZ0PSI1cHgiLHQuc3Bhbi5zdHlsZS5wYWRkaW5nUmlnaHQ9IjVweCIsdS5zdHlsZS52ZXJ0aWNhbEFsaWduPSIiLHUuc3R5bGUuZm9udFNpemU9IjEwcHQiLHUuc3R5bGUuY3Vyc29yPXRoaXMuc3R5bGVfcG9pbnRlcixyLmFwcGVuZENoaWxkKGwpLHIuYXBwZW5kQ2hpbGQoYSksci5hcHBlbmRDaGlsZChoKSxyLmFwcGVuZENoaWxkKHUpLG8uYXBwZW5kQ2hpbGQociksbi5hcHBlbmRDaGlsZChvKSwodGhpcy5laGx0fHx0aGlzLmNoZWNrRXZlbnQoIm9uTW91c2VJbiIpfHx0aGlzLmNoZWNrRXZlbnQoIm9uTW91c2VPdXQiKSkmJihyLm9ubW91c2Vtb3ZlPXRoaXMuX2l0ZW1Nb3VzZUluLHJbX2lzSUU/Im9ubW91c2VsZWF2ZSI6Im9ubW91c2VvdXQiXT10aGlzLl9pdGVtTW91c2VPdXQpLG59LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnNldE9uUmlnaHRDbGlja0hhbmRsZXI9ZnVuY3Rpb24oZSl7dGhpcy5hdHRhY2hFdmVudCgib25SaWdodENsaWNrIixlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuc2V0T25DbGlja0hhbmRsZXI9ZnVuY3Rpb24oZSl7dGhpcy5hdHRhY2hFdmVudCgib25DbGljayIsZSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnNldE9uU2VsZWN0U3RhdGVDaGFuZ2U9ZnVuY3Rpb24oZSl7dGhpcy5hdHRhY2hFdmVudCgib25TZWxlY3QiLGUpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRYTUxBdXRvTG9hZGluZz1mdW5jdGlvbihlKXt0aGlzLlhNTHNvdXJjZT1lfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRPbkNoZWNrSGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLmF0dGFjaEV2ZW50KCJvbkNoZWNrIixlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuc2V0T25PcGVuSGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLmF0dGFjaEV2ZW50KCJvbk9wZW5TdGFydCIsZSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnNldE9uT3BlblN0YXJ0SGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLmF0dGFjaEV2ZW50KCJvbk9wZW5TdGFydCIsZSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnNldE9uT3BlbkVuZEhhbmRsZXI9ZnVuY3Rpb24oZSl7dGhpcy5hdHRhY2hFdmVudCgib25PcGVuRW5kIixlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuc2V0T25EYmxDbGlja0hhbmRsZXI9ZnVuY3Rpb24oZSl7dGhpcy5hdHRhY2hFdmVudCgib25EYmxDbGljayIsZSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLm9wZW5BbGxJdGVtcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGUpO3JldHVybiB0Pyh0aGlzLl94b3BlbkFsbCh0KSx2b2lkIDApOjB9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLmdldE9wZW5TdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGUpO3JldHVybiB0P3RoaXMuX2dldE9wZW5TdGF0ZSh0KToiIn0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuY2xvc2VBbGxJdGVtcz1mdW5jdGlvbihlKXtlPT09d2luZG93LnVuZGVmaW5lZCYmKGU9dGhpcy5yb290SWQpO3ZhciB0PXRoaXMuX2dsb2JhbElkU3RvcmFnZUZpbmQoZSk7cmV0dXJuIHQ/KHRoaXMuX3hjbG9zZUFsbCh0KSx0aGlzLmFsbFRyZWUuY2hpbGROb2Rlc1swXS5ib3JkZXI9IjEiLHRoaXMuYWxsVHJlZS5jaGlsZE5vZGVzWzBdLmJvcmRlcj0iMCIsdm9pZCAwKTowfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRVc2VyRGF0YT1mdW5jdGlvbihlLHQsaSl7dmFyIG49dGhpcy5fZ2xvYmFsSWRTdG9yYWdlRmluZChlLDAsITApO24mJigiaGludCI9PXQmJihuLmh0bWxOb2RlLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS50aXRsZT1pKSwidW5kZWZpbmVkIj09dHlwZW9mIG4udXNlckRhdGFbInRfIit0XSYmKG4uX3VzZXJkYXRhbGlzdD9uLl91c2VyZGF0YWxpc3QrPSIsIit0Om4uX3VzZXJkYXRhbGlzdD10KSxuLnVzZXJEYXRhWyJ0XyIrdF09aSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLmdldFVzZXJEYXRhPWZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2xvYmFsSWRTdG9yYWdlRmluZChlLDAsITApO2lmKGkpcmV0dXJuIGkudXNlckRhdGFbInRfIit0XX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZ2V0SXRlbUNvbG9yPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dsb2JhbElkU3RvcmFnZUZpbmQoZSk7aWYoIXQpcmV0dXJuIDA7dmFyIGk9bmV3IE9iamVjdDtyZXR1cm4gdC5hY29sb3ImJihpLmFjb2xvcj10LmFjb2xvciksdC5zY29sb3ImJihpLnNjb2xvcj10LnNjb2xvciksaX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuc2V0SXRlbUNvbG9yPWZ1bmN0aW9uKGUsdCxpKXtpZihlJiZlLnNwYW4pdmFyIG49ZTtlbHNlIHZhciBuPXRoaXMuX2dsb2JhbElkU3RvcmFnZUZpbmQoZSk7cmV0dXJuIG4/KG4uaV9zZWw/KGl8fHQpJiYobi5zcGFuLnN0eWxlLmNvbG9yPWl8fHQpOnQmJihuLnNwYW4uc3R5bGUuY29sb3I9dCksaSYmKG4uc2NvbG9yPWkpLHQmJihuLmFjb2xvcj10KSx2b2lkIDApOjB9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnNldE9uTW91c2VJbkhhbmRsZXI9ZnVuY3Rpb24oZSl7dGhpcy5laGx0PSEwLHRoaXMuYXR0YWNoRXZlbnQoIm9uTW91c2VJbiIsZSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnNldE9uTW91c2VPdXRIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMuZWhsdD0hMCx0aGlzLmF0dGFjaEV2ZW50KCJvbk1vdXNlT3V0IixlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZW5hYmxlVHJlZUxpbmVzPWZ1bmN0aW9uKGUpe3RoaXMudHJlZUxpbmVzT249ZGh4NC5zMmIoZSl9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLm9wZW5JdGVtPWZ1bmN0aW9uKGUpe3RoaXMuc2tpcExvY2s9ITA7dmFyIHQ9dGhpcy5fZ2xvYmFsSWRTdG9yYWdlRmluZChlKTtyZXR1cm4gdD90aGlzLl9vcGVuSXRlbSh0KTowfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fb3Blbkl0ZW09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0T3BlblN0YXRlKGUpO2lmKDA+dHx8dGhpcy5YTUxzb3VyY2UmJiFlLlhNTGxvYWQpe2lmKCF0aGlzLmNhbGxFdmVudCgib25PcGVuU3RhcnQiLFtlLmlkLHRdKSlyZXR1cm4gMDt0aGlzLl9IaWRlU2hvdyhlLDIpLHRoaXMuY2hlY2tFdmVudCgib25PcGVuRW5kIikmJih0aGlzLm9uWExFPT10aGlzLl9lcG5GSGUmJnRoaXMuX2VwbkZIZSh0aGlzLGUuaWQsITApLHRoaXMueG1sc3RhdGUmJnRoaXMuWE1Mc291cmNlPyh0aGlzLl9vaWVfb25YTEUucHVzaCh0aGlzLm9uWExFKSx0aGlzLm9uWExFPXRoaXMuX2VwbkZIZSk6dGhpcy5jYWxsRXZlbnQoIm9uT3BlbkVuZCIsW2UuaWQsdGhpcy5fZ2V0T3BlblN0YXRlKGUpXSkpfWVsc2UgdGhpcy5fc3JuZCYmdGhpcy5fSGlkZVNob3coZSwyKTtlLnBhcmVudE9iamVjdCYmIXRoaXMuX3NraXBfb3Blbl9wYXJlbnQmJnRoaXMuX29wZW5JdGVtKGUucGFyZW50T2JqZWN0KX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2dldEFsbEZhdEl0ZW1zPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixpPTA7aTxlLmNoaWxkc0NvdW50O2krKylpZihlLmNoaWxkTm9kZXNbaV0udW5QYXJzZWR8fGUuY2hpbGROb2Rlc1tpXS5jaGlsZHNDb3VudD4wKXtpZih0P3QrPXRoaXMuZGxtdHIrZS5jaGlsZE5vZGVzW2ldLmlkOnQ9IiIrZS5jaGlsZE5vZGVzW2ldLmlkLGUuY2hpbGROb2Rlc1tpXS51blBhcnNlZCl2YXIgbj10aGlzLl9nZXRBbGxGYXRJdGVtc1hNTChlLmNoaWxkTm9kZXNbaV0udW5QYXJzZWQsMSk7ZWxzZSB2YXIgbj10aGlzLl9nZXRBbGxGYXRJdGVtcyhlLmNoaWxkTm9kZXNbaV0pO24mJih0Kz10aGlzLmRsbXRyK24pfXJldHVybiB0fSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZWxlY3RJdGVtPWZ1bmN0aW9uKGUsdCxpKXt0PWRoeDQuczJiKHQpO3ZhciBuPXRoaXMuX2dsb2JhbElkU3RvcmFnZUZpbmQoZSk7aWYoIW58fCFuLnBhcmVudE9iamVjdClyZXR1cm4gMDt0aGlzLlhNTGxvYWRpbmdXYXJuaW5nP24ucGFyZW50T2JqZWN0Lm9wZW5NZT0xOnRoaXMuX29wZW5JdGVtKG4ucGFyZW50T2JqZWN0KTt2YXIgbz1udWxsO2kmJihvPW5ldyBPYmplY3Qsby5jdHJsS2V5PSEwLG4uaV9zZWwmJihvLnNraXBVblNlbD0hMCkpLHQ/dGhpcy5vblJvd1NlbGVjdChvLG4uaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbM10sITEpOnRoaXMub25Sb3dTZWxlY3QobyxuLmh0bWxOb2RlLmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzNdLCEwKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2NvbXByZXNzQ2hpbGRMaXN0PWZ1bmN0aW9uKGUsdCl7ZS0tO2Zvcih2YXIgaT0wO2U+aTtpKyspMD09dFtpXSYmKHRbaV09dFtpKzFdLHRbaSsxXT0wKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2RlbGV0ZU5vZGU9ZnVuY3Rpb24oZSx0LGkpe2lmKCF0fHwhdC5wYXJlbnRPYmplY3QpcmV0dXJuIDA7dmFyIG49MCxvPTA7dC50ci5uZXh0U2libGluZyYmKG49dC50ci5uZXh0U2libGluZy5ub2RlbSksdC50ci5wcmV2aW91c1NpYmxpbmcmJihvPXQudHIucHJldmlvdXNTaWJsaW5nLm5vZGVtKTtmb3IodmFyIHI9dC5wYXJlbnRPYmplY3QsbD1yLmNoaWxkc0NvdW50LHM9ci5jaGlsZE5vZGVzLGE9MDtsPmE7YSsrKWlmKHNbYV0uaWQ9PWUpe2l8fHIuaHRtbE5vZGUuY2hpbGROb2Rlc1swXS5yZW1vdmVDaGlsZChzW2FdLnRyKSxzW2FdPTA7YnJlYWt9dGhpcy5fY29tcHJlc3NDaGlsZExpc3QobCxzKSxpfHxyLmNoaWxkc0NvdW50LS0sbiYmKHRoaXMuX2NvcnJlY3RQbHVzKG4pLHRoaXMuX2NvcnJlY3RMaW5lKG4pKSxvJiYodGhpcy5fY29ycmVjdFBsdXMobyksdGhpcy5fY29ycmVjdExpbmUobykpLHRoaXMudHNjaGVjayYmdGhpcy5fY29ycmVjdENoZWNrU3RhdGVzKHIpLGl8fHRoaXMuX2dsb2JhbElkU3RvcmFnZVJlY1N1Yih0KX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZGVsZXRlQ2hpbGRJdGVtcz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGUpO2lmKHQpZm9yKHZhciBpPXQuY2hpbGRzQ291bnQsbj0wO2k+bjtuKyspdGhpcy5fZGVsZXRlTm9kZSh0LmNoaWxkTm9kZXNbMF0uaWQsdC5jaGlsZE5vZGVzWzBdKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2dsb2JhbElkU3RvcmFnZVJlY1N1Yj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUuY2hpbGRzQ291bnQ7dCsrKXRoaXMuX2dsb2JhbElkU3RvcmFnZVJlY1N1YihlLmNoaWxkTm9kZXNbdF0pLHRoaXMuX2dsb2JhbElkU3RvcmFnZVN1YihlLmNoaWxkTm9kZXNbdF0uaWQpO3RoaXMuX2dsb2JhbElkU3RvcmFnZVN1YihlLmlkKTt2YXIgaT1lO2kuc3Bhbj1udWxsLGkudHIubm9kZW09bnVsbCxpLnRyPW51bGwsaS5odG1sTm9kZT1udWxsfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5fYXV0b1Njcm9sbD1mdW5jdGlvbihlLHQsaSl7dGhpcy5hdXRvU2Nyb2xsJiYoZSYmKHQ9ZGh4NC5hYnNUb3AoZSksaT1kaHg0LmFic1RvcCh0aGlzLmFsbFRyZWUpLXRoaXMuYWxsVHJlZS5zY3JvbGxUb3ApLHQtaS1wYXJzZUludCh0aGlzLmFsbFRyZWUuc2Nyb2xsVG9wKT5wYXJzZUludCh0aGlzLmFsbFRyZWUub2Zmc2V0SGVpZ2h0KS01MCYmKHRoaXMuYWxsVHJlZS5zY3JvbGxUb3A9cGFyc2VJbnQodGhpcy5hbGxUcmVlLnNjcm9sbFRvcCkrMjApLHQtaTxwYXJzZUludCh0aGlzLmFsbFRyZWUuc2Nyb2xsVG9wKSszMCYmKHRoaXMuYWxsVHJlZS5zY3JvbGxUb3A9cGFyc2VJbnQodGhpcy5hbGxUcmVlLnNjcm9sbFRvcCktMjApKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZW5hYmxlVGV4dFNpZ25zPWZ1bmN0aW9uKGUpe3RoaXMuX3R4dGltZz1kaHg0LnMyYihlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUucHJldmVudElFQ2FjaGluZz1mdW5jdGlvbihlKXtkaHg0LmFqYXguY2FjaGU9IWV9LGRodG1sWFRyZWVPYmplY3QucHJvdG90eXBlLnByZXZlbnRJRUNhc2hpbmc9ZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUucHJldmVudElFQ2FjaGluZyxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRJY29uU2l6ZT1mdW5jdGlvbihlLHQsaSl7aWYoaSl7aWYoaSYmaS5zcGFuKXZhciBuPWk7ZWxzZSB2YXIgbj10aGlzLl9nbG9iYWxJZFN0b3JhZ2VGaW5kKGkpO2lmKCFuKXJldHVybiAwO3ZhciBvPW4uc3Bhbi5wYXJlbnROb2RlLnByZXZpb3VzU2libGluZy5jaGlsZE5vZGVzWzBdO2UmJihvLnN0eWxlLndpZHRoPWUrInB4Iix3aW5kb3cuX0tIVE1McnYmJihvLnBhcmVudE5vZGUuc3R5bGUud2lkdGg9ZSsicHgiKSksdCYmKG8uc3R5bGUuaGVpZ2h0PXQrInB4Iix3aW5kb3cuX0tIVE1McnYmJihvLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0PXQrInB4IikpfWVsc2UgdGhpcy5kZWZfaW1nX3g9ZSsicHgiLHRoaXMuZGVmX2ltZ195PXQrInB4In0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuZW5hYmxlU2luZ2xlUmFkaW9Nb2RlPWZ1bmN0aW9uKGUpe3RoaXMuX2ZyYnRycz1kaHg0LnMyYihlKX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUub3Blbk9uSXRlbUFkZGVkPWZ1bmN0aW9uKGUpe3RoaXMuX2hBZEk9IWRoeDQuczJiKGUpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5vcGVuT25JdGVtQWRkaW5nPWZ1bmN0aW9uKGUpe3RoaXMuX2hBZEk9IWRoeDQuczJiKGUpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5nZXRBbGxJdGVtc1dpdGhLaWRzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2dldEFsbEZhdEl0ZW1zKHRoaXMuaHRtbE5vZGUpfSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5zZXRTa2luPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyZW50T2JqZWN0LmNsYXNzTmFtZS5yZXBsYWNlKC9kaHh0cmVlX1teIF0qL2dpLCIiKTt0aGlzLnBhcmVudE9iamVjdC5jbGFzc05hbWU9dCsiIGRoeHRyZWVfIitlLCgiZGh4X3RlcnJhY2UiPT1lfHwiZGh4X3dlYiI9PWV8fCJtYXRlcmlhbCI9PWUpJiZ0aGlzLmVuYWJsZVRyZWVMaW5lcyghMSksIm1hdGVyaWFsIj09ZSYmdGhpcy5zZXRJY29uU2l6ZSgiMjUiLCIyNSIpfSxqc29uUG9pbnRlci5wcm90b3R5cGU9e3RleHQ6ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbihlKXtmb3IodmFyIGk9W10sbj0wO248ZS5sZW5ndGg7bisrKWkucHVzaCgieyIrdChlW25dKSsifSIpO3JldHVybiBpLmpvaW4oIiwiKX0sdD1mdW5jdGlvbihpKXt2YXIgbj1bXTtmb3IodmFyIG8gaW4gaSkib2JqZWN0Ij09dHlwZW9mIGlbb10/by5sZW5ndGg/bi5wdXNoKCciJytvKyciOlsnK2UoaVtvXSkrIl0iKTpuLnB1c2goJyInK28rJyI6eycrdChpW29dKSsifSIpOm4ucHVzaCgnIicrbysnIjoiJytpW29dKyciJyk7cmV0dXJuIG4uam9pbigiLCIpfTtyZXR1cm4ieyIrdCh0aGlzLmQpKyJ9In0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRbZV19LGV4aXN0czpmdW5jdGlvbigpe3JldHVybiEhdGhpcy5kfSxjb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZC5jb250ZW50fSxlYWNoOmZ1bmN0aW9uKGUsdCxpKXt2YXIgbj10aGlzLmRbZV0sbz1uZXcganNvblBvaW50ZXI7aWYobilmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKylvLmQ9bltyXSx0LmFwcGx5KGksW28scl0pfSxnZXRfYWxsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sc3ViOmZ1bmN0aW9uKGUpe3JldHVybiBuZXcganNvblBvaW50ZXIodGhpcy5kW2VdLHRoaXMuZCl9LHN1Yl9leGlzdHM6ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmRbZV19LGVhY2hfeDpmdW5jdGlvbihlLHQsaSxuLG8pe3ZhciByPXRoaXMuZFtlXSxsPW5ldyBqc29uUG9pbnRlcigwLHRoaXMuZCk7aWYocilmb3Iobz1vfHwwO288ci5sZW5ndGg7bysrKWlmKHJbb11bdF0mJihsLmQ9cltvXSwtMT09aS5hcHBseShuLFtsLG9dKSkpcmV0dXJufSx1cDpmdW5jdGlvbigpe3JldHVybiBuZXcganNvblBvaW50ZXIodGhpcy5kcCx0aGlzLmQpfSxzZXQ6ZnVuY3Rpb24oZSx0KXt0aGlzLmRbZV09dH0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGpzb25Qb2ludGVyKHRoaXMuZCx0aGlzLmRwKX0sdGhyb3VnaDpmdW5jdGlvbihlLHQsaSxuLG8pe3ZhciByPXRoaXMuZFtlXTtpZihyLmxlbmd0aClmb3IodmFyIGw9MDtsPHIubGVuZ3RoO2wrKyl7aWYobnVsbCE9cltsXVt0XSYmIiIhPXJbbF1bdF0mJighaXx8cltsXVt0XT09aSkpe3ZhciBzPW5ldyBqc29uUG9pbnRlcihyW2xdLHRoaXMuZCk7bi5hcHBseShvLFtzLGxdKX12YXIgYT10aGlzLmQ7dGhpcy5kPXJbbF0sdGhpcy5zdWJfZXhpc3RzKGUpJiZ0aGlzLnRocm91Z2goZSx0LGksbixvKSx0aGlzLmQ9YX19fSxkaHRtbFhUcmVlT2JqZWN0LnByb3RvdHlwZS5sb2FkSlNPTk9iamVjdD1mdW5jdGlvbihlLHQpe3JldHVybiB3aW5kb3cuY29uc29sZSYmd2luZG93LmNvbnNvbGUuaW5mbyYmd2luZG93LmNvbnNvbGUuaW5mbygibG9hZEpTT05PYmplY3Qgd2FzIGRlcHJlY2F0ZWQiLCJodHRwOi8vZG9jcy5kaHRtbHguY29tL21pZ3JhdGlvbl9faW5kZXguaHRtbCNtaWdyYXRpb25mcm9tNDN0bzQ0IiksdGhpcy5fbG9hZEpTT05PYmplY3QoZSx0KX0sZGh0bWxYVHJlZU9iamVjdC5wcm90b3R5cGUuX2xvYWRKU09OT2JqZWN0PWZ1bmN0aW9uKGUsdCl7dGhpcy5wYXJzQ291bnR8fHRoaXMuY2FsbEV2ZW50KCJvblhMUyIsW3RoaXMsbnVsbF0pLHRoaXMueG1sc3RhdGU9MTt2YXIgaT1uZXcganNvblBvaW50ZXIoZSk7dGhpcy5fcGFyc2UoaSksdGhpcy5fcD1pLHQmJnQoKX0sd2luZG93LmFkZEV2ZW50TGlzdGVuZXI/d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLGRoeF9pbml0X3RyZWVzLCExKTp3aW5kb3cuYXR0YWNoRXZlbnQmJndpbmRvdy5hdHRhY2hFdmVudCgib25sb2FkIixkaHhfaW5pdF90cmVlcyk7dmFyIHN0eWxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7c3R5bGUuaW5uZXJIVE1MPSdAa2V5ZnJhbWVzIGRoeF9sb2FkZXJfcm90YXRlezEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO319QGtleWZyYW1lcyBkaHhfbG9hZGVyX2Rhc2h7MCV7c3Ryb2tlLWRhc2hhcnJheToxLDIwMDtzdHJva2UtZGFzaG9mZnNldDowO301MCV7c3Ryb2tlLWRhc2hhcnJheTo4OSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTM1cHg7fTEwMCV7c3Ryb2tlLWRhc2hhcnJheTo4OSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTEyNHB4O319LmRodG1seE1lbnVfbWF0ZXJpYWxfTWlkZGxle3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHg7YmFja2dyb3VuZC1jb2xvcjojZjVmNWY1O292ZXJmbG93OmhpZGRlbjtib3JkZXI6bm9uZTtmb250LXNpemU6MTRweDtmb250LWZhbWlseTpSb2JvdG8sQXJpYWwsSGVsdmV0aWNhO2NvbG9yOiM0MDQwNDA7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1raHRtbC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7fS5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9Ub3BMZXZlbF9JdGVtX05vcm1hbCwuZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9EaXNhYmxlZCwuZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9TZWxlY3RlZHtwb3NpdGlvbjpyZWxhdGl2ZTtmbG9hdDpsZWZ0O2ZvbnQ6aW5oZXJpdDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4O21hcmdpbjowO3BhZGRpbmc6MCA4cHg7Y3Vyc29yOmRlZmF1bHQ7d2hpdGUtc3BhY2U6bm93cmFwOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LW8tdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9Ob3JtYWwgZGl2LnRvcF9sZXZlbF90ZXh0LC5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9Ub3BMZXZlbF9JdGVtX0Rpc2FibGVkIGRpdi50b3BfbGV2ZWxfdGV4dCwuZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9TZWxlY3RlZCBkaXYudG9wX2xldmVsX3RleHR7ZmxvYXQ6bGVmdDttYXJnaW46MCAzcHg7fS5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9Ub3BMZXZlbF9JdGVtX05vcm1hbCBpLC5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9Ub3BMZXZlbF9JdGVtX0Rpc2FibGVkIGksLmRodG1seE1lbnVfbWF0ZXJpYWxfTWlkZGxlIGRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1RvcExldmVsX0l0ZW1fU2VsZWN0ZWQgaXtoZWlnaHQ6aW5oZXJpdDtsaW5lLWhlaWdodDppbmhlcml0O2Zsb2F0OmxlZnQ7Y29sb3I6aW5oZXJpdDttYXJnaW46MCA0cHg7Zm9udC1zaXplOjEuMmVtO30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9EaXNhYmxlZHtjb2xvcjojYTZhNmE2O30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfVG9wTGV2ZWxfSXRlbV9TZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlYmViZWI7fS5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBpbWcuZGh0bWx4TWVudV9Ub3BMZXZlbF9JdGVtX0ljb257ZmxvYXQ6bGVmdDttYXJnaW46NXB4IDNweCAwIDNweDt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O2N1cnNvcjpkZWZhdWx0O30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LnRvcF9zZXB7cG9zaXRpb246cmVsYXRpdmU7ZmxvYXQ6bGVmdDtoZWlnaHQ6MjJweDt3aWR0aDowO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjZGZkZmRmO21hcmdpbjozcHggOHB4IDAgOHB4O2ZvbnQtc2l6ZToxcHg7b3ZlcmZsb3c6aGlkZGVuO2N1cnNvcjpkZWZhdWx0Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LW8tdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfVG9wTGV2ZWxfVGV4dF9yaWdodCwuZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfVG9wTGV2ZWxfVGV4dF9sZWZ0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHg7Y3Vyc29yOmRlZmF1bHQ7Zm9udC1zaXplOjE0cHg7Zm9udC1mYW1pbHk6Um9ib3RvLEFyaWFsLEhlbHZldGljYTtjb2xvcjojNDA0MDQwOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LW8tdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUgZGl2LmRodG1seE1lbnVfVG9wTGV2ZWxfVGV4dF9yaWdodHtyaWdodDo2cHg7fS5kaHRtbHhNZW51X21hdGVyaWFsX01pZGRsZSBkaXYuZGh0bWx4TWVudV9Ub3BMZXZlbF9UZXh0X2xlZnR7bGVmdDo2cHg7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29ue3Bvc2l0aW9uOmFic29sdXRlO3BhZGRpbmc6NXB4IDA7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO292ZXJmbG93OmhpZGRlbjtjdXJzb3I6ZGVmYXVsdDtsaW5lLWhlaWdodDpub3JtYWw7b3ZlcmZsb3cteTphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsMC4xMiksMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yNCk7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1raHRtbC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTstby11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRke3BhZGRpbmc6MDttYXJnaW46MDtsaW5lLWhlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtc2l6ZToxNHB4O2ZvbnQtZmFtaWx5OlJvYm90byxBcmlhbCxIZWx2ZXRpY2E7Y29sb3I6IzQwNDA0MDt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdGQuc3ViX2l0ZW1faWNvbnt3aWR0aDoxOHB4O3RleHQtYWxpZ246Y2VudGVyO31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZC5zdWJfaXRlbV9pY29uIGltZy5zdWJfaWNvbnttYXJnaW46NHB4IDZweCAwIDZweDt3aWR0aDoxOHB4O2hlaWdodDoxOHB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZC5zdWJfaXRlbV9pY29uIGl7d2lkdGg6MThweDtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDoyOXB4O21hcmdpbjowIDZweDtmb250LXNpemU6MS4yZW07dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6aW5oZXJpdDt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdGQuc3ViX2l0ZW1faWNvbiBkaXYuc3ViX2ljb257bWFyZ2luOjAgNnB4O3dpZHRoOjE4cHg7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgNXB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1ncy9kaHhtZW51X21hdGVyaWFsL2RoeG1lbnVfY2hyZC5wbmciKTt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdGQuc3ViX2l0ZW1faWNvbiBkaXYuc3ViX2ljb24uY2hieF8we2JhY2tncm91bmQtcG9zaXRpb246MCA1cHg7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRkLnN1Yl9pdGVtX2ljb24gZGl2LnN1Yl9pY29uLmNoYnhfMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOHB4IDVweDt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdGQuc3ViX2l0ZW1faWNvbiBkaXYuc3ViX2ljb24ucmRidF8we2JhY2tncm91bmQtcG9zaXRpb246LTcycHggNXB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZC5zdWJfaXRlbV9pY29uIGRpdi5zdWJfaWNvbi5yZGJ0XzF7YmFja2dyb3VuZC1wb3NpdGlvbjotOTBweCA1cHg7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRkLnN1Yl9pdGVtX3RleHQgZGl2LnN1Yl9pdGVtX3RleHR7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjAgMjJweCAwIDFweDtvdmVyZmxvdzpoaWRkZW47fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRkLnN1Yl9pdGVtX2hre3BhZGRpbmc6MCAxMHB4IDAgOHB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZC5zdWJfaXRlbV9oayBkaXYuc3ViX2l0ZW1faGt7Y29sb3I6IzhkOGQ4ZDtmb250LXNpemU6MTJweDt0ZXh0LWFsaWduOnJpZ2h0O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZCBkaXYuY29tcGxleF9hcnJvd3tmbG9hdDpyaWdodDt3aWR0aDoxMHB4O21hcmdpbjowIDFweCAwIDExcHg7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1ncy9kaHhtZW51X21hdGVyaWFsL2RoeG1lbnVfc3ViYXIucG5nIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246MCAxMHB4O292ZXJmbG93OmhpZGRlbjtmb250LXNpemU6MXB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ZCBkaXYuY29tcGxleF9hcnJvd19sb2FkaW5ne3dpZHRoOjE2cHg7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciBjZW50ZXI7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWdzL2RoeG1lbnVfbWF0ZXJpYWwvZGh4bWVudV9sb2FkZXIuZ2lmIik7ZmxvYXQ6cmlnaHQ7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9pdGVtX3NlbGVjdGVkIHRke2JhY2tncm91bmQtY29sb3I6I2ViZWJlYjt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdHIuc3ViX2l0ZW1fc2VsZWN0ZWQgdGQgZGl2LmNvbXBsZXhfYXJyb3d7YmFja2dyb3VuZC1wb3NpdGlvbjotMTBweCAxMHB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ci5zdWJfaXRlbV9kaXMgdGQuc3ViX2l0ZW1faGsgZGl2LnN1Yl9pdGVtX2hre2NvbG9yOiNjMGMwYzA7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9pdGVtX2RpcyB0ZCBkaXYuc3ViX2l0ZW1fdGV4dCxkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ci5zdWJfaXRlbV9kaXMgdGQgdGQuc3ViX2l0ZW1faWNvbiBpe2NvbG9yOiNhNmE2YTY7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9pdGVtX2RpcyB0ZCBkaXYuY29tcGxleF9hcnJvd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMHB4IDEwcHg7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9pdGVtX2RpcyB0ZCBkaXYuc3ViX2ljb24uY2hieF8we2JhY2tncm91bmQtcG9zaXRpb246LTM2cHggNXB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ci5zdWJfaXRlbV9kaXMgdGQgZGl2LnN1Yl9pY29uLmNoYnhfMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi01NHB4IDVweDt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gdHIuc3ViX2l0ZW1fZGlzIHRkIGRpdi5zdWJfaWNvbi5yZGJ0XzB7YmFja2dyb3VuZC1wb3NpdGlvbjotMTA4cHggNXB4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ci5zdWJfaXRlbV9kaXMgdGQgZGl2LnN1Yl9pY29uLnJkYnRfMXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjZweCA1cHg7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9pdGVtX2RpcyB0ZCBpe2NvbG9yOiNhNmE2YTY7fWRpdi5kaHRtbHhNZW51X21hdGVyaWFsX1N1YkxldmVsQXJlYV9Qb2x5Z29uIHRyLnN1Yl9zZXAgdGR7cGFkZGluZzo1cHggM3B4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiB0ci5zdWJfc2VwIHRkIGRpdi5zdWJfc2Vwe3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxcHg7bGluZS1oZWlnaHQ6MXB4O2hlaWdodDowO3dpZHRoOjEwMCU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RmZGZkZjt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX0Fycm93VXAsZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX0Fycm93VXBfT3ZlcixkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfQXJyb3dVcF9EaXNhYmxlZHtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkZmRmZGY7YmFja2dyb3VuZC1pbWFnZTp1cmwoImltZ3MvZGh4bWVudV9tYXRlcmlhbC9kaHhtZW51X2Fycm93X3VwLnBuZyIpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNlbnRlciAycHg7cGFkZGluZzo4cHggMDttYXJnaW4tYm90dG9tOjNweDt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX0Fycm93VXBfRGlzYWJsZWR7YmFja2dyb3VuZC1pbWFnZTp1cmwoImltZ3MvZGh4bWVudV9tYXRlcmlhbC9kaHhtZW51X2Fycm93X3VwX2Rpcy5wbmciKTt9ZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX0Fycm93RG93bixkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfQXJyb3dEb3duX092ZXIsZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX1BvbHlnb24gZGl2LmRodG1seE1lbnVfbWF0ZXJpYWxfU3ViTGV2ZWxBcmVhX0Fycm93RG93bl9EaXNhYmxlZHtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MXB4O2JvcmRlci10b3A6MXB4IHNvbGlkICNkZmRmZGY7YmFja2dyb3VuZC1pbWFnZTp1cmwoImltZ3MvZGh4bWVudV9tYXRlcmlhbC9kaHhtZW51X2Fycm93X2Rvd24ucG5nIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIDZweDtwYWRkaW5nOjhweCAwO21hcmdpbi10b3A6M3B4O31kaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfUG9seWdvbiBkaXYuZGh0bWx4TWVudV9tYXRlcmlhbF9TdWJMZXZlbEFyZWFfQXJyb3dEb3duX0Rpc2FibGVke2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWdzL2RoeG1lbnVfbWF0ZXJpYWwvZGh4bWVudV9hcnJvd19kb3duX2Rpcy5wbmciKTt9aWZyYW1lLmRodG1seE1lbnVfSUU2Q292ZXJGaXhfbWF0ZXJpYWx7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyOm5vbmU7YmFja2dyb3VuZDojMDAwO2ZpbHRlcjpwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEob3BhY2l0eT0xMDApO30uZGh0bWx4TWVudV9tYXRlcmlhbF9NaWRkbGUuZGlyX2xlZnQgZGl2LmFsaWduX2xlZnR7ZmxvYXQ6bGVmdDt9LmRodG1seE1lbnVfbWF0ZXJpYWxfTWlkZGxlLmRpcl9sZWZ0IGRpdi5hbGlnbl9yaWdodHtmbG9hdDpyaWdodDt9LmRoeG1lbnVfc2tpbl9kZXRlY3R7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDotMTAwcHg7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowIHNvbGlkIHdoaXRlO3dpZHRoOjQwcHg7aGVpZ2h0OjEwcHg7b3ZlcmZsb3c6aGlkZGVuO31Aa2V5ZnJhbWVzIGRoeF9sb2FkZXJfcm90YXRlezEwMCV7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO319QGtleWZyYW1lcyBkaHhfbG9hZGVyX2Rhc2h7MCV7c3Ryb2tlLWRhc2hhcnJheToxLDIwMDtzdHJva2UtZGFzaG9mZnNldDowO301MCV7c3Ryb2tlLWRhc2hhcnJheTo4OSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTM1cHg7fTEwMCV7c3Ryb2tlLWRhc2hhcnJheTo4OSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTEyNHB4O319LmRlZmF1bHRUcmVlVGFibGV7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO30uY29udGFpbmVyVGFibGVTdHlsZXtvdmVyZmxvdzphdXRvOy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNoO3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDowO2ZvbnQtc2l6ZToxMnB4Oy1raHRtbC11c2VyLXNlbGVjdDpub25lO30uY29udGFpbmVyVGFibGVTdHlsZVJUTCBzcGFue2RpcmVjdGlvbjpydGw7dW5pY29kZS1iaWRpOmJpZGktb3ZlcnJpZGU7fS5jb250YWluZXJUYWJsZVN0eWxlUlRMe2RpcmVjdGlvbjpydGw7b3ZlcmZsb3c6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MDtmb250LXNpemU6MTJweDt9LnN0YW5kYXJ0VHJlZVJvd3tmb250LWZhbWlseTpSb2JvdG8sQXJpYWwsSGVsdmV0aWNhO2ZvbnQtc2l6ZTo7LW1vei11c2VyLXNlbGVjdDpub25lO2xpbmUtaGVpZ2h0OjI0cHg7fS5zZWxlY3RlZFRyZWVSb3d7Zm9udC1mYW1pbHk6Um9ib3RvLEFyaWFsLEhlbHZldGljYTtmb250LXNpemU6Oy1tb3otdXNlci1zZWxlY3Q6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Y29sb3I6IzM5Yzt9LmRoeHRyZWVfbWF0ZXJpYWwgLnNlbGVjdGVkVHJlZVJvd0Z1bGwgLmRoeFRleHRDZWxse2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjojMzljO30uZHJhZ0FuZERyb3BSb3d7Y29sb3I6IzM5Yzt9LnN0YW5kYXJ0VHJlZVJvd19sb3J7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtiYWNrZ3JvdW5kLWNvbG9yOjtmb250LWZhbWlseTpSb2JvdG8sQXJpYWwsSGVsdmV0aWNhO2ZvbnQtc2l6ZTo7LW1vei11c2VyLXNlbGVjdDpub25lO30uc3RhbmRhcnRUcmVlSW1hZ2V7aGVpZ2h0OjI0cHg7b3ZlcmZsb3c6aGlkZGVuO2JvcmRlcjowO3BhZGRpbmc6MDttYXJnaW46MDtmb250LXNpemU6MXB4O30uc3RhbmRhcnRUcmVlSW1hZ2UgaW1ne3dpZHRoOjE4cHg7aGVpZ2h0OjI0cHg7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtib3JkZXI6MDtwYWRkaW5nOjA7bWFyZ2luOjA7Zm9udC1zaXplOjFweDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LWtodG1sLXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lOy1vLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt9LmhpZGRlblJvd3t3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO30uZHJhZ1NwYW5EaXYsLmRyYWdTcGFuRGl2IHRke2ZvbnQtZmFtaWx5OlJvYm90byxBcmlhbCxIZWx2ZXRpY2E7Zm9udC1zaXplOjtsaW5lLWhlaWdodDo7dmVydGljYWwtYWxpZ246Y2VudGVyO2JhY2tncm91bmQtY29sb3I6d2hpdGU7ei1pbmRleDo5OTk7fS5kcmFnU3BhbkRpdiB0ZHtwYWRkaW5nOjVweDt9LmFfZGh4X2hpZGRlbl9pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTFweDtsZWZ0Oi0xcHg7d2lkdGg6MXB4O2hlaWdodDoxcHg7Ym9yZGVyOm5vbmU7YmFja2dyb3VuZDpub25lO30uYV9kaHhfaGlkZGVuX2lucHV0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMXB4O2xlZnQ6LTFweDt3aWR0aDoxcHg7aGVpZ2h0OjFweDtib3JkZXI6bm9uZTtiYWNrZ3JvdW5kOm5vbmU7fS5zZWxlY3Rpb25CYXJ7dG9wOjA7YmFja2dyb3VuZC1jb2xvcjpibGFjaztwb3NpdGlvbjphYnNvbHV0ZTtvdmVyZmxvdzpoaWRkZW47aGVpZ2h0OjJweDt6LWluZGV4OjExO30uaW50cmVlZWRpdFJvd3tmb250LXNpemU6OHB0O2hlaWdodDoxNnB4O2JvcmRlcjoxcHggc29saWQgc2lsdmVyO3BhZGRpbmc6MDttYXJnaW46MDttYXJnaW4tbGVmdDo0cHg7LW1vei11c2VyLXNlbGVjdDp0ZXh0Oy1raHRtbC11c2VyLXNlbGVjdDp0ZXh0O30uZGh4X3RyZWVfdGV4dFNpZ257Zm9udC1zaXplOjhwdDtmb250LWZhbWlseTptb25vc3BhY2U7d2lkdGg6MjFweDtjb2xvcjo7cGFkZGluZzowO21hcmdpbjowO2N1cnNvcjpwb2ludGVyO3RleHQtYWxpZ246Y2VudGVyO30uZGh4X3RyZWVfb3BhY2l0eXtvcGFjaXR5OjA7ZmlsdGVyOnByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYShvcGFjaXR5PTApOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTsta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7LW8tdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO30uZGh4X2JnX2ltZ19maXh7d2lkdGg6MThweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1wb3NpdGlvbjpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbi14OmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uLXk6Y2VudGVyO30uZGh4dHJlZV9za2luX2RldGVjdHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOi0xMDBweDttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjAgc29saWQgd2hpdGU7d2lkdGg6NDBweDtoZWlnaHQ6MTBweDtvdmVyZmxvdzpoaWRkZW47fScsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7dmFyIGxheWFhaXJfZGVidWdfdmlldz17fTt3aW5kb3cubGF5YWFpcl9kZWJ1Z192aWV3PWxheWFhaXJfZGVidWdfdmlldyxsYXlhYWlyX2RlYnVnX3ZpZXcuaW5pdExheWFBaXJEZWJ1Z1ZpZXc9ZnVuY3Rpb24oZSl7ZS5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayI7dmFyIHQ9TWF0aC5taW4oMjUwLC4zKmUub2Zmc2V0V2lkdGgpLGk9JzxkaXYgY2xhc3M9InRvcC1iYW5uZXIiPlxuPC9kaXY+XG48ZGl2PlxuPGRpdiBzdHlsZT0ib3ZlcmZsb3c6aGlkZGVuOyBib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNDQ0OyBwYWRkaW5nOjVweCI+XG48ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0Ij5cbjxidXR0b24gaWQ9Im5vZGVfZnVuY3Rpb25hbGl0eV9jb250cm9sIj7lrqHmn6XlhYPntKA8L2J1dHRvbj5cbjxidXR0b24gaWQ9InJlZnJlc2hfY29udHJvbCI+5Yi35pawPC9idXR0b24+XG48L2Rpdj5cbjxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0Ij5cbjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InNob3dfY3VycmVudF9jYWNoZV9jb250cm9sIj7mmL7npLpjYWNoZemHjee7mDwvaW5wdXQ+XG48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzaG93X2FsbF9jYWNoZV9jb250cm9sIj7mmL7npLpjYWNoZeWMuuWfnzwvaW5wdXQ+XG48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzaG93X2F0bGFzX2NvbnRyb2wiPuaYvuekuuaWh+Wtl+WbvumbhjwvaW5wdXQ+XG48L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz0iaGdyb3VwIj5cbjxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7d2lkdGg6Jyt0KydweDsgYm9yZGVyLXJpZ2h0OjFweCBzb2xpZCBibGFjayIgaWQ9InRyZWVfY29udGFpbmVyIj48L2Rpdj5cbjxkaXYgc3R5bGU9Im92ZXJmbG93OmhpZGRlbiI+XG48ZGl2IGlkPSJjb250ZW50X3Rvb2xiYXIiIHN0eWxlPSJ3aWR0aDoxMDAlO21hcmdpbjoxMHB4Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ2aXNpYmlsaXR5X2NvbnRyb2wiPuWPr+ingTwvaW5wdXQ+XG48aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzaG93X2JvcmRlcl9jb250cm9sIj7mmL7npLrovrnmoYY8L2lucHV0PlxuPGJ1dHRvbiBpZD0ibG9nX2luZm9fY29udHJvbCI+5omT5Y2w5Yiw5o6n5Yi25Y+wPC9idXR0b24+XG48YnV0dG9uIGlkPSJlbmFibGVkX25vZGVfY2hhaW5fY29udHJvbCI+ZW5hYmxl6ZO+PC9idXR0b24+XG48YnV0dG9uIGlkPSJzaXplX2NoYWluX2NvbnRyb2wiPnNpemXpk748L2J1dHRvbj5cbjwvZGl2PjxkaXYgc3R5bGU9Im92ZXJmbG93OmF1dG8iPjx0YWJsZSBpZD0iY29udGVudF90YWJsZSIgc3R5bGU9ImJvcmRlcjoxcHggc29saWQgI2NjY2NjYztib3JkZXItY29sbGFwc2U6Y29sbGFwc2UiPjwvdGFibGU+XG48L2Rpdj48L2Rpdj5cbjwvZGl2PlxuPC9kaXY+JztlLmlubmVySFRNTD1pLHRoaXMuY29udGFpbmVyPWUsdGhpcy50cmVlPW5ldyBkaHRtbFhUcmVlT2JqZWN0KHRyZWVfY29udGFpbmVyLCIxMDAlIiwiMTAwJSIsMCksbm9kZV9mdW5jdGlvbmFsaXR5X2NvbnRyb2wub25jbGljaz1mdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpLGxheWFhaXJfZGVidWdfdmlldy5vbl9pbnNwZWN0X2VsZW1lbnRfY2FsbGJhY2soKSxub2RlX2Z1bmN0aW9uYWxpdHlfY29udHJvbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiNGRkYiLG5vZGVfZnVuY3Rpb25hbGl0eV9jb250cm9sLnN0eWxlLmNvbG9yPSJyZ2IoMTA3LCAxNjMsIDI1NSkifX0sbGF5YWFpcl9kZWJ1Z192aWV3LnNldFRyZWU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJlZS5nZXRBbGxJdGVtc1dpdGhLaWRzKCkuc3BsaXQoIiwiKSxpPVtdLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXSxyPXRoaXMudHJlZS5nZXRPcGVuU3RhdGUobyk7MT09ciYmaS5wdXNoKG8pfXRoaXMudHJlZS5kZWxldGVDaGlsZEl0ZW1zKDApLHRoaXMudHJlZS5wYXJzZShlLCJqc29uIik7Zm9yKHZhciBuPTA7bjxpLmxlbmd0aDtuKyspdGhpcy50cmVlLm9wZW5JdGVtKGlbbl0pfSxsYXlhYWlyX2RlYnVnX3ZpZXcucmVzaXplPWZ1bmN0aW9uKGUsdCl7dGhpcy5jb250YWluZXIuc3R5bGUud2lkdGg9ZSsicHgiLHRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodD10KyJweCI7dmFyIGk9dGhpcy5jb250YWluZXIub2Zmc2V0SGVpZ2h0LXRyZWVfY29udGFpbmVyLm9mZnNldFRvcDt0cmVlX2NvbnRhaW5lci5zdHlsZS5oZWlnaHQ9aSsicHgiLGNvbnRlbnRfdG9vbGJhci5zdHlsZS53aWR0aD1lLXRyZWVfY29udGFpbmVyLm9mZnNldFdpZHRoKyJweCIsY29udGVudF90YWJsZS5wYXJlbnRFbGVtZW50LnN0eWxlLmhlaWdodD1pLWNvbnRlbnRfdG9vbGJhci5vZmZzZXRIZWlnaHQtMjErInB4Iixjb250ZW50X3RhYmxlLnN0eWxlLndpZHRoPWUtdHJlZV9jb250YWluZXIub2Zmc2V0V2lkdGgtMTYrInB4In0sbGF5YWFpcl9kZWJ1Z192aWV3LmJvdW5jZVVwSW5zcGVjdEJ1dHRvbj1mdW5jdGlvbigpe25vZGVfZnVuY3Rpb25hbGl0eV9jb250cm9sLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iYnV0dG9uZmFjZSIsbm9kZV9mdW5jdGlvbmFsaXR5X2NvbnRyb2wuc3R5bGUuY29sb3I9ImJsYWNrIn0sbGF5YWFpcl9kZWJ1Z192aWV3LnNldFZhbHVlSW5wdXRIYW5kbGVyPWZ1bmN0aW9uKGUpe3RoaXMudmFsdWVfaW5wdXRfY2FsbGJhY2s9ZX0sbGF5YWFpcl9kZWJ1Z192aWV3LnNldFZhbHVlQ2hhbmdlSGFuZGxlcj1mdW5jdGlvbihlKXt0aGlzLnZhbHVlX2NoYW5nZV9jYWxsYmFjaz1lfSxsYXlhYWlyX2RlYnVnX3ZpZXcuYWRkQ29udGVudD1mdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpO3QuaW5uZXJIVE1MPSc8dGQgc3R5bGU9IndpZHRoOjEwMHB4O2ZvbnQtc2l6ZToxM3B4O2JvcmRlcjoxcHggc29saWQgI0NDQztwYWRkaW5nLWxlZnQ6MTBweCI+JytlLmtleSsnPC90ZD5cbjx0ZCBzdHlsZT0id2lkdGg6MjAwcHg7Ym9yZGVyOjFweCBzb2xpZCAjQ0NDOyI+PGlucHV0IHN0eWxlPSJib3JkZXI6bm9uZTt3aWR0aDoxMDAlO2hlaWdodDoyNXB4O3BhZGRpbmctbGVmdDoxMHB4OyIgdmFsdWU9JytlLnZhbHVlKyI+PC90ZD4iLGNvbnRlbnRfdGFibGUuYXBwZW5kQ2hpbGQodCk7dmFyIGk9dC5sYXN0RWxlbWVudENoaWxkLmxhc3RFbGVtZW50Q2hpbGQ7aS5kYXRhPWUsaS5vbmlucHV0PWZ1bmN0aW9uKGUpe3RoaXMudmFsdWVfaW5wdXRfY2FsbGJhY2smJnRoaXMudmFsdWVfaW5wdXRfY2FsbGJhY2soZS50YXJnZXQuZGF0YSxlLnRhcmdldC52YWx1ZSl9LmJpbmQodGhpcyksaS5vbmNoYW5nZT1mdW5jdGlvbihlKXt0aGlzLnZhbHVlX2NoYW5nZV9jYWxsYmFjayYmdGhpcy52YWx1ZV9jaGFuZ2VfY2FsbGJhY2soZS50YXJnZXQuZGF0YSxlLnRhcmdldC52YWx1ZSl9LmJpbmQodGhpcyl9LGxheWFhaXJfZGVidWdfdmlldy5zZXRDb250ZW50cz1mdW5jdGlvbihlKXtjb250ZW50X3RhYmxlLmlubmVySFRNTD0iIjtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyl7dmFyIGk9ZVt0XTt0aGlzLmFkZENvbnRlbnQoaSl9fSxsYXlhYWlyX2RlYnVnX3ZpZXcuY2hhbmdlVmFsdWVBdD1mdW5jdGlvbihlLHQpe2NvbnRlbnRfdGFibGUuY2hpbGRyZW5bZV0ubGFzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZC52YWx1ZT10fSxsYXlhYWlyX2RlYnVnX3ZpZXcuY2hhbmdlVmFsdWVCeUxhYmVsPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPWNvbnRlbnRfdGFibGUuY2hpbGRyZW4ubGVuZ3RoLTE7aT49MDtpLS0paWYoY29udGVudF90YWJsZS5jaGlsZHJlbltpXS5maXJzdEVsZW1lbnRDaGlsZC5pbm5lclRleHQ9PWUpe2NvbnRlbnRfdGFibGUuY2hpbGRyZW5baV0ubGFzdEVsZW1lbnRDaGlsZC5maXJzdEVsZW1lbnRDaGlsZC52YWx1ZT10O2JyZWFrfX0sbGF5YWFpcl9kZWJ1Z192aWV3LnNldFZpc2liaWxpdHk9ZnVuY3Rpb24oZSl7dmlzaWJpbGl0eV9jb250cm9sLmNoZWNrZWQ9ISFlfSxsYXlhYWlyX2RlYnVnX3ZpZXcuc2V0U2hvd0RlYnVnQm9yZGVyPWZ1bmN0aW9uKGUpe3Nob3dfYm9yZGVyX2NvbnRyb2wuY2hlY2tlZD0hIWV9LGxheWFhaXJfZGVidWdfdmlldy5nZXRWaXNpYmlsaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHZpc2liaWxpdHlfY29udHJvbC5jaGVja2VkfSxsYXlhYWlyX2RlYnVnX3ZpZXcuZ2V0U2hvd0RlYnVnQm9yZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIHNob3dfYm9yZGVyX2NvbnRyb2wuY2hlY2tlZH0sbGF5YWFpcl9kZWJ1Z192aWV3LmdldFNob3dDdXJyZW50Q2FjaGU9ZnVuY3Rpb24oKXtyZXR1cm4gc2hvd19jdXJyZW50X2NhY2hlX2NvbnRyb2wuY2hlY2tlZH0sbGF5YWFpcl9kZWJ1Z192aWV3LmdldFNob3dBbGxDYWNoZT1mdW5jdGlvbigpe3JldHVybiBzaG93X2FsbF9jYWNoZV9jb250cm9sLmNoZWNrZWR9LGxheWFhaXJfZGVidWdfdmlldy5nZXRTaG93QXRsYXM9ZnVuY3Rpb24oKXtyZXR1cm4gc2hvd19hdGxhc19jb250cm9sLmNoZWNrZWR9LGxheWFhaXJfZGVidWdfdmlldy5vbkluc3BlY3RFbGVtZW50PWZ1bmN0aW9uKGUpe3RoaXMub25faW5zcGVjdF9lbGVtZW50X2NhbGxiYWNrPWV9LGxheWFhaXJfZGVidWdfdmlldy5vbkxvZ0luZm89ZnVuY3Rpb24oZSl7bG9nX2luZm9fY29udHJvbC5vbmNsaWNrPWV9LGxheWFhaXJfZGVidWdfdmlldy5vblJlZnJlc2g9ZnVuY3Rpb24oZSl7cmVmcmVzaF9jb250cm9sLm9uY2xpY2s9ZX0sbGF5YWFpcl9kZWJ1Z192aWV3Lm9uUHJpbnRFbmFibGVkTm9kZUNoYWluPWZ1bmN0aW9uKGUpe2VuYWJsZWRfbm9kZV9jaGFpbl9jb250cm9sLm9uY2xpY2s9ZX0sbGF5YWFpcl9kZWJ1Z192aWV3Lm9uUHJpbnRTaXplQ2hhaW49ZnVuY3Rpb24oZSl7c2l6ZV9jaGFpbl9jb250cm9sLm9uY2xpY2s9ZX0sbGF5YWFpcl9kZWJ1Z192aWV3Lm9uVG9nZ2xlVmlzaWJpbGl0eT1mdW5jdGlvbihlKXt2aXNpYmlsaXR5X2NvbnRyb2wub25jaGFuZ2U9ZX0sbGF5YWFpcl9kZWJ1Z192aWV3Lm9uVG9nZ2xlRGVidWdCb3JkZXI9ZnVuY3Rpb24oZSl7c2hvd19ib3JkZXJfY29udHJvbC5vbmNoYW5nZT1lfSxsYXlhYWlyX2RlYnVnX3ZpZXcub25Ub2dnbGVTaG93Q3VycmVudENhY2hlPWZ1bmN0aW9uKGUpe3Nob3dfY3VycmVudF9jYWNoZV9jb250cm9sLm9uY2hhbmdlPWV9LGxheWFhaXJfZGVidWdfdmlldy5vblRvZ2dsZVNob3dBbGxDYWNoZT1mdW5jdGlvbihlKXtzaG93X2FsbF9jYWNoZV9jb250cm9sLm9uY2hhbmdlPWV9LGxheWFhaXJfZGVidWdfdmlldy5vblRvZ2dsZVNob3dBdGxhcz1mdW5jdGlvbihlKXtzaG93X2F0bGFzX2NvbnRyb2wub25jaGFuZ2U9ZX07";class C{constructor(){this.mIndex=0,this.mTextureDic={}}static getInstance(){return C.mInstance=C.mInstance||new C}start(){null==this.mSprite&&(this.mSprite=new e.Sprite),e.Laya.stage.addChild(this.mSprite),this.showNext()}end(){this.mSprite&&e.Laya.stage.removeChild(this.mSprite)}showNext(){null==this.mSprite&&(this.mSprite=new e.Sprite),e.Laya.stage.addChild(this.mSprite),this.mIndex++,this.mTextureDic[this.mIndex]&&this.mTextureDic[this.mIndex]}}class S{constructor(){this.timeDic={},this.resultDic={},this.countDic={},this.resultCountDic={},this.nodeDic={},this.resultNodeDic={}}addTime(t,e){var a;g.idObj(t),a=g.getObjID(t),this.timeDic.hasOwnProperty(a)||(this.timeDic[a]=0),this.timeDic[a]=this.timeDic[a]+e,this.countDic.hasOwnProperty(a)||(this.countDic[a]=0),this.countDic[a]=this.countDic[a]+1,this.nodeDic[a]=t}getTime(t){var e;return g.idObj(t),e=g.getObjID(t),this.resultDic[e]?this.resultDic[e]:0}getCount(t){var e;return g.idObj(t),e=g.getObjID(t),this.resultCountDic[e]}reset(){var t;for(t in this.timeDic)this.timeDic[t]=0,this.countDic[t]=0;i.clearObj(this.nodeDic)}updates(){i.clearObj(this.resultDic),i.insertValue(this.resultDic,this.timeDic),i.clearObj(this.resultCountDic),i.insertValue(this.resultCountDic,this.countDic),i.insertValue(this.resultNodeDic,this.nodeDic),this.reset()}}class F{constructor(){}}F.CLICK_SELECT_COLOR="#ff0000",F.CANVAS_REC_COLOR="#FF00FF",F.RECACHE_REC_COLOR="#00ff00",F.SPRITE_REC_COLOR="#ff0000",F.SPRITE_REC_LINEWIDTH=2;class k extends e.Sprite{constructor(){super(),this.recColor="#00ff00",this.txt=new e.Text,this.txt.color="#ff0000",this.txt.bgColor="#00ff00",this.txt.fontSize=12,this.addChild(this.txt)}setInfo(t){this.txt.text=t}setTarget(t){this._tar=t}showInfo(t){var a;(this._tar=t,t)&&(t.destroyed||(this.graphics.clear(),!(a=t._getBoundPointsM(!0))||a.length<1||(a=e.GrahamScan.pListToPointList(a,!0),W.walkArr(a,t.localToGlobal,t),a=e.GrahamScan.pointListToPlist(a),k._disBoundRec=e.Rectangle._getWrapRec(a,k._disBoundRec),this.graphics.drawRect(0,0,k._disBoundRec.width,k._disBoundRec.height,null,F.RECACHE_REC_COLOR,2),this.pos(k._disBoundRec.x,k._disBoundRec.y))))}fresh(){this.showInfo(this._tar)}clearMe(){this._tar=null}}k._disBoundRec=new e.Rectangle;class J extends k{constructor(){super(),this.isWorking=!1,this.mTime=0,this.txt.fontSize=12}addCount(t=0){this.count++,this.mTime+=t,this.isWorking||(this.working=!0)}updates(){this._tar.displayedInStage||(this.working=!1,this.removeSelf()),this.txt.text=s.getNodeClassAndName(this._tar)+"\nreCache:"+this.count+"\ntime:"+this.mTime,this.count>0?(this.fresh(),e.Laya.timer.clear(this,this.removeSelfLater)):(this.working=!1,e.Laya.timer.once(J.showTime,this,this.removeSelfLater)),this.count=0,this.mTime=0}removeSelfLater(){this.working=!1,this.removeSelf()}set working(t){this.isWorking=t,t?e.Laya.timer.loop(1e3,this,this.updates):e.Laya.timer.clear(this,this.updates)}}J.showTime=3e3;class T{constructor(){}static renderLoopBegin(){p.I.cacheViewLayer.graphics.clear()}static get I(){return T._instance||(T._instance=new T),T._instance}static set I(t){T._instance=t}static getNodeInfoByNode(t){var e;return g.idObj(t),e=g.getObjID(t),T._nodeInfoDic[e]||(T._nodeInfoDic[e]=new J),T._nodeInfoDic[e].setTarget(t),T._nodeInfoDic[e]}renderCanvas(t,e=0){T.showCacheSprite&&(p.I.isDebugItem(t)||N.showDisBoundToSprite(t,p.I.cacheViewLayer,F.CANVAS_REC_COLOR,4))}reCacheCanvas(t,e=0){var a;T.showRecacheSprite&&(p.I.isDebugItem(t)||((a=T.getNodeInfoByNode(t)).addCount(e),T.counter.addTime(t,e),a.parent||p.I.nodeRecInfoLayer.addChild(a)))}}T.counter=new S,T._nodeInfoDic={},T.showCacheSprite=!1,T.showRecacheSprite=!0;class U extends e.EventDispatcher{constructor(){super()}static get I(){return U._instance||(U._instance=new U),U._instance}static set I(t){U._instance=t}static notify(t,e=null){U.I.event(t,e)}static listen(t,e,a,i=null,s=!1){s&&U.cancel(t,e,a),U.I.on(t,e,a,i)}static cancel(t,e,a){U.I.off(t,e,a)}}class B extends e.Text{constructor(){super(),this.bgColor="#ffff00",this.wordWrap=!1,this.mouseEnabled=!0}}class H{constructor(){this._matrix=new e.Matrix,this._point=new e.Point,this._rect=new e.Rectangle,this._event=e.Event.EMPTY,this.isGetting=!1,this._stage=e.Laya.stage,this.init(e.Render.context.canvas)}static initMe(){H.instance||(H.instance=new H,H.selectNodeUnderMouse=N.selectNodeUnderMouse,N.selectNodeUnderMouse=()=>{H.instance.selectDisUnderMouse(),H.selectNodeUnderMouse()})}init(t){window.navigator.msPointerEnabled&&(t.style["-ms-content-zooming"]="none",t.style["-ms-touch-action"]="none");var a=this;function initEvent(t,i=null){a._event._stoped=!1,a._event.nativeEvent=i||t,a._target=null,t.offsetX?(a.mouseX=t.offsetX,a.mouseY=t.offsetY):(a.mouseX=t.clientX-e.Laya.stage.offset.x,a.mouseY=t.clientY-e.Laya.stage.offset.y)}document.addEventListener("mousedown",t=>{this._event._stoped=!1,H.isFirst=!0,a.check(a._stage,t.offsetX,t.offsetY,a.onMouseDown,!0,!1)},!0),document.addEventListener("touchstart",t=>{this._event._stoped=!1,H.isFirst=!0;for(var e=t.changedTouches,i=0,s=e.length;i<s;i++){initEvent(e[i],t),a.check(a._stage,a.mouseX,a.mouseY,a.onMouseDown,!0,!1)}},!0)}onMouseMove(t,a){this.sendEvent(t,e.Event.MOUSE_MOVE)}onMouseUp(t,a){a&&this.sendEvent(t,e.Event.MOUSE_UP)}onMouseDown(t,a){a&&(t.$_MOUSEDOWN=!0,this.sendEvent(t,e.Event.MOUSE_DOWN))}sendEvent(t,a){this._event._stoped||(t.event(a,this._event.setTo(a,t,t)),a===e.Event.MOUSE_UP&&t.$_MOUSEDOWN&&(t.$_MOUSEDOWN=!1,t.event(e.Event.CLICK,this._event.setTo(e.Event.CLICK,t,t))))}selectDisUnderMouse(){H.isFirst=!0,this.check(e.Laya.stage,e.Laya.stage.mouseX,e.Laya.stage.mouseY,null,!0,!1)}getDisUnderMouse(){return this.isGetting=!0,H.isFirst=!0,N.target=null,this.check(e.Laya.stage,e.Laya.stage.mouseX,e.Laya.stage.mouseY,null,!0,!1),this.isGetting=!1,N.target}check(t,e,a,i,s,l){if(t==N.debugLayer)return!1;if(t==p.I)return!1;if(this.isGetting&&t==p.I)return!1;if(!t.visible||t.getSelfBounds().width<=0)return!1;var r=!1;var n=!1;if(s&&(this._rect=t.getBounds(),r=this._rect.contains(e,a),this._point.setTo(e,a),t.fromParentPoint(this._point),e=this._point.x,a=this._point.y),r){for(var o=!1,h=t._children.length-1;h>-1;h--){var d=t._children[h];if(o=this.check(d,e,a,i,s,!0))break}n=t.getGraphicBounds().contains(e,a),(r=o||n)&&!o&&H.isFirst&&(H.isFirst=!1,t instanceof B||(N.target=t,this.isGetting||(N.autoWork(),U.notify(H.ITEM_CLICKED,t))))}return r}}H.ITEM_CLICKED="ItemClicked",H.isFirst=!1;class E{constructor(){this._selectTip=new e.Sprite,this._selectTip.setSelfBounds(new e.Rectangle(0,0,0,0)),U.listen(H.ITEM_CLICKED,this,this.itemClicked)}static get I(){return E._I||(E._I=new E),E._I}beginClickSelect(t=null){this.completeHandler=t,E.isClickSelectState=!0,this.clickSelectChange()}clickSelectChange(){e.Browser.onPC&&(this.tSelectTar=null,this.clearSelectTip(),E.isClickSelectState?e.Laya.timer.loop(200,this,this.updateSelectTar,null,!0):e.Laya.timer.clear(this,this.updateSelectTar))}clearSelectTip(){this._selectTip.removeSelf()}updateSelectTar(){var t,e;(this.clearSelectTip(),this.tSelectTar=H.instance.getDisUnderMouse(),this.tSelectTar)&&(p.I.isDebugItem(this.tSelectTar)||((t=this._selectTip.graphics).clear(),e=Y.getGRec(this.tSelectTar),p.I.popLayer.addChild(this._selectTip),t.drawRect(0,0,e.width,e.height,null,F.CLICK_SELECT_COLOR,2),this._selectTip.pos(e.x,e.y)))}itemClicked(t){E.isClickSelectState&&(E.ignoreDebugTool&&p.I.isDebugItem(t)||(N.showDisBound(t),this.completeHandler&&this.completeHandler.runWith(t),E.isClickSelectState=!1,this.clickSelectChange()))}}E.isClickSelectState=!1,E.ignoreDebugTool=!1;class M{constructor(){}static init(){M._oldCanvas||(M._oldCanvas=e.RenderSprite.prototype._canvas,e.RenderSprite.prototype._canvas=M.prototype._canvas)}_canvas(t,a,i,s){var l,r,n=t._cacheStyle;this._next;n.enableCanvasRender?(l=!(!t._needRepaint()&&n.canvas),r=e.Browser.now(),M._oldCanvas.call(this,t,a,i,s),l?T.I.reCacheCanvas(t,e.Browser.now()-r):T.I.renderCanvas(t,e.Browser.now()-r)):M._oldCanvas.call(this,t,a,i,s)}}M.IMAGE=1,M.FILTERS=2,M.ALPHA=4,M.TRANSFORM=8,M.CANVAS=16,M.BLEND=32,M.CLIP=64,M.STYLE=128,M.GRAPHICS=256,M.CUSTOM=512,M.ENABLERENDERMERGE=1024,M.CHILDS=2048,M.INIT=69905,M.renders=[];class D{constructor(){this._repaint=1,this._renderType=1}static init(){D.I||(D.I=new D,D.setRenderHook())}static setRenderHook(){e.Sprite.prototype.render=D.I.render}static showDisplayBorder(t,e=!0){t[D.ShowBorderSign]=e}static isDisplayShowBorder(t){return t[D.ShowBorderSign]}render(t,a,i){var s;this==e.Laya.stage&&T.renderLoopBegin(),s=e.Browser.now(),this[D.ShowBorderSign]&&N.showDisBoundToSprite(this,p.I.cacheViewLayer,F.SPRITE_REC_COLOR,F.SPRITE_REC_LINEWIDTH),e.RenderSprite.renders[this._renderType]._fun(this,t,a+this._x,i+this._y),this._repaint=0,y.I.render(this,e.Browser.now()-s)}}D.ShowBorderSign="ShowBorderSign";class j{constructor(){}static showToBody(t,a=0,i=0){var s;e.Browser.document.body.appendChild(t),(s=t.style).position="absolute",s.top=i+"px",s.left=a+"px"}static showToParent(t,e=0,a=0,i=null){var s;i.appendChild(t),(s=t.style).position="absolute",s.top=a+"px",s.left=e+"px"}static addToBody(t){e.Browser.document.body.appendChild(t)}static setPos(t,e,a){var i;(i=t.style).top=a+"px",i.left=e+"px"}static setSize(t,e,a){var i;(i=t.style).width=e+"px",i.height=a+"px"}static setTransform(t,e){var a;(a=t.style).transformOrigin=a.webkitTransformOrigin=a.msTransformOrigin=a.mozTransformOrigin=a.oTransformOrigin="0px 0px 0px",a.transform=a.webkitTransform=a.msTransform=a.mozTransform=a.oTransform="matrix("+e.toString()+")"}static noMouseEvent(t){t.style["pointer-events"]="none"}static setMouseEnable(t,e){t.style["pointer-events"]=e?"auto":"none"}static setZIndex(t,e){t.style["z-index"]=e}static showAboveSprite(t,a,i=0,s=0){var l;l=new e.Point,(l=a.localToGlobal(l)).x+=i,l.y+=s,l.x+=e.Laya.stage.offset.x,l.y+=e.Laya.stage.offset.y,j.showToBody(t,l.x,l.y)}static removeElement(t){e.Browser.removeElement(t)}static isElementInDom(t){return t&&t.parentNode}static getImageSpriteByFile(t,a=0,i=0){var s,l;return(s=new FileReader).readAsDataURL(t),l=new e.Sprite,s.onload=function(t){var r;(r=new e.Texture).load(s.result),l.graphics.drawTexture(r,0,0,a,i)},l}static getPixelRatio(){if(j._pixelRatio>0)return j._pixelRatio;var t=e.Browser.createElement("canvas").getContext("2d"),a=(e.Browser.window.devicePixelRatio||1)/(t.webkitBackingStorePixelRatio||t.mozBackingStorePixelRatio||t.msBackingStorePixelRatio||t.oBackingStorePixelRatio||t.backingStorePixelRatio||1);return console.log("pixelRatioc:",a),j._pixelRatio=a,a}}j._pixelRatio=-1;class z{constructor(){this.preValueO={},this.height=300,this.width=600,this.dragArea=10,this.fromMe=!1,this._init()}static enable(t=!0,a="#ffffff"){z._enable||z.I||(z._enable=!0,z.overlay=!t,A.init(),H.initMe(),N.initBasicFunctions(),M.init(),D.init(),z.I=new z,z.I.setRoot(e.Laya.stage),T.showRecacheSprite=!1,a&&(z.I.div.style.background=a))}static getSpriteTreeArr(t){var e,a,i,l,r;for((e={})[z.LabelSign]=""+s.getNodeClassAndName(t),e.target=t,g.idObj(t),e.id=g.getObjID(t),l=(a=t._children).length,r=[],e[z.ChildrenSign]=r,i=0;i<l;i++)r.push(z.getSpriteTreeArr(a[i]));return e}removeNoDisplayKeys(t){var e;for(e=t.length-1;e>=0;e--)z.noDisplayKeys[t[e]]&&t.splice(e,1)}updateShowKeys(){z.tObjKeys.length=0,this.tShowObj&&(z.tObjKeys=s.getObjectDisplayAbleKeys(this.tShowObj,z.tObjKeys),this.tShowObj==e.Laya.stage&&this.removeNoDisplayKeys(z.tObjKeys),z.tObjKeys.sort(e.MathUtil.sortSmallFirst))}static getObjectData(t){var e,a,i,s,l,r,n,o;for(e=[],o=(r=z.tObjKeys).length,n=0;n<o;n++)l=typeof(s=t[i=r[n]]),"_"!=i.charAt(0)&&z.displayTypes[l]&&((a={}).key=i,a.value=s,a.type=l,e.push(a));return e}_init(){this.div=e.Browser.document.createElement("div"),e.Browser.document.body.appendChild(this.div),this.clickedHandler=new e.Handler(this,this.onClickSelected),this.debug_view=e.Browser.window.layaair_debug_view,this.debug_view.initLayaAirDebugView(this.div),this.debug_view.tree.attachEvent("onSelect",t=>{var e;(e=this.getDataByID(t,this._treeDataList[0])).target&&(N.showDisBound(e.target),this.showTargetInfo(e.target))}),this.debug_view.setValueChangeHandler((t,e)=>{this.onValueChange(t,e)}),this.debug_view.onRefresh(()=>{z.I.setRoot(e.Laya.stage)}),this.debug_view.onInspectElement(()=>{E.I.beginClickSelect(this.clickedHandler)}),this.debug_view.onLogInfo(()=>{console.log(this.tShowObj)}),this.debug_view.onPrintEnabledNodeChain(()=>{N.traceDisMouseEnable(this.tShowObj)}),this.debug_view.onPrintSizeChain(()=>{N.traceDisSizeChain(this.tShowObj)}),this.debug_view.onToggleVisibility(t=>{this.tShowObj&&(this.tShowObj.visible=this.debug_view.getVisibility())}),this.debug_view.onToggleDebugBorder(t=>{this.tShowObj&&D.showDisplayBorder(this.tShowObj,this.debug_view.getShowDebugBorder())}),this.debug_view.onToggleShowCurrentCache(t=>{T.showRecacheSprite=this.debug_view.getShowCurrentCache()}),this.debug_view.onToggleShowAllCache(t=>{T.showCacheSprite=this.debug_view.getShowAllCache()}),this.debug_view.onToggleShowAtlas(t=>{console.log("toggle show atlas:",this.debug_view.getShowAtlas()),this.debug_view.getShowAtlas()?C.getInstance().start():C.getInstance().end()}),j.showToBody(this.div,0,0),this.initNewDivs(),this.initDragWork(),this.initTreeWidthDrag(),e.Laya.stage.on(e.Event.RESIZE,this,this.adptPos),this.adptPos()}initNewDivs(){var t,a;t=e.Browser.document.getElementById("show_current_cache_control").parentNode,(a=e.Browser.createElement("input")).type="checkbox",t.appendChild(a),t.append("右侧"),a.addEventListener("change",function(t){t.target.checked?z.sideType=z.Right:z.sideType=z.Bottom,this.adptPos()}.bind(this))}static getOffset(t,e){var a,i,s,l;for(a=t.target,i=t.currentTarget,s="X"==e?"offsetLeft":"offsetTop",l=t["offset"+e];a&&a!=i;)l+=a[s],a=a.offsetParent;return l}initTreeWidthDrag(){var t,a;(a=(t=e.Browser.document.getElementById("tree_container")).parentNode).children[1];var i=!1;a.addEventListener("mousedown",function(e){Math.abs(z.getOffset(e,"X")-t.clientWidth)<this.dragArea?(this.div.style.cursor="e-resize",i=!0,e.stopPropagation()):i=!1}.bind(this),!0),a.addEventListener("mousemove",function(e){Math.abs(z.getOffset(e,"X")-t.clientWidth)<this.dragArea?this.div.style.cursor="e-resize":this.div.style.cursor="auto"}.bind(this),!0),e.Browser.document.body.addEventListener("mousemove",function(e){i&&(t.style.width=z.getOffset(e,"X")+"px",e.stopPropagation())}.bind(this)),e.Browser.document.body.addEventListener("mouseup",function(t){i&&(i=!1,t.stopPropagation())}.bind(this))}initDragWork(){var t,a,i=!1;this.div.addEventListener("mousedown",function(e){if(z.sideType==z.Bottom){if(z.getOffset(e,"Y")>this.dragArea)return}else if(z.getOffset(e,"X")>this.dragArea)return;i=!0,t=e.pageX,a=e.pageY,e.stopPropagation()}.bind(this),!0),this.div.addEventListener("mousemove",function(t){z.sideType==z.Bottom?z.getOffset(t,"Y")<this.dragArea?this.div.style.cursor="n-resize":this.div.style.cursor="auto":z.getOffset(t,"X")<this.dragArea?this.div.style.cursor="e-resize":this.div.style.cursor="auto"}.bind(this),!0),e.Browser.document.body.addEventListener("mousemove",function(e){var s,l,r,n;i&&(s=e.pageX,l=e.pageY,r=s-t,n=l-a,z.sideType==z.Bottom?this.height-=n:this.width-=r,this.adptPos(),t=s,a=l,e.stopPropagation())}.bind(this)),e.Browser.document.body.addEventListener("mouseup",function(t){i&&(i=!1,t.stopPropagation())}.bind(this))}onClickSelected(t){this._treeDataList&&(this.debug_view.tree.selectItem(g.getObjID(t)),this.debug_view.bounceUpInspectButton())}updateLoop(){this.tShowObj&&this.showTargetInfo(this.tShowObj)}onSelectItem(t){var e;e=t.target,this.showTargetInfo(e)}static mParseFloat(t){var e;return e=parseFloat(t),isNaN(e)?0:e}onValueChange(t,e){var a;("number"==t.type&&(e=z.mParseFloat(e)),"boolean"==t.type&&(e="true"==e.toString()),this.tShowObj)&&(a=t.key,this.preValueO[a]=this.tShowObj[a]=e)}showTargetInfo(t){var e,a,i,s;if(t)if(this.debug_view.setVisibility(t.visible),this.debug_view.setShowDebugBorder(D.isDisplayShowBorder(t)),a=z.tObjKeys.length,this.tShowObj==t)for(e=0;e<a;e++)i=z.tObjKeys[e],this.preValueO[i]!=t[i]&&this.debug_view.changeValueByLabel(i,t[i]);else this.tShowObj=t,this.updateShowKeys(),s=z.getObjectData(t),this.debug_view.setContents(s)}adptPos(){if(!this.fromMe){if(this.fromMe=!0,z.sideType==z.Bottom)j.setPos(this.div,0,e.Browser.clientHeight-this.height),this.debug_view.resize(e.Browser.clientWidth,this.height),z.overlay||e.Laya.stage.setScreenSize(e.Browser.clientWidth*e.Browser.pixelRatio,(e.Browser.clientHeight-this.height)*e.Browser.pixelRatio);else if(j.setPos(this.div,e.Browser.clientWidth-this.width,0),this.debug_view.resize(this.width,e.Browser.clientHeight),!z.overlay){let t=0;e.Browser.clientWidth>this.width&&(t=(e.Browser.clientWidth-this.width)*e.Browser.pixelRatio),e.Laya.stage.setScreenSize(t,e.Browser.clientHeight*e.Browser.pixelRatio)}this.fromMe=!1}}setRoot(t){var a,i;a=z.getSpriteTreeArr(t),this._treeDataList=[a],(i={}).id=0,i.item=[a],this.debug_view.setTree(i),e.Laya.timer.loop(500,this,this.updateLoop)}getDataByID(t,e){if(!e)return null;if(t==e.id)return e;var a,i,s,l;if(!(a=e[z.ChildrenSign]))return null;for(s=a.length,i=0;i<s;i++)if(l=this.getDataByID(t,a[i]))return l;return null}getDataByTarget(t,e){if(!e)return null;if(t==e.target)return e;var a,i,s,l;if(!(a=e[z.ChildrenSign]))return null;for(s=a.length,i=0;i<s;i++)if(l=this.getDataByTarget(t,a[i]))return l;return null}}z._enable=!1,z.ChildrenSign="item",z.LabelSign="text",z.displayTypes={boolean:!0,number:!0,string:!0},z.displayKeys=[["x","number"],["y","number"],["width","number"],["width","number"],["width","number"],["width","number"],["width","number"],["width","number"],["width","number"],["width","number"],["width","number"]],z.tObjKeys=[],z.noDisplayKeys={desginWidth:!0,desginHeight:!0},z.Bottom="bottom",z.Right="right",z.sideType=z.Bottom;class O{constructor(){}static getCanvasPic(t){t=t.bitmap;var a=e.Browser.createElement("canvas"),i=a.getContext("2d");return a.height=t.height,a.width=t.width,i.drawImage(t.bitmap,0,0),a}static getBase64Pic(t){return O.getCanvasPic(t).toDataURL("image/png")}static getPreloads(t){var a,i;for(i in a=[],t)a.push({url:t[i],type:e.Loader.IMAGE});return a}}class Q{constructor(t,e=null){this.data=t,e||(e=Math.random()+"key"),this.idKey=e,this.init()}init(){var t;for(t in this.replaceO={},this.data)this.replaceO[t]=this.idKey+"/"+t}getAdptUrl(t){return this.replaceO[t]}preLoad(t=null){this._loadedHandler=t,e.Laya.loader.load(O.getPreloads(this.data),new e.Handler(this,this.preloadEnd))}preloadEnd(){var t;for(t in this.data){var a;a=e.Laya.loader.getRes(this.data[t]),e.Loader.cacheRes(this.replaceO[t],a)}this._loadedHandler&&this._loadedHandler.run()}replaceRes(t){i.replaceValue(t,this.replaceO)}}class K{constructor(){}static replaceRes(t){K.base64.replaceRes(t)}}K.dataO={"comp/button1.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGIAAABRCAYAAAApS3MNAAABSUlEQVR4Xu3a0QmFMADFUJ1JXM0h3moPZ6qg4AoNeLqAIenFn65jjLE40w2sQkxvcAMI0eggRKSDEEJUDEQ4/COEiBiIYFiEEBEDEQyLECJiIIJhEUJEDEQwLEKIiIEIhkUIETEQwbAIISIGIhgWIUTEQATDIoSIGIhgWIQQEQMRDIsQImIggnEvYvv9IzjfxDiP/XlgJsTcCyDEXP/v14UQImIggmERQkQMRDAsQoiIgQiGRQgRMRDBsAghIgYiGBYhRMRABMMihIgYiGBYhBARAxEMixAiYiCCYRFCRAxEMCxCiIiBCMa7iAjPpzG8fY3kF0KIiIEIhkUIETEQwbAIISIGIhgWIUTEQATDIoSIGIhgWIQQEQMRDIsQImIggmERQkQMRDAsQoiIgQiGRQgRMRDBsAghIgYiGBYhRMRABMMihIgYiGBcGJiOHTRZjZAAAAAASUVORK5CYII=","comp/line2.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAAG0lEQVQYV2NkoDJgpLJ5DIxtra3/qWko1V0IAJvgApS1libIAAAAAElFTkSuQmCC","view/create.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAkCAYAAAC9itu8AAAAdElEQVQ4T2NkwAIWLFjwH5t4QkICIyM2CXQxmAHka/j///9mXDYxMjL6YtgwBDUg+w8crIT8MBQ0oEca55JvWNPS9xgu4tISzADyNfz///8MnrRkgmHDENSALWng9fRQ0DA40xLecglbWhpqGoZCMUNKUQkANAHAJVkE5XwAAAAASUVORK5CYII=","view/rendertime.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAkCAYAAAC9itu8AAABeUlEQVQ4T+2Uv0tCURSAvyNdcwiXBlsaaomWFgeHlqAtCPsDJHwIiUtDSxERtErtmQ6CjkHo4FpDBQ0tbVFR0BYE0eQvOnFF7T17QlOTd3m88873OD8+rtA9uVzOBIPBlIisAwvd8B1QajQahXQ63bIx6QHFYrEEJHrv7qeqZhzHOfYA+Xw+Yow5B+YHoGwymdxW1QAQEFWNAk8i8uEDuZM3gUcLZIEJYNcNqWrVcZyd7p9t8jLwYIFTYBx47UHlcjmcSCQ+B5JtpU0LnAFj3br7kE+yTalb4BCYczVqoT3AjteW4T73FlgFNgY+1IGQz4hPLGCAI2DGbweu2Auw1Vmcqk4C+8DsEOgZOBCR9/6mVdU2vgIsAdOuIVwANRFpezatuahpTYVSop1m+y6pasm8NQqSvvW61KwslkSHuCRkgvErr0taiUXaal1Sr0siWRO/9HfpF+RN9nfpB/qqmrXrv7mktVhYVm5GLo1cct9LI5e8d84/3UvfAgdlKH0EO7MAAAAASUVORK5CYII=","view/cache.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAkCAYAAABSSLCCAAAAcElEQVQ4T2NcsGDB/4SEBEYGBgYGYtmMxCpENhhsA6mA8f///5tHNTEwkBcQpIYcSD15kUtWigi51vR/jVYdOGUQy2YkViGywWSnvTOkhiAonkY1gZIRqSEHTntkRe4g10RWQIyWe5Bgo2O5R7dkBADztyP+yFzirAAAAABJRU5ErkJggg==","comp/clip_selectBox.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAoCAYAAAAIeF9DAAAAsElEQVRoQ+3ZQQ0AMQzEwAuqEgh/Sj2pKObhIrBsrfLonHPu12MMTEGYFg+kIFaPgmA9ClIQzQDG0w0pCGYAw2khBcEMYDgtpCCYAQynhRQEM4DhtJCCYAYwnBZSEMwAhtNCCoIZwHBmd/tTh6IUBIrx/tRbiFWkIFaPFoL1KEhBNAMYTzekIJgBDKeFFAQzgOG0kIJgBjCcFlIQzACG00IKghnAcFpIQTADGE4LwYL8U/BE1dCJ3PsAAAAASUVORK5CYII=","comp/label.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHgAAAASCAYAAACQCxruAAAAmElEQVRoQ+3aMQqAQBBDUef+hx4Zq1mrbPnhWylECHmghVZ397OOqqp97TlugdNzgEXFIaaFuwROt0LmBEay5aXb920+FjIpMJItLy1wvhUyKTCSLS8tcL4VMikwki0vLXC+FTIpMJItLy1wvhUyKTCSLS89wPP1Qeh8M0zy+84gMMbruqjA15OxbtjAu7mPa5bj0fb/A8cLgD4n/wQKNiIAAAAASUVORK5CYII=","comp/clip_tree_arrow.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAQCAYAAAArij59AAAAwUlEQVQoU5WRPRKCMBCFWUt6vYQeB06RUDpoBbFDa7yDwm30FGi9dHnOMiQDBgvT5c3b7+0PRVEUlVV9A3NmzL6T//SRfMz5CgCdtVafjlmzaHAigAbM2tE8YVo1pf0yvABoc9D3wACgBbMKIgD4qqDJsqqlMV8VGL5n/88geCJKlijSMBXFZUNx/CSi9WwX1r7R99thzKKqkxXRbMUWSE2u2sEwHsxHCbrMVSq6N4xRD9HAvJstylEkarhurlqnfQC58YP5+CvQNwAAAABJRU5ErkJggg==","view/bg_panel.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAMUlEQVRYR+3QQREAAAjDMGZk/l2CDD6pgl7SduexGCBAgAABAgQIECBAgAABAgS+BQ4oyStBhXcy5AAAAABJRU5ErkJggg==","view/bg_top.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAMUlEQVRYR+3QQREAAAjDMKZp/rWBDD6pgl7SduexGCBAgAABAgQIECBAgAABAgS+BQ6WyDMhXMLeQgAAAABJRU5ErkJggg==","view/clickselect.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAqCAYAAACDdWrxAAACfElEQVRIS8WVO2iTYRSGn5OWqpMOurg0VRBdVVCsg7GgDjpZECyirl4GEYfSgBlaB5VSpApdxCJIoeKgg7dKC21ALahIiyiKKUjxAiI4qCH1lRP/hPhfAnHpGZPv+c4573nP95ukO/xHmINmtq8RtswsPiipB/gAPAFem5nCbcSWKukIsD84/A2YBh4DL8ysWLkk0qOkDcD5GLF+Ac+Ap35ZHGjAdWB5gtJvgZFYVSWdBHaFwBlg1Mw8K0ngFiAbAm+a2XBij/6HpBbgBrAEmAVeAZ1AFU40QDCWrcBZL0/S4Vq4HtgB7DWzU5XyauDBMhhWz70ryVVdb2ZuhGpI2g1MODjfiMFrxZk3s9WNwJ6snHFxQUlXgXfAPeC5mf2O2Y5oqZLcMceCw1+AseCSSTP7mSiOpM3A7RixfvgYgAd+WUQcSSnfPWBlgtIvgf5YVSVdBA6GQF/mS2bmWcvbERmHJF+payFw0MzO1TWApKXBViwL3h5/Pk4AVTjRAMFY9njJXl6wLccrcD3wAHDUzBwuRw18JtbkbkFJruomM7sf2o4u4Jals/mFRgxeFcfBQm97UyOwM+WMiwums/k3QnMps+HWpuLIRC5TCrcRW2pbT35MRiY4XDRsVmiU5uJQIZfxb0k5Ij229eQPySJ287MLGO8Rd1M0XY6AO3LjzYVSy3fAH+VICL4a6o9VtTWbnzbYGKI+IrtQ6Ns2EFuq/5jOTnWD9f4DikeFvvbqhyg2Yzo3voJSy2fAjfEJMYPRQQ2caAAfC7AW2WkvrzU79dCwnRW4Hjgg6JrrbV9VKbkKw1Csyd2Ca7on1y2krHOub3t16//2n79SarbsH7BKtfejoCjmAAAAAElFTkSuQmCC","view/resize.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAqCAYAAACDdWrxAAABeUlEQVRIS+2UvUpdURCFvxXRKJpIEBURsVAIiiBoaaGCjY2VLyH4MBaCPoWlnQlpI6SxsQmkURQL5eK/6JK57iuRnMPZtxAkuOFUhzWz96xvjcg8tluAT5LOQqJMHba/AgPAD0nOEtruAOaB6Lon6U+ucAoYTLe7Bb5XCm1/BCaAXqAVOAHyOkYn27PA5/TGWmXHxvBeT2i7TVIM4MUp7ZhGPlY3V/pVKUxEjAIjyac74LIAjK70PwCoyfYXYDJwyqDoHtiRdFOfql0naBgIrILF/ZIi1yH6h1XbYXCPpKOq7s34GEX7JB00m445YBzYlPSQ1dF2N7CaWN2W9DNXuJxAj1uGVeuVQtvh32LyuR34DexWCv+CfAXoBzYkHb8Boe1OSRcFkBdfNY18IQiUtFUpTJjNAPEFHVfAaQFyjZ3zNBzbQ8BSWkZViEbk1uIpjXR8AKbT7jwEvpVUqEk6L0pHLN5hSWWxeq7XjI/v6Sgz0vZ7Ov7DdDwCkcb1m86tSukAAAAASUVORK5CYII=","view/clickanalyse.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAqCAYAAACDdWrxAAAC7UlEQVRIS5WWT2hUZxTFfyfGFolkoUVKrHQiEaX+IfgHa54UQzUqpWYhLbQU6ULNwgYXuog6yiiTgK2LgtAu6yqbFkpRBEURQzJEBN200NqKkxoDLnQhFUrizJU7vje8SSbzZr7FwDy+c75z7z3nfU80uMxMDin9JC0zewvYAHwIrAH65wWaWQuwOdy8CVgUHnBd0sUKoJktBbYC24B1QHMVNeck3ZWZrYhtXpUg/3/gS0kzDnT2/cDqpFqBUUnnK5pjZutDgo01Tr0g6XbVrprZypBgO9AUU/EK+ErSyzLQzC5XkTkCfBR7fl/Smeh/qasOlPRp9DAkOgp8H5P9o6SriUAnMrOzgNdswNeSntcL9IYNAQ8kHYuXU5Y6u8ZIupldAO5I+nkOsNb8wjk/ljTZKFCSvMbSMrPSiOpNx9uAz3UP4IbfWSsdrcDH4eZuYHF46LCk47PT8S6wG9gbJmRhlfoPSLrhJvdERJs7E+S73dZKmnagsx8JB50UEHdY3+x0dIUEO2qcekTSr/OlY21I4N5dEJMwA6yX9CKejqkqGn8DemPPb0v6YrZXpyS1xYbsRD3AtZjsk5IuJQKdyMyGAa/ZnbNR0tN6gd6wXwAP8SfV0jGnxki6mV1xyf4ubdTkPue/Jf3TEJCMNZFRMQLtyNwqvaTrSkdHZry1MFM8bLLPgY5U8/SyeYHvncotb5b1A/t8c2QGg3sT2WBLBbD95PiGogr9Ej0Gbap8r4ZJ5kR+MPhW7WdGd5npEFaa15IE+YWW5uklf2S6/1N7OnfasG+Ad5KiAfyVzwYfVDQnlc71YTaA8Ntrvtq/y2eDgapdTZ0a60UMhjdvmcCgWDClJge7npSBqfRYYY5M6U/M/NqO1mQ+G7xf4VUH5rNBOXtviLQfzH0afizop0fZroOJQCdKpcfyUKrZFhTpfDgU/F4nMNcH9gPwLJ8Nls3xarUaI+mp9NhTg5GJbPBZQyb3OReayP17rutmHPga1PpCOk+zrlEAAAAASUVORK5CYII=","view/res.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAoCAYAAAD6xArmAAADwUlEQVRIS+3WT2gcdRQH8O/b2SwNC7l4MAEPvbilUkoPOUmLjSDrZn4hxYKH/kGwyB4tQogiu/N+GymyoWguhVBQKKkHQTHsW9fUQwqKp4AgtMXkInhILl4CkoTdmSe/6XZp2pntLli8uMedt9/3mze/33yW8Jw+9Jxy0TeYmV8FcFVVTxPRiwA6AP5U1TvZbHapUqn8nrawxGBVJWvtNVWdJ6K05h1V/dhaW08KT/wRM1sAVQCRqn5JRLdyudw9Iora7faJKIrKqnrBNSWiahAEC0+GHwpm5utEdD+KopsuBMDbzPxt0oqstRdV9Za7lslkzlar1Z8erzsUHATBJhG93C34fmJi4ly5XG6nzTEIgjoRzanqkrX2amowM98F8Fq3wK34PWb+Ii14cXExv7e3V6hWq78+axQrANwt/kVEl5j5h0G2IzMfUdWCtfa3R/VPzvhTAG8AOM/MfwwYehTANwB+ZOYPE4ODIDhJRJvMvD9IqLW2GEXRbSJ6AcBtZr6UGPzoS2Y+lc/nt+bm5v5Oa2CtvaKqywC8bs06M7+eGszMn7nTBqDOzPNpwcvLyyPb29vfAZh2Naq6Za0tpAbXarUzURS53eGKL1trv0oKZ+a3AHytqplMJlOOoui4tfaDvqOw1lZUtabubBOtqOqN0dHRB/v7++62XwHwDoB33dkAUGPmoO92e/yitXZeVT8BkE1acbdpPQiCj4hIBw52hQsLC8c6nc77AN4E8FK3yQ4R/Qzgc2b+Je0ZDPU+fjiZp1eXFD5U8CB7u+/DGybgXxnFMA3/m1GISGwegNMAeuYBuON53lKpVBrePBG5RkTuSPc1b2ZmZnDzRKRnHoDYvIODg3u5XM69/E8AKAO40G1aNcb0N6/ZbF5X1fsAbjpInXnGmETzGo3GRdew+0DPGmPSzRORTQA988bHx89NTk6mmtdoNGLziGjJ9/1085rN5l1VPWSeMSbVvLW1tXwYhoXp6en+5olIbB6A2Dzf9wcyb319/cju7m5hdnY22TwRic3zPO98qVQayLxWq3U0DMPYPGNMsnmrq6snx8bGNqempgYyT0SKzjoAsXnGmP7mNZvNU9lsdqtYLKaaJyJXABwyzxiTbp6IxOYRUd33/VTzNjY2RnZ2dnrmAdgyxqSbJyJnAMTmEdFl3/cTzROR2DzHk6qWiei4Maa/eSJScZY99FRXPM+7MTIy8iAMQ6/dbsfmEVHPPGPM4OaJiBtDqnmuqfuL4Pv+8Oa1Wq1jYRg+ZR6A2DxjzP/mPRupfwAf56Q4urCh6QAAAABJRU5ErkJggg==","view/tab_panel.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAABICAYAAADyMAW8AAAAcUlEQVRYR+3WsQ3AMAhE0TCMeyTvP1tShRQo7lxYegxA8fUPLuac97VhwuKXKhTlFxRQ9GPDClawYvGEDwxIZu7pFRZXr4ACinY1ghWsYMX/NxWQr22edyvGGHt6hcV1NqGAon8QVrCCFYteISDnBuQB3xJuQcDkEngAAAAASUVORK5CYII=","view/btn_close.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAqCAYAAACz+XvQAAACmUlEQVRIS7WWS0/bUBCFz7mJmyZxENm06mNVoVZC7LqGn9FNqy55/BSWSEhs2/4uuqFVoA150JLKJvGdaiIH2TfXNoKQpeP5PHPO3GMTK/5xxTwsAUWkBeBZ+qAByb/Zh4pIA8CL9NqY5Dj7vw9YA/ABwDsAfwB8ITnUIhF5CuATgNcAfgH4RnJSCkwLl6AA/lXBtLZQQxFxoTr6q6LOFl2WmuJAtcY7ZuXIixsczfRyTlPfhpSN7BpwBeBtFdQLFJE2gI8AXi7GBBBl3Fdnv5L87XbpWxuFfQbw3NXM0dQLLdrDIH3ylGTiLLYB8CS9lpCc3tmU+xzL1Z9lEXl/n06KavjowCiK1uM4fqMd1Ov1s3a7fZntZjabtSeTiQYHgiC4aLVavZwpbofT6TQYDAaH1tod3bMwDHc7nc5PLZrNZmG/3z8WkS1jzGm32z1oNBqjUqD+6YM2m81xFWyeNkUaulAAlyKyWdTZbdqUmZKFakEVrLRDV7P5zY6m3rQp6tA1AMC5tXY7he51Op0fdwbGcdwdDodHWc2MMdcL9wGM1tbW9sMw/L6UNm6HChuNRifW2g1XM0dTL3TJZS1KkkTDFbVaLQqCIJcm6k0URRpxuvg39Xo9rtzDh5zt1Z/lXq+32rR5dKC1dt0YM08bAGd65BxN1ZB52ojIBcl82rgdWmsDkocAdgDoW22X5DxtSIZJkhyT3AJwCuCAZD5tfCP7oMaYcRVs/tAiDT1QHX2zqLPbtCkzxYFqjXfM3GKXAR3NtC6nqTccioAeA84BbCuU5B4Af9r4gCLSBXCU1UxErjPuj0Rk3xiznDYuMIWdANhwNXM09UKXXNai9LtQ9y4yxuS/XUijr9L0lXBDMp82j370HhJdWvsftiHJYFPSIqEAAAAASUVORK5CYII=","comp/combobox.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAABCCAYAAAA476rKAAACfElEQVR4Xu3bMYsTURQF4PMmExgIWkgEU5hskyJYxGYKY5VS7NzCylL8Bftj3NbKQjuxTBWbaUwhKdIYLCJotlACA5m8kQTZZZkkeN9dbuNJOXPPu/DN5ZHkMa7dbpfgx0TAEdvEedeE2HbWxDa0JjaxLQUMe3HPJrahQECrNE3RarUOJheLBbIsq9znZAdgJ0mC4XCIer1eSa/Xa4xGI+R5TuwA272RTqeDfr9fuTeZTDCfz/dmONkK/cFggGazebnCcrnEeDw+uCKxFdiNRmO3nURRBO/9bvtYrVbEVpgejXa7XfR6PUynU8xms6O1nGzlU3DO7fbu7V5dlsf/0yO2ElsSJ7ZES1lLbCWgJE5siZaylthKQEmc2BItZS2xlYCSOLElWspaYisBJXFiS7SUtcRWAkrixJZoKWuJrQSUxIkt0VLWElsJKIkTW6L1t5an6wFooRGerofKBeZ4uh4IFxrj6XqoXECOp+sBaJoIT9c1esIsT9eFYFbl/J5tJc13agyliU1sWwHDbtyziW0oYNiKk22JfXJ6xnfXjcDdFttnb43a/b9tovQ5iG30/IltBL1tQ2xiGwoYtuJkE9tQILBV/ugl4rh2MF1sPJJP59fuc7IDsTe37mHz8Bki+MoKHhFqn9+j9vs7sQN9K7G89xRx837levHzG5Lph8p1TrZK3iF//ApxdLVI4YFk/BpA9Uc5sVXYwObOCfyDJ3AoUcIh+vIRtYuve1clthJ7G8/7p4hv30Xx6weSybuDKxL7BrARxcjTF0iyN4AviH0Tpto1ONlaQUGe2AIsbSmxtYKCPLEFWNpSYmsFBXliC7C0pZfY2oWY/zeBP8uaLni/AFTVAAAAAElFTkSuQmCC","comp/textinput.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAAAWCAYAAACv8OArAAAAZElEQVRYR+3UQQkAMAwEwcZI/LtsoSL2NTGwMByZ3b3HJQIDO3H+EdidNezQGjbsUiBs+dmwQ4EwZdmwQ4EwZdmwQ4EwZdmwQ4EwZdmwQ4EwZdmwQ4EwZdmwQ4EwZdmwQ4Ew9QBe0R29X9x+dwAAAABJRU5ErkJggg==","comp/vscroll.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAhCAYAAAA/F0BXAAAAOklEQVRIS2N8+OzVf2YWFgYmJiYGcgHjqCEYQTcaJpipaTRMRsOEmDJmNJ2MppPRdEJMCIymE2JCCQAYonwDuu2VMAAAAABJRU5ErkJggg==","comp/vscroll$down.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAzCAYAAABxCePHAAAC/klEQVRIS+2WS0wTURSG/zszBcrLFVvjio0LiAqRRDAmGpRodFE1MQQQkOKGqBujRo3ExLjB4MaKgDzUaGQhvoJGYwAjYoioERcuDGxYEIwPkBY6nWvObXuLnXZaSklYOIu5M/fxzZn/nvPPsInJKa5qGhRFQaIH+w8xSbcymtTd+gBFYXAdyjM9sf7ORxgGR0t5/j9jpkhq2t5B0xQwBrgqNsnJ9V0j4BzQdQNtNYXWkKz0NDiaXkBTFTCFoaWmCHVtQ+AGh+4z0HNiO2bmPNYQGiXQvkuPoaqqiIgi8Pl8eHBqtwlA86MKS6Cy8z1gjIFzjqcXHBEBlpBgRNuOd+HVlYqogJiQIChcg/BtW5k8SaSSkxPJ5PRPTttHfkI7kcghIpn8NYfp33NLXp+TnYG1OWvA3ox9499nPSjdkCsgHJxOIjc43VMrugL9dEUD4Oj/PA4CsUfDX/jOjbmisHTDCCzi4t4QgLDrQF+qTYOmqhgYGw9BvLpv0ZNjQwieaU9b7ZCDriFhSt3VBSZNartHA6aUJ7SK+jqO5n5pSp1HiqSw1e3Di0ypwBpiU1XsudwnTanraDEqrg2GmZLbGkJh2jQVZY29JlPqPe03JX/uxLE7Nk3DjjP3pCn1Ne7HrNsjdYoLQsmWYtNQ3NCBgeZKzLrn/foEoogbQgvSUmz4454P7VQikGhpHzGSZdVOUqqYTGli6gemZ9yJ+0lSTalk/TrxtQOYaBnESbTinokev4UG+p+9/xoyJQKQn8x7vf7JjEFZ1FJBBvuC12RINIdAwtkIQuksnxgHhKBUZ6scQtLSNyiWJpav47z9STjbjfJ8k5iVN0eEs911bhZjUTWpbR+RztZ6uFBERNCq1rfS2e43lFhDsjPscDS9lM7W4dyCquuvpbM9PFkq0iHm7mSl2yP+bj05uxdeXZe5FHOL6Xdr17nQ79bziwew4NXFqwUTMiaEtKBPwtZjnRi8WgXPglfqsyQITc60pwpAeNpH1GRZtRM0pWVVcTJM6S+dYaRsIf025wAAAABJRU5ErkJggg==","comp/vscroll$bar.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAA/CAYAAAAGyyO8AAABYElEQVRYR+2Wv0sDMRTH30tarCg6dRWnQnFT6OiqoP+tk+Cig+AiHayDiNSlg+jgD47K1US+Lwm5s4o/mkElN1xy73KfcF/efTi+Ht3Y0X1Btw8FffdoLy3QSnuZ+HhwZe+exrS13hGGJYsTWSszN0rJ1zHDDbJ0eDYkgHjv5Nxub3TIGEsTY/xDVq6NAN7MfW2u2aCG1nQ0GEZIOXmp7Pw5BPDF+VaGIGQfbM6k0ng5kw8/wF/eJzP5JInZkjg2CSS8zk6vCys7Wb8r5qqsncAP+pdR1Lu9rvgVT4uYg+3F+PCtAzjzu/taKdKKBSS2/wkEMBg/Q+rB50zqzZb7ZPoD/GeZ1HySxGxJHJsEEl5nc22VmCFalpFJTjLKNUtFxlDfP72IogYAP8PPZekWM5OqjErFWpjjbxprABJRA/JYjOOOX4Bgo6bWGYKsfMg5k+lmy5n8uUxm8kkSs6Vw7Cstibc9Fv5vWQAAAABJRU5ErkJggg==","comp/vscroll$up.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAzCAYAAABxCePHAAADF0lEQVRIS92WTUhUURTHz31vPv0KKmkXrtxUGNomkCANLdCUpEatJFuIClIEFRl9kGH0BYWQElLpotGKEJXAtKQooYUFpi1axLQZMCyyZJqv926cM2/uTM288emoUHfx3v16v3fuuef+72Hume/c7/cBAwaLKWaLBZjLPc0Zk0CSJGBs4SDOObDP7i9ckuXkIbLJRJDFFrJk2SGNvZNwy7ExoZEJLWnqfQ+4SlUFaHNs0gXpQhq6x0GWGe0Y7oCicGivyYsLigup7XgFJlkCJjFwNm2HqrZR4CqHoKLC3fr8GFAMpPLqEJhMoZjpay6Bnx4vpKfYoLx1kCwKBlXoOV78BygGsudCH1nwtNVBgHBBUFFzL1n0+Gx5YghOxhINiAbFG1uZODESxf+bJShKrulv8HUusp1G/IBz1qTZIGvdamBjU584Aopzs+lbDhwfFFgc2/imLq0fazgAHF5MumBtuh3YwJsPfGdeNqgY1qqqfcSprRLgr7rWZzWbwCTL8HLKFYEEgkrUn+eHIDzNbltBSG33O+jcnxNZmrYcw5Yc7hoXotRenRPyz0IgBzrGYkTp9qEtxiEV10eEKD08Wgh7bzwTonSvIV/soK5jd53rE6I0eGY3/PL5wWYxQ+nFgShRKqK6LqTwhJNEafRKNQHCcWK3WmDHqR5NlMoSQzAWUV+9vkBMsKXYLCSbs3Oe+SGqqupGrIL3h3YclifYkjo7yZ7izIzUUGrhnvXAzA+PURkR8xCwPnMVsCUVpW0bsiCUKOH9S0980JvaLJSQUTal9Q+9/RgRJQSgnvgCgdBkxkCKektSpC9cR0HCOQgiZUMI3njijwYg+COzLP9rkLr7E3Dn4Gbhp7BPDC+n0TkhlK2zJpccuSBIfVdsutVdt9U4pLbjtVC2B0cKYN/N50LZHh0rFGGguztV14aFsvWfLiVhSrVboaSlXyjbk/NlBNKFVLT0k7INX3KAx+sXfkBlKzjpJItGLlcmhmSkptAB83h9MTuCICxBRUkMwUmY5+uFPY7LmJ7GW05SZycsSos9xUsmSr8BfgGeWI6+BgEAAAAASUVORK5CYII=","comp/button.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAE0AAABFCAYAAAAPWmvdAAABA0lEQVR4Xu3ZMRGDUBRFwXwfKSgxFhfRgAbUxEakkCEO3qmX+p9m5w7NW9v7cz18I4EFbeT1fwxtbgYtmEGDVgRC458GLQiExNKgBYGQWBq0IBASS4MWBEJiadCCQEgsDVoQCImlQQsCIbE0aEEgJJZW0Pbj64Q3hFvQhmL3CQ8atLlAKCwNWhAIiaVBCwIhsTRoQSAklgYtCITE0qAFgZBYGrQgEBJLgxYEQmJp0IJASCwNWhAIiaUVtOfrdMIbwi1oQ7H7hAcN2lwgFJYGLQiExNKgBYGQWBq0IBASS4MWBEJiadCCQEgsDVoQCImlQQsCIbE0aEEgJJYGLQiExNIC2g/MxaMp6CSauwAAAABJRU5ErkJggg==","view/bg_tool.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAMklEQVRYR+3QQREAAAjDMCYG/DsEGXxSBb2ke7YeiwECBAgQIECAAAECBAgQIEDgW+AAAeIuAVS/mngAAAAASUVORK5CYII=","comp/minBtn.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA8CAYAAAB1odqiAAAArUlEQVRYR+3X0QmAMAwE0GQN19B9nM193CmiIH7ZXOAoRc/fpjl8jVDdOj/eOc8USBcXqUjLAtDQRMSOdHb3JatTYCZUXodIy10bGxTI1Lx6/YA0Ima6W2tKFcjmdpGKtCow7NBAdxozy+804Gfx/cDqbLzWDzs0ekNY4B9nOMEehMKTVIEEyKeFSKmc18+MppRtipJuYPCa1SkwEyqvo6Tlxm8bFEijvBt9n/QA/fOPydLHcUIAAAAASUVORK5CYII=","view/zoom_out.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAoCAYAAAD6xArmAAACy0lEQVRIS92WQU8TQRTH/28oQkj0CL0QOMAJQkz4DkS6A+GA+A00Hrhj0uy8NiTwEdBPAOrB0Fnq3U8g6gkOSjxUjpCQCu08M5u2qaVAt7YmOqfNZPa3b9/+Z35L6NOgPnHx98Gbm5sTlUplA0AGQBpACcBBKpXazmaz3+5607YVM/MjEXlNRPdbASJyTkRrzPz+Nvg1MDNPAvgI4AGA10qpvHPuSCk17ZwLAazV4HPM/PUmeDvwSwBPAbxl5sf+RmYWZo7XMvOehwPYYebnScAnAMaVUrNhGH5pBefz+Rnn3GcAJ8w8kQT8E8A9AEMA/HXrqM9fMrO/bjvataJvFdd7/IaZfS9/67ExZpeIngB4xczPklQ8KSKHPmoispdKpXKjo6PHp6enU5VKxXhoV6moVXhnjpVS5wDOwjD81K7qG7e033lXV1cviMjvvDEAP0TkYHBwcKtarT4UkXcALolo1RhTaIV3dVYYY9aIyOfZDw9fMcYUm+FdgWvtYgCmBisrpRbCMPxQh3cNbgM3zJzvCdhDcrncuojMA8gy8/eegTvO8U0Lk87/UY9ve9h/BI6iyJ+1GyLScB4RHQDYDoKgO+dFURSfFQCuOQ9A7LwgCJI5r1gsTlar1YbznHP5crl8NDw8PK2Uip3n4QMDA3OLi4udO89a23Ce1jp2nrVWtNbxh7bWxs4jop0gCDp3XhRFJyIy7pybXV5ejp3XDN7f359RSsXO01p37jxrbey8i4uLoZGRkWvOa5q/1Fp37rx+VtxwntY6dl5zK6Io2hWR2Hla686dV0vFoY+aP8xFJJdOp49LpdIUEZkaNHkqfIWd5JiIzkXkLAiCZM7zO09EYueJyBgRxc4joi0ADeeJyOrS0lJvnBdFkf8xbDhPKbWSyWR647xCocC+53XnAVjQWvfGeS1wo7XunfOstesA5pVS2Uwm8w877xeHf444cscwYAAAAABJRU5ErkJggg==","view/refresh2.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAA/CAYAAAAPIIPGAAAEIElEQVRYR+2XTUhjVxTH/+fGpBrGT/xoBQdFFMMQLNLNbLooLbaFzqKMUhCSZwsuhGG6KCNd6DuRLgqzmGVxUd8LUrpoYWZTKO1yNi2F1oVtceEHflSLqNEav8bklPuqgsl75sUPSsucTQj33v895+R/7y+XcA1B16CJ/6GoYRiDItKfzWZjExMTv5/XtoLlx2Kxm0qp1wH0AHgTwC4RfWRZ1mdewp6ig4ODN9Lp9CMieh+AchH41Lbtj92EXUUHBgaCh4eH3wJ4zSObGSLqtSzrZ9+ihmF8CODR8YIflFL3MplMNxF9IiJWIBC4Pz4+/ldR5RuG8QuAlwGsAWi3bTsVj8dvAWhOJpPfFPK2a/mGYewDeAHAV7Zt9+aK9PX1VYRCoVcApNxa4CX6J4B6AE9t2341V9QwjO8AvAFg27btytxxL9EvAbynJxNRj2VZX58sjMfjd4joyT9D9NiyrHf9iup+/gggBCALQPfxVwARAO8cWywD4LZt2z/5EtWT+vv774rIBIBSlx/mmT5dyWTyC9+WOpkYi8XalVIPRKQbwItEpHv9PRE9tCzrt6IsVcgyhcYLnv1CAkWXfxFBxzEXXXipq+8imz7P9CJdO3+N754y86A+vYFAIDY8PHw58DHzTQB54DNNs3jwMfONY6R4go+Z/YNvbGwsuLKyci74APQys3/wMfMZ8InIPaVUt4g44AuHw/eHhoaKAx8znwEfM6dGR0dviUizaZoXA59pmvtE5ICPmfPAx8wVABzwubXA1VLM7IBPRJ4mEok88DHzKfiY2R/4mPkUfCLSk0gkTsHHzHdE5Immnog8TiQS/sDHzK7gE5EIEZ2CTyl1e2RkxD/4TNO8S0Su4BORZ0qpftM0iwefaZrtAB4QkQM+AA74ADxk5ufgc78CfV99xdy61yMajUbfAvA5gJeKycZj7gqADygajf5xRYIn+6xoUbmCDM9I/LuidXV1qK2txdzcHPb39ZPAOwpmGgqFUFFRgerqauczm81iaWkJa2v64eLhU6+eKqXQ1NTkZOcWq6urWF5edh1zzZSI0NbWhvLyctdFBwcHmJ2dxe7urn/R+vp6J0sd6XQaCwsLqKysRGNjI9bX17G4uIhMRr8jiig/EokgHA7j6OgIU1NTjkBZWRl0f7e2tgo60LX8rq4u/UjC5uamU2ZuBAIBZ1O9mVsLXEU7OztRUlKCnZ0dTE9P54nqfmsnaNHJycm8cVfRlpYW1NTUOJN1pjrjk6iqqkJra6vzNZVKYWZmxp+oLq2jo8NpgQ7dx729PZSWlkKL6hARpwr9Q+aGp/m12Zubm6H9mhtacH5+HhsbG/4tdTJTZ9bQ0OD0LxgMOm7Y3t6GNv55R7XgMS3oH5cJ/y3Rq775V3X5bx8zSv8DuWzoa2vgb5tumbHGlerDAAAAAElFTkSuQmCC","view/settings2.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAA/CAYAAAAPIIPGAAAD2ElEQVRYR+1Xz08bRxT+ZjAGYQoH4rS9IBJBQJEsUC8VKNdQtamUE0fLayqhKHeOaGbFkT8gFVLZtXzk1qqKSs4NUg8RXCIQVoOQ2jRFHHCwBRj2VW+zttY/14BXVaPOyR7NfPN9771536xACEOEgImPDHRhYaHv/Pz8kEMVjUbjq6urxVZhayo/lUo9chzndTabfWMYxkMAGx7QrG3bL5LJ5B0p5f1MJvNz7QENQdPp9LdE9CMAZrcHYAaoxJ8AvARwD8AtAI9t2/7JD9wQdH5+/q7jOLzx04DqeCelnFlbW/s9EJQXGIbxq8eQ//4mhPieiJjlEwBf8qQQYtOyLFZRNeqYJpPJWCQSeUBEzz3JrwqFwvT6+vo575ybm4vGYrFNAF8AICnlbKlU2sxms4Uych2oYRh5AJ9UFggxb1mW5aeSTqfTRLTmm3tv2/bAVUCfWpb1zA9qGAaHwD/XGjQU+WVGHU0Ug4ZSUjXFnwMwXVP8nP1RAPG2i5/Z+q9pKpWaFUL8wvNE9FUmk9m48jWtLWavofztNZTb124oN2neH1mTvmoo/pcfHDGtdZ9nLbw4rrW+nvGZpvlISvl6aWnpjWmaD4nINT4hxKxS6sXy8vIdx3HuK6XaMz6ttWt8QohDInKNTwjhJtWzlJdCiHtEdEtK+VgpFWx8Wuu7RMQbWxofEb0TQsxordszPq11Q+MjoidCCNf4AGxqrYONb2VlJVYsFh84jvPck/yKW5/W2jU+rXWUwdj4OBQcYzbCxcXF5sanlMoLIaqMTylVZXymaVYZHxG9N02zufE1AH2qlKoyPqUUh6AyFwgaivzyVehoorxkdL6k/MUPIEdE0/7i5zcUGx8Rxdsufmbrv6ZKqSrjM01z48rXtLbFeA3FNT4At6/dUIJ7V/MV/6HOn0gkvgbwA4DPbyLZ2/sWwHcikUj82SHAMqe3DMrv+I6Ofw9USonJyUlXzfb2NhzHaamsKdPBwUGcnp7i7OwMAwMDGBsbc4H29vaQz+fR09OD3t5eHB8f1x3QEJQBR0dHcXFx4QL39/dXbTw5OXEBI5EIcrlcHXBDUGYxPj6O7u7uljJLpRJ2d3ddNf7RVD6DlhkWCgUcHrof0YjH44jFYu5vnt/Z2QmWz0lhsHIMi8Wiu/HDF6T7mMDExAT6+vjR8iHGHA5/8uqYTk1Noaurq3L6/v4+jo6OqtgMDQ1hZGSkMnd5eYmtra3K/0DQg4ODivTyLg7B8PBw+6ChyC8f39FEMWgoJRVK8TPbjl/T2mruWEO5SYMNo/P/xaDfeB712U3YeXv/ALDwD+TbY8Dbd9BBAAAAAElFTkSuQmCC","view/setting.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAkCAYAAAC9itu8AAACAklEQVQ4T5XUS4iOcRTH8c9xCeVeiiiXhSJRJFIusRO2lEtZKFlgY6GxZDUrk2TFwii22JJLlERRLKRQJmXBkHIb8+hM/2d6ememed93957n93v+55zf9/mHll9VVTNxopTPR8T3piTyT1VVs7AL9zEd+4roOn5gK25HxLfacAjL8A8TWw6ta28jorc2LMLhIu7Ds2Jah4XlRVci4mNUVTUDadiLFF/G5GL4iyOYjxsYMnQ1BDfxujk0VmJPecFAO4bV2Nk05Bqzz3Za6ut86JJDx2vN4Hbj3hjBbcOt4eCaQZXUj5daT4pGoNFimI1zpdYVEf2jsTQX+5MX5NaOFdFFJHzJ2bWI+FJv6SRWYACTWliqa68ioqc2LMWpwtJ7PCymzVhSWOqOiHeZdPachqNIcXdBJV/2B6cLa5cwZLjQYOkqnuNsOeEM1uJgE43xDBsaH9QQfJ21VNBoHfpBaWHLiKGLoeO1ZnAHkpcxgkvOeoeDa0FjTnNLEfF1PJamYkcR3YmIX6OxNA35Kb7BFKwvoqf4jeV4GRE/azQ2Yh4GMaGFpbr2OSKe1Ibse1MRJ84fimkxMqc0Pc55MrjsOYvZRoofNW6/vPUSwEQ+2+tPQ14h9fX4Ap+aQ2MB1pQTB9sx5K24qmnorKWCRvtDF0PHa+0suBaW0ry91O5mus3n/wHmQwUTIH+tVgAAAABJRU5ErkJggg==","view/refresh.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAkCAYAAAC9itu8AAACiElEQVQ4T4WVS4iPYRTGf4/7/X6XcivXcktEUhTKQkqyYCOKjWyUhezFThbIlJ3LYrIRkoWGUhhhTMko4zJujYRpxgxHj9737/P3zfh239c57/uc5/zO+UQ3T0QsBRYCtZI+5jBVx0fEcGA6MA+YCXQCVyXddWwlISL6ARuARcXvhQPrJF3/nRARvYHtwLRuFLYCFyW15ITl6XTHvwIuJzlrgHrgiqSOiqSI2ANMAL4BxyW1R8RYYKSkp8Vb8w2HgD7AE0kXSozoD0wC2nPCAWAw0CyppiRhBzAD6MgJW4D5KdDFNeSkiJgFbEvONeYE698N2K0ArPsDMAZwguN+AmeKfZgLbAb6llj7A7gk6eFfnY6I0cDKpNc1tQFNwG1JvvFPp0sKXQ2sAGokveuJpVHAHGBJ4ul76vLNapbs9dYk6R8oU7driyztA2Z3w5L1n5LUnBPWptMd/xw4l+RscsHAeeNSZMloTAG+AIcltUXERPdB0qMylk4klu5LOlni2ABgqm3Oko4BQ4Fnko6WJOxPzlXg2wV4hv2czuOYhmsBsDf1rD7fYP0HkyyzZN0twHjACZmlI0WWFgM7e2DprKQ71SyNA9YDBnFYcq0RuOZ5/h9LdsVS6yV97YmlgYDn2X3wjUa7QdKLapY8015ePrWMJVtembhewLI0YWU4eZvck/Q525pXo4M/AY+TLMP40u+SuooseVjsitm/IakzItz5QcXhKSZsBCyrpdjlwuZwfSO8mLOkdYAHqFXSrRKWvErtXFdOcJcnp0AX96ZwuldQ5uxtTrD+VUmWWXqfujwk8eQ4f68rsuRG+d/gZVb9eIk9kPS6miXvIv91rNc12TXPc5MkTyO/AFhJCujHqZlCAAAAAElFTkSuQmCC","comp/checkbox.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAqCAYAAACDdWrxAAABbUlEQVRIS+2TP0gCURzHv88GRYsrExyOo5cEQVEtWdQQpE4N0R+HxmirXXCrKYigqMF2IRqCQByaLJqNIFpyUIzu4rIwpExODy88ITD/cJ603Rsf7/OGz+/zI5TSEAE20cZRgBMySKni8XrbwICrWAwG2ESZIadFS53J0R25brCyHZNud1vbcRuPV7fDAOu9GXJatNSZHN2R6wb/PfJCrxOZCR8Gbk6hWc6Xg8PrcgBETMIVPdIGSjYG/NoOSHcfkLqDK3qsBSRIrgRAuBF1quUPEUPhYGMwb2dhywrqQ3F0Dt++jSokJMBdhmDO52pB2WwFP7OK8rgH9os99IgppNf3QWwMFP4RNHKALrmoflIj53l6CaWpRcBkgiIkYHl6gDTrh5JJg57v/kJ1YOUixw7jfWELxMpAKUmAXAR7tg3LZ7am3IbjKDBOvPiDqkUmcoj+9H1d7k3nmHdweBubB70ON9wRzQH8pVVQb+Q/zZAEfpwDCU4AAAAASUVORK5CYII=","comp/btn_close.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA8CAYAAAB1odqiAAAE6UlEQVRYR+3Y30+bVRgH8G/T0t/0Jy0USrIsC0E2GMKAVYcRpmSbEzIGZhqyxCxeceGVF3pjvJl/wYyJWZYY4hZBFnBuBBUW2ewYAxlsSMiyLKH8aEt/0vZtSxvM+562We15C6jlxr53zfO8z+ec5z2nOTmCk598tY19fAQs+Hlvz76QX1zpAwd+1NMNXzieU1QtFeKbvn4CXvqgC95wLKegRirC1e8GCPjh+53wMnRwedkG54aLG4yhSI/ycnPawHaKJ5M1MhGuXR8k4MX3OnjBx3NPcLX3DPfepSu3odfrYC4r5X7bVlbhcrnT4kdrjlA7xYLffj9EwJ6udnhCW9TEJ08XUgWTqE6n5XLdbk9G7MjhKmodrbwAfQPDBLxw7h1ecH3dDq/Xm1GYrZqceXIgGo0GJSXFvOCNmz8RsLv9NNyhKO+icTqc8Pl8acDLyWyr1Wo1DEYDbw2dXIz+4TsE7DzbBneQH2SruDZc8Pv9GSiLqVQq6Iv0WVe5TiHG4K1RAnaceguuYCTrCx63G4FAgAoqlUpodbqs7+sVEgyN/ELAs20t2Ajwgz6vF6FgMGtL5QoF1BoNL1qklODW6DgBT518gxcM+P1gQqFdLRqZXA6lSkVFWXDk198I2NZyAs7NMDXR7XRmYBKZjMuNMEzmljHQF46hUIrR8XsEbG228IJ+T/rGFkskkMoVHBgOBRGNRNI2vkpL/5YsODZhJeCbJ47D4WeoM4wyDLai5PsWiCUQJ2aXTN4pnswzqmS4e+8BAZstDbxg1qW3hyALTlinCPh6Uz1C0Rg2w/S/tz3UpaYWSgsgF4twf3IagvOXr297PR5YGuv+bd2s71sfzkCj1ULQe+3u9vraGlg0lw+LlZhMEIzUNu7vmYYFmz/9LJeTS9We+PIymaGl6wLizo2cokJDEawDNxLg+W7EHTkGjUWw/tBPwOMdnYg7nNQZep4/Q2B9jYspS0zQHjyUlrdTPJksNBrwYGiQgE3vtiNup4O2SSuOzk5y7z2ubYKyuBiaAwe5394XzxGw29Pi5iYLdeDCYgMmfxxOgKfPIG53UBNt049SBVNo4g864HRmxMz1x3hAIybv3CZg49ttiK/bqYneFRuCLldGYTY5OfPkQBR6PTRl6cfIVEtLivHw51ECNrS2Ir62zrtKfWtrCHo8acDLyWyrFVot1CYTbw2hqQRTY2MJsLk5K8hW8TkcCPp8GSiHqdVQG41ZtxUHTkwQ8NhrFsRXyUrke3wuF0L+TSooVxVCrc9+iBKWmvDodysB65saEFtZ5cX8Hi+YQDBrS2VKBVRa/jONqKwU05NTBKyrexWxlRUquOnfBBNidrVoZHIZClWF1DqisjLMzPxBwNraasRsdHDD6c7ApDIJVzTMRDJiRQb6EUNkLsPs7DwBa6qrELPZqCNzu/1pG1siEUOhkHK5wWAYkUg0La7T0U9tIrMZc/MLBKw+XImtZTrIMBFEouQkIBEXQJaYXXJ0O8WTeQXlZsw/XSRg1SsVvGDWpbuHIAsu/LlEwMrKCsQDAcQ93j2U2H2qUKuBUKnE4uISBF9f/Hj7wJwVhyordl/hH2Q+W1zCixoLOdNUj98Ei+byYbH5lnPkmJhL6O+18/c0/1m38/c0qVbm72nYVuTvadgu5O9pUtsif0+Tv6dhF8P/657mLz4NfQVdLmZiAAAAAElFTkSuQmCC","comp/textarea.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFsAAAAXCAYAAABkrDOOAAAA4klEQVRoQ+3ZvQrCMBiF4e9rU+sPOErRqxDRe/KG9Fp0EAc3VzuIg1ML4uDmlkaaquDenMUTyJoDD+8W3ZyKlaoshSeogHOy1m1euOmoI1EU+auqQUf/8XHnnBzLp3jsWdaVJEnEGEPsADXU2Ifro8Gej/uSpqnHruvmaVegqirZX+4N9mIy8Nh13XEct7vE18RaK7vzjdiIFoiNUH5vEJvYQAHgFMsmNlAAOMWyiQ0UAE6xbGIDBYBTLJvYQAHgFMsmNlAAOMWyiQ0UAE79lM2fmrDy358a/q6Hhf68ng175QueKdEXxUGVVwAAAABJRU5ErkJggg==","view/re.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAoCAYAAAD6xArmAAACpklEQVRIS+WWPUgcQRiG3+8O70QEUwTB1EJgsTGdRRrhOMjOtEtSRbBIBMFKuCtkZleES2uRQoWQJggKKW7Of7GyTRvBLkVShhS73OXMfWGOU85Es7uXs0m2XeZh+OZ95xnCHX10R1ykBvu+P5fP59+VSqVvf9pUarBS6jWAR0Q0rbWOboP3BCaiOQAHAKTW+vtN8L8BW96W4zjPPM/78Ss8FlypVEYajYbHzALAJIAHALJdoDWl1Esi4m74rWBmpiAI5pk5AHAvJj0VrXU5Fmyhvu+/AfA8YRxfaa1LsWDf92eZeSMJlJnXtdYvEo1Ca30G4GEH/ImI1lqt1nE+nz9vNBrLnVTY39uO4zxNdHgrKytjzWbzs13FzKfDw8PFxcXF8HL3Nscd8BEAN3HcgiCYbLVaHyyIiGaUUm+7R9JzQZRSo0T0BUCGmRd831/tBttK53K5zXK5/DV1pZVSG0Q0C2BXa/0kySEmKojWeoiZD4hoKpvNTiwtLX1MC7+1IFrrQWZeJaJxx3EKN5186lF0LwiC4DEz31dKvU+z69i7Ig0stnm9wv4zsDGm7bxCodBf5xlj2s5j5mkpZf+c1wHPEdFBGIbS87z+OO8S3EnAVhRFvTnv8PBwpF6ve0QkiGiSmX9znuu66ZxXq9XmAcQ6j5krUspkzqvVaqmcJ4SId54xxl6ZiZwHYN113WTOq1arZ0R05TwAa5lM5rher5/ncrllAPYl1HZeFEXJnLe3tzd2cXHRdh6A04GBgWKxWLxyXlcqjqIochPHbWdn58p5AGaEENec13NB9vf3R5vNZtt5RLTguu4159lKA9gUQqR3njHGHpx9tOxKKfvnvGq1OmQrC2AKwIQQon/OOzk5GQzD0I5hPIqi/jvPGNN2npTyH3feTzoJOzgswwlqAAAAAElFTkSuQmCC","view/search.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAqCAYAAABcOxDuAAABX0lEQVRIS+3VsUrEQBAG4H9HiDZiJQg+gJVaiKAoWClYXWeZ7D6CtbWFr5Ai2ayQxkLQRgsLGwtBUQsRC6sDCxHxEIvIZSRwxRGSu83pNUe23c0H+89kR2AISwzBxAiinuctCSH2AawD+AFwRkR7QRC85CO0ur5SaoOZzwGM54A3IlrJw1aolPIewEJJUY+01jvde31RKeUMgNceXdLSWk9VQl3XnSWiZhnKzF9RFE1WQrPDUsonAHNFsBDiJAzDRmXUdd1tIjoFMJaDW0KI1TAMH61RpdQ0Mx8z8zMzHxLRAYBlAG0Al2ma7hpjHqxbqgNeAJgHcKW1XutEMeE4Ttv3/axXC1dh9XPgbZqmW8aYd9t3ohCVUt4BWARwkyTJZhzHH7Zgdq4MvQbw7ThOw/f9zypgKVoVsS7UX+C+v+kgeI0Oklrvb0Yw03rwlZW8Hnz14OvqjXrw1e/pPyfwCww91CttlMG7AAAAAElFTkSuQmCC","view/save.png":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAoCAYAAAD6xArmAAAA1klEQVRIS+2VzQ3DIAyFwxwdoMMAA/VQ8ZByyEBhmA7QOVxxKLIaOcIoSZUfrlifHw/wM91Ky6zE7SZgANTaDEDhzYJ5odSMC7nA5U7+b4X2dVQr3ic4hHCTlMcY33xPZUUGcwBvdEJwjcfGGIQQ4rd2qenWA3hyAUuABwCP31NtN+i1v02qP4DicRybM885J2ceB/NCyUupfuLxBS4WbmKF9rNUv4p9gq21d0l5SunF91RWZDAH8EYnBNd4nDPPWitnXst0I6Leez+feVowEQ3e+wNk3ge7C/Qp3GfwkgAAAABJRU5ErkJggg=="},K.base64=new Q(K.dataO);class _{constructor(){}static initCallLaterRecorder(){_.oldCallLater||(_.oldCallLater=e.Laya.timer.callLater,e.Laya.timer.callLater=_.prototype.callLater)}static beginRecordCallLater(){_.initCallLaterRecorder(),_._isRecording=!0}static runRecordedCallLaters(){var t;_._isRecording=!1;for(var a=(t=e.Laya.timer)._laters,i=0,s=(a=_._recordedCallLaters).length-1;i<=s;i++){var l=a[i];_._recordedCallLaters.indexOf(l)<0||(null!==l.method&&l.run(!1),t._recoverHandler(l),a.splice(i,1))}_._recordedCallLaters.length=0}callLater(t,e,a=null){null==this._getHandler(t,e)&&(_.oldCallLater.call(this,t,e,a),_._isRecording&&_._recordedCallLaters.push(this._laters[this._laters.length-1]))}}_._recordedCallLaters=[],_._isRecording=!1;class P{constructor(){}static createCanvas(t,e){return null}static renderSpriteToCanvas(t,a,i,s){e.RenderSprite.renders[t._renderType]._fun(t,a.context,i,s)}static getImageDataFromCanvas(t,e=0,a=0,i=0,s=0){return i<=0&&(i=t.width),s<=0&&(s=t.height),t.context.getImageData(e,a,i,s)}static getImageDataFromCanvasByRec(t,e){return t.context.getImageData(e.x,e.y,e.width,e.height)}static getDifferCount(t,e){var a,i=t.data,s=e.data;return a=0,P.walkImageData(t,(function(t,e,l,r){P.isPoinSame(l,i,s)||a++})),a}static getDifferRate(t,e){return P.getDifferCount(t,e)/(t.width*t.height)}static getCanvasDisRec(t){var a,i,s,l,r,n,o,h,d,c,b;a=new e.Rectangle,s=r=0,l=(i=P.getImageDataFromCanvas(t,0,0)).width,n=i.height,h=i.width,c=i.height,b=i.data;var u=0;for(d=0;d<c;d++)for(o=0;o<h;o++)P.isEmptyPoint(b,u)||(l>o&&(l=o),s<o&&(s=o),n>d&&(n=d),r<d&&(r=d)),u+=4;return a.setTo(l,n,s-l+1,r-n+1),a}static fillCanvasRec(t,e,a){var i=t.context;i.fillStyle=a,i.fillRect(e.x,e.y,e.width,e.height)}static isEmptyPoint(t,e){return 0==t[e]&&0==t[e+1]&&0==t[e+2]&&0==t[e+3]}static isPoinSame(t,e,a){return e[t]==a[t]&&e[t+1]==a[t+1]&&e[t+2]==a[t+2]&&e[t+3]==a[t+3]}static walkImageData(t,e){var a,i,s,l;i=t.width,l=t.height;var r=0,n=t.data;for(a=0;a<i;a++)for(s=0;s<l;s++)e(a,s,r,n),r+=4}static renderSpritesToCanvas(t,e,a=0,i=0,s=0){var l,r;for(r=e.length,l=s;l<r;l++)P.renderSpriteToCanvas(e[l],t,a,i)}static clearCanvas(t){var e,a;e=t.width,a=t.height,t.size(e+1,a),t.size(e,a)}static getImagePixels(t,e,a,i,s=4){var l,r,n,o;for(l=(t*a+e)*s,o=[],n=s,r=0;r<n;r++)o.push(i[l+r]);return o}}class q{constructor(){}static sortBigFirst(t,e){return t==e?0:e>t?1:-1}static sortSmallFirst(t,e){return t==e?0:e>t?-1:1}static sortNumBigFirst(t,e){return parseFloat(e)-parseFloat(t)}static sortNumSmallFirst(t,e){return parseFloat(t)-parseFloat(e)}static sortByKey(t,e=!1,a=!0){var i;return i=e?a?q.sortNumBigFirst:q.sortBigFirst:a?q.sortNumSmallFirst:q.sortSmallFirst,function(e,a){return i(e[t],a[t])}}}class ${constructor(){}static toHexColor(t){return e.Utils.toHexColor(t)}static getRGBByRGBStr(t){"#"==t.charAt(0)&&(t=t.substr(1));var e=parseInt(t,16);t.length;return[(16711680&e)>>16,(65280&e)>>8,255&e]}static getColorBit(t){var e;return e=(e=Math.floor(t).toString(16)).length>1?e:"0"+e}static getRGBStr(t,e=1){return"#"+$.getColorBit(t[0]*e)+$.getColorBit(t[1]*e)+$.getColorBit(t[2]*e)}static traseHSB(t){console.log("hsb:",t[0],t[1],t[2])}static rgb2hsb(t,e,a){var i=[t,e,a];i.sort(q.sortNumSmallFirst);var s=i[2],l=i[0],r=0;return s==l?r=1:0==t&&0==e&&0==a||(s==t&&e>=a?r=60*(e-a)/(s-l)+0:s==t&&e<a?r=60*(e-a)/(s-l)+360:s==e?r=60*(a-t)/(s-l)+120:s==a&&(r=60*(t-e)/(s-l)+240)),[r,0==s?0:(s-l)/s,s/255]}static hsb2rgb(t,e,a){var i=0,s=0,l=0,r=Math.floor(t/60%6),n=t/60-r,o=a*(1-e),h=a*(1-n*e),d=a*(1-(1-n)*e);switch(r){case 0:i=a,s=d,l=o;break;case 1:i=h,s=a,l=o;break;case 2:i=o,s=a,l=d;break;case 3:i=o,s=h,l=a;break;case 4:i=d,s=o,l=a;break;case 5:i=a,s=o,l=h}return[Math.floor(255*i),Math.floor(255*s),Math.floor(255*l)]}}class tt{constructor(){}static bind(t,e){return t.bind(e)}static insertP(t,a,i,s,l,r){var n;n=new e.Sprite,t.parent.addChild(n),n.x=a,n.y=i,n.scaleX=s,n.scaleY=l,n.rotation=r,n.addChild(t),tt.count++,n.name="insertP:"+tt.count}static insertChild(t,a,i,s,l,r,n="#ff00ff"){var o;return o=new e.Sprite,t.addChild(o),o.x=a,o.y=i,o.scaleX=s,o.scaleY=l,o.rotation=r,o.graphics.drawRect(0,0,20,20,n),o.name="child:"+t.numChildren,o}static createSprite(t,a,i="#ff0000"){var s;return(s=new e.Sprite).graphics.drawRect(0,0,t,a,i),s.size(t,a),s}static createBtn(t,a=100,i=40){var s;return(s=new e.Sprite).size(a,i),s.graphics.drawRect(0,0,s.width,s.height,"#ff0000"),s.graphics.fillText(t,.5*s.width,.5*s.height,null,"#ffff00","center"),s}}tt.count=0;class et{constructor(){}static init(){et._txt||(et._txt=new e.Text,et._txt.pos(100,100),et._txt.color="#ff00ff",et._txt.zOrder=999,et._txt.fontSize=24,et._txt.text="debugTxt inited",e.Laya.stage.addChild(et._txt))}static getArgArr(t){var e;e=[];var a,i=t.length;for(a=0;a<i;a++)e.push(t[a]);return e}static dTrace(...t){var e;e=(t=et.getArgArr(t)).join(" "),et._txt&&(et._txt.text=e+"\n"+et._txt.text)}static getTimeStr(){return(new Date).toTimeString()}static traceTime(t){et.dTrace(et.getTimeStr()),et.dTrace(t)}static show(...t){var e;e=(t=et.getArgArr(t)).join(" "),et._txt&&(et._txt.text=e)}}class at{constructor(){}static getDis(t){var e,a,i,l;for(e=s.getClassNameByClz(t),at._objDic[e]||(at._objDic[e]=[]),l=(a=at._objDic[e]).length,i=0;i<l;i++)if(!a[i].parent)return a[i];return a.push(new t),a[a.length-1]}}at._objDic={};class it extends e.Sprite{constructor(t){super(),this._left=this.drawBlock(),this._right=this.drawBlock(),this._top=this.drawBlock(),this._bottom=this.drawBlock(),this._topLeft=this.drawBlock(),this._topRight=this.drawBlock(),this._bottomLeft=this.drawBlock(),this._bottomRight=this.drawBlock(),this._lastPoint=new e.Point,this._type=3,this.addChild(this._box=this.drawBorder(0,0,16711680)),this.addChild(this._left),this.addChild(this._right),this.addChild(this._top),this.addChild(this._bottom),this.addChild(this._topLeft),this.addChild(this._topRight),this.addChild(this._bottomLeft),this.addChild(this._bottomRight),this.on(e.Event.MOUSE_DOWN,this,this.onMouseDown),this.mouseThrough=!0}onMouseDown(t){this._currDir=t.target,t.nativeEvent.shiftKey&&this.initFixScale(),this._currDir!=this&&(this._lastPoint.x=e.Laya.stage.mouseX,this._lastPoint.y=e.Laya.stage.mouseY,e.Laya.stage.on(e.Event.MOUSE_MOVE,this,this.onMouseMove),e.Laya.stage.on(e.Event.MOUSE_UP,this,this.onMouseUp),t.stopPropagation())}onMouseUp(t){e.Laya.stage.off(e.Event.MOUSE_MOVE,this,this.onMouseMove),e.Laya.stage.off(e.Event.MOUSE_UP,this,this.onMouseUp)}initFixScale(){this.fixScale=this._target.height/this._target.width}onMouseMove(t){var a=(e.Laya.stage.mouseX-this._lastPoint.x)/1,i=(e.Laya.stage.mouseY-this._lastPoint.y)/1,s=!1;if(t.nativeEvent.shiftKey)switch(this.fixScale<0&&this.initFixScale(),a*this.fixScale,i/this.fixScale,s=!0,this._currDir){case this._topLeft:case this._bottomLeft:this._currDir=this._left;break;case this._topRight:case this._bottomRight:this._currDir=this._right}if(0!=a||0!=i){this._lastPoint.x+=1*a,this._lastPoint.y+=1*i;var l=a/this._target.scaleX,r=i/this._target.scaleY;this._currDir==this._left?(this._target.x+=a,this._target.width-=l,s&&(this._target.height=this._target.width*this.fixScale)):this._currDir==this._right?(this._target.width+=l,s&&(this._target.height=this._target.width*this.fixScale)):this._currDir==this._top?(this._target.y+=i,this._target.height-=r,s&&(this._target.width=this._target.height/this.fixScale)):this._currDir==this._bottom?(this._target.height+=r,s&&(this._target.width=this._target.height/this.fixScale)):this._currDir==this._topLeft?(this._target.x+=a,this._target.y+=i,this._target.width-=l,this._target.height-=r):this._currDir==this._topRight?(this._target.y+=i,this._target.width+=l,this._target.height-=r):this._currDir==this._bottomLeft?(this._target.x+=a,this._target.width-=l,this._target.height+=r):this._currDir==this._bottomRight&&(this._target.width+=l,this._target.height+=r),this._target.width<1&&(this._target.width=1),this._target.height<1&&(this._target.height=1),this._target.width=Math.round(this._target.width),this._target.x=Math.round(this._target.x),this._target.y=Math.round(this._target.y),this._target.height=Math.round(this._target.height),this.refresh()}}drawBorder(t,a,i,s=1){var l=new e.Sprite,r=l.graphics;return r.clear(),r.drawRect(0,0,t,a,null,"#"+i),l}drawBlock(){var t=new e.Sprite,a=t.graphics;return a.clear(),t.width=it.BLOCK_WIDTH,t.height=it.BLOCK_WIDTH,a.drawRect(.5*-it.BLOCK_WIDTH,.5*-it.BLOCK_WIDTH,it.BLOCK_WIDTH,it.BLOCK_WIDTH,"#ffffff","#ff0000",1),t.mouseEnabled=!0,t.mouseThrough=!0,t}setTarget(t){this._target=t,this.refresh()}refresh(){this.changePoint(),this.changeSize()}changePoint(){var t=this._target.localToGlobal(new e.Point),a=this.parent.globalToLocal(t);this.x=a.x,this.y=a.y}changeSize(){var t=this._target.width*this._target.scaleX,e=this._target.height*this._target.scaleY;console.log("change size"),this.rotation=this._target.rotation,this._box.width==t&&this._box.height==e||(this._box.graphics.clear(),this._box.graphics.drawRect(0,0,Math.abs(t),Math.abs(e),null,"#ff0000"),this._box.size(t,e),this.size(t,e),this._box.scaleX=Math.abs(this._box.scaleX)*(this._target.scaleX>0?1:-1),this._box.scaleY=Math.abs(this._box.scaleY)*(this._target.scaleY>0?1:-1),this._left.x=0,this._left.y=.5*e,this._right.x=t,this._right.y=.5*e,this._top.x=.5*t,this._top.y=0,this._bottom.x=.5*t,this._bottom.y=e,this._topLeft.x=this._topLeft.y=0,this._topRight.x=t,this._topRight.y=0,this._bottomLeft.x=0,this._bottomLeft.y=e,this._bottomRight.x=t,this._bottomRight.y=e)}}it.BLOCK_WIDTH=6;class st{static removeNoDisplayKeys(t){var e;for(e=t.length-1;e>=0;e--)st.noDisplayKeys[t[e]]&&t.splice(e,1)}static getClassCount(t){return st.countDic[t]}static addClassCount(t){st.countDic[t]?st.countDic[t]=st.countDic[t]+1:st.countDic[t]=1}static init(){if(!st._inited){st._inited=!0;x.hook(Node,"call",null,(function(t){st.classCreated(t)})),st.handlerO={},st.handlerO.get=function(t,e,a){return console.log("get",t,e,a),Reflect.get(t,e,a)},st.handlerO.set=function(t,e,a,i){return console.log("set",t,e,a,i),Reflect.set(t,e,a,i)}}}static classCreated(t,e=null){var a,i;st.fromMe||(a=s.getClassName(t),st.addClassCount(a),st.addClassCount(st.ALL),g.idObj(t),((i=st.hookClassDic[a])||(st.profileClass(t.constructor),i=st.hookClassDic[a]))&&st.hookObj2(t,i))}static hookObj(t,e){var a=st.handlerO;new Proxy(t,a)}static hookObj2(t,e){var a,i;for(i=e.length,a=0;a<i;a++)st.hookVar(t,e[a])}static profileClass(t){var e;e=s.getClassName(t),st.fromMe=!0;var a,l,r=new t;for(st.fromMe=!1,a=s.getObjectDisplayAbleKeys(r),l=(a=i.getNoSameArr(a)).length-1;l>=0;l--)r[a[l]]instanceof Function&&a.splice(l,1);a.length,st.removeNoDisplayKeys(a),st.hookClassDic[e]=a}static hookPrototype(t,e){console.log("hook:",e);try{st.hookVar(t,e)}catch(t){console.log("fail",e)}}static reportCall(t,e,a){var i,l;g.idObj(t),i=g.getObjID(t),l=s.getClassName(t),st.recordInfo(l,e,a,i),st.recordInfo(st.ALL,e,a,i)}static recordInfo(t,e,a,i){var s,l,r;st.infoDic[t]||(st.infoDic[t]={}),(s=st.infoDic[t])[e]||(s[e]={}),(l=s[e])[a]||(l[a]={}),(r=l[a])[i]?r[i]=r[i]+1:(r[i]=1,r.objCount?r.objCount=r.objCount+1:r.objCount=1),r.count?r.count=r.count+1:r.count=1}static showInfo(){var t,e,a,i,s,l,r;for(s in t={},e={},a=[],i=[],st.infoDic){var n,o;for(l in n=st.infoDic[s],t[s]=o={},n){var h,d;for(r in h=n[l],o[l]=d={},h){var c,b;(c=h[r]).rate=c.objCount/st.getClassCount(s),d[r]=c.rate,e[b=s+"_"+l+"_"+r]=c.rate,s==st.ALL&&("get"==r?a.push([b,c.rate,c.count]):i.push([b,c.rate,c.count]))}}}console.log(st.infoDic),console.log(st.countDic),console.log(t),console.log(e),console.log("nodeCount:",st.getClassCount(st.ALL)),console.log("sort by rate"),st.showStaticInfo(a,i,"1"),console.log("sort by count"),st.showStaticInfo(a,i,"2")}static showStaticInfo(t,e,a){console.log("get:"),st.showStaticArray(t,a),console.log("set:"),st.showStaticArray(e,a)}static showStaticArray(t,a="1"){var i,s,l;for(t.sort(e.MathUtil.sortByKey(a,!0,!0)),s=t.length,i=0;i<s;i++)l=t[i],console.log(l[0],Math.floor(100*l[1]),l[2])}static hookVar(t,e,a=null,i=null){a||(a=[]),i||(i=[]);var l,r,n=t;r=s.getOwnPropertyDescriptor(t,e);var o={},mSet=function(t){l=t},mGet=function(){return l};for(i.push((function(){return st.reportCall(this,e,"get"),l})),a.push((function(t){st.reportCall(this,e,"set")}));!r&&t.__proto__;)t=t.__proto__,r=s.getOwnPropertyDescriptor(t,e);r&&(o.set=r.set?r.set:mSet,o.get=r.get?r.get:mGet,r.get||(l=n[e]),o.enumerable=r.enumerable,a.push(o.set),i.push(o.get),x.hookFuns(o,"set",a),x.hookFuns(o,"get",i,i.length-1),s.defineProperty(n,e,o)),r||(o.set=mSet,o.get=mGet,l=n[e],a.push(o.set),i.push(o.get),x.hookFuns(o,"set",a),x.hookFuns(o,"get",i,i.length-1),s.defineProperty(n,e,o))}}st._inited=!1,st.noDisplayKeys={conchModel:!0},st.ALL="ALL",st.countDic={},st.fromMe=!1,st.hookClassDic={},st.infoDic={};class lt{constructor(){this.meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"}}static getJsonString(t,e=!0,a="\n",i=0,s=4){var l,r,n,o,h,d,c,b,u="";for(r in u=lt.getEmptyStr(i*s),l={},o=[],t)o.push(r),n=t[r],lt.singleLineKey[r]?l[r]=lt.getValueStr(n,!0,a,i+1,s):l[r]=lt.getValueStr(n,e,a,i+1,s);for(d=o.length,o.sort(),o=o.reverse(),c=lt.getEmptyStr((i+1)*s),e&&(a="",u="",c=""),b=[],h=0;h<d;h++)r=o[h],b.push(c+lt.wrapValue(r)+":"+l[r]);return"{"+a+b.join(","+a)+a+u+"}"}static wrapValue(t,e='"'){return e+t+e}static getArrStr(t,e=!0,a="\n",i=0,s=4){var l,r,n;for(r=t.length,n=[],l=0;l<r;l++)n.push(lt.getValueStr(t[l],e,a,i+1,s));var o="";return o=lt.getEmptyStr((i+1)*s),e&&(a="",o=""),"["+a+o+n.join(","+a+o)+"]"}static quote(t){return lt.escapable.lastIndex=0,lt.escapable.test(t)?'"'+t.replace(lt.escapable,(function(t){var e=this.meta[t];return"string"==typeof e?e:"\\u"+("0000"+t.charCodeAt(0).toString(16)).slice(-4)}))+'"':'"'+t+'"'}static getValueStr(t,e=!0,a="\n",i=0,s=0){return"string"==typeof t?lt.quote(t):null==t?"null":"number"==typeof t||"number"==typeof t||t instanceof Boolean?t:t instanceof Array?lt.getArrStr(t,e,a,i,s):"object"==typeof t?lt.getJsonString(t,e,a,i,s):t}static getEmptyStr(t){if(!lt.emptyDic.hasOwnProperty(t)){var e,a,i;for(a=t,i="",e=0;e<a;e++)i+=" ";lt.emptyDic[t]=i}return lt.emptyDic[t]}}lt.singleLineKey={props:!0},lt.escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,lt.emptyDic={};class rt{constructor(){}static analyseNode(t){var a,l,r,n,o,h;for(N.showDisBound(t,!0),a=t,i.clearObj(rt.infoO),i.clearObj(rt.nodeO),i.clearObj(rt.hitO),l=[];t;)g.idObj(t),rt.nodeO[g.getObjID(t)]=t,l.push(t),t=t.parent;for(rt.check(e.Laya.stage,e.Laya.stage.mouseX,e.Laya.stage.mouseY,null),rt.hitO[g.getObjID(a)]?(console.log("can hit"),r="can hit"):(console.log("can't hit"),r="can't hit"),o=(l=l.reverse()).length,h=["[分析对象]:"+s.getNodeClassAndName(a)+":"+r],n=0;n<o;n++)t=l[n],rt.hitO[g.getObjID(t)]?(console.log("can hit:",s.getNodeClassAndName(t)),console.log("原因:",rt.infoO[g.getObjID(t)]),h.push("can hit: "+s.getNodeClassAndName(t)),h.push("原因: "+rt.infoO[g.getObjID(t)])):(console.log("can't hit:"+s.getNodeClassAndName(t)),console.log("原因:",rt.infoO[g.getObjID(t)]?rt.infoO[g.getObjID(t)]:"鼠标事件在父级已停止派发"),h.push("can't hit: "+s.getNodeClassAndName(t)),h.push("原因: "+(rt.infoO[g.getObjID(t)]?rt.infoO[g.getObjID(t)]:"鼠标事件在父级已停止派发")));h.join("\n")}static check(t,a,i,l){var r;g.idObj(t),r=rt.nodeO[g.getObjID(t)],rt._point.setTo(a,i),t.fromParentPoint(rt._point),a=rt._point.x,i=rt._point.y;var n,o,h,d,c,b,u=t.scrollRect;if(u){rt._rect.setTo(u.x,u.y,u.width,u.height);var Z=rt._rect.contains(a,i);if(!Z)return r&&(rt.infoO[g.getObjID(t)]="scrollRect没有包含鼠标"+rt._rect.toString()+":"+a+","+i),!1}for(o=(h=t._children).length,c=null,n=0;n<o;n++)if(d=h[n],g.idObj(d),rt.nodeO[g.getObjID(d)]){c=d;break}b=!!c;if(t.hitTestPrior&&!t.mouseThrough&&!rt.hitTest(t,a,i))return rt.infoO[g.getObjID(t)]="hitTestPrior=true,宽高区域不包含鼠标::"+a+","+i+" size:"+t.width+","+t.height,!1;for(n=t._children.length-1;n>-1;n--)if((d=t._children[n])==c&&(c.mouseEnabled||(rt.infoO[g.getObjID(c)]="mouseEnabled=false"),c.visible||(rt.infoO[g.getObjID(c)]="visible=false"),b=!1),d.mouseEnabled&&d.visible){if(rt.check(d,a,i,l))return rt.hitO[g.getObjID(t)]=!0,rt.infoO[g.getObjID(t)]="子对象被击中",d==c?rt.infoO[g.getObjID(t)]="子对象被击中,击中对象在分析链中":(rt.infoO[g.getObjID(t)]="子对象被击中,击中对象不在分析链中",b&&(rt.infoO[g.getObjID(c)]="被兄弟节点挡住,兄弟节点信息:"+s.getNodeClassAndName(d)+","+d.getBounds().toString(),N.showDisBound(d,!1,"#ffff00"))),!0;d==c&&(b=!1)}var m,G=new e.Rectangle;if(m=t.getGraphicBounds().contains(a,i),t.width>0&&t.height>0){var W=rt._rect;t.mouseThrough?(Z=m,G.copyFrom(t.getGraphicBounds())):(t.hitArea?W=t.hitArea:W.setTo(0,0,t.width,t.height),G.copyFrom(W),Z=W.contains(a,i)),Z&&(rt.hitO[g.getObjID(t)]=!0)}return rt.infoO[g.getObjID(t)]=Z?"自身区域被击中":m?"子对象未包含鼠标,实际绘图区域包含鼠标,设置的宽高区域不包含鼠标::"+a+","+i+" hitRec:"+G.toString()+" graphicBounds:"+t.getGraphicBounds().toString()+",设置mouseThrough=true或将宽高设置到实际绘图区域可解决问题":"子对象未包含鼠标,实际绘图区域不包含鼠标,设置的宽高区域不包含鼠标::"+a+","+i+" hitRec:"+G.toString()+" graphicBounds:"+t.getGraphicBounds().toString(),Z}static hitTest(t,a,i){var s=!1;if(t.hitArea instanceof e.HitArea)return e.MouseManager.instance.hitTest(t,a,i);if(t.width>0&&t.height>0||t.mouseThrough||t.hitArea){var l=rt._rect;t.mouseThrough?s=t.getGraphicBounds().contains(a,i):(t.hitArea?l=t.hitArea:l.setTo(0,0,t.width,t.height),s=l.contains(a,i))}return s}}rt.infoO={},rt.nodeO={},rt.hitO={},rt._matrix=new e.Matrix,rt._point=new e.Point,rt._rect=new e.Rectangle,N.analyseMouseHit=()=>{N.target&&rt.analyseNode(N.target)};class nt{constructor(){}static getCachedResList(){return nt.getWebGlResList()}static getWebGlResList(){return[]}static getCanvasResList(){var t,a;return t={},a=e.Loader.loadedMap,nt.collectPics(a,t),nt.getArrFromDic(t)}static getArrFromDic(t){var e,a;for(e in a=[],t)a.push(e);return a}static collectPics(t,e){var a,i;if(t)for(a in t){if(i=t[a])if(i.bitmap&&i.bitmap.src)i.bitmap.src.indexOf("data:image/png;base64")<0&&(e[i.bitmap.src]=!0)}}}class ot{constructor(){this._objDic={}}static get I(){return ot._instance||(ot._instance=new ot),ot._instance}static set I(t){ot._instance=t}getArr(t){var e;return(e=this.getTypeDic("Array"))[t]||(e[t]=[]),e[t]}getObject(t){var e;return(e=this.getTypeDic("Object"))[t]||(e[t]={}),e[t]}getByClass(t,e,a){var i;return(i=this.getTypeDic(e))[t]||(i[t]=new a),i[t]}getTypeDic(t){return this._objDic[t]||(this._objDic[t]={}),this._objDic[t]}}class ht{constructor(){}static getTime(t,a=!0){var i,s;return ht.timeDic[t]||(ht.timeDic[t]=0),s=(i=e.Browser.now())-ht.timeDic[t],ht.timeDic[t]=i,s}static runAllCallLater(){var t;ht._deep,ht._deep++;for(var a=(t=e.Laya.timer)._laters,i=0,s=a.length-1;i<=s;i++){var l=a[i];l&&(null!==l.method&&l.run(!1),t._recoverHandler(l)),i===s&&(s=a.length-1)}a.length=0,ht._deep--}}ht.timeDic={},ht._deep=0;class dt{constructor(){}static now(){return 1!=dt._timeRate?dt.getRatedNow():Date.now()}static getRatedNow(){return(dt.getNow()-dt._startTime)*dt._timeRate+dt._startTime}static getNow(){return Date.now()}static setTimeRate(t){null==dt._browerNow&&(dt._browerNow=e.Browser.now),dt._startTime=dt.getNow(),dt._timeRate=t,1!=t?e.Browser.now=dt.now:null!=dt._browerNow&&(e.Browser.now=dt._browerNow)}static recoverRate(){dt.setTimeRate(1)}}dt._timeRate=1;class ct{constructor(){}static getTouchIDs(t){var e,a,i;for(e=[],i=t.length,a=0;a<i;a++)e.push(t[a].identifier||0);return e}static traceTouchIDs(t,e){et.dTrace(t+":"+ct.getTouchIDs(e).join(","))}}class bt{constructor(){}static getUVByRec(t,e,a,i){return[t,e,t+a,e,t+a,e+i,t,e+i]}static getRecFromUV(t){return new e.Rectangle(t[0],t[1],t[2]-t[0],t[5]-t[1])}static isUVRight(t){return t[0]==t[6]&&(t[1]==t[3]&&(t[2]==t[4]&&t[5]==t[7]))}static getTextureRec(t){var e;return(e=bt.getRecFromUV(t.uv)).x*=t.bitmap.width,e.y*=t.bitmap.height,e.width*=t.bitmap.width,e.height*=t.bitmap.height,e}}class ut{constructor(){}static analyseTarget(t){var a,i;a=t.displayedInStage,i=Y.getGRec(t);var s,l,r,n,o,h=new e.Rectangle;h.setTo(0,0,e.Laya.stage.width,e.Laya.stage.height),s=(l=h.intersection(i)).width>0&&l.height>0,r=Y.getGAlpha(t),o="",o+="isInstage:"+a+"\n",o+="isInVisibleRec:"+s+"\n",o+="gVisible:"+(n=Y.getGVisible(t))+"\n",o+="gAlpha:"+r+"\n",a&&s&&n&&r>0&&(ut.anlyseRecVisible(t),o+="coverRate:"+ut.coverRate+"\n",ut._coverList.length>0&&e.Laya.timer.once(1e3,null,ut.showListLater)),console.log(o)}static showListLater(){}static isCoverByBrother(t){var e,a=t.parent;a&&(a._children.indexOf(t)<0||(e=a.getSelfBounds()).width<=0||e.height)}static anlyseRecVisible(t){ut.isNodeWalked=!1,ut._analyseTarget=t,ut.mainCanvas||(ut.mainCanvas=P.createCanvas(e.Laya.stage.width,e.Laya.stage.height)),P.clearCanvas(ut.mainCanvas),ut.tColor=1,ut.resetCoverList(),W.walkTargetEX(e.Laya.stage,ut.recVisibleWalker,null,ut.filterFun),ut.isTarRecOK?ut.coverRate=P.getDifferRate(ut.preImageData,ut.tarImageData):ut.coverRate=0,console.log("coverRate:",ut.coverRate)}static getRecArea(t){return t.width*t.height}static addCoverNode(t,e){var a;(a={}).path=t,a.label=s.getNodeClassAndName(t)+":"+e,a.coverRate=e,ut._coverList.push(a),console.log("coverByNode:",t,e)}static resetCoverList(){ut._coverList.length=0}static recVisibleWalker(t){var e,a;t==ut._analyseTarget?(ut.isNodeWalked=!0,ut.tarRec.copyFrom(Y.getGRec(t)),console.log("tarRec:",ut.tarRec.toString()),ut.tarRec.width>0&&ut.tarRec.height>0?(ut.isTarRecOK=!0,ut.tColor++,P.fillCanvasRec(ut.mainCanvas,ut.tarRec,$.toHexColor(ut.tColor)),ut.preImageData=P.getImageDataFromCanvasByRec(ut.mainCanvas,ut.tarRec),ut.tarImageData=P.getImageDataFromCanvasByRec(ut.mainCanvas,ut.tarRec)):console.log("tarRec Not OK:",ut.tarRec)):ut.isTarRecOK&&(e=Y.getGRec(t),ut.interRec=ut.tarRec.intersection(e,ut.interRec),ut.interRec&&ut.interRec.width>0&&ut.interRec.height>0&&(ut.tColor++,P.fillCanvasRec(ut.mainCanvas,e,$.toHexColor(ut.tColor)),ut.tImageData=P.getImageDataFromCanvasByRec(ut.mainCanvas,ut.tarRec),a=P.getDifferRate(ut.preImageData,ut.tImageData),ut.preImageData=ut.tImageData,ut.addCoverNode(t,a)))}static filterFun(t){return 0!=t.visible&&(!(t.alpha<0)&&!p.I.isDebugItem(t))}}ut.tarRec=new e.Rectangle,ut.interRec=new e.Rectangle,ut._coverList=[];class Zt{static parse(t,e=!0){var a={};e&&(a.Name=t.localName);var i=t.children.length,s=[],l={};a.c=l,a.cList=s;for(var r=0;r<i;r++){var n,o,h=t.children[r],d=h.localName;n=Zt.parse(h,!0),s.push(n),l[d]?"array"==Zt.getTypeof(l[d])?l[d].push(n):l[d]=[l[d],n]:Zt.isArray(d)?l[d]=[n]:l[d]=n}if(o=0,t.attributes){o=t.attributes.length;var c={};for(a.p=c,r=0;r<o;r++)c[t.attributes[r].name.toString()]=String(t.attributes[r].nodeValue)}return 0==i&&0==o&&(a=""),a}static getArr(t){return t?"array"==Zt.getTypeof(t)?t:[t]:[]}static get arrays(){return Zt._arrays||(Zt._arrays=[]),Zt._arrays}static set arrays(t){Zt._arrays=t}static isArray(t){for(var e=Zt._arrays?Zt._arrays.length:0,a=0;a<e;a++)if(t==Zt._arrays[a])return!0;return!1}static getTypeof(t){return"object"==typeof t?null==t.length?"object":"number"==typeof t.length?"array":"object":typeof t}}class mt{static parse(t,e=!0){var a={};e&&(a.Name=t.localName);var i=t[mt.ChildrenSign]?t[mt.ChildrenSign].length:0,s=[],l={};a.c=l,a.cList=s;for(var r=0;r<i;r++){var n,o,h=t[mt.ChildrenSign][r],d=h.localName;d&&(n=mt.parse(h,!0),s.push(n),l[d]?"array"==mt.getTypeof(l[d])?l[d].push(n):l[d]=[l[d],n]:mt.isArray(d)?l[d]=[n]:l[d]=n)}if(o=0,t.attributes){o=t.attributes.length;var c={};for(a.p=c,r=0;r<o;r++)c[t.attributes[r].name.toString()]=String(t.attributes[r].nodeValue)}return a}static getArr(t){return t?"array"==mt.getTypeof(t)?t:[t]:[]}static get arrays(){return mt._arrays||(mt._arrays=[]),mt._arrays}static set arrays(t){mt._arrays=t}static isArray(t){for(var e=mt._arrays?mt._arrays.length:0,a=0;a<e;a++)if(t==mt._arrays[a])return!0;return!1}static getTypeof(t){return"object"==typeof t?null==t.length?"object":"number"==typeof t.length?"array":"object":typeof t}}mt.ChildrenSign="childNodes";class Gt extends e.Sprite{constructor(){super(),this.drawMe()}drawMe(){var t;(t=this.graphics).clear(),t.drawLine(0,0,-1,-1,"#ff0000"),t.drawLine(0,0,1,-1,"#ff0000")}}class Wt extends e.Sprite{constructor(t){super(),this._color="#ffffff"}set height(t){super.height=t,this.changeSize()}set width(t){super.width=t,this.changeSize()}setColor(t){this._color=t,this.reRender()}changeSize(){this.reRender()}reRender(){var t=this.graphics;t.clear(),t.drawRect(0,0,this.width,this.height,this._color)}record(){this.preX=this.x,this.preY=this.y}getDx(){return this.x-this.preX}getDy(){return this.y-this.preY}}class pt extends e.Input{constructor(){super(),this.bgColor="#11ff00"}}class gt{constructor(){this.createInfo={}}static get I(){return gt._instance||(gt._instance=new gt),gt._instance}static set I(t){gt._instance=t}hookClass(t){if(!gt.isInited){gt.isInited=!0;x.hook(t,"call",(function(e){this.classCreated(e,t)}))}}classCreated(t,e){var a;a=s.getNodeClassAndName(t);var i,l=0;for(i=t;i&&i!=e;)i=i.prototype,l++;gt.I.createInfo[a]||(gt.I.createInfo[a]=0),gt.I.createInfo[a]=gt.I.createInfo[a]+1,G.run(a,l+6)}getClassCreateInfo(t){var e;return e=s.getClassName(t),G.getRunInfo(e)}}gt.isInited=!1;class Rt{constructor(){}static hookFun(t,e){if(t&&!t.timeHooked){var a;Rt.HookID++,a=s.getNodeClassAndName(t)+"."+e+"():"+Rt.HookID;t.timeHooked=!0,x.hook(t,e,(function(...t){Rt.funBegin(a)}),(function(...t){Rt.funEnd(a)}))}}static funBegin(t){Rt.funPre[t]=e.Browser.now()}static funEnd(t){Rt.funPre[t]||(Rt.funPre[t]=0),Rt.counter.add(t,e.Browser.now()-Rt.funPre[t])}static fresh(){Rt.funEnd(Rt.TotalSign),Rt.counter.record(),Rt.funBegin(Rt.TotalSign)}}Rt.HookID=1,Rt.counter=new r,Rt.funPre={},Rt.TotalSign="TotalSign";class Xt extends e.LoaderManager{constructor(){super()}static init(){Xt.isInited||(Xt.isInited=!0,e.Laya.loader=new Xt,e.Laya.loader.on(e.Event.ERROR,null,Xt.onFail),Xt.preFails=e.LocalStorage.getJSON(Xt.FailSign),Xt.preFails||(Xt.preFails={}))}static onFail(t){Xt.nowFails[t]=!0,e.LocalStorage.setJSON(Xt.FailSign,Xt.nowFails)}static resetFails(){Xt.nowFails={},e.LocalStorage.setJSON(Xt.FailSign,Xt.nowFails)}checkUrls(t){var e;e="string"==typeof t?t:t.url,Xt.preFails[e]&&Xt.enableFailDebugger}chekUrlList(t){var e,a;for(a=t.length,e=0;e<a;e++)this.checkUrls(t[e])}load(t,e=null,a=null,i=null,s=1,l=!0,r=null,n=!1,o=!1){return t instanceof Array?this.chekUrlList(t):this.checkUrls(t),super.load(t,e,a,i,s,l,r,n,o)}}Xt.preFails={},Xt.nowFails={},Xt.enableFailDebugger=!0,Xt.FailSign="LoadFailItems",Xt.isInited=!1;class Vt{constructor(){}static observe(t,e){}static unobserve(t,e){}static observeDiffer(t,e,a="obDiffer"){Vt.observe(t,(function(){L.differ(e,t,a)}))}}class yt{constructor(){this._sX=0,this._width=0}layout(){this.layoutFun(this._width,this._items,this.data,this._sX)}set items(t){this._items=t,this.calSize()}get items(){return this._items}set x(t){this._sX=t,this.changed()}get x(){return this._sX}set width(t){this._width=t,this.changed()}get width(){return this._width}changed(){e.Laya.timer.callLater(this,this.layout)}calSize(){var t,e,a,i;for(a=this.items[0],this._sX=a.x,i=this._sX+a.width,e=this.items.length,t=1;t<e;t++)a=this.items[t],this._sX>a.x&&(this._sX=a.x),i<a.x+a.width&&(i=a.x+a.width);this._width=i-this._sX}}class Yt{constructor(){}static sameWidth(t,e,a=null,i=0){var s,l,r,n,o,h=0;for(a&&a.dWidth&&(h=a.dWidth),s=(t-(e.length-1)*h)/e.length,o=i,n=e.length,r=0;r<n;r++)(l=e[r]).x=o,l.width=s,o+=h+s}static getSameWidthLayout(t,e){var a;return(a={}).dWidth=e,Yt.getLayouter(t,a,Yt.sameWidth)}static getLayouter(t,e,a){var i;return(i=new yt).items=t,i.data=e,i.layoutFun=a,i}static sameDis(t,e,a=null,i=0){var s,l,r,n,o;for(s=t,n=e.length,Yt.prepareForLayoutWidth(t,e),r=0;r<n;r++)s-=(l=e[r]).width;for(e.length>1&&(s/=e.length-1),o=i,n=e.length,r=0;r<n;r++)(l=e[r]).x=o,o+=s+l.width}static getSameDisLayout(t,e=!1){var a;if(a={},e){var i,s,l,r;for(s=t.length,r=0,i=0;i<s;i++)r+=(l=t[i]).width;for(r=l.x+l.width,i=0;i<s;i++)l=t[i],Yt.setItemRate(l,l.width/r)}return Yt.getLayouter(t,a,Yt.sameDis)}static fullFill(t,e,a=null,i=0){var s,l,r,n=0,o=0;for(a&&(a.dL&&(n=a.dL),a.dR&&(o=a.dR)),r=e.length,l=0;l<r;l++)(s=e[l]).x=i+n,s.width=t-n-o}static getFullFillLayout(t,e=0,a=0){var i;return(i={}).dL=e,i.dR=a,Yt.getLayouter(t,i,Yt.fullFill)}static fixPos(t,e,a=null,i=0){var s,l,r,n,o,h,d=0,c=[],b=!1;for(a&&(a.dLen&&(d=a.dLen),a.poss&&(c=a.poss),a.isRate&&(b=a.isRate)),r=c.length,o=null,l=0;l<r;l++)s=e[l],n=i+c[l],b&&(n=i+c[l]*t),s.x=n,o&&(o.width=s.x-d-o.x),o=s;(h=e[e.length-1]).width=i+t-d-h.x}static getFixPos(t,e=0,a=!1,i=null){var s,l,r,n,o,h,d;if(s={},o=(l=Yt.getLayouter(t,s,Yt.fixPos)).x,h=l.width,!i)for(i=[],n=t.length,r=0;r<n;r++)d=t[r].x-o,a&&(d/=h),i.push(d);return s.dLen=e,s.poss=i,s.isRate=a,l}static clearItemsRelativeInfo(t){var e,a;for(a=t.length,e=0;e<a;e++)Yt.clearItemRelativeInfo(t[e])}static clearItemRelativeInfo(t){t.left="NaN",t.right="NaN"}static prepareForLayoutWidth(t,e){var a,i;for(i=e.length,a=0;a<i;a++)Yt.prepareItemForLayoutWidth(t,e[a])}static getSumWidth(t){var e,a,i;for(e=0,i=t.length,a=0;a<i;a++)e+=t[a].width;return e}static prepareItemForLayoutWidth(t,e){Yt.getItemRate(e)>0&&(e.width=t*Yt.getItemRate(e))}static setItemRate(t,e){t[Yt.RateSign]=e}static getItemRate(t){return t[Yt.RateSign]?t[Yt.RateSign]:-1}static setItemFreeSize(t,e=!0){t[Yt.FreeSizeSign]=e}static isItemFreeSize(t){return t[Yt.FreeSizeSign]}static lockedDis(t,e,a=null,i=0){var s,l,r,n,o,h,d,c;for(s=a.dists,l=a.sumDis,Yt.prepareForLayoutWidth(t,e),d=t-l-Yt.getSumWidth(e),(c=Yt.getFreeItem(e))&&(c.width+=d),(h=e[0]).x=i,n=e.length,r=1;r<n;r++)(o=e[r]).x=h.x+h.width+s[r-1],h=o}static getFreeItem(t){var e,a;for(a=t.length,e=0;e<a;e++)if(Yt.isItemFreeSize(t[e]))return t[e];return null}static getLockedDis(t){var e,a,i,s,l,r,n,o;for(e={},n=0,r=t[0],a=[],s=t.length,i=1;i<s;i++)o=(l=t[i]).x-r.x-r.width,a.push(o),n+=o,r=l;return e.dists=a,e.sumDis=n,Yt.getLayouter(t,e,Yt.lockedDis)}}Yt.RateSign="layoutRate",Yt.FreeSizeSign="layoutFreeSize";class Lt extends e.Sprite{constructor(t){super()}set width(t){super.width=t,this.changeSize()}set height(t){super.height=t,this.changeSize()}changeSize(){var t=this.graphics;t.clear(),t.drawRect(0,0,this.width,this.height,"#33c5f5")}record(){this.preX=this.x,this.preY=this.y}getDx(){return this.x-this.preX}getDy(){return this.y-this.preY}}class xt{constructor(){}static init(){xt._up||(xt._up=new Lt("T"),xt._up.height=xt.barWidth,xt._up.type=xt.Horizon,xt._down=new Lt("T"),xt._down.height=xt.barWidth,xt._down.type=xt.Horizon,xt._left=new Lt("R"),xt._left.width=xt.barWidth,xt._left.type=xt.Vertical,xt._right=new Lt("R"),xt._right.width=xt.barWidth,xt._right.type=xt.Vertical,xt._barList=[xt._up,xt._down,xt._left,xt._right],xt.addEvent())}static stageDown(t){var e;e=t.target,xt._tar&&h.isInTree(xt._tar,e)||xt.clear()}static clear(){xt._tar=null,e.Laya.stage.off(e.Event.MOUSE_UP,null,xt.stageDown),h.removeItems(xt._barList),xt.clearDragEvents()}static addEvent(){var t,a;for(a=xt._barList.length,t=0;t<a;t++)xt._barList[t].on(e.Event.MOUSE_DOWN,null,xt.barDown)}static barDown(t){var a;(xt.clearDragEvents(),xt.tBar=t.target,xt.tBar)&&(a=new e.Rectangle,xt.tBar.type==xt.Horizon?(a.x=xt.tBar.x,a.width=0,a.y=xt.tBar.y-200,a.height=400):(a.x=xt.tBar.x-200,a.width=400,a.y=0,a.height=0),xt.tBar.record(),xt.tBar.startDrag(a),xt.tBar.on(e.Event.DRAG_MOVE,null,xt.draging),xt.tBar.on(e.Event.DRAG_END,null,xt.dragEnd))}static draging(t){if(console.log("draging"),xt.tBar&&xt._tar){switch(xt.tBar){case xt._left:xt._tar.x+=xt.tBar.getDx(),xt._tar.width-=xt.tBar.getDx(),xt._up.width-=xt.tBar.getDx(),xt._down.width-=xt.tBar.getDx(),xt._right.x-=xt.tBar.getDx(),xt.tBar.x-=xt.tBar.getDx();break;case xt._right:xt._tar.width+=xt.tBar.getDx(),xt._up.width+=xt.tBar.getDx(),xt._down.width+=xt.tBar.getDx();break;case xt._up:xt._tar.y+=xt.tBar.getDy(),xt._tar.height-=xt.tBar.getDy(),xt._right.height-=xt.tBar.getDy(),xt._left.height-=xt.tBar.getDy(),xt._down.y-=xt.tBar.getDy(),xt.tBar.y-=xt.tBar.getDy();break;case xt._down:xt._tar.height+=xt.tBar.getDy(),xt._right.height+=xt.tBar.getDy(),xt._left.height+=xt.tBar.getDy()}xt.tBar.record()}}static dragEnd(t){console.log("dragEnd"),xt.clearDragEvents(),xt.updates()}static clearDragEvents(){xt.tBar&&(xt.tBar.off(e.Event.DRAG_MOVE,null,xt.draging),xt.tBar.off(e.Event.DRAG_END,null,xt.dragEnd))}static setUp(t,a=!1){a&&t==xt._tar||(h.removeItems(xt._barList),(xt._tar!=t||(xt._tar=null,xt.clearDragEvents(),a))&&(xt._tar=t,xt.updates(),h.addItems(xt._barList,t),e.Laya.stage.off(e.Event.MOUSE_UP,null,xt.stageDown),e.Laya.stage.on(e.Event.MOUSE_UP,null,xt.stageDown)))}static updates(){var t,a;(t=xt._tar)&&(a=new e.Rectangle(0,0,t.width,t.height),xt._up.x=a.x,xt._up.y=a.y,xt._up.width=a.width,xt._down.x=a.x,xt._down.y=a.y+a.height-xt.barWidth,xt._down.width=a.width,xt._left.x=a.x,xt._left.y=a.y,xt._left.height=a.height,xt._right.x=a.x+a.width-xt.barWidth,xt._right.y=a.y,xt._right.height=a.height)}}xt.Side=2,xt.Vertical=1,xt.Horizon=0,xt.barWidth=2,xt.useGetBounds=!1,h.resizeHandler=xt.setUp;class vt{constructor(){}static setViewScale(t){t.scaleX=t.scaleY=vt.PanelScale}}vt.PanelScale=e.Browser.onPC?1:e.Browser.pixelRatio,t.Arrow=Gt,t.ArrowLine=b,t.AtlasTools=C,t.AutoFillRec=Lt,t.AutoSizeRec=Wt,t.Axis=u,t.Base64Atlas=Q,t.Base64AtlasManager=K,t.Base64ImageTool=O,t.Base64Tool=f,t.ByteEx=I,t.CacheAnalyser=T,t.CallLaterTool=_,t.CanvasTools=P,t.ClassCreateHook=gt,t.ClassTool=s,t.ClickSelectTool=E,t.ColorTool=$,t.CommonTools=tt,t.CountTool=r,t.DButton=B,t.DInput=pt,t.DTrace=m,t.DebugConsts=F,t.DebugInfoLayer=p,t.DebugPanel=z,t.DebugTool=N,t.DebugTxt=et,t.DifferTool=L,t.DisControlTool=h,t.DisController=Z,t.DisEditor=class{constructor(){this.rec=new e.Sprite,this.rootContainer=new e.Sprite}setTarget(t){var a,i;this.tar=t,(a=this.rec.graphics).clear(),i=this.tar.getSelfBounds(),a.drawRect(i.x,i.y,i.width,i.height,null,"#00ff00"),this.createSameDisChain(),e.Laya.stage.addChild(this.rootContainer)}createSameDisChain(){var t,a,i;for(i=this.rec,t=this.tar;t&&t!=e.Laya.stage;)(a=new e.Sprite).addChild(i),a.x=t.x,a.y=t.y,a.scaleX=t.scaleX,a.scaleY=t.scaleY,a.rotation=t.rotation,a.scrollRect=t.scrollRect,i=a,t=t.parent;this.rootContainer.removeChildren(),this.rootContainer.addChild(i)}},t.DisPool=at,t.DisResizer=xt,t.DisplayHook=H,t.DivScripts=A,t.DragBox=it,t.FilterTool=class{constructor(){}static getArrByFilter(t,e){var a,i=t.length,s=[];for(a=0;a<i;a++)e(t[a])&&s.push(t[a]);return s}static getArr(t,e,a){var i,s=t.length,l=[];for(i=0;i<s;i++)t[i][e]==a&&l.push(t[i]);return l}},t.FunHook=x,t.FunctionTimeHook=Rt,t.GetSetProfile=st,t.IDTools=g,t.JSTools=j,t.JsonTool=lt,t.LayoutFuns=Yt,t.LayoutTools=class{constructor(){}static layoutToXCount(t,e=1,a=0,i=0,s=0,l=0){var r,n,o,h,d,c,b;for(c=0,b=0,r=s,n=l,d=t.length,h=0;h<d;h++)(o=t[h]).x=r,o.y=n,o.height>b&&(b=o.height),++c>=e?(c%=e,o.y+=b+i,b=0):r+=o.width+a}static layoutToWidth(t,e,a,i,s,l){var r,n,o,h,d;for(r=s,n=l,d=t.length,h=0;h<d;h++)r+(o=t[h]).width+a>e&&(r=s,n+=i+o.height),o.x=r,o.y=n,r+=a+o.width}},t.Layouter=yt,t.LoaderHook=Xt,t.MathTools=q,t.MouseEventAnalyser=rt,t.NodeConsts=V,t.NodeInfoPanel=X,t.NodeInfosItem=R,t.NodeRecInfo=k,t.NodeUtils=Y,t.Notice=U,t.ObjTimeCountTool=S,t.ObjectTools=i,t.Observer=Vt,t.ReCacheRecInfo=J,t.RecInfo=n,t.Rect=d,t.RenderAnalyser=y,t.RenderSpriteHook=M,t.ResTools=nt,t.RunProfile=G,t.SimpleResizer=o,t.SingleTool=ot,t.SpriteRenderHook=D,t.StringTool=a,t.StyleConsts=vt,t.TimeTool=ht,t.TimerControlTool=dt,t.TouchDebugTools=ct,t.TraceTool=l,t.UVTools=bt,t.ValueChanger=c,t.VarHook=v,t.VisibleAnalyser=ut,t.WalkTools=W,t.Watch=class{constructor(){}static watch(t,e,a){t.watch(e,a)}static unwatch(t,e,a){t.unwatch(e,a)}},t.Watcher=w,t.XML2Object=Zt,t.XML2ObjectNodejs=mt}(window.Laya=window.Laya||{},Laya);