sinzmise-cetastories 2.0.0-1731064238567 → 2.0.0-1731114112124

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. package/404/index.html +4033 -1
  2. package/about/index.html +4041 -1
  3. package/album/index.html +4050 -1
  4. package/archives/2021/12/index.html +3917 -1
  5. package/archives/2021/index.html +3917 -1
  6. package/archives/2022/12/index.html +3917 -1
  7. package/archives/2022/index.html +3917 -1
  8. package/archives/2023/01/index.html +4072 -1
  9. package/archives/2023/02/index.html +3917 -1
  10. package/archives/2023/03/index.html +4063 -1
  11. package/archives/2023/04/index.html +3992 -1
  12. package/archives/2023/07/index.html +4217 -1
  13. package/archives/2023/08/index.html +4067 -1
  14. package/archives/2023/09/index.html +3917 -1
  15. package/archives/2023/10/index.html +3917 -1
  16. package/archives/2023/11/index.html +3917 -1
  17. package/archives/2023/12/index.html +3918 -1
  18. package/archives/2023/index.html +4591 -1
  19. package/archives/2023/page/2/index.html +4572 -1
  20. package/archives/2023/page/3/index.html +3930 -1
  21. package/archives/2024/01/index.html +4142 -1
  22. package/archives/2024/02/index.html +3922 -1
  23. package/archives/2024/03/index.html +3916 -1
  24. package/archives/2024/04/index.html +3997 -1
  25. package/archives/2024/05/index.html +4065 -1
  26. package/archives/2024/06/index.html +3917 -1
  27. package/archives/2024/07/index.html +3917 -1
  28. package/archives/2024/08/index.html +3992 -1
  29. package/archives/2024/09/index.html +3917 -1
  30. package/archives/2024/10/index.html +3984 -1
  31. package/archives/2024/index.html +4576 -1
  32. package/archives/2024/page/2/index.html +4433 -1
  33. package/archives/index.html +4560 -1
  34. package/archives/page/2/index.html +4560 -1
  35. package/archives/page/3/index.html +4560 -1
  36. package/archives/page/4/index.html +4560 -1
  37. package/archives/page/5/index.html +4560 -1
  38. package/assets/algolia/algoliasearch.js +7182 -3
  39. package/assets/algolia/algoliasearchLite.js +4445 -3
  40. package/atom.xml +31 -31
  41. package/bbs/bbs.html +4012 -1
  42. package/bbs/bbs.js +12 -2
  43. package/bbs/index.html +4031 -1
  44. package/categories/index.html +4050 -1
  45. package/categories//344/270/252/344/272/272/345/260/217/350/256/260/index.html +4570 -1
  46. package/categories//344/270/252/344/272/272/345/260/217/350/256/260/page/2/index.html +4485 -1
  47. package/categories//346/255/214/346/233/262/346/224/266/351/233/206/index.html +3920 -1
  48. package/categories//346/270/270/346/210/217/347/233/270/345/205/263/index.html +4148 -1
  49. package/categories//347/253/231/347/202/271/346/212/230/350/205/276/index.html +4610 -1
  50. package/categories//347/253/231/347/202/271/346/212/230/350/205/276/page/2/index.html +4148 -1
  51. package/categories//351/241/271/347/233/256/346/212/230/350/205/276/index.html +4072 -1
  52. package/charts/index.html +4039 -1
  53. package/comments/index.html +4052 -1
  54. package/content.json +1 -0
  55. package/css/custom2.css +3 -2
  56. package/css/first.css +1868 -2
  57. package/css/pace/big-counter.css +39 -2
  58. package/css/pace/corner-indicator.css +72 -2
  59. package/css/pace/flash.css +76 -2
  60. package/css/pace/mac-osx.css +86 -2
  61. package/css/pace/pace.css +50 -2
  62. package/css/plane.css +59 -2
  63. package/css/style.css +8585 -2
  64. package/css/tags.css +3516 -2
  65. package/essay/index.html +4050 -1
  66. package/fcircle/index.html +4075 -1
  67. package/games +61 -19
  68. package/index.html +4717 -1
  69. package/js/app.js +1341 -2
  70. package/js/autoload.js +62 -2
  71. package/js/ceta/fancybox.css +2 -2
  72. package/js/ceta/fancybox.umd.js +2 -2
  73. package/js/ceta/iconfontInkss.js +1 -2
  74. package/js/ceta/message.css +6 -2
  75. package/js/ceta/message.js +6 -2
  76. package/js/clock.js +1 -2
  77. package/js/kslink.js +38 -2
  78. package/js/newyear.js +76 -2
  79. package/js/plane.js +2200 -2
  80. package/js/plugins/aplayer.js +186 -2
  81. package/js/plugins/parallax.js +191 -2
  82. package/js/plugins/rightMenus.js +623 -2
  83. package/js/plugins/tags/contributors.js +92 -2
  84. package/js/plugins/tags/friends.js +93 -2
  85. package/js/plugins/tags/sites.js +96 -2
  86. package/js/search/algolia.js +239 -2
  87. package/js/search/hexo.js +195 -2
  88. package/js/search/meilisearch.js +220 -2
  89. package/js/txmap.js +248 -2
  90. package/link/index.html +6180 -1
  91. package/load.html +294 -1
  92. package/music/index.html +4033 -1
  93. package/package.json +1 -1
  94. package/page/2/index.html +4578 -1
  95. package/page/3/index.html +4575 -1
  96. package/page/4/index.html +4572 -1
  97. package/page/5/index.html +3924 -1
  98. package/posts/10021/index.html +4130 -5
  99. package/posts/10045/index.html +4224 -1
  100. package/posts/10733/index.html +4125 -1
  101. package/posts/10996/index.html +4127 -5
  102. package/posts/12779/index.html +4134 -1
  103. package/posts/13624/index.html +4179 -1
  104. package/posts/15688/index.html +4133 -1
  105. package/posts/15748/index.html +4121 -5
  106. package/posts/15799/index.html +4130 -1
  107. package/posts/15842/index.html +4121 -5
  108. package/posts/16107/index.html +4111 -1
  109. package/posts/18063/index.html +4124 -1
  110. package/posts/20412/index.html +4134 -1
  111. package/posts/21375/index.html +4124 -1
  112. package/posts/22945/index.html +4169 -4
  113. package/posts/23021/index.html +4104 -1
  114. package/posts/27531/index.html +4121 -5
  115. package/posts/28536/index.html +4116 -1
  116. package/posts/28733/index.html +4168 -1
  117. package/posts/29196/index.html +4106 -1
  118. package/posts/38917/index.html +4144 -1
  119. package/posts/38964/index.html +4208 -1
  120. package/posts/42487/index.html +4135 -1
  121. package/posts/42580/index.html +4128 -1
  122. package/posts/45875/index.html +4118 -1
  123. package/posts/46640/index.html +4147 -1
  124. package/posts/48762/index.html +4109 -1
  125. package/posts/50710/index.html +4114 -1
  126. package/posts/52677/index.html +4125 -1
  127. package/posts/53662/index.html +4123 -1
  128. package/posts/54386/index.html +4116 -1
  129. package/posts/54481/index.html +4133 -1
  130. package/posts/54787/index.html +4124 -5
  131. package/posts/56467/index.html +4121 -1
  132. package/posts/57692/index.html +4143 -1
  133. package/posts/58203/index.html +4116 -1
  134. package/posts/61417/index.html +4117 -1
  135. package/posts/61712/index.html +4113 -1
  136. package/posts/646/index.html +4106 -1
  137. package/posts/64856/index.html +4120 -1
  138. package/posts/64935/index.html +4120 -1
  139. package/search.xml +84 -84
  140. package/seas/index.html +4050 -1
  141. package/sw.js +798 -2
  142. package/tags/Flash/347/233/270/345/205/263/index.html +3924 -1
  143. package/tags/Steam/346/270/270/346/210/217/index.html +3924 -1
  144. package/tags/Windows/350/275/257/344/273/266/index.html +3997 -1
  145. package/tags/index.html +4033 -1
  146. package/tags//344/270/252/344/272/272/345/260/217/350/256/260/index.html +4570 -1
  147. package/tags//344/270/252/344/272/272/345/260/217/350/256/260/page/2/index.html +4485 -1
  148. package/tags//345/205/266/345/256/203/346/270/270/346/210/217/index.html +4073 -1
  149. package/tags//345/212/240/350/275/275/345/212/250/347/224/273/index.html +3924 -1
  150. package/tags//346/202/254/346/265/256/345/256/240/347/211/251-/347/234/213/346/235/277/345/250/230/index.html +3925 -1
  151. package/tags//346/255/214/346/233/262/346/224/266/351/233/206/index.html +3920 -1
  152. package/tags//346/270/270/346/210/217/347/233/270/345/205/263/index.html +4148 -1
  153. package/tags//347/253/231/347/202/271/345/272/225/351/203/250/351/255/224/346/224/271/index.html +3924 -1
  154. package/tags//347/253/231/347/202/271/346/212/230/350/205/276/index.html +4610 -1
  155. package/tags//347/253/231/347/202/271/346/212/230/350/205/276/page/2/index.html +4148 -1
  156. package/tags//350/207/252/345/273/272/351/203/250/347/275/262/index.html +4224 -1
  157. package/tags//351/241/265/351/235/242/351/255/224/346/224/271/index.html +4075 -1
  158. package/tags//351/241/271/347/233/256/346/212/230/350/205/276/index.html +4072 -1
  159. package/update/index.html +4112 -1
  160. package/weichuncai/css/style.css +25 -2
  161. package/weichuncai/js/common.js +449 -2
  162. package/weichuncai/js/jquery.js +139 -2
  163. package/weichuncai/wcc-config.js +17 -2
  164. package/maps/assets/algolia/algoliasearch.js.map +0 -1
  165. package/maps/assets/algolia/algoliasearchLite.js.map +0 -1
  166. package/maps/bbs/bbs.js.map +0 -1
  167. package/maps/css/custom2.css.map +0 -1
  168. package/maps/css/first.css.map +0 -1
  169. package/maps/css/pace/big-counter.css.map +0 -1
  170. package/maps/css/pace/corner-indicator.css.map +0 -1
  171. package/maps/css/pace/flash.css.map +0 -1
  172. package/maps/css/pace/mac-osx.css.map +0 -1
  173. package/maps/css/pace/pace.css.map +0 -1
  174. package/maps/css/plane.css.map +0 -1
  175. package/maps/css/style.css.map +0 -1
  176. package/maps/css/tags.css.map +0 -1
  177. package/maps/js/app.js.map +0 -1
  178. package/maps/js/autoload.js.map +0 -1
  179. package/maps/js/ceta/fancybox.css.map +0 -1
  180. package/maps/js/ceta/fancybox.umd.js.map +0 -1
  181. package/maps/js/ceta/iconfontInkss.js.map +0 -1
  182. package/maps/js/ceta/message.css.map +0 -1
  183. package/maps/js/ceta/message.js.map +0 -1
  184. package/maps/js/clock.js.map +0 -1
  185. package/maps/js/kslink.js.map +0 -1
  186. package/maps/js/newyear.js.map +0 -1
  187. package/maps/js/plane.js.map +0 -1
  188. package/maps/js/plugins/aplayer.js.map +0 -1
  189. package/maps/js/plugins/parallax.js.map +0 -1
  190. package/maps/js/plugins/rightMenus.js.map +0 -1
  191. package/maps/js/plugins/tags/contributors.js.map +0 -1
  192. package/maps/js/plugins/tags/friends.js.map +0 -1
  193. package/maps/js/plugins/tags/sites.js.map +0 -1
  194. package/maps/js/search/algolia.js.map +0 -1
  195. package/maps/js/search/hexo.js.map +0 -1
  196. package/maps/js/search/meilisearch.js.map +0 -1
  197. package/maps/js/txmap.js.map +0 -1
  198. package/maps/sw.js.map +0 -1
  199. package/maps/weichuncai/css/style.css.map +0 -1
  200. package/maps/weichuncai/js/common.js.map +0 -1
  201. package/maps/weichuncai/js/jquery.js.map +0 -1
  202. package/maps/weichuncai/wcc-config.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"../../js/plane.js","names":["window","JSONP","head","query","key","counter","this","get","url","params","callback","hasOwnProperty","encodeURIComponent","jsonp","data","e","script","document","createElement","done","src","async","onload","onreadystatechange","readyState","parentNode","removeChild","getElementsByTagName","body","appendChild","load","CORS","request","calledByExtension","_callbacks","_callbackId","postMessage","JSON","stringify","from","type","xhr","XMLHttpRequest","parse","responseText","open","withCredentials","setRequestHeader","send","getElementById","getGlobalNamespace","INSTALL_SCOPE","addEventListener","messageData","sanityCheck","message","payload","requestId","KICKASSGAME","destroy","Class","methods","ret","$prototyping","initialize","apply","arguments","Extends","parent","prototype","exports","Vector","x","y","cp","mul","factor","mulNew","div","divNew","add","vec","addNew","sub","subNew","rotate","angle","Math","cos","sin","rotateNew","setAngle","l","len","setAngleNew","setLength","length","setLengthNew","normalize","normalizeNew","atan2","collidesWith","rect","width","height","sqrt","is","test","dot","v2","inTriangle","a","b","c","v0","v1","p","dot00","dot01","dot02","dot11","dot12","invDenom","u","v","distanceFrom","pow","toString","Rect","w","h","pos","size","hasPoint","point","getLeft","getRight","getTop","getBottom","setLeft","left","setTop","top","Fx","listeners","tweens","running","addListener","listener","push","props","duration","transition","Tween","Linear","repeats","start","end","update","time","now","tweenStart","tween","tdelta","startTime","tweenFinished","t","delta","changes","i","fire","values","set","call","Quadratic","Quintic","Shake","GameGlobals","FPS","useAnimationFrame","boids","flockRadius","path","Array","slice","join","hasCanvas","getContext","bulletColor","Date","getTime","bind","bound","func","each","arr","bindObject","forEach","addEvent","obj","fn","attachEvent","event","removeEvent","removeEventListener","detachEvent","stopEvent","stopPropogation","preventDefault","returnValue","elementIsContainedIn","element1","element2","element","contains","compareDocumentPosition","code","name","table","String","fromCharCode","random","min","max","floor","getRect","getBoundingClientRect","sx","pageXOffset","sy","pageYOffset","offsetWidth","offsetHeight","el","offsetLeft","offsetTop","offsetParent","getCompatElement","doc","compatMode","documentElement","getScrollSize","clientWidth","clientHeight","scrollWidth","scrollHeight","getStyle","prop","style","currentStyle","defaultView","getComputedStyle","getPropertyValue","setStyles","val","hasClass","ele","cls","className","match","RegExp","addClass","removeClass","reg","replace","cloneElement","cloneNode","newElement","tag","indexOf","searchElement","TypeError","Object","n","Number","abs","k","requestAnimFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","setTimeout","delay","d","KickAss","options","mySite","players","elements","weaponClass","Weapons","cannonClass","scrollPos","scrollSize","windowSize","updateWindowInfo","bulletManager","BulletManager","updateEnemyIndex","explosionManager","ExplosionManager","ui","UIManager","bombManager","BombManager","menuManager","MenuManager","create","StatisticsManager","statisticsManager","sessionManager","SessionManager","lastUpdate","keyMap","keydownEvent","keydown","keyupEvent","keyup","multiplier","isCampaign","audioManager","explosion","AudioManager","shot","KickAssStyle","begin","addPlayer","isPlaying","loopTimer","setInterval","loop","keyCode","currentTime","player","ship","Ships","Standard","KICKASSSHIP","points","getShipConfig","Player","setShip","addExplosion","registerElement","Error","unregisterElement","splice","isKickAssElement","isKeyPressed","isIEQuirks","ActiveXObject","isVisible","getHeight","scrollLeft","scrollTop","hideAll","visibility","showAll","updateShips","isInitial","showMessage","changeWeapon","weapon","toUpperCase","setCannons","changeWeaponById","id","flyOutPlayers","flyTo","isBound","flyInPlayers","newRank","rank","fireBomb","blow","clearInterval","location","reload","IS_CLOUDFLARE_GAME","isMySite","KICKASS_SITE_KEY","shouldShowAd","shouldShowMenu","shouldShowHowToImage","game","startedPlaying","elementsDestroyed","shotsFired","distanceFlownInPixels","totalPointsThisSession","usedThrusters","increaseDistanceWithPixels","px","increasePointsGainedWithPoints","addShotFired","play","addElementsDestroyed","syncWithServer","fragment","sendMessageToMenu","MySite","site_key","embed","mySiteData","install","getShipId","settings","ship_config","getShareURL","share_url","Menu","generate","container","shipId","KICKASSSHIPID","KICKASSURL","href","isSocketReady","socketIframe","frameborder","menuOrigin","onMessage","origin","split","shift","charAt","onGameReady","console","log","socketPostMessage","contentWindow","sendMessage","lastMessage","messageTypeChangeShip","pieces","ship_id","is_initial","focus","hideMenu","messageTypeChangeWeapon","weaponId","messageTypeSetMultiplier","mod","parseInt","isNaN","messageTypeNewRank","messageTypePlayerMessage","iframe","numPoints","KICKASS_INLINE_CSS","includeCSS","generateDefaults","addWeapon","hideBombMenu","bottom","display","getAppContainerElement","innerHTML","getShareHTML","pointsTab","pointsTabWrapper","escToQuit","howToImage","weaponsMenu","weaponsList","bombLink","all","menu","toggleMenu","toggleWeaponsMenu","navigateTo","page","dontShowMenu","showMenu","showWeaponsMenu","hideWeaponsMenu","last","showBombMenu","addPoints","killed","addPointsBubbleAt","file","link","rel","li","backgroundImage","UNIQID","pointBubbles","messages","fx","value","bubble","opacity","staytime","styles","position","font","fontWeight","color","textShadow","zIndex","html","marginLeft","background","padding","textAlign","borderRadius","to","getLowestBubbleY","kickassto","formats","channels","supportsAudio","numChannels","prepareElement","buildAudioElement","format","TYPES","ogg","mp3","audio","source","self","audioEnded","target","channel","thrusters","s","cannons","PLAYERIDS","vel","acc","dir","currentRotation","isBroken","lineOffsets","deadTime","friction","terminalVelocity","lastPos","verts","vert","addThrusters","addCannons","getSizeFromVertsAndObjects","bounds","calculateBounds","sheet","Sheet","forceRedraw","cannon","newCannons","newCannon","thruster","Thruster","WeaponMap","m","PI","clear","setPosition","drawBrokenPlayer","randomPos","rotateLeft","rotateRight","stopRotate","activateThrusters","stopThrusters","isShooting","shootPressed","shootReleased","frictionedAcc","posDelta","showFlames","setIsShown","checkBounds","drawTo","drawPlayer","rightBound","bottomBound","scrollTo","inRect","hit","by","largestDistance","p1","p2","p3","p4","getTimeforTween","isShown","flameY","flames","r","lastFrameUpdate","generateFlames","drawFlames","redWidth","redIncrease","yellowWidth","yellowIncrease","halfRed","halfYellow","py","bombShowDelay","nextBomb","isReady","blowStuffUp","index","enemyIndex","center","MegaParticleExplosion","ELEMENTSTHATARENOTTOBEINCLUDED","ELEMENTSIZETHRESHOLD","lastBlink","blinkActive","updateDelay","nextUpdate","blink","endBlink","outline","KICKASSOLDBORDER","isDestroyable","ignoreSize","shouldIgnoreElement","child","childNodes","nodeType","tagName","isDestroyableFromCollision","bullets","bullet","weHaveWon","explosions","bornAt","ttl","forElement","explosionClass","ParticleExplosion","Cannon","checkCollisions","getExplosionClass","checkCollision","isShot","createBullet","bulletClass","getABulletPos","getABulletDir","manager","initCanvas","LaserCannon","lasers","SplitExplosion","removeOld","laser","outOfBounds","lastFired","LaserBullet","BallCannon","addBullet","Bullet","drawBullet","draw","elementFromPoint","lastDrawPos","laserImage","drawLaser","Explosion","particleVel","particles","generateParticles","particle","drawExplosion","j","right","generationDelay","generationTimes","nextGenerate","createClones","lT","rT","transform","coords","leftContainer","createContainer","rightContainer","margin","overflow","SheetCanvas","canvas","kickass","ctx","updateCanvas","tracePoly","save","translate","beginPath","moveTo","lineTo","restore","drawLine","xFrom","yFrom","xTo","yTo","closePath","stroke","drawCircle","radius","arc","fill","drawRect","fillRect","drawImageFull","image","drawImage","setFillColor","fillStyle","setStrokeColor","strokeStyle","setLineWidth","lineWidth","fillPath","strokePath","clearRect","drawer","lastVert","o","drawFace","face","transformToSheetCoordinates","namespace","initKickAss","ok","KICKASS_CONTAINER_ELEMENT","LAZYLOAD_KICKASS","startBrowserBlaster"],"sources":["js/plane.js"],"mappings":"CAGA,SAAWA,QACP,IAAIC,MAAS,WACT,IAAiBC,EAAMC,EAAOC,EAA1BC,EAAU,EAAqBL,EAASM,KA4C5C,MAAO,CAACC,IArBR,SAAeC,EAAKC,EAAQC,GAGxB,IAAKN,KAFLD,EAAQ,IACRM,EAASA,GAAU,CAAC,EAEZA,EAAOE,eAAeP,KACtBD,GAASS,mBAAmBR,GAAO,IAAMQ,mBAAmBH,EAAOL,IAAQ,KAGnF,IAAIS,EAAQ,UAAYR,EAUxB,OATAL,EAAOa,GAAS,SAAUC,GACtBJ,EAASI,GACT,WACWd,EAAOa,EAClB,CAAE,MAAOE,GACT,CACAf,EAAOa,GAAS,IACpB,EArCJ,SAAcL,GACV,IAAIQ,EAASC,SAASC,cAAc,UAAWC,GAAO,EACtDH,EAAOI,IAAMZ,EACbQ,EAAOK,OAAQ,EACfL,EAAOM,OAASN,EAAOO,mBAAqB,WACnCJ,GAAUb,KAAKkB,YAAkC,WAApBlB,KAAKkB,YAA+C,aAApBlB,KAAKkB,aACnEL,GAAO,EACPH,EAAOM,OAASN,EAAOO,mBAAqB,KACxCP,GAAUA,EAAOS,YACjBT,EAAOS,WAAWC,YAAYV,GAG1C,EACKd,IACDA,EAAOe,SAASU,qBAAqB,QAAQ,MAEzCzB,EAAOe,SAASW,MAExB1B,EAAK2B,YAAYb,EACrB,CAmBIc,CAAKtB,EAAML,EAAQ,YAAcU,GAC1BA,CACX,EAGJ,CA9CY,GA+CRkB,KAAO,CACPC,QAAS,SAAUxB,EAAKC,EAAQC,GAC5B,GAAIJ,KAAK2B,oBAQL,OAPA3B,KAAK4B,WAAW5B,KAAK6B,eAAiBzB,OACtCV,OAAOoC,YAAYC,KAAKC,UAAU,CAC9BC,KAAM,kBACN/B,IAAKA,EACLgC,KAAM,UACN/B,OAAQA,IACR,KAGRA,EAASA,GAAU,CAAC,EACpB,IAAIN,EAAQ,IACZ,IAAKC,OAAOK,EACJA,EAAOE,eAAeP,OACtBD,GAASS,mBAAmBR,KAAO,IAAMQ,mBAAmBH,EAAOL,MAAQ,KAGnF,IAAIqC,EAAM,IAAIC,eACdD,EAAIlB,mBAAqB,WACC,GAAlBkB,EAAIjB,YACJd,EAAS2B,KAAKM,MAAMF,EAAIG,cAEhC,EACAH,EAAII,KAAK,MAAOrC,EAAML,GACtBsC,EAAIK,iBAAkB,EACtBL,EAAIM,iBAAiB,eAAgB,oBACrCN,EAAIO,MACR,EAAGf,kBAAmB,WAClB,QAAShB,SAASgC,eAAe,2CACrC,EAAGf,WAAY,CAAC,EAAGC,YAAa,GAsBpC,SAASe,qBACL,OAAOlD,QAAUA,OAAOmD,cAAgBnD,OAAOmD,cAAgBnD,MACnE,CAtBI+B,KAAKE,qBACLjC,OAAOoD,iBAAiB,WAAW,SAAUrC,GACzC,IAAIsC,EACJ,IACIA,EAAchB,KAAKM,MAAM5B,EAAED,KAC/B,CAAE,MAAOC,GACL,MACJ,CACA,GAAyB,yBAArBsC,EAAYd,MAA+D,kCAA5Bc,EAAYC,YAAiD,CAC5G,IAAIC,EAAUF,EAAYG,QACL,aAAjBD,EAAQf,MACRT,KAAKG,WAAWqB,EAAQE,WAAWF,EAAQ3B,aACpCG,KAAKG,WAAWqB,EAAQE,YACP,YAAjBF,EAAQf,MACfxC,OAAO0D,YAAYC,SAE3B,CACJ,IAAG,GAOP,IAAIC,MAAQ,SAAUC,GAClB,IAAIC,EAAM,WACN,OAAIA,EAAIC,aAAqBzD,KACC,mBAAnBA,KAAK0D,WACL1D,KAAK0D,WAAWC,MAAM3D,KAAM4D,gBADvC,CAEJ,EAOA,IAAK,IAAI9D,KANLyD,EAAQM,UACRL,EAAIM,OAASP,EAAQM,QACrBN,EAAQM,QAAQJ,cAAe,EAC/BD,EAAIO,UAAY,IAAIR,EAAQM,QAC5BN,EAAQM,QAAQJ,cAAe,GAEnBF,EAAaA,EAAQlD,eAAeP,KAChD0D,EAAIO,UAAUjE,GAAOyD,EAAQzD,IACjC,OAAO0D,CACX,EACsB,oBAAXQ,UAAwBA,QAAQV,MAAQA,OACnD,IAAIW,OAAS,IAAIX,MAAM,CACnBI,WAAY,SAAUQ,EAAGC,GACL,iBAALD,GACPlE,KAAKkE,EAAIA,EAAEA,EACXlE,KAAKmE,EAAID,EAAEC,IAEXnE,KAAKkE,EAAIA,EACTlE,KAAKmE,EAAIA,EAEjB,EAAGC,GAAI,WACH,OAAO,IAAIH,OAAOjE,KAAKkE,EAAGlE,KAAKmE,EACnC,EAAGE,IAAK,SAAUC,GAGd,OAFAtE,KAAKkE,GAAKI,EACVtE,KAAKmE,GAAKG,EACHtE,IACX,EAAGuE,OAAQ,SAAUD,GACjB,OAAO,IAAIL,OAAOjE,KAAKkE,EAAII,EAAQtE,KAAKmE,EAAIG,EAChD,EAAGE,IAAK,SAAUF,GAGd,OAFAtE,KAAKkE,GAAKI,EACVtE,KAAKmE,GAAKG,EACHtE,IACX,EAAGyE,OAAQ,SAAUH,GACjB,OAAO,IAAIL,OAAOjE,KAAKkE,EAAII,EAAQtE,KAAKmE,EAAIG,EAChD,EAAGI,IAAK,SAAUC,GAGd,OAFA3E,KAAKkE,GAAKS,EAAIT,EACdlE,KAAKmE,GAAKQ,EAAIR,EACPnE,IACX,EAAG4E,OAAQ,SAAUD,GACjB,OAAO,IAAIV,OAAOjE,KAAKkE,EAAIS,EAAIT,EAAGlE,KAAKmE,EAAIQ,EAAIR,EACnD,EAAGU,IAAK,SAAUF,GAGd,OAFA3E,KAAKkE,GAAKS,EAAIT,EACdlE,KAAKmE,GAAKQ,EAAIR,EACPnE,IACX,EAAG8E,OAAQ,SAAUH,GACjB,OAAO,IAAIV,OAAOjE,KAAKkE,EAAIS,EAAIT,EAAGlE,KAAKmE,EAAIQ,EAAIR,EACnD,EAAGY,OAAQ,SAAUC,GACjB,IAAId,EAAIlE,KAAKkE,EAAGC,EAAInE,KAAKmE,EAGzB,OAFAnE,KAAKkE,EAAIA,EAAIe,KAAKC,IAAIF,GAASC,KAAKE,IAAIH,GAASb,EACjDnE,KAAKmE,EAAID,EAAIe,KAAKE,IAAIH,GAASC,KAAKC,IAAIF,GAASb,EAC1CnE,IACX,EAAGoF,UAAW,SAAUJ,GACpB,OAAOhF,KAAKoE,KAAKW,OAAOC,EAC5B,EAAGK,SAAU,SAAUL,GACnB,IAAIM,EAAItF,KAAKuF,MAGb,OAFAvF,KAAKkE,EAAIe,KAAKC,IAAIF,GAASM,EAC3BtF,KAAKmE,EAAIc,KAAKE,IAAIH,GAASM,EACpBtF,IACX,EAAGwF,YAAa,SAAUR,GACtB,OAAOhF,KAAKoE,KAAKiB,SAASL,EAC9B,EAAGS,UAAW,SAAUC,GACpB,IAAIJ,EAAItF,KAAKuF,MAEb,OADID,EAAGtF,KAAKqE,IAAIqB,EAASJ,GAAStF,KAAKkE,EAAIlE,KAAKmE,EAAIuB,EAC7C1F,IACX,EAAG2F,aAAc,SAAUD,GACvB,OAAO1F,KAAKoE,KAAKqB,UAAUC,EAC/B,EAAGE,UAAW,WACV,IAAIN,EAAItF,KAAKuF,MACb,OAAS,GAALD,IAEJtF,KAAKkE,GAAKoB,EACVtF,KAAKmE,GAAKmB,GAFCtF,IAIf,EAAG6F,aAAc,WACb,OAAO7F,KAAKoE,KAAKwB,WACrB,EAAGZ,MAAO,WACN,OAAOC,KAAKa,MAAM9F,KAAKmE,EAAGnE,KAAKkE,EACnC,EAAG6B,aAAc,SAAUC,GACvB,OAAOhG,KAAKkE,EAAI8B,EAAK9B,GAAKlE,KAAKmE,EAAI6B,EAAK7B,GAAKnE,KAAKkE,EAAI8B,EAAK9B,EAAI8B,EAAKC,OAASjG,KAAKmE,EAAI6B,EAAK7B,EAAI6B,EAAKE,MACxG,EAAGX,IAAK,WACJ,IAAID,EAAIL,KAAKkB,KAAKnG,KAAKkE,EAAIlE,KAAKkE,EAAIlE,KAAKmE,EAAInE,KAAKmE,GAClD,OAAImB,EAAI,MAASA,GAAK,KAAc,EAC7BA,CACX,EAAGc,GAAI,SAAUC,GACb,MAAsB,iBAARA,GAAoBrG,KAAKkE,GAAKmC,EAAKnC,GAAKlE,KAAKmE,GAAKkC,EAAKlC,CACzE,EAAGmC,IAAK,SAAUC,GACd,OAAOvG,KAAKkE,EAAIqC,EAAGrC,EAAIlE,KAAKmE,EAAIoC,EAAGpC,CACvC,EAAGqC,WAAY,SAAUC,EAAGC,EAAGC,GAC3B,IAAIC,EAAKD,EAAE7B,OAAO2B,GACdI,EAAKH,EAAE5B,OAAO2B,GACdF,EAAKO,EAAEhC,OAAO2B,GACdM,EAAQH,EAAGN,IAAIM,GACfI,EAAQJ,EAAGN,IAAIO,GACfI,EAAQL,EAAGN,IAAIC,GACfW,EAAQL,EAAGP,IAAIO,GACfM,EAAQN,EAAGP,IAAIC,GACfa,EAAW,GAAKL,EAAQG,EAAQF,EAAQA,GACxCK,GAAKH,EAAQD,EAAQD,EAAQG,GAASC,EACtCE,GAAKP,EAAQI,EAAQH,EAAQC,GAASG,EAC1C,OAAQC,EAAI,GAAOC,EAAI,GAAOD,EAAIC,EAAI,CAC1C,EAAGC,aAAc,SAAU5C,GACvB,OAAOM,KAAKkB,KAAKlB,KAAKuC,IAAKxH,KAAKkE,EAAIS,EAAIT,EAAI,GAAIe,KAAKuC,IAAIxH,KAAKmE,EAAIQ,EAAIR,EAAG,GAC7E,EAAGsD,SAAU,WACT,MAAO,WAAazH,KAAKkE,EAAI,KAAOlE,KAAKmE,EAAI,YAAcnE,KAAKgF,QAAU,aAAehF,KAAKuF,MAAQ,GAC1G,IAEkB,oBAAXvB,UAAwBA,QAAQC,OAASA,QACpD,IAAIyD,KAAO,IAAIpE,MAAM,CACjBI,WAAY,SAAUQ,EAAGC,EAAGwD,EAAGC,GAC3B5H,KAAK6H,IAAM,IAAI5D,OAAOC,EAAGC,GACzBnE,KAAK8H,KAAO,CAAC7B,MAAO0B,EAAGzB,OAAQ0B,EACnC,EAAGG,SAAU,SAAUC,GACnB,OAAOA,EAAM9D,EAAIlE,KAAKiI,WAAaD,EAAM9D,EAAIlE,KAAKkI,YAAcF,EAAM7D,EAAInE,KAAKmI,UAAYH,EAAM7D,EAAInE,KAAKoI,WAC9G,EAAGC,QAAS,SAAUC,GAClBtI,KAAK6H,IAAI3D,EAAIoE,EAAOtI,KAAK8H,KAAK7B,MAAQ,CAC1C,EAAGsC,OAAQ,SAAUC,GACjBxI,KAAK6H,IAAI1D,EAAIqE,EAAMxI,KAAK8H,KAAK5B,OAAS,CAC1C,EAAG+B,QAAS,WACR,OAAOjI,KAAK6H,IAAI3D,EAAIlE,KAAK8H,KAAK7B,MAAQ,CAC1C,EAAGkC,OAAQ,WACP,OAAOnI,KAAK6H,IAAI1D,EAAInE,KAAK8H,KAAK5B,OAAS,CAC3C,EAAGgC,SAAU,WACT,OAAOlI,KAAK6H,IAAI3D,EAAIlE,KAAK8H,KAAK7B,MAAQ,CAC1C,EAAGmC,UAAW,WACV,OAAOpI,KAAK6H,IAAI1D,EAAInE,KAAK8H,KAAK5B,OAAS,CAC3C,EAAG9B,GAAI,WACH,OAAO,IAAIsD,KAAK1H,KAAK6H,IAAI3D,EAAGlE,KAAK6H,IAAI1D,EAAGnE,KAAK8H,KAAK7B,MAAOjG,KAAK8H,KAAK5B,OACvE,IAEkB,oBAAXlC,UAAwBA,QAAQ0D,KAAOA,MAClD,IAAIe,GAAK,IAAInF,MAAM,CACfI,WAAY,WACR1D,KAAK0I,UAAY,GACjB1I,KAAK2I,OAAS,CAAC,EACf3I,KAAK4I,QAAU,CAAC,CACpB,EAAGC,YAAa,SAAUC,GACtB9I,KAAK0I,UAAUK,KAAKD,EACxB,EAAGpE,IAAK,SAAU5E,EAAKkJ,GAKnB,IAJAA,EAAQA,GAAS,CAAC,GACZC,SAAWD,EAAMC,UAAY,IACnCD,EAAME,WAAaF,EAAME,YAAcC,MAAMC,OAC7CJ,EAAMK,aAAkC,IAAjBL,EAAMK,SAAiCL,EAAMK,SAC/DL,EAAML,OAAQ,CACf,IAAIW,EAAQN,EAAMM,OAAS,EACvBC,OAA0B,IAAbP,EAAMO,IAAqB,EAAIP,EAAMO,IACtDP,EAAML,OAAS,CAAC,CAACW,EAAOC,GAC5B,CACAvJ,KAAK2I,OAAO7I,GAAOkJ,CACvB,EAAGQ,OAAQ,SAAUC,GAEjB,IAAK,IAAI3J,KADT2J,EAAuB,iBAATA,EAAoBA,EAAOC,MACzB1J,KAAK2I,OAAQ,GAAI3I,KAAK2I,OAAOtI,eAAeP,GAAM,CAC9D,IAAKE,KAAK4I,QAAQ9I,GAAM,CACpBE,KAAK2J,WAAW7J,EAAK2J,GACrB,QACJ,CACA,IAAIG,EAAQ5J,KAAK2I,OAAO7I,GACpB+J,EAASJ,EAAOzJ,KAAK4I,QAAQ9I,GAAKgK,UACtC,GAAID,EAASD,EAAMX,SAAU,CACzBjJ,KAAK+J,cAAcH,EAAO9J,GAC1B,QACJ,CAGA,IAFA,IAEgBkK,EAFZC,EAAQL,EAAMV,WAAWW,EAASD,EAAMX,UACxCiB,EAAU,GACLC,EAAI,EAAMH,EAAIJ,EAAMjB,OAAOwB,GAAIA,IAAK,CACzC,IAAIjG,EAAI+F,GAASD,EAAE,GAAKA,EAAE,IAAMA,EAAE,GAClCE,EAAQnB,KAAK7E,EACjB,CACAlE,KAAKoK,KAAKtK,EAAKoK,EAASD,EAC5B,CACJ,EAAGN,WAAY,SAAU7J,EAAK2J,GAC1BzJ,KAAK4I,QAAQ9I,GAAO,CAACgK,UAAWL,GAEhC,IADA,IACgBG,EADZS,EAAS,GACJF,EAAI,EAAUP,EAAQ5J,KAAK2I,OAAO7I,GAAK6I,OAAOwB,GAAIA,IACvDE,EAAOtB,KAAKa,EAAM,IACtB5J,KAAKoK,KAAKtK,EAAKuK,EAAQ,EAC3B,EAAGN,cAAe,SAAUH,EAAO9J,GAE/B,IADA,IACgBkK,EADZK,EAAS,GACJF,EAAI,EAAMH,EAAIJ,EAAMjB,OAAOwB,GAAIA,IACpCE,EAAOtB,KAAKiB,EAAE,IAElB,GADAhK,KAAKoK,KAAKtK,EAAKuK,EAAQ,IAClBT,EAAMP,QAGP,cAFOrJ,KAAK4I,QAAQ9I,eACbE,KAAK2I,OAAO7I,GAGvBE,KAAK2J,WAAW7J,EAAK4J,MACzB,EAAGU,KAAM,SAAUtK,EAAKuK,EAAQJ,GAC5B,IAAK,IAAWnB,EAAPqB,EAAI,EAAarB,EAAW9I,KAAK0I,UAAUyB,GAAIA,IACpDrB,EAASwB,IAAIC,KAAKzB,EAAUhJ,EAAKuK,EAAQJ,EACjD,IAEAd,MAAQ,CACRC,OAAQ,SAAUlF,GACd,OAAOA,CACX,EAAGsG,UAAW,SAAUtG,GACpB,OAAOA,EAAIA,CACf,EAAGuG,QAAS,SAAUvG,GAClB,OAAOA,EAAIA,EAAIA,CACnB,EAAGwG,MAAO,SAAUxG,GAChB,OAAOe,KAAKE,IAAIjB,EACpB,GAEAyG,YAAc,CACdC,IAAK,GAAIC,mBAAmB,EAAMC,MAAO,CAACC,YAAa,IAAKjD,KAAM,KAAMkD,KAAM,WAC1E,MAAO,0BAA4BC,MAAMlH,UAAUmH,MAAMX,KAAK3G,WAAWuH,KAAK,GAClF,EAAGC,eAAmE,IAAhDzK,SAASC,cAAc,UAAUyK,WAA6BC,YAAa,SA6BrG,SAAS5B,MACL,OAAO,IAAK6B,MAAQC,SACxB,CAEA,SAASC,KAAKC,EAAOC,GACjB,OAAO,WACH,OAAOA,EAAKhI,MAAM+H,EAAO9H,UAC7B,CACJ,CAEA,SAASgI,KAAKC,EAAKF,EAAMG,GACrB,GAA0B,mBAAfD,EAAIE,QAEX,OADAF,EAAIE,QAAQJ,EAAMG,GACXD,EAEX,IAAK,IAAI/L,KAAO+L,EAASA,EAAIxL,eAAeP,IACxC6L,EAAKpB,KAAKuB,GAAcpM,OAAQmM,EAAI/L,GAAMA,GAC9C,OAAO+L,CACX,CAEA,SAASG,SAASC,EAAK/J,EAAMgK,GACrBD,EAAInJ,iBACJmJ,EAAInJ,iBAAiBZ,EAAMgK,GAAI,GAAiBD,EAAIE,cACpDF,EAAI,IAAM/J,EAAOgK,GAAMA,EACvBD,EAAI/J,EAAOgK,GAAM,WACb,OAAOD,EAAI,IAAM/J,EAAOgK,GAAIxM,OAAO0M,MACvC,EACAH,EAAIE,YAAY,KAAOjK,EAAM+J,EAAI/J,EAAOgK,IAEhD,CAEA,SAASG,YAAYJ,EAAK/J,EAAMgK,GACxBD,EAAIK,oBACJL,EAAIK,oBAAoBpK,EAAMgK,GAAI,GAAiBD,EAAIM,cACvDN,EAAIM,YAAY,KAAOrK,EAAM+J,EAAI/J,EAAOgK,IACxCD,EAAI/J,EAAOgK,GAAM,KACjBD,EAAI,IAAM/J,EAAOgK,GAAM,KAE/B,CAEA,SAASM,UAAU/L,GACXA,EAAEgM,iBACFhM,EAAEgM,kBACFhM,EAAEiM,gBACFjM,EAAEiM,iBACNjM,EAAEkM,aAAc,CACpB,CAEA,SAASC,qBAAqBC,EAAUC,GACpC,OAAIC,QAAQC,SACDH,EAASG,SAASF,MAC0B,GAA7CD,EAASI,wBAAwBH,GAC/C,CAEA,SAASI,KAAKC,GACV,IAAIC,EAAQ,CAAC,GAAI,KAAM,GAAI,OAAQ,GAAI,OAAQ,GAAI,QAAS,GAAI,OAChE,OAAIA,EAAMD,GAAcC,EAAMD,GACvBE,OAAOC,aAAaH,EAC/B,CAEA,SAASI,OAAOC,EAAKC,GACjB,OAAOxI,KAAKyI,MAAMzI,KAAKsI,UAAYE,EAAMD,EAAM,GAAKA,EACxD,CAEA,SAASG,QAAQZ,GACb,GAA6C,mBAAlCA,EAAQa,sBAAsC,CACrD,IAAI5H,EAAO+G,EAAQa,wBACfC,EAAKnO,OAAOoO,YACZC,EAAKrO,OAAOsO,YAChB,MAAO,CAAC/H,MAAOD,EAAKC,MAAOC,OAAQF,EAAKE,OAAQoC,KAAMtC,EAAKsC,KAAOuF,EAAIrF,IAAKxC,EAAKwC,IAAMuF,EAC1F,CACI/H,EAAO,CAACC,MAAO8G,EAAQkB,YAAa/H,OAAQ6G,EAAQmB,aAAc5F,KAAM,EAAGE,IAAK,GAEpF,IAFA,IACI2F,EAAKpB,EACFoB,GACHnI,EAAKsC,MAAQ6F,EAAGC,WAChBpI,EAAKwC,KAAO2F,EAAGE,UACfF,EAAKA,EAAGG,aAEZ,OAAOtI,CACX,CAEA,SAASuI,mBACL,IAAIC,EAAM7N,SACV,OAAS6N,EAAIC,YAAgC,cAAlBD,EAAIC,WAAoDD,EAAIlN,KAA1BkN,EAAIE,eACrE,CAEA,SAASC,gBACL,IAAIH,EAAMD,mBACNf,EAAM,CAACtJ,EAAGsK,EAAII,YAAazK,EAAGqK,EAAIK,cAClCvN,EAAOX,SAASW,KACpB,MAAO,CACH4C,EAAGe,KAAKwI,IAAIe,EAAIM,YAAaxN,EAAKwN,YAAatB,EAAItJ,GACnDC,EAAGc,KAAKwI,IAAIe,EAAIO,aAAczN,EAAKyN,aAAcvB,EAAIrJ,GAE7D,CAEA,SAAS6K,SAASjC,EAASkC,GACvB,OAAIlC,EAAQmC,MAAMD,GACPlC,EAAQmC,MAAMD,GACrBlC,EAAQoC,aACDpC,EAAQoC,aAAaF,GACzBtO,SAASyO,YAAYC,iBAAiBtC,EAAS,MAAMuC,iBAAiBL,EACjF,CAEA,SAASM,UAAUxC,EAAS/D,GACxB,IAAK,IAAIlJ,KAAOkJ,EAAO,GAAIA,EAAM3I,eAAeP,GAAM,CAClD,IAAI0P,EAAMxG,EAAMlJ,GACG,iBAAR0P,GAA4B,YAAR1P,GAA6B,WAARA,IAChD0P,GAAY,MAChBzC,EAAQmC,MAAMpP,GAAO0P,CACzB,CACJ,CAEA,SAASC,SAASC,EAAKC,GACnB,OAAOD,EAAIE,UAAUC,MAAM,IAAIC,OAAO,UAAYH,EAAM,WAC5D,CAEA,SAASI,SAASL,EAAKC,GACdF,SAASC,EAAKC,KAAMD,EAAIE,WAAa,IAAMD,EACpD,CAEA,SAASK,YAAYN,EAAKC,GACtB,GAAIF,SAASC,EAAKC,GAAM,CACpB,IAAIM,EAAM,IAAIH,OAAO,UAAYH,EAAM,WACvCD,EAAIE,UAAYF,EAAIE,UAAUM,QAAQD,EAAK,IAC/C,CACJ,CAEA,SAASE,aAAapD,GAClB,OAAOA,EAAQqD,WAAU,EAC7B,CAEA,SAASC,WAAWC,EAAKtH,GACrB,IAAImF,EAAKxN,SAASC,cAAc0P,GAChC,IAAK,IAAIxQ,KAAOkJ,EAAWA,EAAM3I,eAAeP,KAChC,WAARA,EACAyP,UAAUpB,EAAInF,EAAMlJ,IAEpBqO,EAAGrO,GAAOkJ,EAAMlJ,IAGxB,OAAOqO,CACX,CAzKAzO,OAAOiL,YAAcA,YAChBM,MAAMlH,UAAUwM,UACjBtF,MAAMlH,UAAUwM,QAAU,SAAUC,GAChC,GAAIxQ,WACA,MAAM,IAAIyQ,UACd,IAAIzG,EAAI0G,OAAO1Q,MACXuF,EAAMyE,EAAEtE,SAAW,EACvB,GAAY,IAARH,EACA,OAAQ,EACZ,IAAIoL,EAAI,EAOR,GANI/M,UAAU8B,OAAS,KACnBiL,EAAIC,OAAOhN,UAAU,MACX+M,EACNA,EAAI,EAAkB,IAANA,GAAWA,IAAM,KAAWA,KAAO,MACnDA,GAAKA,EAAI,IAAM,GAAK1L,KAAKyI,MAAMzI,KAAK4L,IAAIF,MAE5CA,GAAKpL,EACL,OAAQ,EAEZ,IADA,IAAIuL,EAAIH,GAAK,EAAIA,EAAI1L,KAAKwI,IAAIlI,EAAMN,KAAK4L,IAAIF,GAAI,GAC1CG,EAAIvL,EAAKuL,IACZ,GAAIA,KAAK9G,GAAKA,EAAE8G,KAAON,EACnB,OAAOM,EAEf,OAAQ,CACZ,GAmJJ,IAAIC,iBACOrR,OAAOsR,uBAAyBtR,OAAOuR,6BAA+BvR,OAAOwR,0BAA4BxR,OAAOyR,wBAA0BzR,OAAO0R,yBAA2B,SAAUhR,EAAU2M,GACnMrN,OAAO2R,WAAWjR,EAAU,IAAO,GACvC,EAGJ,SAASkR,MAAMC,EAAG5F,EAAMD,GACpB,OAAO2F,WAAW5F,KAAKC,EAAOC,GAAO4F,EACzC,CAEA,IAAIC,QAAU,IAAIlO,MAAM,CACpBI,WAAY,SAAU+N,GACdA,GAAWA,EAAQC,SACnB1R,KAAK0R,OAASD,EAAQC,QAE1B1R,KAAK2R,QAAU,GACf3R,KAAK4R,SAAW,GAChB5R,KAAK6R,YAAcC,QAAQ,GAAGC,YAC9B/R,KAAKgS,UAAY,IAAI/N,OAAO,EAAG,GAC/BjE,KAAKiS,WAAa,IAAIhO,OAAO,EAAG,GAChCjE,KAAKkS,WAAa,CAACjM,MAAO,EAAGC,OAAQ,GACrClG,KAAKmS,mBACLnS,KAAKoS,cAAgB,IAAIC,cAAcrS,MACvCA,KAAKoS,cAAcE,mBACnBtS,KAAKuS,iBAAmB,IAAIC,iBAAiBxS,MAC7CA,KAAKyS,GAAK,IAAIC,UAAU1S,MACxBA,KAAK2S,YAAc,IAAIC,YAAY5S,MACnCA,KAAK6S,YAAc,IAAIC,YAAY9S,MACnCA,KAAK6S,YAAYE,cACgB,IAAtBC,oBACPhT,KAAKiT,kBAAoB,IAAID,kBAAkBhT,OAEnDA,KAAKkT,eAAiB,IAAIC,eAAenT,MACzCA,KAAKoT,WAAa1J,MAClB1J,KAAKqT,OAAS,CAAC,EACfrT,KAAKsT,aAAe7H,KAAKzL,KAAMA,KAAKuT,SACpCvT,KAAKwT,WAAa/H,KAAKzL,KAAMA,KAAKyT,OAClCzT,KAAK0T,WAAa,GACd1T,KAAK2T,aACL3T,KAAK4T,aAAe,CAChBC,UAAW,IAAIC,aAAanJ,YAAYK,KAAK,gCAAiC,CAAC,MAAO,QACtF+I,KAAM,IAAID,aAAanJ,YAAYK,KAAK,2BAA4B,CAAC,MAAO,SAGhFhL,KAAK4T,aAAe,CAAC,EAErBlU,OAAOsU,cAAwC,UAAxBtU,OAAOsU,eAC9BrJ,YAAYW,YAAc,SAE9BU,SAASrL,SAAU,UAAWX,KAAKsT,cACnCtH,SAASrL,SAAU,QAASX,KAAKwT,YACjCxH,SAASrL,SAAU,WAAYX,KAAKsT,aACxC,EAAGW,MAAO,WACNjU,KAAKkU,YACLlU,KAAKkT,eAAeiB,WAAY,EAC3BxJ,YAAYE,oBACb7K,KAAKoU,UAAY1U,OAAO2U,YAAY5I,KAAKzL,KAAMA,KAAKsU,MAAO,IAAO3J,YAAYC,MAE9ED,YAAYE,mBACZkG,iBAAiBtF,KAAKzL,KAAMA,KAAKsU,MAEzC,EAAGf,QAAS,SAAU9S,GAClB,IAAIkG,EAAIuG,KAAKzM,EAAE8T,SAEf,OADAvU,KAAKqT,OAAO1M,IAAK,EACTA,GACJ,IAAI,OACJ,IAAI,QACJ,IAAI,KACJ,IAAI,OACJ,IAAI,MACJ,IAAI,IACA6F,UAAU/L,GAGlB,GACQ,QADAkG,EAEA3G,KAAKqD,SAGjB,EAAGoQ,MAAO,SAAUhT,GAChB,IAAIkG,EAAIuG,KAAKzM,EAAE8T,SAEf,OADAvU,KAAKqT,OAAO1M,IAAK,EACTA,GACJ,IAAI,OACJ,IAAI,QACJ,IAAI,KACJ,IAAI,OACJ,IAAI,MACJ,IAAI,IACIlG,EAAEgM,iBACFhM,EAAEgM,kBAEFhM,EAAEiM,gBACFjM,EAAEiM,iBAENjM,EAAEkM,aAAc,EAG5B,EAAG2H,KAAM,WACL,IAAIE,EAAc9K,MACdG,GAAU2K,EAAcxU,KAAKoT,YAAc,IAC/CpT,KAAKmS,mBACL,IAAK,IAAWsC,EAAPtK,EAAI,EAAWsK,EAASzU,KAAK2R,QAAQxH,GAAIA,IAC9CsK,EAAOjL,OAAOK,GAElB7J,KAAKoS,cAAc5I,OAAOK,GAC1B7J,KAAK2S,YAAYnJ,OAAOK,GACxB7J,KAAKuS,iBAAiB/I,OAAOK,GAC7B7J,KAAKyS,GAAGjJ,OAAOK,GACX7J,KAAKiT,mBACLjT,KAAKiT,kBAAkBzJ,OAAOK,GAElC7J,KAAKkT,eAAe1J,OAAOK,GAC3B7J,KAAKoT,WAAaoB,EACd7J,YAAYE,mBACZkG,iBAAiBtF,KAAKzL,KAAMA,KAAKsU,MAEzC,EAAGJ,UAAW,WACV,IACIQ,EAAOC,MAAMC,SACblV,OAAOmV,aAAenV,OAAOmV,YAAYC,SACzCJ,EAAOG,aAEP7U,KAAK0R,QAAU1R,KAAK0R,OAAOqD,kBAC3BL,EAAO1U,KAAK0R,OAAOqD,iBAEvB,IAAIN,EAAS,IAAIO,OAAOhV,MACxByU,EAAOQ,QAAQP,GACf1U,KAAK2R,QAAQ5I,KAAK0L,GAClBzU,KAAKuS,iBAAiB2C,aAAaT,EAAO5M,IAC9C,EAAGsN,gBAAiB,SAAUhH,GAC1B,IAAKA,EACD,MAAM,IAAIiH,MAAM,sCAEpBpV,KAAK4R,SAAS7I,KAAKoF,EACvB,EAAGkH,kBAAmB,SAAUlH,GAC5BnO,KAAK4R,SAAS0D,OAAOtV,KAAK4R,SAASrB,QAAQpC,GAAK,EACpD,EAAGoH,iBAAkB,SAAUpH,GAC3B,IAAK,IAAWpB,EAAP5C,EAAI,EAAY4C,EAAU/M,KAAK4R,SAASzH,GAAIA,IACjD,GAAIgE,IAAOpB,GAAWH,qBAAqBG,EAASoB,GAChD,OAAO,EAGf,OAAO,CACX,EAAGqH,aAAc,SAAU1V,GACvB,QAASE,KAAKqT,OAAOvT,EACzB,EAAGqS,iBAAkB,WACjB,IAAIsD,IAAgB/V,OAAOgW,eAAyC,cAAvB/U,SAAS8N,WACtDzO,KAAKkS,WAAa,CACdjM,MAAOtF,SAAS+N,gBAAgBE,YAChC1I,OAAQvF,SAAS+N,gBAAgBG,cAEjC4G,IACAzV,KAAKkS,WAAWjM,MAAQtF,SAASW,KAAKsN,YACtC5O,KAAKkS,WAAWhM,OAASvF,SAASW,KAAKuN,cAEvC7O,KAAK6S,aAAe7S,KAAK6S,YAAY8C,cACrC3V,KAAKkS,WAAWhM,QAAUlG,KAAK6S,YAAY+C,aAE/C5V,KAAKgS,UAAU9N,EAAIxE,OAAOoO,aAAenN,SAAS+N,gBAAgBmH,WAClE7V,KAAKgS,UAAU7N,EAAIzE,OAAOsO,aAAerN,SAAS+N,gBAAgBoH,UAClE9V,KAAKiS,WAAatD,eACtB,EAAGoH,QAAS,WACR,IAAK,IAAW5H,EAAPhE,EAAI,EAAOgE,EAAKnO,KAAK4R,SAASzH,GAAIA,IACvCgE,EAAGe,MAAM8G,WAAa,QAE9B,EAAGC,QAAS,WACR,IAAK,IAAW9H,EAAPhE,EAAI,EAAOgE,EAAKnO,KAAK4R,SAASzH,GAAIA,IACvCgE,EAAGe,MAAM8G,WAAa,SAE9B,EAAGE,YAAa,SAAUxB,EAAMyB,GACvBA,GACDnW,KAAKyS,GAAG2D,YAAY,8BAAgC1B,EAAKvH,KAAO,UAEpE,IAAK,IAAWsH,EAAPtK,EAAI,EAAWsK,EAASzU,KAAK2R,QAAQxH,GAAIA,IAC9CsK,EAAOQ,QAAQP,EAEvB,EAAG2B,aAAc,SAAUC,EAAQH,GAC/BnW,KAAK6R,YAAcyE,EAAOvE,YACrBoE,GACDnW,KAAKyS,GAAG2D,YAAY,cAAgBE,EAAOnJ,KAAKoJ,cAAgB,QAEpE,IAAK,IAAW9B,EAAPtK,EAAI,EAAWsK,EAASzU,KAAK2R,QAAQxH,GAAIA,IAC9CsK,EAAO+B,WAAWF,EAAOvE,YAEjC,EAAG0E,iBAAkB,SAAUC,EAAIP,GAC3BrE,QAAQ4E,IACR1W,KAAKqW,aAAavE,QAAQ4E,GAAKP,EAEvC,EAAGQ,cAAe,SAAUzS,EAAGC,GAC3B,IAAK,IAAWsQ,EAAPtK,EAAI,EAAWsK,EAASzU,KAAK2R,QAAQxH,GAAIA,IAC9CsK,EAAOmC,MAAM1S,GAAIuQ,EAAO3M,KAAK5B,QAC7BuO,EAAOoC,SAAU,CAEzB,EAAGC,aAAc,WACb,IAAK,IAAWrC,EAAPtK,EAAI,EAAWsK,EAASzU,KAAK2R,QAAQxH,GAAIA,IAC9CsK,EAAOmC,MAAMnC,EAAO5M,IAAI3D,EAAG,KAAK,WAC5BlE,KAAK6W,SAAU,CACnB,GAER,EAAGE,QAAS,SAAUC,GAClBhX,KAAKyS,GAAG2D,YAAY,mCAAqCY,EAAO,2FACpE,EAAGC,SAAU,WACTjX,KAAK2S,YAAYuE,MACrB,EAAG7T,QAAS,WACRgJ,YAAY1L,SAAU,UAAWX,KAAKsT,cACtCjH,YAAY1L,SAAU,WAAYX,KAAKsT,cACvCjH,YAAY1L,SAAU,QAASX,KAAKwT,YACpC,IAAK,IAAWiB,EAAPtK,EAAI,EAAWsK,EAASzU,KAAK2R,QAAQxH,GAAIA,IAC9CsK,EAAOpR,UAEXrD,KAAKoS,cAAc/O,UACnBrD,KAAKuS,iBAAiBlP,UACtBrD,KAAK6S,YAAYxP,UACZsH,YAAYE,mBACbsM,cAAcnX,KAAKoU,WAEvBxR,qBAAqBQ,aAAc,EAC/BpD,KAAK2T,cACLhT,SAASyW,SAASC,QAE1B,EAAG1D,WAAY,WACX,OAAO/Q,qBAAqB0U,kBAChC,EAAGC,SAAU,WACT,QAAS3U,qBAAqB4U,gBAClC,EAAGC,aAAc,WACb,OAAQzX,KAAK0R,SAAW1R,KAAK2T,YACjC,EAAG+D,eAAgB,WACf,OAAQ1X,KAAK0R,SAAW1R,KAAK2T,YACjC,EAAGgE,qBAAsB,WACrB,OAAO3X,KAAK0R,QAAU1R,KAAK2T,YAC/B,IAEJjU,OAAO8R,QAAUA,QACjB,IAAIwB,kBAAoB,IAAI1P,MAAM,CAC9BI,WAAY,SAAUkU,GAClB5X,KAAK4X,KAAOA,EACZ5X,KAAKQ,KAAO,CAAC,EACbR,KAAKQ,KAAKqX,eAAiBnO,MAC3B1J,KAAKQ,KAAKsX,kBAAoB,EAC9B9X,KAAKQ,KAAKuX,WAAa,EACvB/X,KAAKQ,KAAKwX,sBAAwB,EAClChY,KAAKQ,KAAKyX,uBAAyB,EACnCjY,KAAKQ,KAAK0X,cAAgB,EAC1BlY,KAAKoT,WAAa,CACtB,EAAG8E,cAAe,WACdlY,KAAKQ,KAAK0X,cAAgB,CAC9B,EAAGC,2BAA4B,SAAUC,GACrCpY,KAAKQ,KAAKwX,uBAAyBI,CACvC,EAAGC,+BAAgC,SAAUvD,GACzC9U,KAAKQ,KAAKyX,wBAA0BnD,CACxC,EAAGwD,aAAc,WACbtY,KAAKQ,KAAKuX,aACN/X,KAAK4X,KAAKhE,aAAaG,MACvB/T,KAAK4X,KAAKhE,aAAaG,KAAKwE,MAEpC,EAAGC,qBAAsB,WACrBxY,KAAKQ,KAAKsX,mBACd,EAAGtO,OAAQ,SAAUK,GACjB7J,KAAKoT,YAAcvJ,EACf7J,KAAKoT,WAAa,MAClBpT,KAAKyY,iBACLzY,KAAKoT,WAAa,EAE1B,EAAGqF,eAAgB,WACf,IAAIC,EAAW,GACf,IAAK,IAAI5Y,KAAOE,KAAKQ,KAAUR,KAAKQ,KAAKH,eAAeP,IACpD4Y,EAAS3P,KAAKjJ,EAAM,IAAME,KAAKQ,KAAKV,IAExCE,KAAK4X,KAAK/E,YAAY8F,kBAAkB,UAAYD,EAASvN,KAAK,KACtE,IAEAyN,OAAS,IAAItV,MAAM,CACnBI,WAAY,SAAU5D,GAClBE,KAAKF,IAAMA,CACf,EAAG0B,KAAM,SAAUpB,GACfqB,KAAKC,QAAQiJ,YAAYK,KAAK,mBAAoB,CAC9C6N,SAAU7Y,KAAKF,IACfI,IAAKS,SAASyW,SAAS3P,YACxBgE,KAAKzL,MAAM,SAAUQ,GAChBA,GAAQA,EAAKsY,OACb9Y,KAAK+Y,WAAavY,EAAKsY,MACvB1Y,GAAS,IAETA,GAAS,EAEjB,IACJ,EAAG4Y,QAAS,WACZ,EAAGC,UAAW,WACV,OAAOjZ,KAAK+Y,YAAc/Y,KAAK+Y,WAAWG,SAASxE,IACvD,EAAGK,cAAe,WACd,OAAO/U,KAAK+Y,YAAc/Y,KAAK+Y,WAAWG,SAASC,WACvD,EAAGC,YAAa,WACZ,OAAOpZ,KAAK+Y,YAAc/Y,KAAK+Y,WAAWG,SAASG,SACvD,IAEAC,KAAO,IAAIhW,MAAM,CACjBI,WAAY,SAAUkU,GAClB5X,KAAK4X,KAAOA,EACZ5X,KAAK8H,KAAO,CAAC5B,OAAQ,IACzB,EAAGqT,SAAU,SAAUzV,GACnB9D,KAAKwZ,UAAY7Y,SAASC,cAAc,OACxCZ,KAAKwZ,UAAU5J,UAAY,iBAC3B5P,KAAKwZ,UAAU9C,GAAK,uBACpB5S,EAAOvC,YAAYvB,KAAKwZ,WACxB,IAAIC,EAAS7W,qBAAqB8W,eAAiB,GACnD1Z,KAAKE,IAAMyK,YAAYK,KAAK,qCACxB1K,mBAAmBsC,qBAAqB+W,YAAchZ,SAASyW,SAASwC,MAAQ,WAAatZ,mBAAmBK,SAASyW,SAASwC,MAAQ,YAAc,EAAW,iBAAmB5Z,KAAK4X,KAAKjE,aAAe,OAAS,IAAM,eAAiB3T,KAAK4X,KAAKL,WAAa,OAAS,KACnRvX,KAAK6Z,eAAgB,EACrB7Z,KAAK8Z,aAAenZ,SAASC,cAAc,UAC3CZ,KAAK8Z,aAAaC,YAAc,IAChC/Z,KAAK8Z,aAAalK,UAAY,iBAC9B5P,KAAK8Z,aAAa7T,MAAQ,OAC1BjG,KAAK8Z,aAAa5T,OAASlG,KAAK8H,KAAK5B,OAAS,KAC9ClG,KAAKwZ,UAAUjY,YAAYvB,KAAK8Z,cAChC9Z,KAAKga,WAAa,0BAA0B9J,QAAQ,MAAO,IAC3DlQ,KAAK8Z,aAAahZ,IAAMd,KAAKE,IAC7BF,KAAKia,UAAYxO,KAAKzL,MAAM,SAAUoM,GAClC,GAAIA,EAAM8N,SAAWla,KAAKga,YAAc5N,EAAM8N,SAAWla,KAAKga,WAAW9J,QAAQ,UAAW,YAA5F,CAIA,IAAIjN,EAAUmJ,EAAM5L,KACpB,GAAgB,UAAZyC,EAAJ,CAIA,IAAI+G,EAAI/G,EAAQkX,MAAM,MACtB,GAAiB,IAAbnQ,EAAEtE,OAAN,CAGA,IAAIxD,EAAO8H,EAAEoQ,QAAQlK,QAAQ,OAAO,SAAUL,GAC1C,OAAOA,EAAMwK,OAAO,GAAG9D,aAC3B,IAC0C,mBAA/BvW,KAAK,cAAgBkC,IAC5BlC,KAAK,cAAgBkC,GAAM8H,EAAEmB,KAAK,MALtC,CAJA,MAFInL,KAAKsa,aAHT,MAFIC,QAAQC,IAAI,sBAAuBpO,EAAM8N,OAkBjD,IACAxa,OAAOoD,iBAAiB,UAAW9C,KAAKia,WAAW,GACnDja,KAAK4X,KAAKzC,gBAAgBnV,KAAKwZ,UACnC,EAAGiB,kBAAmB,SAAUxX,GAC5BjD,KAAK8Z,aAAaY,cAAc5Y,YAAYmB,EAASjD,KAAKga,WAC9D,EAAGM,YAAa,WACZta,KAAK6Z,eAAgB,EACrB7Z,KAAK4X,KAAKzC,gBAAgBnV,KAAKwZ,UAAUnY,qBAAqB,UAAU,IACxErB,KAAKya,kBAAkB,SAAW7X,qBAAqB+W,YAAchZ,SAASyW,SAASwC,OACnF5Z,KAAK4X,KAAK3E,mBACVjT,KAAK4X,KAAK3E,kBAAkBwF,iBAEhCzY,KAAK4X,KAAK/E,YAAYyH,aAC1B,EAAGK,YAAa,SAAU1X,GACtB,GAAKjD,KAAK6Z,eAGN5W,GAAWjD,KAAK4a,YAAa,CAC7B,IACI5a,KAAKya,kBAAkBxX,EAC3B,CAAE,MAAOxC,GACT,CACAT,KAAK4a,YAAc3X,CACvB,CACJ,EAAG4X,sBAAuB,SAAUC,GAEhC,IAAIrB,GADJqB,EAASA,EAAOX,MAAM,MACF,GAEhBhE,GADW2E,EAAO,GACQ,YAAdA,EAAO,IACnB9a,KAAKyZ,SAAWA,IAGhBtD,GAAavT,qBAAqBiS,cAGtC7U,KAAKyZ,OAASA,EACdhY,KAAKC,QAAQiJ,YAAYK,KAAK,iBAAmByO,EAAS,sBAAuB,CAC7EsB,QAAStB,EACTuB,WAAY7E,EAAY,IAAM,KAC/B1K,KAAKzL,MAAM,SAAUQ,GACpBR,KAAK4X,KAAK1B,YAAY1V,EAAKA,KAAM2V,GACjC,IACIzW,OAAOub,OACX,CAAE,MAAOxa,GACT,CACJ,KACK0V,GACDnW,KAAK8D,OAAOoX,YAEpB,EAAGC,wBAAyB,SAAUC,EAAUjF,GAC5CnW,KAAK4X,KAAKnB,iBAAiB2E,EAAUjF,EACzC,EAAGkF,yBAA0B,SAAUC,GACnCA,EAAMC,SAASD,EAAK,KAChBE,MAAMF,IAASA,IAGnBtb,KAAK4X,KAAKlE,WAAa4H,EAC3B,EAAGG,mBAAoB,SAAUzE,GAC7BhX,KAAK4X,KAAKb,QAAQC,EACtB,EAAG0E,yBAA0B,SAAUzY,GACnCjD,KAAK4X,KAAKnF,GAAG2D,YAAYnT,EAC7B,EAAGI,QAAS,WACRrD,KAAK4X,KAAKvC,kBAAkBrV,KAAKwZ,WACjCxZ,KAAK4X,KAAKvC,kBAAkBrV,KAAK2b,QACjCjc,OAAO4M,oBAAoB,UAAWtM,KAAKia,WAAW,GACtDja,KAAKwZ,UAAUrY,WAAWC,YAAYpB,KAAKwZ,UAC/C,IAEA1G,YAAc,IAAIxP,MAAM,CACxBI,WAAY,SAAUkU,GAClB5X,KAAK4X,KAAOA,EACZ5X,KAAK4b,UAAY,EACZhZ,qBAAqBiZ,oBACtB7b,KAAK8b,WAAWnR,YAAYK,KAAK,sBAEzC,EAAG+Q,iBAAkB,WACjB,IAAK,IAAIrF,KAAM5E,QAAaA,QAAQzR,eAAeqW,IAC/C1W,KAAKgc,UAAUlK,QAAQ4E,GAAKA,GAEhC1W,KAAKic,cACT,EAAGlJ,OAAQ,WACP/S,KAAKwZ,UAAY7Y,SAASC,cAAc,OACxCZ,KAAKwZ,UAAU5J,UAAY,iCAAmC5P,KAAK4X,KAAKF,iBAAmB,GAAK,iBAChG1X,KAAKwZ,UAAU9C,GAAK,eAChB1W,KAAK4X,KAAKF,kBACV1X,KAAKwZ,UAAUtK,MAAMgN,OAAS,SAC9Blc,KAAKwZ,UAAUtK,MAAMiN,QAAU,QAE/BnM,YAAYhQ,KAAKwZ,UAAW,iBAEhC4C,yBAAyB7a,YAAYvB,KAAKwZ,WAE1CxZ,KAAKwZ,UAAU6C,UAAY,iiBAEvBrc,KAAK4b,UAFkB,mFAGvB5b,KAAKsc,eAHkB,eAI3Btc,KAAKuc,UAAY5b,SAASgC,eAAe,qBACzC3C,KAAKwc,iBAAmB7b,SAASgC,eAAe,6BAChD3C,KAAK8U,OAASnU,SAASgC,eAAe,kBACtC3C,KAAKyc,UAAY9b,SAASgC,eAAe,qBACzC3C,KAAK0c,WAAa/b,SAASgC,eAAe,uBAC1C3C,KAAK2c,YAAchc,SAASgC,eAAe,wBAC3C3C,KAAK4c,YAAcjc,SAASgC,eAAe,wBAC3C3C,KAAK6c,SAAWlc,SAASgC,eAAe,qBAExC,IADA,IAAIma,EAAM9c,KAAKwZ,UAAUnY,qBAAqB,KACrC8I,EAAI,EAAGA,EAAI2S,EAAIpX,OAAQyE,IAC5BnK,KAAK4X,KAAKzC,gBAAgB2H,EAAI3S,IAElCnK,KAAK4X,KAAKzC,gBAAgBnV,KAAKwZ,WAC3BxZ,KAAK4X,KAAKF,kBACV1X,KAAK+c,KAAO,IAAIzD,KAAKtZ,KAAK4X,MAC1B5X,KAAK+c,KAAKjZ,OAAS9D,KACnBA,KAAK+c,KAAKxD,SAASvZ,KAAKwZ,YAExBnI,WAAW,WACPrR,KAAKsa,aACT,EAAE7O,KAAKzL,MAAO,KAElBgM,SAAShM,KAAK6c,SAAU,QAASpR,KAAKzL,MAAM,SAAUS,GAClD+L,UAAU/L,GACVT,KAAK4X,KAAKX,UACd,KACAjL,SAAShM,KAAKwc,iBAAkB,QAAS/Q,KAAKzL,KAAMA,KAAKgd,aACzDhR,SAAShM,KAAK2c,YAAa,QAASlR,KAAKzL,KAAMA,KAAKid,oBACpDjd,KAAK+b,kBACT,EAAGO,aAAc,WACb,MAAO,EACX,EAAGhC,YAAa,WACZta,KAAKwZ,UAAUtK,MAAMiN,QAAU,QAC3Bnc,KAAK4X,KAAKD,yBACVtG,WAAW5F,KAAKzL,MAAM,WAClBgQ,YAAYhQ,KAAK0c,WAAY,0BACjC,IAAI,IACJrL,WAAW5F,KAAKzL,MAAM,WAClB+P,SAAS/P,KAAK0c,WAAY,0BAC9B,IAAI,KAEZ,EAAGQ,WAAY,SAAUC,EAAMC,GACtBA,GACDpd,KAAKqd,WAELrd,KAAK+c,MACL/c,KAAK+c,KAAKtC,kBAAkB,aAAe0C,EAEnD,EAAGH,WAAY,WACPhd,KAAK4X,KAAKF,iBACNjI,SAASzP,KAAKwZ,UAAW,iBACzBxZ,KAAKqd,WAELrd,KAAKkb,WAGTlb,KAAKqd,UAEb,EAAGJ,kBAAmB,WACdxN,SAASzP,KAAK2c,YAAa,iBAC3B3c,KAAKsd,kBAELtd,KAAKud,iBAEb,EAAGA,gBAAiB,WAChBvd,KAAK2c,YAAYzN,MAAMjJ,MAAQ,GAC/B8J,SAAS/P,KAAK2c,YAAa,gBAC/B,EAAGW,gBAAiB,WAChB,IAAIE,EAAOxd,KAAK2c,YAAYtb,qBAAqB,MACjDmc,EAAOA,EAAKA,EAAK9X,OAAS,GAC1B1F,KAAK2c,YAAYzN,MAAMjJ,MAASuX,EAAKpP,WAAaoP,EAAKvP,YAAc,GAAM,KAC3E+B,YAAYhQ,KAAK2c,YAAa,gBAClC,EAAGU,SAAU,WACLrd,KAAK4X,KAAKF,mBACV1X,KAAKwZ,UAAUtK,MAAMgN,OAAS,GAC9BlM,YAAYhQ,KAAKwZ,UAAW,iBAEpC,EAAG0B,SAAU,WACTlb,KAAKwZ,UAAUtK,MAAMgN,OAAS,GAC9BnM,SAAS/P,KAAKwZ,UAAW,gBAC7B,EAAGiE,aAAc,WACbzd,KAAK6c,SAAS3N,MAAMjJ,MAAQ,EAChC,EAAGgW,aAAc,WACbjc,KAAK6c,SAAS3N,MAAMjJ,MAAQ,KAChC,EAAG2P,UAAW,WACV,OAAO5V,KAAKwZ,UAAU3K,YAC1B,EAAG8G,UAAW,WACV,OAAQlG,SAASzP,KAAKwZ,UAAW,gBACrC,EAAGkE,UAAW,SAAUC,EAAQ9V,GAC5B,IAAIiN,EAAS6I,EAAS3d,KAAK4X,KAAKlE,WAChC1T,KAAK4b,WAAa9G,EAClB9U,KAAK8U,OAAOuH,UAAYrc,KAAK4b,UACzB5b,KAAK4X,KAAK3E,mBACVjT,KAAK4X,KAAK3E,kBAAkBoF,+BAA+BvD,GAE/D9U,KAAK4X,KAAKnF,GAAGmL,kBAAkB/V,EAAKiN,EACxC,EAAGgH,WAAY,SAAU+B,GACrB,IAAIC,EAAOnd,SAASC,cAAc,QAClCkd,EAAKC,IAAM,aACXD,EAAK5b,KAAO,WACZ4b,EAAKlE,KAAOiE,GACXld,SAASf,MAAQe,SAASW,MAAMC,YAAYuc,EACjD,EAAGnF,kBAAmB,SAAUD,GACxB1Y,KAAK+c,MACL/c,KAAK+c,KAAKpC,YAAYjC,EAE9B,EAAGsD,UAAW,SAAU1F,EAAQI,GAC5B,IAAIsH,EAAKrd,SAASC,cAAc,MAChCod,EAAGpO,UAAY,qCACfoO,EAAG1H,OAASA,EACZ0H,EAAG9O,MAAM+O,gBAAkB,OAAStT,YAAYK,KAAK,wBAA0BsL,EAAOI,GAAK,QAAU,IACrGsH,EAAG3B,UAAY,gCAAkC/F,EAAOnJ,KAAO,UAC/DnN,KAAK4c,YAAYrb,YAAYyc,GAC7BhS,SAASgS,EAAI,QAASvS,KAAKzL,MAAM,SAAUS,GACvC+L,UAAU/L,GACVT,KAAKqW,aAAaC,GAClBtW,KAAK2Y,kBAAkB,iBAAmBjC,EAC9C,IACJ,EAAGL,aAAc,SAAUC,GACvBtW,KAAK4X,KAAKvB,aAAaC,EAC3B,EAAGjT,QAAS,WAER,IADA,IAAIyZ,EAAM9c,KAAKwZ,UAAUnY,qBAAqB,KACrC8I,EAAI,EAAGA,EAAI2S,EAAIpX,OAAQyE,IAC5BnK,KAAK4X,KAAKvC,kBAAkByH,EAAI3S,IAEpCnK,KAAK4X,KAAKvC,kBAAkBrV,KAAKwZ,WAC7BxZ,KAAK+c,MACL/c,KAAK+c,KAAK1Z,UAEdrD,KAAKwZ,UAAUrY,WAAWC,YAAYpB,KAAKwZ,UAC/C,IAEA9G,UAAY,IAAIpP,MAAM,CACtBI,WAAY,SAAUkU,GAClB5X,KAAKke,OAAS,EACdle,KAAK4X,KAAOA,EACZ5X,KAAKme,aAAe,CAAC,EACrBne,KAAKoe,SAAW,CAAC,EACjBpe,KAAKqe,GAAK,IAAI5V,GACdzI,KAAKqe,GAAGxV,YAAY7I,KACxB,EAAGwJ,OAAQ,SAAUK,GACjB7J,KAAKqe,GAAG7U,QACZ,EAAGc,IAAK,SAAUxK,EAAKwe,EAAOrU,GAC1B,IAAI/H,EAAOpC,EAAIqa,MAAM,KAAK,GACtBzD,EAAK5W,EAAIqa,MAAM,KAAK,GACxB,GAAIna,KAAKme,aAAazH,GAAK,CACvB,IAAI6H,EAASve,KAAKme,aAAazH,GAC/B6H,EAAOrP,MAAM1G,IAAM8V,EAAM,GAAK,KAC9BC,EAAOrP,MAAMsP,QAAUF,EAAM,GAChB,GAATrU,GAAcsU,EAAOpd,aACrBod,EAAOpd,WAAWC,YAAYmd,UACvBve,KAAKme,aAAazH,GAEjC,MAAO,GAAI1W,KAAKoe,SAAS1H,IAAe,eAARxU,EAAuB,EAC/Ce,EAAUjD,KAAKoe,SAAS1H,IACpBxH,MAAM1G,IAAM8V,EAAM,GAAK,KAClB,GAATrU,GACAoH,WAAW5F,KAAKzL,MAAM,WAClBA,KAAKqe,GAAG3Z,IAAI,aAAegS,EAAI,CAC3B/N,OAAQ,CAAC,CAAC2V,EAAM,IAAK,MACrBpV,WAAYC,MAAMqB,UAClBvB,SAAU,KAElB,IAAIhG,EAAQwb,UAAY,IAEhC,MAAO,GAAIze,KAAKoe,SAAS1H,IAAe,aAARxU,EAAqB,CACjD,IAAIe,KAAUjD,KAAKoe,SAAS1H,IACpBxH,MAAM1G,IAAM8V,EAAM,GAAK,KAClB,GAATrU,IACAhH,EAAQ9B,WAAWC,YAAY6B,UACxBjD,KAAKoe,SAAS1H,GAE7B,CACJ,EAAGkH,kBAAmB,SAAU/V,EAAKiN,GACjC,IAAI4B,EAAK,SAAY1W,KAAKke,SACtB/Z,EAAInE,KAAK4X,KAAK5F,UAAU7N,EAAI0D,EAAI1D,EAChCoa,EAASlO,WAAW,OAAQ,CAC5BgM,UAAWvH,EACXlF,UAAW,iBACX8O,OAAQ,CACJC,SAAU,WACVC,KAAM,aACNC,WAAY,OACZL,QAAS,IACTM,MAAO,QACPC,WAAY,mBACZvW,IAAKrE,EACL6a,OAAQ,cAGhBT,EAAOrP,MAAM5G,KAAOT,EAAI3D,EAAIqa,EAAOtQ,YAAc,EAAI,KACrDmO,yBAAyB7a,YAAYgd,GACrCve,KAAKme,aAAazH,GAAM6H,EACxBve,KAAKqe,GAAG3Z,IAAI,UAAYgS,EAAI,CAAC/N,OAAQ,CAAC,CAACxE,EAAGA,EAAI,IAAK,CAAC,EAAG,KAC3D,EAAGiS,YAAa,SAAU6I,EAAMR,GAC5BA,EAAWA,IAAY,EACvB,IACI/H,EAAK1W,KAAKke,SACVjb,EAAUoN,WAAW,MAAO,CAC5BgM,UAAW4C,EACXrP,UAAW,iBACX8G,GAAI,mBAAqBA,EACzBgI,OAAQ,CACJC,SAAU,QACVnW,KAAM,IACNF,KAAM,MACN4W,YAAY,IACZjZ,MAXI,IAYJkZ,WAAY,OACZX,QAAS,GACTY,QAAS,OACTN,MAAO,OACPO,UAAW,SACXC,aAAc,GACdV,KAAM,aACNC,WAAY,OACZG,OAAQ,cAGhB/b,EAAQwb,SAAWA,EACnBrC,yBAAyB7a,YAAY0B,GACrC,IAAIsc,EAAKvf,KAAKwf,mBAId,OAHAvc,EAAQwc,UAAYF,EACpBvf,KAAKqe,GAAG3Z,IAAI,eAAiBgS,EAAI,CAACzN,SAAU,IAAKN,OAAQ,CAAC,EAAE,IAAK4W,IAAMrW,WAAYC,MAAMqB,YACzFxK,KAAKoe,SAAS1H,GAAMzT,EACbA,CACX,EAAGuc,iBAAkB,WACjB,IAAIhX,EAAM,IACV,IAAK,IAAIkO,KAAM1W,KAAKoe,SAAcpe,KAAKoe,SAAS/d,eAAeqW,KAC3DlO,EAAMvD,KAAKwI,IAAIzN,KAAKoe,SAAS1H,GAAI+I,UAAYzf,KAAKoe,SAAS1H,GAAIxI,aAAe,GAAI1F,IACtF,OAAOA,CACX,IAEAsL,aAAe,IAAIxQ,MAAM,CACzBI,WAAY,SAAU5C,EAAK4e,GAKvB,GAJA1f,KAAKc,IAAMA,EACXd,KAAK0f,QAAUA,EACfC,SAAW,EACX3f,KAAK4f,mBAAiE,IAAzCjf,SAASC,cAAc,SAAS2X,KACzDvY,KAAK4f,cAAe,CACpB5f,KAAK6f,YAAcF,SACnB3f,KAAK2f,SAAW,GAChB,IAAK,IAAIxV,EAAI,EAAGA,EAAInK,KAAK6f,YAAa1V,IAClCnK,KAAK2f,SAAS5W,KAAK,CAACoL,WAAW,EAAOpH,QAAS/M,KAAK8f,eAAe9f,KAAK+f,sBAEhF,CACJ,EAAGA,kBAAmB,WAGlB,IAFA,IAEgBC,EAFZC,EAAQ,CAACC,IAAO,YAAaC,IAAO,cACpCC,EAAQzf,SAASC,cAAc,SAC1BuJ,EAAI,EAAW6V,EAAShgB,KAAK0f,QAAQvV,GAAIA,IAAK,CACnD,IAAIkW,EAAS1f,SAASC,cAAc,UACpCyf,EAAOvf,IAAMd,KAAKc,IAAM,IAAMkf,EAC9BK,EAAOne,KAAO+d,EAAMD,GACpBI,EAAM7e,YAAY8e,EACtB,CACA,OAAOD,CACX,EAAGN,eAAgB,SAAU3R,GACzB,QAAkC,IAAvBA,EAAGrL,iBACV,OAAOqL,EACX,IAAImS,EAAOtgB,KAIX,OAHAmO,EAAGrL,iBAAiB,SAAS,SAAUrC,GACnC6f,EAAKC,WAAWpS,EACpB,IAAG,GACIA,CACX,EAAGoS,WAAY,SAAUC,GACrB,IAAK,IAAWC,EAAPtW,EAAI,EAAYsW,EAAUzgB,KAAK2f,SAASxV,GAAIA,IAC7CsW,EAAQ1T,UAAYyT,IACpBC,EAAQtM,WAAY,EAGhC,EAAGoE,KAAM,WACL,GAAKvY,KAAK4f,cACV,IAAK,IAAWa,EAAPtW,EAAI,EAAYsW,EAAUzgB,KAAK2f,SAASxV,GAAIA,IACjD,IAAKsW,EAAQtM,UAIT,OAHAsM,EAAQtM,WAAY,OACe,mBAAxBsM,EAAQ1T,QAAQwL,MACvBkI,EAAQ1T,QAAQwL,OAIhC,IAEA5D,MAAQ,CACRC,SAAU,CACNE,OAAQ,CAAC,EAAE,GAAI,IAAK,CAAC,GAAI,IAAK,CAAC,GAAI,KACnC4L,UAAW,CAAC,CAACC,EAAG,CAAChZ,EAAG,GAAIC,EAAG,GAAId,EAAG,CAAC5C,EAAG,EAAGC,EAAG,IAAKsC,EAAG,IACpDma,QAAS,CAAC,CAAC9Z,EAAG,CAAC5C,EAAG,EAAGC,GAAI,IAAKsC,EAAG,MAGrCoa,UAAY,EACZ7L,OAAS,IAAI1R,MAAM,CACnBI,WAAY,SAAUkU,GAClB5X,KAAK0W,GAAKmK,YACV7gB,KAAK4X,KAAOA,EACZ5X,KAAK4J,OAAQ,EACb5J,KAAK6W,SAAU,EACf7W,KAAK6H,IAAM,IAAI5D,OAAO,KAAM,KAC5BjE,KAAK8gB,IAAM,IAAI7c,OAAO,EAAG,GACzBjE,KAAK+gB,IAAM,IAAI9c,OAAO,EAAG,GACzBjE,KAAKghB,IAAM,IAAI/c,OAAO,EAAG,GACzBjE,KAAKihB,gBAAkB,EACvBjhB,KAAKkhB,UAAW,EAChBlhB,KAAKmhB,YAAc,GACnBnhB,KAAKohB,SAAW,EAChBphB,KAAKqhB,SAAW,IAChBrhB,KAAKshB,iBAAmB,IACxBthB,KAAKuhB,QAAU,IAAItd,OAAO,EAAG,EACjC,EAAGgR,QAAS,SAAUP,GAClB1U,KAAK0U,KAAOA,EACZ1U,KAAKwhB,MAAQ,GACb,IAAK,IAAWC,EAAPtX,EAAI,EAASsX,EAAOzhB,KAAK0U,KAAKI,OAAO3K,GAAIA,IAC9CnK,KAAKwhB,MAAMzY,KAAK,IAAI9E,OAAOwd,EAAK,GAAIA,EAAK,KAC7CzhB,KAAKwhB,MAAMzY,KAAK/I,KAAKwhB,MAAM,IAC3BxhB,KAAK0gB,UAAY,GACjB1gB,KAAK4gB,QAAU,GACf5gB,KAAK0hB,aAAa1hB,KAAK0U,KAAKgM,WAC5B1gB,KAAK2hB,WAAW3hB,KAAK0U,KAAKkM,SAC1B5gB,KAAK8H,KAAO9H,KAAK4hB,6BACjB5hB,KAAK6hB,OAAS7hB,KAAK8hB,kBACf9hB,KAAK+hB,OACL/hB,KAAK+hB,MAAM1e,UAEfrD,KAAK+hB,MAAQ,IAAIC,MAAM,IAAIta,KAAK,IAAK,IAAK1H,KAAK6hB,OAAO3d,EAAGlE,KAAK6hB,OAAO1d,IACrEnE,KAAKiiB,aAAc,CACvB,EAAGzL,WAAY,SAAUzE,GAErB,IADA,IACgBmQ,EADZC,EAAa,GACRhY,EAAI,EAAW+X,EAASliB,KAAK4gB,QAAQzW,GAAIA,IAAK,CACnD,IAAIiY,EAAY,IAAIrQ,EAAY/R,KAAMA,KAAK4X,KAAMsK,EAAOra,IAAI3D,EAAGge,EAAOra,IAAI1D,EAAG+d,EAAOld,OACpFmd,EAAWpZ,KAAKqZ,GAChBF,EAAO7e,SACX,CACArD,KAAK4gB,QAAUuB,CACnB,EAAGT,aAAc,SAAUhB,GACvB,IAAK,IAAWlgB,EAAP2J,EAAI,EAAS3J,EAAOkgB,EAAUvW,GAAIA,IAAK,CAC5C,IAAIkY,EAAW,IAAIC,SAAS9hB,GAC5BR,KAAK0gB,UAAU3X,KAAKsZ,EACxB,CACJ,EAAGV,WAAY,SAAUf,GACrB,IAAK,IAAWpgB,EAAP2J,EAAI,EAAS3J,EAAOogB,EAAQzW,GAAIA,IAAK,CAC1C,IACI+X,EAAS,IADKK,UAAU/hB,EAAKgiB,IAAMD,UAAUL,QACpBnQ,YAAY/R,KAAMA,KAAK4X,KAAMpX,EAAKsG,EAAE5C,EAAG1D,EAAKsG,EAAE3C,EAAG3D,EAAKiG,GACnFyb,EAAOzN,OAASzU,KAChBkiB,EAAOtK,KAAO5X,KAAK4X,KACnB5X,KAAK4gB,QAAQ7X,KAAKmZ,EACtB,CACJ,EAAG1Y,OAAQ,SAAUK,GACjB,GAAI7J,KAAKkhB,SAAU,CACf,IAAKlhB,KAAKmhB,YAAYzb,OAClB,IAAK,IAAIyE,EAAI,EAAGA,EAAKnK,KAAKwhB,MAAM9b,OAAS,EAAIyE,IACzCnK,KAAKmhB,YAAYhX,GAAK,CAClBtC,IAAK,IAAI5D,OAAO,EAAG,GACnB+c,IAAK,IAAK/c,OAAO,EAAG,GAAIoB,SAAmB,EAAVJ,KAAKwd,GAASxd,KAAKsI,WAGhE,IAASpD,EAAI,EAAGA,EAAInK,KAAKmhB,YAAYzb,OAAQyE,IACzCnK,KAAKmhB,YAAYhX,GAAGtC,IAAInD,IAAI1E,KAAKmhB,YAAYhX,GAAG6W,IAAI5c,KAAKqB,UAAU,IAAIpB,IAAIwF,IAW/E,OATA7J,KAAK+hB,MAAMW,QACX1iB,KAAK+hB,MAAM1c,SAASrF,KAAKghB,IAAIhc,SAC7BhF,KAAK+hB,MAAMY,YAAY3iB,KAAK6H,KAC5B7H,KAAK+hB,MAAMa,iBAAiB5iB,KAAKwhB,MAAOxhB,KAAKmhB,kBACzCzX,MAAQ1J,KAAKohB,SAAW,MACxBphB,KAAKkhB,UAAW,EAChBlhB,KAAKmhB,YAAc,GACnBnhB,KAAK6iB,aAGb,CACK7iB,KAAK4J,QACF5J,KAAK4X,KAAKpC,aAAa,SAAWxV,KAAK4X,KAAKpC,aAAa,UACrDxV,KAAK4X,KAAKpC,aAAa,SACvBxV,KAAK8iB,WAAWjZ,GAChB7J,KAAK4X,KAAKpC,aAAa,UACvBxV,KAAK+iB,YAAYlZ,IAErB7J,KAAKgjB,aAELhjB,KAAK4X,KAAKpC,aAAa,MACvBxV,KAAKijB,oBACLjjB,KAAKkjB,iBAETljB,KAAK4X,KAAKpC,aAAa,MACvBxV,KAAKmjB,YAAa,EACbnjB,KAAKkhB,UACNlhB,KAAKojB,gBACFpjB,KAAKmjB,aACZnjB,KAAKmjB,YAAa,EAClBnjB,KAAKqjB,iBAELrjB,KAAKihB,iBACLjhB,KAAKghB,IAAI3b,SAASrF,KAAKghB,IAAIhc,QAAUhF,KAAKihB,gBAAkBpX,GAChE,IAAIyZ,EAAgBtjB,KAAK+gB,IAAIxc,OAAOsF,GAAQhF,IAAI7E,KAAK8gB,IAAIvc,OAAOsF,EAAS7J,KAAKqhB,WAC9ErhB,KAAK8gB,IAAIpc,IAAI4e,GACTtjB,KAAK8gB,IAAIvb,MAAQvF,KAAKshB,kBACtBthB,KAAK8gB,IAAIrb,UAAUzF,KAAKshB,kBAC5B,IAAIiC,EAAWvjB,KAAK8gB,IAAIvc,OAAOsF,GAC/B7J,KAAK6H,IAAInD,IAAI6e,GACTvjB,KAAK4X,KAAK3E,mBACVjT,KAAK4X,KAAK3E,kBAAkBkF,2BAA2BoL,EAAShe,OAEpE,IAAIie,GAAcxjB,KAAK+gB,IAAI3a,GAAG,CAAClC,EAAG,EAAGC,EAAG,IACxC,IAASgG,EAAI,EAAakY,EAAWriB,KAAK0gB,UAAUvW,GAAIA,IACpDkY,EAASoB,WAAWD,GACpBnB,EAAS7Y,OAAOK,GAIpB,GAFI7J,KAAK6W,SACL7W,KAAK0jB,eACJ1jB,KAAKuhB,QAAQnb,GAAGpG,KAAK6H,MAAQ7H,KAAKihB,iBAAmBjhB,KAAKiiB,YAAa,CAKxE,GAJAjiB,KAAKiiB,aAAc,EACnBjiB,KAAK+hB,MAAMW,QACX1iB,KAAK+hB,MAAM1c,SAASrF,KAAKghB,IAAIhc,QAAUC,KAAKwd,GAAK,GACjDziB,KAAK+hB,MAAMY,YAAY3iB,KAAK6H,KACxB2b,EACK,KAAWnB,EAAhB,IAASlY,EAAI,EAAakY,EAAWriB,KAAK0gB,UAAUvW,GAAIA,IACpDkY,EAASsB,OAAO3jB,KAAK+hB,MADTM,CAGpBriB,KAAK+hB,MAAM6B,WAAW5jB,KAAKwhB,OAC3BxhB,KAAKuhB,QAAUvhB,KAAK6H,IAAIzD,IAC5B,CACK,IAAW8d,EAAhB,IAAS/X,EAAI,EAAW+X,EAASliB,KAAK4gB,QAAQzW,GAAIA,IAC9C+X,EAAO1Y,OAAOK,EAEtB,EAAGgZ,UAAW,WACV,IAAIlb,EAAI3H,KAAK4X,KAAK1F,WAAWjM,MACzB2B,EAAI5H,KAAK4X,KAAK1F,WAAWhM,OAC7BlG,KAAK6H,IAAM,IAAI5D,OAAOsJ,OAAO,EAAG5F,GAAI4F,OAAO,EAAG3F,GAClD,EAAG8b,YAAa,WACZ,IAAI1jB,KAAK4J,MAAT,CAEA,IAAIjC,EAAI3H,KAAK4X,KAAK1F,WAAWjM,MACzB2B,EAAI5H,KAAK4X,KAAK1F,WAAWhM,OACzB2d,EAAa7jB,KAAK6H,IAAI3D,EAAIlE,KAAK+hB,MAAM/b,KAAK8B,KAAK7B,MAAQ,EACvD6d,EAAc9jB,KAAK6H,IAAI1D,EAAInE,KAAK+hB,MAAM/b,KAAK8B,KAAK5B,OAAS,EACzD2d,EAAalc,GACbjI,OAAOqkB,SAAS/jB,KAAK4X,KAAK5F,UAAU9N,EAAI,GAAIlE,KAAK4X,KAAK5F,UAAU7N,GAChEnE,KAAK6H,IAAI3D,EAAI,GACNlE,KAAK6H,IAAI3D,EAAI,IACpBxE,OAAOqkB,SAAS/jB,KAAK4X,KAAK5F,UAAU9N,EAAI,GAAIlE,KAAK4X,KAAK5F,UAAU7N,GAChEnE,KAAK6H,IAAI3D,EAAIyD,EAAI3H,KAAK+hB,MAAM/b,KAAK8B,KAAK7B,MAAQ,GAE9C6d,EAAclc,GACdlI,OAAOqkB,SAAS/jB,KAAK4X,KAAK5F,UAAU9N,EAAGlE,KAAK4X,KAAK5F,UAAU7N,EAAQ,IAAJyD,GAC/D5H,KAAK6H,IAAI1D,EAAI,GACNnE,KAAK6H,IAAI1D,EAAI,IACpBzE,OAAOqkB,SAAS/jB,KAAK4X,KAAK5F,UAAU9N,EAAGlE,KAAK4X,KAAK5F,UAAU7N,EAAQ,IAAJyD,GAC/D5H,KAAK6H,IAAI1D,EAAIyD,EAAI5H,KAAK+hB,MAAM/b,KAAK8B,KAAK5B,OAAS,EAjBzC,CAmBd,EAAG8d,OAAQ,SAAUhe,GAEjB,IADA,IACgByb,EADZje,GAAM,EACD2G,EAAI,EAASsX,EAAOzhB,KAAKwhB,MAAMrX,GAAIA,IACpCnE,EAAK+B,SAAS,IAAI9D,OAAOwd,EAAKvd,EAAIlE,KAAK6H,IAAI3D,EAAGud,EAAKtd,EAAInE,KAAK6H,IAAI1D,MAChEX,GAAM,GAEd,OAAOA,CACX,EAAGygB,IAAK,SAAUC,GACVlkB,KAAKkhB,WACTlhB,KAAKkhB,UAAW,EAChBlhB,KAAKohB,SAAW1X,MACpB,EAAGuZ,kBAAmB,WACdjjB,KAAK4X,KAAK3E,mBACVjT,KAAK4X,KAAK3E,kBAAkBiF,gBAEhClY,KAAK+gB,IAAM,IAAK9c,OAAO,IAAK,GAAIoB,SAASrF,KAAKghB,IAAIhc,QACtD,EAAGke,cAAe,WACdljB,KAAK+gB,IAAM,IAAI9c,OAAO,EAAG,EAC7B,EAAG6e,WAAY,SAAUjZ,GACrB7J,KAAKihB,gBAAkBhc,KAAKwI,IAAe,GAAVxI,KAAKwd,GAAQziB,KAAKihB,gBAA4B,GAAVhc,KAAKwd,GAAU5Y,EACxF,EAAGkZ,YAAa,SAAUlZ,GACtB7J,KAAKihB,gBAAkBhc,KAAKuI,IAAc,EAAVvI,KAAKwd,GAAQziB,KAAKihB,gBAA4B,GAAVhc,KAAKwd,GAAU5Y,EACvF,EAAGmZ,WAAY,WACXhjB,KAAKihB,gBAAkB,CAC3B,EAAGW,2BAA4B,WAE3B,IADA,IACgBH,EADZ0C,EAAkB,EACbha,EAAI,EAASsX,EAAOzhB,KAAKwhB,MAAMrX,GAAIA,IACxCga,EAAkBlf,KAAKwI,IAAI0W,EAAiB,IAAKlgB,OAAOwd,GAAOlc,OAC9D,IAAW0G,EAAhB,IAAS9B,EAAI,EAAQ8B,EAAMjM,KAAK0gB,UAAUvW,GAAIA,IAAK,CAC/C,IAAIia,EAAK,IAAKngB,OAAOgI,EAAIpE,IAAI3D,EAAI+H,EAAInE,KAAK7B,MAAQ,EAAGgG,EAAIpE,IAAI1D,EAAI8H,EAAInE,KAAK5B,OAAS,GAAInB,OAAOkH,EAAIjH,OAC9Fqf,EAAK,IAAKpgB,OAAOgI,EAAIpE,IAAI3D,EAAI+H,EAAInE,KAAK7B,MAAQ,EAAGgG,EAAIpE,IAAI1D,EAAI8H,EAAInE,KAAK5B,OAAS,GAAInB,OAAOkH,EAAIjH,OAC9Fsf,EAAK,IAAKrgB,OAAOgI,EAAIpE,IAAI3D,EAAI+H,EAAInE,KAAK7B,MAAQ,EAAGgG,EAAIpE,IAAI1D,EAAI8H,EAAInE,KAAK5B,OAAS,GAAInB,OAAOkH,EAAIjH,OAC9Fuf,EAAK,IAAKtgB,OAAOgI,EAAIpE,IAAI3D,EAAI+H,EAAInE,KAAK7B,MAAQ,EAAGgG,EAAIpE,IAAI1D,EAAI8H,EAAInE,KAAK5B,OAAS,GAAInB,OAAOkH,EAAIjH,OAClGmf,EAAkBlf,KAAKwI,IAAI0W,EAAiBC,EAAG7e,MAAO8e,EAAG9e,MAAO+e,EAAG/e,MAAOgf,EAAGhf,MACjF,CACA,MAAO,CAACU,MAAyB,EAAlBke,EAAqBje,OAA0B,EAAlBie,EAChD,EAAGrC,gBAAiB,WAChB,MAAO,CACH5d,EAAiD,EAA9Ce,KAAKwI,IAAIzN,KAAK8H,KAAK7B,MAAOjG,KAAK8H,KAAK5B,QACvC/B,EAAiD,EAA9Cc,KAAKwI,IAAIzN,KAAK8H,KAAK5B,OAAQlG,KAAK8H,KAAK7B,OAEhD,EAAGmd,aAAc,WACb,IAAK,IAAWlB,EAAP/X,EAAI,EAAW+X,EAASliB,KAAK4gB,QAAQzW,GAAIA,IAC9C+X,EAAOkB,cACf,EAAGC,cAAe,WACd,IAAK,IAAWnB,EAAP/X,EAAI,EAAW+X,EAASliB,KAAK4gB,QAAQzW,GAAIA,IAC9C+X,EAAOmB,eACf,EAAGzM,MAAO,SAAU1S,EAAGC,EAAG/D,GACtBJ,KAAK4J,MAAQ,CACTN,MAAO,CAACzB,IAAK7H,KAAK6H,IAAIzD,KAAM4c,IAAKhhB,KAAKghB,IAAI5c,MAC1Cmb,GAAI,IAAItb,OAAOC,EAAGC,GAClB/D,SAAUA,GAAY,WACtB,GAEJJ,KAAK4J,MAAMH,KAAOzJ,KAAKwkB,iBAC3B,EAAGnhB,QAAS,WACRrD,KAAK+hB,MAAM1e,SACf,IAEAif,SAAW,IAAIhf,MAAM,CACrBI,WAAY,SAAUlD,EAAMkU,GACxB1U,KAAK6H,IAAM,IAAI5D,OAAOzD,EAAKsG,GAC3B9G,KAAK8H,KAAO,CAAC7B,MAAOzF,EAAKmgB,EAAEhZ,EAAGzB,OAAQ1F,EAAKmgB,EAAE/Y,GAC7C5H,KAAKgF,MAAQxE,EAAKiG,GAAK,EACvBzG,KAAK0U,KAAOA,EACZ1U,KAAKykB,SAAU,EACfzkB,KAAK0kB,OAAS,EACd1kB,KAAKqe,GAAK,IAAI5V,GACdzI,KAAKqe,GAAGxV,YAAY7I,MACpBA,KAAK2kB,OAAS,CAACC,EAAG,GAAIzgB,EAAG,IACzBnE,KAAK6kB,gBAAkB,EACvB7kB,KAAK8kB,gBACT,EAAGtb,OAAQ,SAAUK,GACjB7J,KAAKqe,GAAG7U,SACJE,MAAQ1J,KAAK6kB,gBAAkB,IAAO,IACtC7kB,KAAK8kB,gBACb,EAAGxa,IAAK,SAAUxK,EAAKwe,GACnB,GACQ,WADAxe,EAEAE,KAAK0kB,OAASpG,CAG1B,EAAGmF,WAAY,SAAUgB,IAChBzkB,KAAKykB,SAAWA,IACjBzkB,KAAK0kB,OAAS,EACd1kB,KAAK8kB,iBACL9kB,KAAKqe,GAAG3Z,IAAI,SAAU,CAAC4E,MAAOtJ,KAAK0kB,OAAQnb,IAAK,EAAGN,SAAU,IAAKC,WAAYC,MAAMsB,WAExFzK,KAAKykB,QAAUA,CACnB,EAAGd,OAAQ,SAAU5B,GACjBA,EAAMgD,WAAW/kB,KAAK2kB,OAAQ3kB,KAAKgF,MACvC,EAAG8f,eAAgB,WACf,IAAIE,EAAWhlB,KAAK8H,KAAK7B,MAAOgf,EAAgC,IAAlBjlB,KAAK8H,KAAK7B,MAAcif,EAAgC,GAAlBllB,KAAK8H,KAAK7B,MAC1Fkf,EAA+B,GAAdD,EAAmBE,EAAUJ,EAAW,EAAGK,EAAaH,EAAc,EAEvF9M,GADWpY,KAAK8H,KAAK5B,OAChBlG,KAAK6H,IAAI3D,GACdohB,EAAKtlB,KAAK6H,IAAI1D,EAAInE,KAAK8H,KAAK5B,OAAS,EAEzC,SAASvB,EAAIT,EAAGC,GACZ,OAAO,IAAIF,OAAOC,EAAGC,EACzB,CAEAnE,KAAK2kB,OAAOC,EAAI,CAACjgB,GAAKygB,EAAUhN,EAAIkN,IACpCtlB,KAAK2kB,OAAOxgB,EAAI,CAACQ,GAAK0gB,EAAajN,EAAIkN,IACvCtlB,KAAK2kB,OAAOrE,KAAOtgB,KACnB,IAAK,IAAIkE,EAAI,EAAGA,EAAI8gB,EAAU9gB,GAAK+gB,EAC/BjlB,KAAK2kB,OAAOC,EAAE7b,KAAKpE,EAAIT,EAAIkhB,EAAUhN,EAAIpY,KAAK0kB,OAASnX,OAA0B,GAAnBvN,KAAK8H,KAAK5B,OAAclG,KAAK8H,KAAK5B,QAAUof,IAC9GtlB,KAAK2kB,OAAOC,EAAE7b,KAAKpE,EAAIygB,EAAUhN,EAAIkN,IACrC,IAASphB,EAAI,EAAGA,EAAIghB,EAAahhB,GAAKihB,EAClCnlB,KAAK2kB,OAAOxgB,EAAE4E,KAAKpE,EAAIT,EAAImhB,EAAajN,EAAIpY,KAAK0kB,OAASnX,OAA0B,GAAnBvN,KAAK8H,KAAK5B,OAAiC,GAAnBlG,KAAK8H,KAAK5B,QAAgBof,IACvHtlB,KAAK2kB,OAAOxgB,EAAE4E,KAAKpE,EAAI0gB,EAAajN,EAAIkN,IACxCtlB,KAAK6kB,gBAAkBnb,MAEvB,IADA,IAAI7B,EAAMlD,EAAIyT,EAAIkN,GACTnb,EAAI,EAAMrD,EAAI9G,KAAK2kB,OAAOC,EAAEza,GAAIA,IACrCrD,EAAEjC,IAAIgD,GAAK9C,OAAO/E,KAAKgF,OAAON,IAAImD,GACjC,IAAWf,EAAhB,IAASqD,EAAI,EAAMrD,EAAI9G,KAAK2kB,OAAOxgB,EAAEgG,GAAIA,IACrCrD,EAAEjC,IAAIgD,GAAK9C,OAAO/E,KAAKgF,OAAON,IAAImD,EAC1C,IAEA+K,YAAc,IAAItP,MAAM,CACxBI,WAAY,SAAUkU,GAClB5X,KAAK4X,KAAOA,EACZ5X,KAAKulB,cAAgB,GACrBvlB,KAAKwlB,SAAWxlB,KAAKulB,aACzB,EAAG/b,OAAQ,SAAUK,GACb7J,KAAK4X,KAAKpC,aAAa,MAAQxV,KAAKylB,WACpCzlB,KAAKkX,QAEc,IAAnBlX,KAAKwlB,UAAoBxlB,KAAK4X,KAAK1E,eAAeiB,YAGtDnU,KAAKwlB,UAAY3b,EACb7J,KAAKwlB,SAAW,IAChBxlB,KAAK4X,KAAK/E,YAAY4K,eACtBzd,KAAKwlB,UAAY,EACjBxlB,KAAK4X,KAAKnF,GAAG2D,YAAY,iDAEjC,EAAGc,KAAM,WACL,IAAIjU,EAAUjD,KAAK4X,KAAKnF,GAAG2D,YAAY,OAAQ,KAC/C9E,MAAM,KAAM,WACRrO,EAAQoZ,UAAY,MACxB,GAAGrc,MACHsR,MAAM,KAAM,WACRrO,EAAQoZ,UAAY,MACxB,GAAGrc,MACHsR,MAAM,KAAM,WACRrO,EAAQoZ,UAAY,MACxB,GAAGrc,MACHsR,MAAM,IAAMtR,KAAK0lB,YAAa1lB,MAC9BA,KAAKwlB,SAAWxlB,KAAKulB,aACzB,EAAGG,YAAa,WACZ1lB,KAAK4X,KAAKxF,cAAcE,mBAExB,IADA,IACgBnE,EADZwX,EAAQ3lB,KAAK4X,KAAKxF,cAAcwT,WAC3Bzb,EAAI,GAAQgE,EAAKwX,EAAMxb,KAAOA,EAAI,GAAIA,IAAK,CAChD,IAAInE,EAAO2H,QAAQQ,GACf0X,EAAS,IAAI5hB,OAAO+B,EAAKsC,KAAOtC,EAAKC,MAAQ,EAAGD,EAAKwC,IAAMxC,EAAKE,OAAS,GAC7ElG,KAAK4X,KAAKrF,iBAAiB2C,aAAa2Q,EAAQ1X,EAAI2X,uBACpD3X,EAAGhN,WAAWC,YAAY+M,EAC9B,CACAnO,KAAK4X,KAAK/E,YAAYoJ,eACtBjc,KAAKwlB,SAAWxlB,KAAKulB,aACzB,EAAGE,QAAS,WACR,OAA0B,IAAnBzlB,KAAKwlB,QAChB,IAEAO,+BAAiC,CAAC,KAAM,SAAU,QAAS,QAAS,OAAQ,OAAQ,SAAU,WAAY,QAC1GC,qBAAuB,EACvB3T,cAAgB,IAAI/O,MAAM,CAC1BI,WAAY,SAAUkU,GAClB5X,KAAK4X,KAAOA,EACZ5X,KAAKimB,UAAY,EACjBjmB,KAAKkmB,aAAc,EACnBlmB,KAAK4lB,WAAa,GAClB5lB,KAAKmmB,YAAc,IACnBnmB,KAAKomB,WAAapmB,KAAKmmB,WAC3B,EAAG3c,OAAQ,SAAUK,GACb7J,KAAK4X,KAAKpC,aAAa,KACvBxV,KAAKqmB,QACErmB,KAAKkmB,aACZlmB,KAAKsmB,WAETtmB,KAAKomB,YAAcvc,EACf7J,KAAKomB,WAAa,GAClBpmB,KAAKsS,kBAEb,EAAG+T,MAAO,WACN,GAAI3c,MAAQ1J,KAAKimB,UAAY,IAAK,CAC9B,IAAK,IAAW9X,EAAPhE,EAAI,EAAOgE,EAAKnO,KAAK4lB,WAAWzb,GAAIA,IACpCnK,KAAKkmB,YAEN/X,EAAGe,MAAMqX,QAAUpY,EAAGqY,iBADtBrY,EAAGe,MAAMqX,QAAU,gBAG3BvmB,KAAKkmB,aAAelmB,KAAKkmB,YACzBlmB,KAAKimB,UAAYvc,MACZ1J,KAAKkmB,aACNlmB,KAAKsS,kBAEb,CACJ,EAAGgU,SAAU,WACT,IAAK,IAAWnY,EAAPhE,EAAI,EAAOgE,EAAKnO,KAAK4lB,WAAWzb,GAAIA,IACzCgE,EAAGe,MAAMqX,QAAUpY,EAAGqY,iBAC1BxmB,KAAKimB,UAAY,EACjBjmB,KAAKkmB,aAAc,CACvB,EAAG5T,iBAAkB,WACjB,IAAIwK,EAAMnc,SAASU,qBAAqB,KACxCrB,KAAK4lB,WAAa,GAClB,IAAK,IAAWzX,EAAPhE,EAAI,EAAOgE,EAAK2O,EAAI3S,GAAIA,IACzBnK,KAAKymB,cAActY,KACnBnO,KAAK4lB,WAAW7c,KAAKoF,GACrBA,EAAGqY,iBAAmBrY,EAAGe,MAAMqX,SAAY5lB,SAASyO,YAAYC,iBAAiBlB,EAAI,MAAa,SAG1GnO,KAAKomB,WAAapmB,KAAKmmB,WAC3B,EAAGM,cAAe,SAAU1Z,EAAS2Z,GACjC,GAAI1mB,KAAK2mB,oBAAoB5Z,EAAS2Z,GAClC,OAAO,EACX,IAAK,IAAWE,EAAPzc,EAAI,EAAUyc,EAAQ7Z,EAAQ8Z,WAAW1c,GAAIA,IAClD,GAAuB,IAAnByc,EAAME,WAA6E,IAA3Df,+BAA+BxV,QAAQqW,EAAMG,UAAoBH,EAAM3Y,aAAe+X,sBAAwBY,EAAM1Y,cAAgB8X,sBAA2F,WAAlErlB,SAASyO,YAAYC,iBAAiBuX,EAAO,MAAM5Q,WACxO,OAAO,EAGf,OAAO,CACX,EAAGgR,2BAA4B,SAAUja,GACrC,OAAO/M,KAAKymB,cAAc1Z,GAAS,EACvC,EAAG4Z,oBAAqB,SAAU5Z,EAAS2Z,GACvC,OAAyB,IAArB3Z,EAAQ+Z,WAER/Z,GAAWpM,SAAS+N,iBAAmB3B,GAAWpM,SAASW,QAEE,IAA7DykB,+BAA+BxV,QAAQxD,EAAQga,WAEnB,UAA5Bha,EAAQmC,MAAM8G,YAAmD,QAAzBjJ,EAAQmC,MAAMiN,UAE1B,iBAArBpP,EAAQ6C,YAAyE,GAAhD7C,EAAQ6C,UAAUW,QAAQ,qBAEjEmW,IACG3Z,EAAQkB,YAAc+X,sBAAwBjZ,EAAQmB,aAAe8X,yBAIzEjZ,EAAQqB,WAAa,GAAKrB,EAAQsB,UAAY,MAC9CrI,EAAO2H,QAAQZ,IACNzE,KAAOtC,EAAKC,MAAQ,GAAKD,EAAKwC,IAAMxC,EAAKE,OAAS,KAG1DF,IACDA,EAAO2H,QAAQZ,IACf/G,EAAKwC,KAAOxI,KAAK4X,KAAK3F,WAAW9N,SARrC,IAAI6B,CAWR,EAAG3C,QAAS,WACR,IAAK,IAAIvD,KAAOE,KAAKinB,QAAS,GAAIjnB,KAAKinB,QAAQ5mB,eAAeP,GAC1D,IAAK,IAAWonB,EAAP/c,EAAI,EAAW+c,EAASlnB,KAAKinB,QAAQnnB,GAAKqK,GAAIA,IACnD+c,EAAO7jB,UACfrD,KAAKinB,QAAU,CAAC,CACpB,IAEA9T,eAAiB,IAAI7P,MAAM,CAC3BI,WAAY,SAAUkU,GAClB5X,KAAK4X,KAAOA,EACZ5X,KAAKmU,WAAY,CACrB,EAAG3K,OAAQ,SAAUK,GACb7J,KAAKmU,WAA0D,GAA7CnU,KAAK4X,KAAKxF,cAAcwT,WAAWlgB,QACrD1F,KAAKmnB,WAEb,EAAGA,UAAW,WACVnnB,KAAKmU,WAAY,EACjBnU,KAAK4X,KAAKnF,GAAG2D,YAAY,gBACrBpW,KAAK4X,KAAKjE,cACV3T,KAAK4X,KAAK/E,YAAYwK,WACtBrd,KAAK4X,KAAK/E,YAAYqK,WAAW,eAEjCld,KAAK4X,KAAK/E,YAAYwK,WAE1Brd,KAAK4X,KAAK/E,YAAY8F,kBAAkB,iBAC5C,IAEAnG,iBAAmB,IAAIlP,MAAM,CAC7BI,WAAY,SAAUkU,GAClB5X,KAAK4X,KAAOA,EACZ5X,KAAKonB,WAAa,EACtB,EAAG5d,OAAQ,SAAUK,GAEjB,IADA,IACgBgK,EADZpK,EAAOC,MACFS,EAAI,EAAc0J,EAAY7T,KAAKonB,WAAWjd,GAAIA,IACnDV,EAAOoK,EAAUwT,QAAUxT,EAAUyT,KAAO,MAC5CzT,EAAUxQ,UACVrD,KAAKonB,WAAW9R,OAAOnL,EAAG,IAG9B0J,EAAUrK,OAAOK,EAEzB,EAAGqL,aAAc,SAAUrN,EAAK0f,EAAYC,GAExC,IAAI3T,EAAY,IADhB2T,EAAiBA,GAAkBC,mBACA5f,EAAK0f,GACxC1T,EAAU+D,KAAO5X,KAAK4X,KACtB/D,EAAU6P,cACV1jB,KAAKonB,WAAWre,KAAK8K,GACjB7T,KAAK4X,KAAKhE,aAAaC,WACvB7T,KAAK4X,KAAKhE,aAAaC,UAAU0E,MAEzC,EAAGlV,QAAS,WACR,IAAK,IAAWwQ,EAAP1J,EAAI,EAAc0J,EAAY7T,KAAKonB,WAAWjd,GAAIA,IACvD0J,EAAUxQ,UACdrD,KAAKonB,WAAa,EACtB,IAEAM,OAAS,IAAIpkB,MAAM,CACnBI,WAAY,SAAU+Q,EAAQmD,EAAM1T,EAAGC,EAAGa,GACtChF,KAAKyU,OAASA,EACdzU,KAAK4X,KAAOA,EACZ5X,KAAK6H,IAAM,IAAI5D,OAAOC,EAAGC,GACzBnE,KAAKgF,MAAQA,GAAS,CAC1B,EAAGoe,aAAc,WACjB,EAAGC,cAAe,WAClB,EAAGsE,gBAAiB,WACpB,EAAGC,kBAAmB,WAClB,OAAOH,iBACX,EAAGje,OAAQ,SAAUK,GACjB7J,KAAK4X,KAAK7B,UACV/V,KAAK2nB,gBAAgB9d,GACrB7J,KAAK4X,KAAK3B,SACd,EAAG4R,eAAgB,SAAUX,GACzB,IAAIjD,EAAMiD,EAAOW,iBACjB,QAAK5D,IAELjkB,KAAK4X,KAAKrF,iBAAiB2C,aAAagS,EAAOrf,IAAKoc,EAAKjkB,KAAK4nB,qBAC9D5nB,KAAK4X,KAAK/E,YAAY6K,UAAUzY,KAAKuI,IAAIyW,EAAI5iB,qBAAqB,KAAKqE,OAAS,EAAG,KAAMwhB,EAAOrf,KAC3Foc,EAAI6D,QACL7D,EAAI9iB,WAAWC,YAAY6iB,GAE3BjkB,KAAK4X,KAAK3E,mBACVjT,KAAK4X,KAAK3E,kBAAkBuF,wBAEzB,EACX,EAAGuP,aAAc,SAAUC,GACvB,IAEId,EAAS,IAAIc,EAFPhoB,KAAKioB,gBACLjoB,KAAKkoB,iBAMf,OAJAhB,EAAOtP,KAAO5X,KAAK4X,KACnBsP,EAAOiB,QAAUnoB,KACjBknB,EAAOkB,aACPlB,EAAOpG,IAAIpc,IAAIwiB,EAAOpG,IAAI1c,KAAKqB,UAAUzF,KAAKyU,OAAOqM,IAAIvb,QAClD2hB,CACX,EAAGe,cAAe,WACd,OAAOjoB,KAAKyU,OAAO5M,IAAIzD,KAAKM,IAAI1E,KAAK6H,IAAIzD,KAAKW,OAAO/E,KAAKyU,OAAOuM,IAAIhc,QAAUC,KAAKwd,GAAK,GAC7F,EAAGyF,cAAe,WACd,OAAOloB,KAAKyU,OAAOuM,IAAI5c,KAAKW,OAAO/E,KAAKgF,MAC5C,EAAG3B,QAAS,WACZ,IAEAglB,YAAc,IAAI/kB,MAAM,CACxBO,QAAS6jB,OAAQhkB,WAAY,SAAU+Q,EAAQmD,EAAM1T,EAAGC,EAAGa,GACvD0iB,OAAO3jB,UAAUL,WAAWC,MAAM3D,KAAM4D,WACxC5D,KAAKsoB,OAAS,EAClB,EAAGV,kBAAmB,WAClB,OAAOW,cACX,EAAG/e,OAAQ,SAAUK,GACZ7J,KAAKsoB,OAAO5iB,SAEjB1F,KAAKwoB,YACLd,OAAO3jB,UAAUyF,OAAOe,KAAKvK,KAAM6J,GACvC,EAAG8d,gBAAiB,SAAU9d,GAC1B,IAAK,IAAW4e,EAAPte,EAAI,EAAUse,EAAQzoB,KAAKsoB,OAAOne,GAAIA,IAC3Cse,EAAMjf,OAAOK,GACT7J,KAAK6nB,eAAeY,EAGhC,EAAGD,UAAW,WACV,IAAK,IAAWC,EAAPte,EAAI,EAAUse,EAAQzoB,KAAKsoB,OAAOne,GAAIA,IACvCse,EAAMC,cACND,EAAMplB,UACNrD,KAAKsoB,OAAOhT,OAAOnL,EAAG,GAGlC,EAAGiZ,aAAc,WACTpjB,KAAKsoB,OAAO5iB,OAAS,GAGrBgE,MAAQ1J,KAAK2oB,UAAY,MAG7B3oB,KAAK2oB,UAAYjf,MACb1J,KAAK4X,KAAK3E,mBACVjT,KAAK4X,KAAK3E,kBAAkBqF,eAEhCtY,KAAKsoB,OAAOvf,KAAK/I,KAAK+nB,aAAaa,cACvC,EAAGvlB,QAAS,WACR,GAAIrD,KAAKsoB,OAAO5iB,OAAQ,CACpB,IAAK,IAAW+iB,EAAPte,EAAI,EAAUse,EAAQzoB,KAAKsoB,OAAOne,GAAIA,IAC3Cse,EAAMplB,UAEVrD,KAAKsoB,OAAS,EAClB,CACJ,IAEAO,WAAa,IAAIvlB,MAAM,CACvBO,QAAS6jB,OAAQhkB,WAAY,WACzBgkB,OAAO3jB,UAAUL,WAAWC,MAAM3D,KAAM4D,WACxC5D,KAAK2oB,UAAY,EACjB3oB,KAAKinB,QAAU,EACnB,EAAGW,kBAAmB,WAClB,OAAOH,iBACX,EAAGje,OAAQ,SAAUK,GACZ7J,KAAKinB,QAAQvhB,SAGlB1F,KAAKwoB,YACLd,OAAO3jB,UAAUyF,OAAOe,KAAKvK,KAAM6J,GACvC,EAAG2e,UAAW,WAEV,IADA,IACgBtB,EADZzd,EAAOC,MACFS,EAAI,EAAW+c,EAASlnB,KAAKinB,QAAQ9c,GAAIA,IAC1CV,EAAOyd,EAAOG,OAAS,MACvBH,EAAO7jB,UACPrD,KAAKinB,QAAQ3R,OAAOnL,EAAG,GAGnC,EAAGwd,gBAAiB,SAAU9d,GAC1B,IAAK,IAAWqd,EAAP/c,EAAI,EAAW+c,EAASlnB,KAAKinB,QAAQ9c,GAAIA,IAC9C+c,EAAO1d,OAAOK,GACV7J,KAAK6nB,eAAeX,KACpBA,EAAO7jB,UACPrD,KAAKinB,QAAQ3R,OAAOnL,EAAG,GAGnC,EAAGiZ,aAAc,WACT1Z,MAAQ1J,KAAK2oB,UAAY,MAG7B3oB,KAAK2oB,UAAYjf,MACjB1J,KAAK8oB,YACD9oB,KAAK4X,KAAK3E,mBACVjT,KAAK4X,KAAK3E,kBAAkBqF,eAEpC,EAAGwQ,UAAW,WACN9oB,KAAKinB,QAAQvhB,OAAS,IACtB1F,KAAKinB,QAAQ,GAAG5jB,UAChBrD,KAAKinB,QAAQ7M,SAEjB,IAAI8M,EAASlnB,KAAK+nB,aAAagB,QAC/B/oB,KAAKinB,QAAQle,KAAKme,EACtB,EAAG7jB,QAAS,WACR,IAAK,IAAW6jB,EAAP/c,EAAI,EAAW+c,EAASlnB,KAAKinB,QAAQ9c,GAAIA,IAC9C+c,EAAO7jB,UAEXrD,KAAKinB,QAAU,EACnB,IAEA8B,OAAS,IAAIzlB,MAAM,CACnBI,WAAY,SAAUmE,EAAKmZ,GACvBhhB,KAAK6H,IAAMA,EAAIzD,KACfpE,KAAKghB,IAAMA,EACXhhB,KAAK8gB,IAAM,IAAI7c,OAAO,IAAK,KAC3BjE,KAAKqnB,OAAS3d,KAClB,EAAG0e,WAAY,WACXpoB,KAAK+hB,MAAQ,IAAIC,MAAM,IAAIta,KAAK1H,KAAK6H,IAAI3D,EAAGlE,KAAK6H,IAAI1D,EAAG,EAAG,IAC3DnE,KAAK+hB,MAAMiH,YACf,EAAGC,KAAM,WACLjpB,KAAK+hB,MAAMY,YAAY3iB,KAAK6H,IAChC,EAAG2B,OAAQ,SAAUK,GACjB7J,KAAK6H,IAAInD,IAAI1E,KAAK8gB,IAAIzb,SAASrF,KAAKghB,IAAIhc,SAAST,OAAOsF,IACxD7J,KAAK0jB,cACL1jB,KAAKipB,MACT,EAAGpB,eAAgB,WACf,IAAI9a,EAAUpM,SAASuoB,iBAAiBlpB,KAAK6H,IAAI3D,EAAGlE,KAAK6H,IAAI1D,GAI7D,OAHI4I,GAA+B,GAApBA,EAAQ+Z,WACnB/Z,EAAUA,EAAQ5L,eACR4L,IAAW/M,KAAK4X,KAAKxF,cAAc4U,2BAA2Bja,KAAWA,CAE3F,EAAG2W,YAAa,WACZ,IAAI/b,EAAI3H,KAAK4X,KAAK1F,WAAWjM,MACzB2B,EAAI5H,KAAK4X,KAAK1F,WAAWhM,OACzB2d,EAAa7jB,KAAK6H,IAAI3D,EAAIlE,KAAK+hB,MAAM/b,KAAK8B,KAAK7B,MAAQ,EACvD6d,EAAc9jB,KAAK6H,IAAI1D,EAAInE,KAAK+hB,MAAM/b,KAAK8B,KAAK5B,OAAS,EACzD2d,EAAalc,EACb3H,KAAK6H,IAAI3D,EAAI,EAAYlE,KAAK6H,IAAI3D,EAAI,IACtClE,KAAK6H,IAAI3D,EAAIyD,EAAI3H,KAAK+hB,MAAM/b,KAAK8B,KAAK7B,MAAQ,GAC9C6d,EAAclc,EACd5H,KAAK6H,IAAI1D,EAAI,EAAYnE,KAAK6H,IAAI1D,EAAI,IACtCnE,KAAK6H,IAAI1D,EAAIyD,EAAI5H,KAAK+hB,MAAM/b,KAAK8B,KAAK5B,OAAS,EACvD,EAAG7C,QAAS,WACRrD,KAAK+hB,MAAM1e,SACf,IAEAulB,YAAc,IAAItlB,MAAM,CACxBO,QAASklB,OAAQrlB,WAAY,WACzBqlB,OAAOhlB,UAAUL,WAAWC,MAAM3D,KAAM4D,WACxC5D,KAAK8gB,IAAM,IAAI7c,OAAO,IAAK,KAC3BjE,KAAKmpB,YAAcnpB,KAAK6H,IAAIzD,IAChC,EAAGgkB,WAAY,WACX,IAAIzH,EAAI1b,KAAKwI,IAAI9C,YAAYye,WAAWnjB,MAAO0E,YAAYye,WAAWljB,QACtElG,KAAK+hB,MAAQ,IAAIC,MAAM,IAAIta,KAAK,EAAG,EAAGiZ,EAAGA,GAC7C,EAAGnX,OAAQ,SAAUK,GACjBkf,OAAOhlB,UAAUyF,OAAO7F,MAAM3D,KAAM4D,UACxC,EAAGqlB,KAAM,WACLjpB,KAAK+hB,MAAMsH,UAAUrpB,KAAK6H,IAAK7H,KAAKghB,KACpChhB,KAAKmpB,YAAcnpB,KAAK6H,IAAIzD,IAChC,EAAGsf,YAAa,WACZ,IAAI/b,EAAI3H,KAAK4X,KAAK1F,WAAWjM,MACzB2B,EAAI5H,KAAK4X,KAAK1F,WAAWhM,OACzB2d,EAAa7jB,KAAK6H,IAAI3D,EAAIlE,KAAK+hB,MAAM/b,KAAK8B,KAAK7B,MAAQ,EACvD6d,EAAc9jB,KAAK6H,IAAI1D,EAAInE,KAAK+hB,MAAM/b,KAAK8B,KAAK5B,OAAS,GACzD2d,EAAalc,GAAK3H,KAAK6H,IAAI3D,EAAI,KAC/BlE,KAAK0oB,aAAc,IACnB5E,EAAclc,GAAK5H,KAAK6H,IAAI1D,EAAI,KAChCnE,KAAK0oB,aAAc,EAC3B,EAAGrlB,QAAS,WACRrD,KAAK+hB,MAAM1e,SACf,IAEJsH,YAAYye,WAAazoB,SAASC,cAAc,OAChD+J,YAAYye,WAAWtoB,IAAM6J,YAAYK,KAAK,6BAC9C,IAAIse,UAAY,IAAIhmB,MAAM,CACtBI,WAAY,SAAUmE,EAAKkF,GACvB/M,KAAKqnB,OAAS3d,MACd1J,KAAK6H,IAAMA,EAAIzD,IACnB,EAAGoF,OAAQ,SAAUK,GACrB,EAAG6Z,YAAa,WAChB,EAAGrgB,QAAS,WACZ,IAEAokB,kBAAoB,IAAInkB,MAAM,CAC9BO,QAASylB,UAAW5lB,WAAY,SAAUmE,EAAKkF,GAC3Cuc,UAAUvlB,UAAUL,WAAWC,MAAM3D,KAAM4D,WAC3C5D,KAAKupB,YAAc,IAAItlB,OAAO,IAAK,GACnCjE,KAAKwpB,UAAY,GACjBxpB,KAAKypB,oBACLzpB,KAAK+hB,MAAQ,IAAIC,MAAM,IAAIta,KAAKG,EAAI3D,EAAG2D,EAAI1D,EAAG,IAAK,KACvD,EAAGqF,OAAQ,SAAUK,GACjB,IAAK,IAAW6f,EAAPvf,EAAI,EAAauf,EAAW1pB,KAAKwpB,UAAUrf,GAAIA,IACpDuf,EAAS7hB,IAAInD,IAAIglB,EAAS5I,IAAIvc,OAAOsF,GAAQxF,IAAIkJ,OAAO,GAAK,IAAMlI,SAASqkB,EAAS1I,IAAIhc,UAC7FhF,KAAK+hB,MAAMW,QACX1iB,KAAK+hB,MAAM4H,cAAc3pB,KAAKwpB,UAClC,EAAGC,kBAAmB,WAClB,IAAK,IAAItf,EAAI,EAAGyf,EAAKjf,YAAYS,UAAiB,GAAL,GAASjB,EAAIyf,EAAGzf,IACzDnK,KAAKwpB,UAAUzgB,KAAK,CAChBiY,IAAK,IAAK/c,OAAOsJ,OAAO,EAAG,IAAM,GAAIA,OAAO,EAAG,IAAM,IAAK3H,YAC1Dkb,IAAK9gB,KAAKupB,YAAYnlB,KACtByD,IAAK,IAAI5D,OAAO,EAAG,GACnB6a,MAAO,CAAC,SAAU,OAAOvR,OAAO,EAAG,KAG/C,EAAGmW,YAAa,WACZ,IAAImG,EAAQ7pB,KAAK+hB,MAAM/b,KAAKkC,WACxBgU,EAASlc,KAAK+hB,MAAM/b,KAAKoC,YACzBT,EAAI3H,KAAK4X,KAAK1F,WAAWjM,MACzB2B,EAAI5H,KAAK4X,KAAK1F,WAAWhM,OACzB2jB,EAAQliB,IACR3H,KAAK6H,IAAI3D,GAAK2lB,EAAQliB,GACtBuU,EAAStU,IACT5H,KAAK6H,IAAI1D,GAAK+X,EAAStU,GAC3B5H,KAAK+hB,MAAMY,YAAY3iB,KAAK6H,IAChC,EAAGxE,QAAS,WACRrD,KAAK+hB,MAAM1e,SACf,IAEAyiB,sBAAwB,IAAIxiB,MAAM,CAClCO,QAAS4jB,kBAAmB/jB,WAAY,SAAUmE,EAAKkF,GACnDuc,UAAUvlB,UAAUL,WAAWC,MAAM3D,KAAM4D,WAC3C5D,KAAKupB,YAAc,IAAItlB,OAAO,IAAK,GACnCjE,KAAKwpB,UAAY,GACjBxpB,KAAKypB,oBACLzpB,KAAK+hB,MAAQ,IAAIC,MAAM,IAAIta,KAAKG,EAAI3D,EAAG2D,EAAI1D,EAAG,IAAK,MACnDnE,KAAKsnB,IAAM,IACXtnB,KAAK8pB,gBAAkB,GACvB9pB,KAAK+pB,gBAAkB,EACvB/pB,KAAKgqB,aAAehqB,KAAK8pB,eAC7B,EAAGtgB,OAAQ,SAAUK,GACjB7J,KAAKgqB,cAAgBngB,EACjB7J,KAAKgqB,cAAgB,GAAKhqB,KAAK+pB,gBAAkB,IACjD/pB,KAAKgqB,aAAehqB,KAAK8pB,gBACzB9pB,KAAKypB,oBACLzpB,KAAK+pB,mBAETtC,kBAAkB1jB,UAAUyF,OAAOe,KAAKvK,KAAM6J,EAClD,IAEA0e,eAAiB,IAAIjlB,MAAM,CAC3BO,QAASylB,UAAW5lB,WAAY,SAAUmE,EAAKkF,GACtCA,IACLuc,UAAUvlB,UAAUL,WAAWC,MAAM3D,KAAM4D,WAC3C5D,KAAK+M,QAAUA,EACf/M,KAAKqe,GAAK,IAAI5V,GACdzI,KAAKqe,GAAGxV,YAAY7I,MACpBA,KAAKsJ,QACT,EAAGE,OAAQ,SAAUK,GACZ7J,KAAK+M,SACV/M,KAAKqe,GAAG7U,QACZ,EAAGc,IAAK,SAAUxK,EAAKwe,GAGvB,EAAGhV,MAAO,WACN,IAAIwR,EAAS9a,KAAKiqB,eACd3hB,EAAOwS,EAAO,GAAI+O,EAAQ/O,EAAO,GACjCoP,EAAK,WAAa3c,OAAO,GAAI,IAAM,+BACnC4c,EAAK,UAAY5c,OAAO,GAAI,IAAM,8BACtCgC,UAAUjH,EAAM,CAAC8hB,UAAaF,IAC9B3a,UAAUsa,EAAO,CAACO,UAAaD,IAC/BnqB,KAAKsI,KAAOA,EACZtI,KAAK6pB,MAAQA,EACb7pB,KAAKqe,GAAG3Z,IAAI,UAAW,CAAC4E,MAAO,EAAGC,IAAK,GAAKN,SAAU,KAC1D,EAAGghB,aAAc,WACb,IAAII,EAAS1c,QAAQ3N,KAAK+M,SACtBud,EAAgBtqB,KAAKuqB,gBAAgBF,GACrCG,EAAiBxqB,KAAKuqB,gBAAgBF,GACtC/hB,EAAO6H,aAAanQ,KAAK+M,SACzB8c,EAAQ1Z,aAAanQ,KAAK+M,SAC9BgD,SAASzH,EAAM,kBACfyH,SAAS8Z,EAAO,kBAChB,IAAInL,EAAS,CAAC+L,OAAQ,EAAGC,SAAU,UAUnC,OATAnb,UAAUjH,EAAMoW,GAChBnP,UAAUsa,EAAOnL,GACjB4L,EAAc/oB,YAAY+G,GAC1BkiB,EAAejpB,YAAYsoB,GAC3BW,EAAetb,MAAM5G,KAAO+hB,EAAO/hB,KAAO+hB,EAAOpkB,MAAQ,EAAI,KAC7DukB,EAAe3U,YAAcwU,EAAOpkB,MAAQ,EAC5CjG,KAAK+M,QAAQmC,MAAMsP,QAAU,EAC7Bxe,KAAK+M,QAAQmC,MAAM8G,WAAa,SAChChW,KAAK+M,QAAQmC,MAAMiN,QAAU,OACtBvQ,KAAK,CAAC0e,EAAeE,IAAiB,SAAUrc,GACnDA,EAAGe,MAAMhG,WAAa,yBAC1B,GACJ,EAAGqhB,gBAAiB,SAAUF,GAC1B,IAAI7mB,EAAM7C,SAASC,cAAc,OAUjC,OATA2O,UAAU/L,EAAK,CACXmb,SAAU,WACVrW,KAAM+hB,EAAO/hB,KACbE,IAAK6hB,EAAO7hB,IACZvC,MAAsB,GAAfokB,EAAOpkB,MACdC,OAAQmkB,EAAOnkB,OACfwkB,SAAU,WAEdtO,yBAAyB7a,YAAYiC,GAC9BA,CACX,EAAGH,QAAS,WACR,IACIrD,KAAKsI,KAAKnH,WAAWC,YAAYpB,KAAKsI,MACtCtI,KAAK6pB,MAAM1oB,WAAWC,YAAYpB,KAAK6pB,OACvC7pB,KAAK+M,QAAQ5L,WAAWC,YAAYpB,KAAK+M,QAC7C,CAAE,MAAOtM,GACT,CACJ,IAEAqR,QAAU,CACV,EAAG,CAAC3E,KAAM,SAAUuJ,GAAI,SAAU3E,YAAa8W,YAC/C,EAAG,CAAC1b,KAAM,QAASuJ,GAAI,QAAS3E,YAAasW,cAE7C9F,UAAY,CAACL,OAAUpQ,QAAQ,GAAI2W,MAAS3W,QAAQ,IACpD6Y,YAAc,IAAIrnB,MAAM,CACxBI,WAAY,SAAUsC,MAGlB,KAFAhG,KAAK4qB,OAASjqB,SAASC,cAAc,UACrCZ,KAAK4qB,OAAOhb,UAAY,iBAClB5P,KAAK4qB,OAAO1b,MACdyP,SAAW,WACXK,OAAS,UAEbrU,YAAYkgB,QAAQ1V,gBAAgBnV,KAAK4qB,QACrC5qB,KAAK4qB,OAAOvf,aACZrL,KAAK8qB,IAAM9qB,KAAK4qB,OAAOvf,WAAW,OACtCrL,KAAKgG,KAAOA,KACZhG,KAAKgF,MAAQ,EACbhF,KAAK+qB,eACL3O,yBAAyB7a,YAAYvB,KAAK4qB,OAC9C,EAAGI,UAAW,SAAUxJ,GACpB,GAAKA,EAAM,GAAX,CACAxhB,KAAK8qB,IAAIG,OACTjrB,KAAK8qB,IAAII,UAAUlrB,KAAKgG,KAAK8B,KAAK7B,MAAQ,EAAGjG,KAAKgG,KAAK8B,KAAK5B,OAAS,GACrElG,KAAK8qB,IAAI/lB,OAAO/E,KAAKgF,OACrBhF,KAAK8qB,IAAIK,YACTnrB,KAAK8qB,IAAIM,OAAO5J,EAAM,GAAGtd,EAAGsd,EAAM,GAAGrd,GACrC,IAAK,IAAIgG,EAAI,EAAGA,EAAIqX,EAAM9b,OAAQyE,IAC9BnK,KAAK8qB,IAAIO,OAAO7J,EAAMrX,GAAGjG,EAAGsd,EAAMrX,GAAGhG,GAEzCnE,KAAK8qB,IAAIQ,SATY,CAUzB,EAAGjmB,SAAU,SAAUL,GACnBhF,KAAKgF,MAAQA,CACjB,EAAG+lB,aAAc,WACT/qB,KAAK4qB,OAAO3kB,OAASjG,KAAKgG,KAAK8B,KAAK7B,QACpCjG,KAAK4qB,OAAO3kB,MAAQjG,KAAKgG,KAAK8B,KAAK7B,OACnCjG,KAAK4qB,OAAO1kB,QAAUlG,KAAKgG,KAAK8B,KAAK5B,SACrClG,KAAK4qB,OAAO1kB,OAASlG,KAAKgG,KAAK8B,KAAK5B,QACxClG,KAAK4qB,OAAO1b,MAAM5G,KAAOqC,YAAYkgB,QAAQ7Y,UAAU9N,GAAKlE,KAAKgG,KAAK6B,IAAI3D,EAAIlE,KAAKgG,KAAK8B,KAAK7B,MAAQ,GAAK,KAC1GjG,KAAK4qB,OAAO1b,MAAM1G,IAAMmC,YAAYkgB,QAAQ7Y,UAAU7N,GAAKnE,KAAKgG,KAAK6B,IAAI1D,EAAInE,KAAKgG,KAAK8B,KAAK5B,OAAS,GAAK,IAC9G,EAAGqlB,SAAU,SAAUC,EAAOC,EAAOC,EAAKC,GACtC3rB,KAAK8qB,IAAIG,OACTjrB,KAAK8qB,IAAII,UAAUlrB,KAAKgG,KAAK8B,KAAK7B,MAAQ,EAAGjG,KAAKgG,KAAK8B,KAAK5B,OAAS,GACrElG,KAAK8qB,IAAIK,YACTnrB,KAAK8qB,IAAIM,OAAOI,EAAOC,GACvBzrB,KAAK8qB,IAAIO,OAAOK,EAAKC,GACrB3rB,KAAK8qB,IAAIc,YACT5rB,KAAK8qB,IAAIe,SACT7rB,KAAK8qB,IAAIQ,SACb,EAAGQ,WAAY,SAAUC,EAAQlkB,GAC7BA,EAAMA,GAAO,CAAC3D,EAAG,EAAGC,EAAG,GACvBnE,KAAK8qB,IAAIG,OACTjrB,KAAK8qB,IAAII,UAAUlrB,KAAKgG,KAAK8B,KAAK7B,MAAQ,EAAGjG,KAAKgG,KAAK8B,KAAK5B,OAAS,GACjE2B,GACA7H,KAAK8qB,IAAII,UAAUrjB,EAAI3D,EAAG2D,EAAI1D,GAClCnE,KAAK8qB,IAAIK,YACTnrB,KAAK8qB,IAAIkB,IAAI,EAAG,EAAGD,EAAQ,EAAa,EAAV9mB,KAAKwd,IAAQ,GAC3CziB,KAAK8qB,IAAImB,OACTjsB,KAAK8qB,IAAIc,YACT5rB,KAAK8qB,IAAIQ,SACb,EAAGY,SAAU,SAAUhoB,EAAGC,EAAGwD,EAAGC,GAC5B5H,KAAK8qB,IAAIG,OACTjrB,KAAK8qB,IAAII,UAAUlrB,KAAKgG,KAAK8B,KAAK7B,MAAQ,EAAGjG,KAAKgG,KAAK8B,KAAK5B,OAAS,GACrElG,KAAK8qB,IAAII,UAAUhnB,EAAGC,GACtBnE,KAAK8qB,IAAIqB,SAASjoB,EAAGC,EAAGwD,EAAGC,GAC3B5H,KAAK8qB,IAAIQ,UACTtrB,KAAK8qB,IAAImB,MACb,EAAGG,cAAe,SAAUC,GACxBrsB,KAAK8qB,IAAIwB,UAAUD,EAAO,EAAG,EAAGrsB,KAAKgG,KAAK8B,KAAK7B,MAAOjG,KAAKgG,KAAK8B,KAAK5B,OACzE,EAAGomB,UAAW,SAAUD,EAAOnoB,EAAGC,GAC9BnE,KAAK8qB,IAAIG,OACTjrB,KAAK8qB,IAAII,UAAUlrB,KAAKgG,KAAK8B,KAAK7B,MAAQ,EAAI/B,EAAGlE,KAAKgG,KAAK8B,KAAK5B,OAAS,EAAI/B,GAC7EnE,KAAK8qB,IAAI/lB,OAAO/E,KAAKgF,OACrBhF,KAAK8qB,IAAIwB,UAAUD,EAAO,GAAI,IAC9BrsB,KAAK8qB,IAAIQ,SACb,EAAGiB,aAAc,SAAUzN,GACvB9e,KAAK8qB,IAAI0B,UAAY1N,CACzB,EAAG2N,eAAgB,SAAU3N,GACzB9e,KAAK8qB,IAAI4B,YAAc5N,CAC3B,EAAG6N,aAAc,SAAU1mB,GACvBjG,KAAK8qB,IAAI8B,UAAY3mB,CACzB,EAAG4mB,SAAU,WACT7sB,KAAK8qB,IAAImB,MACb,EAAGa,WAAY,WACX9sB,KAAK8qB,IAAIe,QACb,EAAGnJ,MAAO,WACN1iB,KAAK8qB,IAAIiC,UAAU,EAAG,EAAG/sB,KAAKgG,KAAK8B,KAAK7B,MAAOjG,KAAKgG,KAAK8B,KAAK5B,OAClE,EAAG7C,QAAS,WACRsH,YAAYkgB,QAAQxV,kBAAkBrV,KAAK4qB,QAC3C5qB,KAAK4qB,OAAOzpB,WAAWC,YAAYpB,KAAK4qB,OAC5C,IAEA5I,MAAQ,IAAI1e,MAAM,CAClBI,WAAY,SAAUsC,GAClBhG,KAAKgG,KAAOA,EACZhG,KAAKgtB,OAAS,IAAIrC,YAAY3kB,EAClC,EAAG0c,MAAO,WACN1iB,KAAKgtB,OAAOtK,OAChB,EAAGC,YAAa,SAAU9a,GACtB7H,KAAKgG,KAAK6B,IAAMA,EAAIzD,KACpBpE,KAAKgtB,OAAOhnB,KAAOhG,KAAKgG,KACxBhG,KAAKgtB,OAAOjC,cAChB,EAAG1lB,SAAU,SAAUL,GACnBhF,KAAKgtB,OAAO3nB,SAASL,EACzB,EAAG4e,WAAY,SAAUpC,GACrBxhB,KAAKgtB,OAAOT,aAAa,SACzBvsB,KAAKgtB,OAAOP,eAAe,SAC3BzsB,KAAKgtB,OAAOL,aAAa,KACzB3sB,KAAKgtB,OAAOhC,UAAUxJ,GACtBxhB,KAAKgtB,OAAOH,WACZ7sB,KAAKgtB,OAAOhC,UAAUxJ,GACtBxhB,KAAKgtB,OAAOF,YAChB,EAAGlK,iBAAkB,SAAUpB,EAAOL,GAClCnhB,KAAKgtB,OAAOP,eAAe,SAC3BzsB,KAAKgtB,OAAOL,aAAa,KACzB,IAAK,IAAWlL,EAAPtX,EAAI,EAAS8iB,EAAWzL,EAAM,GAAIC,EAAOD,EAAMrX,GAAIA,IAAK8iB,EAAWxL,EAAM,CAC9E,IAAIyL,EAAI/L,EAAYhX,EAAI,GACxBnK,KAAKgtB,OAAOzB,SAAS0B,EAAS/oB,EAAIgpB,EAAErlB,IAAI3D,EAAG+oB,EAAS/oB,EAAIgpB,EAAErlB,IAAI1D,EAAGsd,EAAKvd,EAAIgpB,EAAErlB,IAAI3D,EAAGud,EAAKtd,EAAI+oB,EAAErlB,IAAI1D,EACtG,CACJ,EAAG4gB,WAAY,SAAUJ,EAAQ3f,GAC7BhF,KAAKgtB,OAAOL,aAAa,KACzB3sB,KAAKgtB,OAAOT,aAAa,OACzBvsB,KAAKgtB,OAAOhC,UAAUrG,EAAOC,GAC7B5kB,KAAKgtB,OAAOH,WACZ7sB,KAAKgtB,OAAOT,aAAa,UACzBvsB,KAAKgtB,OAAOhC,UAAUrG,EAAOxgB,GAC7BnE,KAAKgtB,OAAOH,UAChB,EAAG7D,WAAY,WACXhpB,KAAKgtB,OAAOT,aAAa5hB,YAAYW,aACrCtL,KAAKgtB,OAAOlB,WAAW,IAC3B,EAAGnC,cAAe,SAAUH,GACxB,IAAK,IAAWE,EAAPvf,EAAI,EAAauf,EAAWF,EAAUrf,GAAIA,IAC/CnK,KAAKgtB,OAAOT,aAAa7C,EAAS5K,OAClC9e,KAAKgtB,OAAOd,SAASxC,EAAS7hB,IAAI3D,EAAGwlB,EAAS7hB,IAAI1D,EAAG,EAAG,EAEhE,EAAGgpB,SAAU,SAAUC,GACnBptB,KAAKgtB,OAAOZ,cAAcgB,EAC9B,EAAG/D,UAAW,SAAUxhB,EAAKmZ,GACzBhhB,KAAK0iB,QACL1iB,KAAK2iB,YAAY9a,GACjB7H,KAAKgtB,OAAO3nB,SAAS2b,EAAIhc,SACzBhF,KAAKgtB,OAAOV,UAAU3hB,YAAYye,WAAY,EAAG,EACrD,EAAGiE,4BAA6B,SAAU1oB,GAEtC,OADUA,EAAIP,KAAKS,IAAI,IAAIZ,OAAOjE,KAAKgG,KAAK8B,KAAK7B,MAAQ,EAAGjG,KAAKgG,KAAK8B,KAAK5B,OAAS,GAExF,EAAG7C,QAAS,WACRrD,KAAKgtB,OAAO3pB,SAChB,IAEAiqB,UAAY1qB,qBAEZ2qB,YAAc,WAEd,GAAKD,UAAUlqB,YAeXkqB,UAAUlqB,YAAY8Q,iBAdtB,GAAIoZ,UAAU9V,iBAAkB,CAC5B,IAAI9F,EAAS,IAAIkH,OAAO0U,UAAU9V,kBAClC9F,EAAOlQ,MAAK,SAAUgsB,GAClBF,UAAUlqB,YAAcuH,YAAYkgB,QAAU,IAAIrZ,QAAQ,CACtDE,SAAQ8b,GAAK9b,IAGjB4b,UAAUlqB,YAAY6Q,OAC1B,GACJ,MACIqZ,UAAUlqB,YAAcuH,YAAYkgB,QAAU,IAAIrZ,QAClD8b,UAAUlqB,YAAY6Q,OAKlC,EAQA,SAASmI,yBACL,OAAIkR,UAAUG,0BACH9sB,SAASgC,eAAe2qB,UAAUG,2BAElC9sB,SAASW,IAExB,CAZIgsB,UAAUI,iBACVhuB,OAAOiuB,oBAAsBJ,YAE7BA,aAUP,EAppED,CAopEqB,oBAAXvpB,QAAyBA,QAAUtE","ignoreList":[],"sourcesContent":["/*\n Copyright (c) <2011, 2012> Rootof Creations HB, rootof.com, kickassapp.com\n*/\n(function (window) {\n var JSONP = (function () {\n var counter = 0, head, query, key, window = this;\n\n function load(url) {\n var script = document.createElement('script'), done = false;\n script.src = url;\n script.async = true;\n script.onload = script.onreadystatechange = function () {\n if (!done && (!this.readyState || this.readyState === \"loaded\" || this.readyState === \"complete\")) {\n done = true;\n script.onload = script.onreadystatechange = null;\n if (script && script.parentNode) {\n script.parentNode.removeChild(script);\n }\n }\n };\n if (!head) {\n head = document.getElementsByTagName('head')[0];\n if (!head)\n head = document.body;\n }\n head.appendChild(script);\n }\n\n function jsonp(url, params, callback) {\n query = \"?\";\n params = params || {};\n for (key in params) {\n if (params.hasOwnProperty(key)) {\n query += encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]) + \"&\";\n }\n }\n var jsonp = \"json\" + (++counter);\n window[jsonp] = function (data) {\n callback(data);\n try {\n delete window[jsonp];\n } catch (e) {\n }\n window[jsonp] = null;\n };\n load(url + query + \"callback=\" + jsonp);\n return jsonp;\n }\n\n return {get: jsonp};\n }());\n var CORS = {\n request: function (url, params, callback) {\n if (this.calledByExtension()) {\n this._callbacks[this._callbackId++] = callback;\n window.postMessage(JSON.stringify({\n from: \"kickassapp-page\",\n url: url,\n type: \"callApi\",\n params: params\n }), \"*\");\n return;\n }\n params = params || {};\n var query = \"?\";\n for (key in params) {\n if (params.hasOwnProperty(key)) {\n query += encodeURIComponent(key) + \"=\" + encodeURIComponent(params[key]) + \"&\";\n }\n }\n var xhr = new XMLHttpRequest();\n xhr.onreadystatechange = function () {\n if (xhr.readyState == 4) {\n callback(JSON.parse(xhr.responseText));\n }\n }\n xhr.open(\"GET\", url + query);\n xhr.withCredentials = true;\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n xhr.send();\n }, calledByExtension: function () {\n return !!document.getElementById(\"kickass-has-been-initialized-yes-yes-yes\");\n }, _callbacks: {}, _callbackId: 0\n }\n if (CORS.calledByExtension()) {\n window.addEventListener(\"message\", function (e) {\n var messageData;\n try {\n messageData = JSON.parse(e.data);\n } catch (e) {\n return;\n }\n if (messageData.from === \"kickassapp-extension\" && messageData.sanityCheck === \"kickassapp-extension-version1\") {\n var message = messageData.payload;\n if (message.type === \"response\") {\n CORS._callbacks[message.requestId](message.body);\n delete CORS._callbacks[message.requestId];\n } else if (message.type === \"destroy\") {\n window.KICKASSGAME.destroy();\n }\n }\n }, false);\n }\n\n function getGlobalNamespace() {\n return window && window.INSTALL_SCOPE ? window.INSTALL_SCOPE : window;\n }\n\n var Class = function (methods) {\n var ret = function () {\n if (ret.$prototyping) return this;\n if (typeof this.initialize == 'function')\n return this.initialize.apply(this, arguments);\n };\n if (methods.Extends) {\n ret.parent = methods.Extends;\n methods.Extends.$prototyping = true;\n ret.prototype = new methods.Extends;\n methods.Extends.$prototyping = false;\n }\n for (var key in methods) if (methods.hasOwnProperty(key))\n ret.prototype[key] = methods[key];\n return ret;\n };\n if (typeof exports != 'undefined') exports.Class = Class;\n var Vector = new Class({\n initialize: function (x, y) {\n if (typeof x == 'object') {\n this.x = x.x;\n this.y = x.y;\n } else {\n this.x = x;\n this.y = y;\n }\n }, cp: function () {\n return new Vector(this.x, this.y);\n }, mul: function (factor) {\n this.x *= factor;\n this.y *= factor;\n return this;\n }, mulNew: function (factor) {\n return new Vector(this.x * factor, this.y * factor);\n }, div: function (factor) {\n this.x /= factor;\n this.y /= factor;\n return this;\n }, divNew: function (factor) {\n return new Vector(this.x / factor, this.y / factor);\n }, add: function (vec) {\n this.x += vec.x;\n this.y += vec.y;\n return this;\n }, addNew: function (vec) {\n return new Vector(this.x + vec.x, this.y + vec.y);\n }, sub: function (vec) {\n this.x -= vec.x;\n this.y -= vec.y;\n return this;\n }, subNew: function (vec) {\n return new Vector(this.x - vec.x, this.y - vec.y);\n }, rotate: function (angle) {\n var x = this.x, y = this.y;\n this.x = x * Math.cos(angle) - Math.sin(angle) * y;\n this.y = x * Math.sin(angle) + Math.cos(angle) * y;\n return this;\n }, rotateNew: function (angle) {\n return this.cp().rotate(angle);\n }, setAngle: function (angle) {\n var l = this.len();\n this.x = Math.cos(angle) * l;\n this.y = Math.sin(angle) * l;\n return this;\n }, setAngleNew: function (angle) {\n return this.cp().setAngle(angle);\n }, setLength: function (length) {\n var l = this.len();\n if (l) this.mul(length / l); else this.x = this.y = length;\n return this;\n }, setLengthNew: function (length) {\n return this.cp().setLength(length);\n }, normalize: function () {\n var l = this.len();\n if (l == 0)\n return this;\n this.x /= l;\n this.y /= l;\n return this;\n }, normalizeNew: function () {\n return this.cp().normalize();\n }, angle: function () {\n return Math.atan2(this.y, this.x);\n }, collidesWith: function (rect) {\n return this.x > rect.x && this.y > rect.y && this.x < rect.x + rect.width && this.y < rect.y + rect.height;\n }, len: function () {\n var l = Math.sqrt(this.x * this.x + this.y * this.y);\n if (l < 0.005 && l > -0.005) return 0;\n return l;\n }, is: function (test) {\n return typeof test == 'object' && this.x == test.x && this.y == test.y;\n }, dot: function (v2) {\n return this.x * v2.x + this.y * v2.y;\n }, inTriangle: function (a, b, c) {\n var v0 = c.subNew(a);\n var v1 = b.subNew(a);\n var v2 = p.subNew(a);\n var dot00 = v0.dot(v0);\n var dot01 = v0.dot(v1);\n var dot02 = v0.dot(v2);\n var dot11 = v1.dot(v1);\n var dot12 = v1.dot(v2);\n var invDenom = 1 / (dot00 * dot11 - dot01 * dot01);\n var u = (dot11 * dot02 - dot01 * dot12) * invDenom;\n var v = (dot00 * dot12 - dot01 * dot02) * invDenom;\n return (u > 0) && (v > 0) && (u + v < 1);\n }, distanceFrom: function (vec) {\n return Math.sqrt(Math.pow((this.x - vec.x), 2), Math.pow(this.y - vec.y, 2));\n }, toString: function () {\n return '[Vector(' + this.x + ', ' + this.y + ') angle: ' + this.angle() + ', length: ' + this.len() + ']';\n }\n });\n if (typeof exports != 'undefined') exports.Vector = Vector;\n var Rect = new Class({\n initialize: function (x, y, w, h) {\n this.pos = new Vector(x, y);\n this.size = {width: w, height: h};\n }, hasPoint: function (point) {\n return point.x > this.getLeft() && point.x < this.getRight() && point.y > this.getTop() && point.y < this.getBottom();\n }, setLeft: function (left) {\n this.pos.x = left + this.size.width / 2;\n }, setTop: function (top) {\n this.pos.y = top + this.size.height / 2;\n }, getLeft: function () {\n return this.pos.x - this.size.width / 2;\n }, getTop: function () {\n return this.pos.y - this.size.height / 2;\n }, getRight: function () {\n return this.pos.x + this.size.width / 2;\n }, getBottom: function () {\n return this.pos.y + this.size.height / 2;\n }, cp: function () {\n return new Rect(this.pos.x, this.pos.y, this.size.width, this.size.height);\n }\n });\n if (typeof exports != 'undefined') exports.Rect = Rect;\n var Fx = new Class({\n initialize: function () {\n this.listeners = [];\n this.tweens = {};\n this.running = {};\n }, addListener: function (listener) {\n this.listeners.push(listener);\n }, add: function (key, props) {\n props = props || {};\n props.duration = props.duration || 500;\n props.transition = props.transition || Tween.Linear;\n props.repeats = typeof props.repeats == 'undefined' ? false : props.repeats;\n if (!props.tweens) {\n var start = props.start || 0;\n var end = typeof props.end == 'undefined' ? 1 : props.end;\n props.tweens = [[start, end]];\n }\n this.tweens[key] = props;\n }, update: function (time) {\n time = typeof time === 'number' ? time : now();\n for (var key in this.tweens) if (this.tweens.hasOwnProperty(key)) {\n if (!this.running[key]) {\n this.tweenStart(key, time);\n continue;\n }\n var tween = this.tweens[key];\n var tdelta = time - this.running[key].startTime;\n if (tdelta > tween.duration) {\n this.tweenFinished(tween, key);\n continue;\n }\n var delta = tween.transition(tdelta / tween.duration);\n var changes = [];\n for (var i = 0, t; t = tween.tweens[i]; i++) {\n var x = delta * (t[1] - t[0]) + t[0];\n changes.push(x);\n }\n this.fire(key, changes, delta);\n }\n }, tweenStart: function (key, time) {\n this.running[key] = {startTime: time};\n var values = [];\n for (var i = 0, tween; tween = this.tweens[key].tweens[i]; i++)\n values.push(tween[0]);\n this.fire(key, values, 0);\n }, tweenFinished: function (tween, key) {\n var values = [];\n for (var i = 0, t; t = tween.tweens[i]; i++)\n values.push(t[1]);\n this.fire(key, values, 1);\n if (!tween.repeats) {\n delete this.running[key];\n delete this.tweens[key];\n return;\n }\n this.tweenStart(key, now());\n }, fire: function (key, values, delta) {\n for (var i = 0, listener; listener = this.listeners[i]; i++)\n listener.set.call(listener, key, values, delta);\n }\n });\n var Tween = {\n Linear: function (x) {\n return x;\n }, Quadratic: function (x) {\n return x * x;\n }, Quintic: function (x) {\n return x * x * x;\n }, Shake: function (x) {\n return Math.sin(x);\n }\n };\n var GameGlobals = {\n FPS: 60, useAnimationFrame: true, boids: {flockRadius: 400, size: 100}, path: function () {\n return \"https://kickassapp.com/\" + Array.prototype.slice.call(arguments).join(\"\");\n }, hasCanvas: (typeof document.createElement('canvas').getContext !== 'undefined'), bulletColor: 'black'\n };\n window.GameGlobals = GameGlobals;\n if (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function (searchElement) {\n if (this === void 0 || this === null)\n throw new TypeError();\n var t = Object(this);\n var len = t.length >>> 0;\n if (len === 0)\n return -1;\n var n = 0;\n if (arguments.length > 0) {\n n = Number(arguments[1]);\n if (n !== n)\n n = 0; else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n if (n >= len)\n return -1;\n var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);\n for (; k < len; k++) {\n if (k in t && t[k] === searchElement)\n return k;\n }\n return -1;\n };\n }\n\n function now() {\n return (new Date()).getTime();\n }\n\n function bind(bound, func) {\n return function () {\n return func.apply(bound, arguments);\n };\n }\n\n function each(arr, func, bindObject) {\n if (typeof arr.forEach == 'function') {\n arr.forEach(func, bindObject);\n return arr;\n }\n for (var key in arr) if (arr.hasOwnProperty(key))\n func.call(bindObject || window, arr[key], key);\n return arr;\n }\n\n function addEvent(obj, type, fn) {\n if (obj.addEventListener)\n obj.addEventListener(type, fn, false); else if (obj.attachEvent) {\n obj[\"e\" + type + fn] = fn;\n obj[type + fn] = function () {\n return obj[\"e\" + type + fn](window.event);\n };\n obj.attachEvent(\"on\" + type, obj[type + fn]);\n }\n }\n\n function removeEvent(obj, type, fn) {\n if (obj.removeEventListener)\n obj.removeEventListener(type, fn, false); else if (obj.detachEvent) {\n obj.detachEvent(\"on\" + type, obj[type + fn]);\n obj[type + fn] = null;\n obj[\"e\" + type + fn] = null;\n }\n }\n\n function stopEvent(e) {\n if (e.stopPropogation)\n e.stopPropogation();\n if (e.preventDefault)\n e.preventDefault();\n e.returnValue = false;\n }\n\n function elementIsContainedIn(element1, element2) {\n if (element.contains)\n return element1.contains(element2);\n return !!(element1.compareDocumentPosition(element2) & 16);\n };\n\n function code(name) {\n var table = {38: 'up', 40: 'down', 37: 'left', 39: 'right', 27: 'esc'};\n if (table[name]) return table[name];\n return String.fromCharCode(name);\n };\n\n function random(min, max) {\n return Math.floor(Math.random() * (max - min + 1) + min);\n };\n\n function getRect(element) {\n if (typeof element.getBoundingClientRect === 'function') {\n var rect = element.getBoundingClientRect();\n var sx = window.pageXOffset;\n var sy = window.pageYOffset;\n return {width: rect.width, height: rect.height, left: rect.left + sx, top: rect.top + sy};\n }\n var rect = {width: element.offsetWidth, height: element.offsetHeight, left: 0, top: 0};\n var el = element;\n while (el) {\n rect.left += el.offsetLeft;\n rect.top += el.offsetTop;\n el = el.offsetParent;\n }\n return rect;\n }\n\n function getCompatElement() {\n var doc = document;\n return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.documentElement : doc.body;\n }\n\n function getScrollSize() {\n var doc = getCompatElement();\n var min = {x: doc.clientWidth, y: doc.clientHeight};\n var body = document.body;\n return {\n x: Math.max(doc.scrollWidth, body.scrollWidth, min.x),\n y: Math.max(doc.scrollHeight, body.scrollHeight, min.y)\n };\n }\n\n function getStyle(element, prop) {\n if (element.style[prop])\n return element.style[prop];\n if (element.currentStyle)\n return element.currentStyle[prop];\n return document.defaultView.getComputedStyle(element, null).getPropertyValue(prop);\n }\n\n function setStyles(element, props) {\n for (var key in props) if (props.hasOwnProperty(key)) {\n var val = props[key];\n if (typeof val === \"number\" && key !== \"opacity\" && key !== \"zIndex\")\n val = val + 'px';\n element.style[key] = val;\n }\n };\n\n function hasClass(ele, cls) {\n return ele.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\n }\n\n function addClass(ele, cls) {\n if (!hasClass(ele, cls)) ele.className += \" \" + cls;\n }\n\n function removeClass(ele, cls) {\n if (hasClass(ele, cls)) {\n var reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\n ele.className = ele.className.replace(reg, ' ');\n }\n }\n\n function cloneElement(element) {\n return element.cloneNode(true);\n }\n\n function newElement(tag, props) {\n var el = document.createElement(tag);\n for (var key in props) if (props.hasOwnProperty(key)) {\n if (key === 'styles') {\n setStyles(el, props[key]);\n } else {\n el[key] = props[key];\n }\n }\n return el;\n }\n\n var requestAnimFrame = (function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback, element) {\n window.setTimeout(callback, 1000 / 60);\n };\n })();\n\n function delay(d, func, bound) {\n return setTimeout(bind(bound, func), d);\n }\n\n var KickAss = new Class({\n initialize: function (options) {\n if (options && options.mySite) {\n this.mySite = options.mySite;\n }\n this.players = [];\n this.elements = [];\n this.weaponClass = Weapons[1].cannonClass;\n this.scrollPos = new Vector(0, 0);\n this.scrollSize = new Vector(0, 0);\n this.windowSize = {width: 0, height: 0};\n this.updateWindowInfo();\n this.bulletManager = new BulletManager(this);\n this.bulletManager.updateEnemyIndex();\n this.explosionManager = new ExplosionManager(this);\n this.ui = new UIManager(this);\n this.bombManager = new BombManager(this);\n this.menuManager = new MenuManager(this);\n this.menuManager.create();\n if (typeof StatisticsManager !== \"undefined\") {\n this.statisticsManager = new StatisticsManager(this);\n }\n this.sessionManager = new SessionManager(this);\n this.lastUpdate = now();\n this.keyMap = {};\n this.keydownEvent = bind(this, this.keydown);\n this.keyupEvent = bind(this, this.keyup);\n this.multiplier = 10;\n if (this.isCampaign()) {\n this.audioManager = {\n explosion: new AudioManager(GameGlobals.path(\"static/sounds/game/explosion\"), [\"mp3\", \"ogg\"]),\n shot: new AudioManager(GameGlobals.path(\"static/sounds/game/shot\"), [\"mp3\", \"ogg\"])\n }\n } else {\n this.audioManager = {};\n }\n if (window.KickAssStyle && window.KickAssStyle === \"white\") {\n GameGlobals.bulletColor = \"white\";\n }\n addEvent(document, 'keydown', this.keydownEvent);\n addEvent(document, 'keyup', this.keyupEvent);\n addEvent(document, 'keypress', this.keydownEvent);\n }, begin: function () {\n this.addPlayer();\n this.sessionManager.isPlaying = true;\n if (!GameGlobals.useAnimationFrame) {\n this.loopTimer = window.setInterval(bind(this, this.loop), 1000 / GameGlobals.FPS);\n }\n if (GameGlobals.useAnimationFrame) {\n requestAnimFrame(bind(this, this.loop));\n }\n }, keydown: function (e) {\n var c = code(e.keyCode);\n this.keyMap[c] = true;\n switch (c) {\n case'left':\n case'right':\n case'up':\n case'down':\n case'esc':\n case' ':\n stopEvent(e);\n break;\n }\n switch (c) {\n case'esc':\n this.destroy();\n break;\n }\n }, keyup: function (e) {\n var c = code(e.keyCode);\n this.keyMap[c] = false;\n switch (c) {\n case'left':\n case'right':\n case'up':\n case'down':\n case'esc':\n case' ':\n if (e.stopPropogation) {\n e.stopPropogation();\n }\n if (e.preventDefault) {\n e.preventDefault();\n }\n e.returnValue = false;\n break;\n }\n }, loop: function () {\n var currentTime = now();\n var tdelta = (currentTime - this.lastUpdate) / 1000;\n this.updateWindowInfo();\n for (var i = 0, player; player = this.players[i]; i++) {\n player.update(tdelta);\n }\n this.bulletManager.update(tdelta);\n this.bombManager.update(tdelta);\n this.explosionManager.update(tdelta);\n this.ui.update(tdelta);\n if (this.statisticsManager) {\n this.statisticsManager.update(tdelta);\n }\n this.sessionManager.update(tdelta);\n this.lastUpdate = currentTime;\n if (GameGlobals.useAnimationFrame) {\n requestAnimFrame(bind(this, this.loop));\n }\n }, addPlayer: function () {\n var data = false;\n var ship = Ships.Standard;\n if (window.KICKASSSHIP && window.KICKASSSHIP.points) {\n ship = KICKASSSHIP;\n }\n if (this.mySite && this.mySite.getShipConfig()) {\n ship = this.mySite.getShipConfig();\n }\n var player = new Player(this);\n player.setShip(ship);\n this.players.push(player);\n this.explosionManager.addExplosion(player.pos);\n }, registerElement: function (el) {\n if (!el) {\n throw new Error(\"Can't register unexisting element.\");\n }\n this.elements.push(el);\n }, unregisterElement: function (el) {\n this.elements.splice(this.elements.indexOf(el), 1);\n }, isKickAssElement: function (el) {\n for (var i = 0, element; element = this.elements[i]; i++) {\n if (el === element || elementIsContainedIn(element, el)) {\n return true;\n }\n }\n return false;\n }, isKeyPressed: function (key) {\n return !!this.keyMap[key];\n }, updateWindowInfo: function () {\n var isIEQuirks = (!!window.ActiveXObject) && document.compatMode == \"BackCompat\";\n this.windowSize = {\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight\n };\n if (isIEQuirks) {\n this.windowSize.width = document.body.clientWidth;\n this.windowSize.height = document.body.clientHeight;\n }\n if (this.menuManager && this.menuManager.isVisible()) {\n this.windowSize.height -= this.menuManager.getHeight();\n }\n this.scrollPos.x = window.pageXOffset || document.documentElement.scrollLeft;\n this.scrollPos.y = window.pageYOffset || document.documentElement.scrollTop;\n this.scrollSize = getScrollSize();\n }, hideAll: function () {\n for (var i = 0, el; el = this.elements[i]; i++) {\n el.style.visibility = 'hidden';\n }\n }, showAll: function () {\n for (var i = 0, el; el = this.elements[i]; i++) {\n el.style.visibility = 'visible';\n }\n }, updateShips: function (ship, isInitial) {\n if (!isInitial) {\n this.ui.showMessage(\"You're now flying<br /><em>\" + ship.name + \"<em>!!\");\n }\n for (var i = 0, player; player = this.players[i]; i++) {\n player.setShip(ship);\n }\n }, changeWeapon: function (weapon, isInitial) {\n this.weaponClass = weapon.cannonClass;\n if (!isInitial) {\n this.ui.showMessage(\"Changed to \" + weapon.name.toUpperCase() + \"!!!!\");\n }\n for (var i = 0, player; player = this.players[i]; i++) {\n player.setCannons(weapon.cannonClass);\n }\n }, changeWeaponById: function (id, isInitial) {\n if (Weapons[id]) {\n this.changeWeapon(Weapons[id], isInitial);\n }\n }, flyOutPlayers: function (x, y) {\n for (var i = 0, player; player = this.players[i]; i++) {\n player.flyTo(x, -player.size.height);\n player.isBound = false;\n }\n }, flyInPlayers: function () {\n for (var i = 0, player; player = this.players[i]; i++) {\n player.flyTo(player.pos.x, 100, function () {\n this.isBound = true;\n });\n }\n }, newRank: function (rank) {\n this.ui.showMessage(\"OMG. You leveled up to: <strong>\" + rank + '</strong>!<br /><small>Be sure to check what cool new stuff you get in the menu.</small>');\n }, fireBomb: function () {\n this.bombManager.blow();\n }, destroy: function () {\n removeEvent(document, 'keydown', this.keydownEvent);\n removeEvent(document, 'keypress', this.keydownEvent);\n removeEvent(document, 'keyup', this.keyupEvent);\n for (var i = 0, player; player = this.players[i]; i++) {\n player.destroy();\n }\n this.bulletManager.destroy();\n this.explosionManager.destroy();\n this.menuManager.destroy();\n if (!GameGlobals.useAnimationFrame) {\n clearInterval(this.loopTimer);\n }\n getGlobalNamespace().KICKASSGAME = false;\n if (this.isCampaign()) {\n document.location.reload();\n }\n }, isCampaign: function () {\n return getGlobalNamespace().IS_CLOUDFLARE_GAME;\n }, isMySite: function () {\n return !!getGlobalNamespace().KICKASS_SITE_KEY;\n }, shouldShowAd: function () {\n return !this.mySite && !this.isCampaign();\n }, shouldShowMenu: function () {\n return !this.mySite && !this.isCampaign();\n }, shouldShowHowToImage: function () {\n return this.mySite || this.isCampaign();\n }\n });\n window.KickAss = KickAss;\n var StatisticsManager = new Class({\n initialize: function (game) {\n this.game = game;\n this.data = {};\n this.data.startedPlaying = now();\n this.data.elementsDestroyed = 0;\n this.data.shotsFired = 0;\n this.data.distanceFlownInPixels = 0;\n this.data.totalPointsThisSession = 0;\n this.data.usedThrusters = 0;\n this.lastUpdate = 0;\n }, usedThrusters: function () {\n this.data.usedThrusters = 1;\n }, increaseDistanceWithPixels: function (px) {\n this.data.distanceFlownInPixels += px;\n }, increasePointsGainedWithPoints: function (points) {\n this.data.totalPointsThisSession += points;\n }, addShotFired: function () {\n this.data.shotsFired++;\n if (this.game.audioManager.shot) {\n this.game.audioManager.shot.play();\n }\n }, addElementsDestroyed: function () {\n this.data.elementsDestroyed++;\n }, update: function (tdelta) {\n this.lastUpdate += tdelta;\n if (this.lastUpdate > 0.25) {\n this.syncWithServer();\n this.lastUpdate = 0;\n }\n }, syncWithServer: function () {\n var fragment = [];\n for (var key in this.data) if (this.data.hasOwnProperty(key)) {\n fragment.push(key + ':' + this.data[key]);\n }\n this.game.menuManager.sendMessageToMenu(\"stats:!\" + fragment.join('|'));\n }\n });\n var MySite = new Class({\n initialize: function (key) {\n this.key = key;\n }, load: function (callback) {\n CORS.request(GameGlobals.path('mysite/api.json'), {\n site_key: this.key,\n url: document.location.toString()\n }, bind(this, function (data) {\n if (data && data.embed) {\n this.mySiteData = data.embed;\n callback(true);\n } else {\n callback(false);\n }\n }));\n }, install: function () {\n }, getShipId: function () {\n return this.mySiteData && this.mySiteData.settings.ship;\n }, getShipConfig: function () {\n return this.mySiteData && this.mySiteData.settings.ship_config;\n }, getShareURL: function () {\n return this.mySiteData && this.mySiteData.settings.share_url;\n }\n });\n var Menu = new Class({\n initialize: function (game) {\n this.game = game;\n this.size = {height: 300};\n }, generate: function (parent) {\n this.container = document.createElement('div');\n this.container.className = 'KICKASSELEMENT';\n this.container.id = 'kickass-profile-menu';\n parent.appendChild(this.container);\n var shipId = getGlobalNamespace().KICKASSSHIPID || \"\";\n this.url = GameGlobals.path('intermediate_postmessage.html?url=' +\n encodeURIComponent(getGlobalNamespace().KICKASSURL || document.location.href) + \"&origin=\" + encodeURIComponent(document.location.href) + \"&preship=\" + (shipId) + \"&is_campaign=\" + (this.game.isCampaign() ? \"true\" : \"\") + \"&is_mysite=\" + (this.game.isMySite() ? \"true\" : \"\"));\n this.isSocketReady = false;\n this.socketIframe = document.createElement(\"iframe\");\n this.socketIframe.frameborder = '0';\n this.socketIframe.className = 'KICKASSELEMENT';\n this.socketIframe.width = '100%';\n this.socketIframe.height = this.size.height + 'px';\n this.container.appendChild(this.socketIframe);\n this.menuOrigin = \"https://kickassapp.com/\".replace(/\\/$/, \"\");\n this.socketIframe.src = this.url;\n this.onMessage = bind(this, function (event) {\n if (event.origin !== this.menuOrigin && event.origin !== this.menuOrigin.replace(\"http://\", \"https://\")) {\n console.log(\"ignoring event from\", event.origin);\n return;\n }\n var message = event.data;\n if (message === \"ready\") {\n this.onGameReady();\n return;\n }\n var t = message.split(':!');\n if (t.length !== 2) {\n return;\n }\n var type = t.shift().replace(/^./g, function (match) {\n return match.charAt(0).toUpperCase();\n });\n if (typeof this['messageType' + type] === \"function\") {\n this['messageType' + type](t.join(\":!\"));\n }\n });\n window.addEventListener(\"message\", this.onMessage, false);\n this.game.registerElement(this.container);\n }, socketPostMessage: function (message) {\n this.socketIframe.contentWindow.postMessage(message, this.menuOrigin);\n }, onGameReady: function () {\n this.isSocketReady = true;\n this.game.registerElement(this.container.getElementsByTagName('iframe')[0]);\n this.socketPostMessage(\"url:!\" + (getGlobalNamespace().KICKASSURL || document.location.href));\n if (this.game.statisticsManager) {\n this.game.statisticsManager.syncWithServer();\n }\n this.game.menuManager.onGameReady();\n }, sendMessage: function (message) {\n if (!this.isSocketReady) {\n return;\n }\n if (message != this.lastMessage) {\n try {\n this.socketPostMessage(message);\n } catch (e) {\n }\n this.lastMessage = message;\n }\n }, messageTypeChangeShip: function (pieces) {\n pieces = pieces.split(\",\");\n var shipId = pieces[0];\n var weaponId = pieces[1];\n var isInitial = pieces[2] === 'initial';\n if (this.shipId === shipId) {\n return;\n }\n if (isInitial && getGlobalNamespace().KICKASSSHIP) {\n return;\n }\n this.shipId = shipId;\n CORS.request(GameGlobals.path('designer/ship/' + shipId + '/construction.json'), {\n ship_id: shipId,\n is_initial: isInitial ? '1' : '0'\n }, bind(this, function (data) {\n this.game.updateShips(data.data, isInitial);\n try {\n window.focus();\n } catch (e) {\n }\n }));\n if (!isInitial) {\n this.parent.hideMenu();\n }\n }, messageTypeChangeWeapon: function (weaponId, isInitial) {\n this.game.changeWeaponById(weaponId, isInitial);\n }, messageTypeSetMultiplier: function (mod) {\n mod = parseInt(mod, 10);\n if (isNaN(mod) || !mod) {\n return;\n }\n this.game.multiplier = mod;\n }, messageTypeNewRank: function (rank) {\n this.game.newRank(rank);\n }, messageTypePlayerMessage: function (message) {\n this.game.ui.showMessage(message);\n }, destroy: function () {\n this.game.unregisterElement(this.container);\n this.game.unregisterElement(this.iframe);\n window.removeEventListener(\"message\", this.onMessage, false);\n this.container.parentNode.removeChild(this.container);\n }\n });\n var MenuManager = new Class({\n initialize: function (game) {\n this.game = game;\n this.numPoints = 0;\n if (!getGlobalNamespace().KICKASS_INLINE_CSS) {\n this.includeCSS(GameGlobals.path('css/menustyles.css'));\n }\n }, generateDefaults: function () {\n for (var id in Weapons) if (Weapons.hasOwnProperty(id)) {\n this.addWeapon(Weapons[id], id);\n }\n this.hideBombMenu();\n }, create: function () {\n this.container = document.createElement('div');\n this.container.className = 'KICKASSELEMENT KICKASShidden ' + (this.game.shouldShowMenu() ? \"\" : \"KICKASSNOMENU\");\n this.container.id = 'kickass-menu';\n if (this.game.shouldShowMenu()) {\n this.container.style.bottom = '-250px';\n this.container.style.display = 'none';\n } else {\n removeClass(this.container, \"KICKASShidden\");\n }\n getAppContainerElement().appendChild(this.container);\n var adHTML = \"\";\n this.container.innerHTML = '<div id=\"kickass-howto-image\" class=\"KICKASSELEMENT kickass-howto-invisible\"></div>' + '<div id=\"kickass-pointstab\" style=\"width: 200px;\" class=\"KICKASSELEMENT\">' +\n adHTML + '<div id=\"kickass-bomb-menu\" class=\"KICKASSELEMENT KICKASShidden\">' + '<ul id=\"kickass-bomb-list\" class=\"KICKASSELEMENT\">' + '</ul>' + '</div>' + '<div id=\"kickass-weapons-menu\" class=\"KICKASSELEMENT KICKASShidden\" style=\"display:none\">' + '<ul id=\"kickass-weapons-list\" class=\"KICKASSELEMENT\">' + '</ul>' + '</div>' + '<div id=\"kickass-pointstab-wrapper\" class=\"KICKASSELEMENT\">' + '<div id=\"kickass-points\" class=\"KICKASSELEMENT\">' +\n this.numPoints + '</div>' + '<div id=\"kickass-esctoquit\" class=\"KICKASSELEMENT\">Press esc to quit</div>' +\n this.getShareHTML() + '</div>' + '</div>';\n this.pointsTab = document.getElementById('kickass-pointstab');\n this.pointsTabWrapper = document.getElementById('kickass-pointstab-wrapper');\n this.points = document.getElementById('kickass-points');\n this.escToQuit = document.getElementById('kickass-esctoquit');\n this.howToImage = document.getElementById('kickass-howto-image');\n this.weaponsMenu = document.getElementById('kickass-weapons-menu');\n this.weaponsList = document.getElementById('kickass-weapons-list');\n this.bombLink = document.getElementById('kickass-bomb-menu');\n var all = this.container.getElementsByTagName('*');\n for (var i = 0; i < all.length; i++) {\n this.game.registerElement(all[i]);\n }\n this.game.registerElement(this.container);\n if (this.game.shouldShowMenu()) {\n this.menu = new Menu(this.game);\n this.menu.parent = this;\n this.menu.generate(this.container);\n } else {\n setTimeout(function () {\n this.onGameReady();\n }.bind(this), 100);\n }\n addEvent(this.bombLink, 'click', bind(this, function (e) {\n stopEvent(e);\n this.game.fireBomb();\n }));\n addEvent(this.pointsTabWrapper, 'click', bind(this, this.toggleMenu));\n addEvent(this.weaponsMenu, 'click', bind(this, this.toggleWeaponsMenu));\n this.generateDefaults();\n }, getShareHTML: function () {\n return \"\";\n }, onGameReady: function () {\n this.container.style.display = 'block';\n if (this.game.shouldShowHowToImage()) {\n setTimeout(bind(this, function () {\n removeClass(this.howToImage, \"kickass-howto-invisible\");\n }), 10);\n setTimeout(bind(this, function () {\n addClass(this.howToImage, \"kickass-howto-invisible\");\n }), 4000);\n }\n }, navigateTo: function (page, dontShowMenu) {\n if (!dontShowMenu) {\n this.showMenu();\n }\n if (this.menu) {\n this.menu.socketPostMessage('navigate:!' + page);\n }\n }, toggleMenu: function () {\n if (this.game.shouldShowMenu()) {\n if (hasClass(this.container, 'KICKASShidden')) {\n this.showMenu();\n } else {\n this.hideMenu();\n }\n } else {\n this.showMenu();\n }\n }, toggleWeaponsMenu: function () {\n if (hasClass(this.weaponsMenu, 'KICKASShidden')) {\n this.showWeaponsMenu();\n } else {\n this.hideWeaponsMenu();\n }\n }, hideWeaponsMenu: function () {\n this.weaponsMenu.style.width = '';\n addClass(this.weaponsMenu, 'KICKASShidden');\n }, showWeaponsMenu: function () {\n var last = this.weaponsMenu.getElementsByTagName('li');\n last = last[last.length - 1];\n this.weaponsMenu.style.width = (last.offsetLeft + last.offsetWidth - 47) + 'px';\n removeClass(this.weaponsMenu, 'KICKASShidden');\n }, showMenu: function () {\n if (this.game.shouldShowMenu()) {\n this.container.style.bottom = '';\n removeClass(this.container, 'KICKASShidden');\n }\n }, hideMenu: function () {\n this.container.style.bottom = '';\n addClass(this.container, 'KICKASShidden');\n }, showBombMenu: function () {\n this.bombLink.style.width = \"\";\n }, hideBombMenu: function () {\n this.bombLink.style.width = \"0px\";\n }, getHeight: function () {\n return this.container.clientHeight;\n }, isVisible: function () {\n return !hasClass(this.container, 'KICKASShidden');\n }, addPoints: function (killed, pos) {\n var points = killed * this.game.multiplier;\n this.numPoints += points;\n this.points.innerHTML = this.numPoints;\n if (this.game.statisticsManager) {\n this.game.statisticsManager.increasePointsGainedWithPoints(points);\n }\n this.game.ui.addPointsBubbleAt(pos, points);\n }, includeCSS: function (file) {\n var link = document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = file;\n (document.head || document.body).appendChild(link);\n }, sendMessageToMenu: function (fragment) {\n if (this.menu) {\n this.menu.sendMessage(fragment);\n }\n }, addWeapon: function (weapon, id) {\n var li = document.createElement('li');\n li.className = 'KICKASSELEMENT kickass-weapon-item';\n li.weapon = weapon;\n li.style.backgroundImage = 'url(' + GameGlobals.path('css/gfx/kickass/weap-' + weapon.id + '.png') + ')';\n li.innerHTML = '<span class=\"KICKASSELEMENT\">' + weapon.name + '</span>';\n this.weaponsList.appendChild(li);\n addEvent(li, 'click', bind(this, function (e) {\n stopEvent(e);\n this.changeWeapon(weapon);\n this.sendMessageToMenu(\"changeWeapon:!\" + id);\n }));\n }, changeWeapon: function (weapon) {\n this.game.changeWeapon(weapon);\n }, destroy: function () {\n var all = this.container.getElementsByTagName('*');\n for (var i = 0; i < all.length; i++) {\n this.game.unregisterElement(all[i]);\n }\n this.game.unregisterElement(this.container);\n if (this.menu) {\n this.menu.destroy();\n }\n this.container.parentNode.removeChild(this.container);\n }\n });\n var UIManager = new Class({\n initialize: function (game) {\n this.UNIQID = 0;\n this.game = game;\n this.pointBubbles = {};\n this.messages = {};\n this.fx = new Fx();\n this.fx.addListener(this);\n }, update: function (tdelta) {\n this.fx.update();\n }, set: function (key, value, delta) {\n var type = key.split('-')[0];\n var id = key.split('-')[1];\n if (this.pointBubbles[id]) {\n var bubble = this.pointBubbles[id];\n bubble.style.top = value[0] + 'px';\n bubble.style.opacity = value[1];\n if (delta == 1 && bubble.parentNode) {\n bubble.parentNode.removeChild(bubble);\n delete this.pointBubbles[id];\n }\n } else if (this.messages[id] && type == 'messagedown') {\n var message = this.messages[id];\n message.style.top = value[0] + 'px';\n if (delta == 1) {\n setTimeout(bind(this, function () {\n this.fx.add('messageup-' + id, {\n tweens: [[value[0], -100]],\n transition: Tween.Quadratic,\n duration: 300\n });\n }), message.staytime || 4000);\n }\n } else if (this.messages[id] && type == 'messageup') {\n var message = this.messages[id];\n message.style.top = value[0] + 'px';\n if (delta == 1) {\n message.parentNode.removeChild(message);\n delete this.messages[id];\n }\n }\n }, addPointsBubbleAt: function (pos, points) {\n var id = 'bubble' + (this.UNIQID++);\n var y = this.game.scrollPos.y + pos.y;\n var bubble = newElement('span', {\n innerHTML: points,\n className: 'KICKASSELEMENT',\n styles: {\n position: 'absolute',\n font: \"20px Arial\",\n fontWeight: \"bold\",\n opacity: \"1\",\n color: \"black\",\n textShadow: \"#fff 1px 1px 3px\",\n top: y,\n zIndex: \"10000000\"\n }\n });\n bubble.style.left = pos.x - bubble.offsetWidth / 2 + 'px';\n getAppContainerElement().appendChild(bubble);\n this.pointBubbles[id] = bubble;\n this.fx.add('bubble-' + id, {tweens: [[y, y - 15], [1, 0]]});\n }, showMessage: function (html, staytime) {\n staytime = staytime || false;\n var width = 300;\n var id = this.UNIQID++;\n var message = newElement('div', {\n innerHTML: html,\n className: 'KICKASSELEMENT',\n id: 'kickass-message-' + id,\n styles: {\n position: 'fixed',\n top: -100,\n left: '50%',\n marginLeft: -width / 2,\n width: width,\n background: '#222',\n opacity: 0.8,\n padding: '10px',\n color: '#fff',\n textAlign: 'center',\n borderRadius: 15,\n font: '20px Arial',\n fontWeight: 'bold',\n zIndex: \"10000000\"\n }\n });\n message.staytime = staytime;\n getAppContainerElement().appendChild(message);\n var to = this.getLowestBubbleY();\n message.kickassto = to;\n this.fx.add('messagedown-' + id, {duration: 300, tweens: [[-100, to]], transition: Tween.Quadratic});\n this.messages[id] = message;\n return message;\n }, getLowestBubbleY: function () {\n var top = 100;\n for (var id in this.messages) if (this.messages.hasOwnProperty(id))\n top = Math.max(this.messages[id].kickassto + this.messages[id].offsetHeight + 10, top);\n return top;\n }\n });\n var AudioManager = new Class({\n initialize: function (src, formats) {\n this.src = src;\n this.formats = formats;\n channels = 8;\n this.supportsAudio = (typeof document.createElement('audio').play) != 'undefined';\n if (this.supportsAudio) {\n this.numChannels = channels;\n this.channels = [];\n for (var i = 0; i < this.numChannels; i++) {\n this.channels.push({isPlaying: false, element: this.prepareElement(this.buildAudioElement())});\n }\n }\n }, buildAudioElement: function () {\n var TYPES = {\"ogg\": \"audio/ogg\", \"mp3\": \"audio/mpeg\"}\n var audio = document.createElement(\"audio\");\n for (var i = 0, format; format = this.formats[i]; i++) {\n var source = document.createElement(\"source\");\n source.src = this.src + \".\" + format;\n source.type = TYPES[format];\n audio.appendChild(source);\n }\n return audio;\n }, prepareElement: function (el) {\n if (typeof el.addEventListener == 'undefined')\n return el;\n var self = this;\n el.addEventListener('ended', function (e) {\n self.audioEnded(el);\n }, false);\n return el;\n }, audioEnded: function (target) {\n for (var i = 0, channel; channel = this.channels[i]; i++) {\n if (channel.element === target) {\n channel.isPlaying = false;\n }\n }\n }, play: function () {\n if (!this.supportsAudio) return;\n for (var i = 0, channel; channel = this.channels[i]; i++) {\n if (!channel.isPlaying) {\n channel.isPlaying = true;\n if (typeof channel.element.play == 'function')\n channel.element.play();\n return;\n }\n }\n }\n });\n var Ships = {\n Standard: {\n points: [[-10, 10], [0, -15], [10, 10]],\n thrusters: [{s: {w: 20, h: 7}, p: {x: 0, y: 14}, a: 0}],\n cannons: [{p: {x: 0, y: -15}, a: 0}]\n }\n };\n var PLAYERIDS = 0;\n var Player = new Class({\n initialize: function (game) {\n this.id = PLAYERIDS++;\n this.game = game;\n this.tween = false;\n this.isBound = true;\n this.pos = new Vector(1630, 217);//飞机初始化位置\n this.vel = new Vector(0, 0);\n this.acc = new Vector(0, 0);\n this.dir = new Vector(0, 1);\n this.currentRotation = 0;\n this.isBroken = false;\n this.lineOffsets = [];\n this.deadTime = 0;\n this.friction = 0.95;\n this.terminalVelocity = 2000;\n this.lastPos = new Vector(0, 0);\n }, setShip: function (ship) {\n this.ship = ship;\n this.verts = [];\n for (var i = 0, vert; vert = this.ship.points[i]; i++)\n this.verts.push(new Vector(vert[0], vert[1]));\n this.verts.push(this.verts[0]);\n this.thrusters = [];\n this.cannons = [];\n this.addThrusters(this.ship.thrusters);\n this.addCannons(this.ship.cannons);\n this.size = this.getSizeFromVertsAndObjects();\n this.bounds = this.calculateBounds();\n if (this.sheet) {\n this.sheet.destroy();\n }\n this.sheet = new Sheet(new Rect(100, 100, this.bounds.x, this.bounds.y));\n this.forceRedraw = true;\n }, setCannons: function (cannonClass) {\n var newCannons = [];\n for (var i = 0, cannon; cannon = this.cannons[i]; i++) {\n var newCannon = new cannonClass(this, this.game, cannon.pos.x, cannon.pos.y, cannon.angle);\n newCannons.push(newCannon);\n cannon.destroy();\n }\n this.cannons = newCannons;\n }, addThrusters: function (thrusters) {\n for (var i = 0, data; data = thrusters[i]; i++) {\n var thruster = new Thruster(data);\n this.thrusters.push(thruster);\n }\n }, addCannons: function (cannons) {\n for (var i = 0, data; data = cannons[i]; i++) {\n var weaponClass = WeaponMap[data.m] || WeaponMap.cannon;\n var cannon = new weaponClass.cannonClass(this, this.game, data.p.x, data.p.y, data.a);\n cannon.player = this;\n cannon.game = this.game;\n this.cannons.push(cannon);\n }\n }, update: function (tdelta) {\n if (this.isBroken) {\n if (!this.lineOffsets.length) {\n for (var i = 0; i < (this.verts.length - 1); i++)\n this.lineOffsets[i] = {\n pos: new Vector(0, 0),\n dir: (new Vector(1, 1)).setAngle(Math.PI * 2 * Math.random())\n };\n }\n for (var i = 0; i < this.lineOffsets.length; i++) {\n this.lineOffsets[i].pos.add(this.lineOffsets[i].dir.cp().setLength(50).mul(tdelta));\n }\n this.sheet.clear();\n this.sheet.setAngle(this.dir.angle());\n this.sheet.setPosition(this.pos);\n this.sheet.drawBrokenPlayer(this.verts, this.lineOffsets);\n if (now() - this.deadTime > 1000.0) {\n this.isBroken = false;\n this.lineOffsets = [];\n this.randomPos();\n }\n return;\n }\n if (!this.tween) {\n if (this.game.isKeyPressed('left') || this.game.isKeyPressed('right')) {\n if (this.game.isKeyPressed('left'))\n this.rotateLeft(tdelta);\n if (this.game.isKeyPressed('right'))\n this.rotateRight(tdelta);\n } else {\n this.stopRotate();\n }\n if (this.game.isKeyPressed('up'))\n this.activateThrusters(); else\n this.stopThrusters();\n }\n if (this.game.isKeyPressed(' ')) {\n this.isShooting = true;\n if (!this.isBroken)\n this.shootPressed();\n } else if (this.isShooting) {\n this.isShooting = false;\n this.shootReleased();\n }\n if (this.currentRotation)\n this.dir.setAngle(this.dir.angle() + this.currentRotation * tdelta);\n var frictionedAcc = this.acc.mulNew(tdelta).sub(this.vel.mulNew(tdelta * this.friction));\n this.vel.add(frictionedAcc);\n if (this.vel.len() > this.terminalVelocity)\n this.vel.setLength(this.terminalVelocity);\n var posDelta = this.vel.mulNew(tdelta);\n this.pos.add(posDelta);\n if (this.game.statisticsManager) {\n this.game.statisticsManager.increaseDistanceWithPixels(posDelta.len());\n }\n var showFlames = !this.acc.is({x: 0, y: 0});\n for (var i = 0, thruster; thruster = this.thrusters[i]; i++) {\n thruster.setIsShown(showFlames);\n thruster.update(tdelta);\n }\n if (this.isBound)\n this.checkBounds();\n if (!this.lastPos.is(this.pos) || this.currentRotation || this.forceRedraw) {\n this.forceRedraw = false;\n this.sheet.clear();\n this.sheet.setAngle(this.dir.angle() + Math.PI / 2);\n this.sheet.setPosition(this.pos);\n if (showFlames) {\n for (var i = 0, thruster; thruster = this.thrusters[i]; i++)\n thruster.drawTo(this.sheet);\n }\n this.sheet.drawPlayer(this.verts);\n this.lastPos = this.pos.cp();\n }\n for (var i = 0, cannon; cannon = this.cannons[i]; i++) {\n cannon.update(tdelta);\n }\n }, randomPos: function () {\n var w = this.game.windowSize.width;\n var h = this.game.windowSize.height;\n this.pos = new Vector(random(0, w), random(0, h));\n }, checkBounds: function () {\n if (this.tween)\n return;\n var w = this.game.windowSize.width;\n var h = this.game.windowSize.height;\n var rightBound = this.pos.x + this.sheet.rect.size.width / 2;\n var bottomBound = this.pos.y + this.sheet.rect.size.height / 2;\n if (rightBound > w) {\n window.scrollTo(this.game.scrollPos.x + 50, this.game.scrollPos.y);\n this.pos.x = 0;\n } else if (this.pos.x < 0) {\n window.scrollTo(this.game.scrollPos.x - 50, this.game.scrollPos.y);\n this.pos.x = w - this.sheet.rect.size.width / 2;\n }\n if (bottomBound > h) {\n window.scrollTo(this.game.scrollPos.x, this.game.scrollPos.y + h * 0.75);\n this.pos.y = 0;\n } else if (this.pos.y < 0) {\n window.scrollTo(this.game.scrollPos.x, this.game.scrollPos.y - h * 0.75);\n this.pos.y = h - this.sheet.rect.size.height / 2;\n }\n }, inRect: function (rect) {\n var ret = false;\n for (var i = 0, vert; vert = this.verts[i]; i++) {\n if (rect.hasPoint(new Vector(vert.x + this.pos.x, vert.y + this.pos.y)))\n ret = true;\n }\n return ret;\n }, hit: function (by) {\n if (this.isBroken) return;\n this.isBroken = true;\n this.deadTime = now();\n }, activateThrusters: function () {\n if (this.game.statisticsManager) {\n this.game.statisticsManager.usedThrusters();\n }\n this.acc = (new Vector(500, 0)).setAngle(this.dir.angle());\n }, stopThrusters: function () {\n this.acc = new Vector(0, 0);\n }, rotateLeft: function (tdelta) {\n this.currentRotation = Math.max(-Math.PI * 2, this.currentRotation - Math.PI * 10 * tdelta);\n }, rotateRight: function (tdelta) {\n this.currentRotation = Math.min(Math.PI * 2, this.currentRotation + Math.PI * 10 * tdelta);\n }, stopRotate: function () {\n this.currentRotation = 0;\n }, getSizeFromVertsAndObjects: function () {\n var largestDistance = 0;\n for (var i = 0, vert; vert = this.verts[i]; i++)\n largestDistance = Math.max(largestDistance, (new Vector(vert)).len());\n for (var i = 0, obj; obj = this.thrusters[i]; i++) {\n var p1 = (new Vector(obj.pos.x - obj.size.width / 2, obj.pos.y - obj.size.height / 2)).rotate(obj.angle);\n var p2 = (new Vector(obj.pos.x + obj.size.width / 2, obj.pos.y - obj.size.height / 2)).rotate(obj.angle);\n var p3 = (new Vector(obj.pos.x - obj.size.width / 2, obj.pos.y + obj.size.height / 2)).rotate(obj.angle);\n var p4 = (new Vector(obj.pos.x + obj.size.width / 2, obj.pos.y + obj.size.height / 2)).rotate(obj.angle);\n largestDistance = Math.max(largestDistance, p1.len(), p2.len(), p3.len(), p4.len());\n }\n return {width: largestDistance * 2, height: largestDistance * 2};\n }, calculateBounds: function () {\n return {\n x: Math.max(this.size.width, this.size.height) * 1,\n y: Math.max(this.size.height, this.size.width) * 1\n };\n }, shootPressed: function () {\n for (var i = 0, cannon; cannon = this.cannons[i]; i++)\n cannon.shootPressed();\n }, shootReleased: function () {\n for (var i = 0, cannon; cannon = this.cannons[i]; i++)\n cannon.shootReleased();\n }, flyTo: function (x, y, callback) {\n this.tween = {\n start: {pos: this.pos.cp(), dir: this.dir.cp()},\n to: new Vector(x, y),\n callback: callback || function () {\n }\n };\n this.tween.time = this.getTimeforTween();\n }, destroy: function () {\n this.sheet.destroy();\n }\n });\n var Thruster = new Class({\n initialize: function (data, ship) {\n this.pos = new Vector(data.p);\n this.size = {width: data.s.w, height: data.s.h};\n this.angle = data.a || 0;\n this.ship = ship;\n this.isShown = false;\n this.flameY = 1;\n this.fx = new Fx();\n this.fx.addListener(this);\n this.flames = {r: [], y: []};\n this.lastFrameUpdate = 0;\n this.generateFlames();\n }, update: function (tdelta) {\n this.fx.update();\n if (now() - this.lastFrameUpdate > 1000 / 60)\n this.generateFlames();\n }, set: function (key, value) {\n switch (key) {\n case'flames':\n this.flameY = value;\n break;\n }\n }, setIsShown: function (isShown) {\n if (!this.isShown && isShown) {\n this.flameY = 0.0;\n this.generateFlames();\n this.fx.add('flames', {start: this.flameY, end: 1, duration: 250, transition: Tween.Quintic});\n }\n this.isShown = isShown;\n }, drawTo: function (sheet) {\n sheet.drawFlames(this.flames, this.angle);\n }, generateFlames: function () {\n var redWidth = this.size.width, redIncrease = this.size.width * 0.05, yellowWidth = this.size.width * 0.8,\n yellowIncrease = yellowWidth * 0.1, halfRed = redWidth / 2, halfYellow = yellowWidth / 2,\n offsetY = -this.size.height / 2, metaY = 0;\n var px = this.pos.x;\n var py = this.pos.y - this.size.height / 2;\n\n function vec(x, y) {\n return new Vector(x, y);\n }\n\n this.flames.r = [vec(-halfRed + px, py)];\n this.flames.y = [vec(-halfYellow + px, py)];\n this.flames.self = this;\n for (var x = 0; x < redWidth; x += redIncrease)\n this.flames.r.push(vec(x - halfRed + px, this.flameY * random(this.size.height * 0.7, this.size.height) + py));\n this.flames.r.push(vec(halfRed + px, py));\n for (var x = 0; x < yellowWidth; x += yellowIncrease)\n this.flames.y.push(vec(x - halfYellow + px, this.flameY * random(this.size.height * 0.4, this.size.height * 0.7) + py));\n this.flames.y.push(vec(halfYellow + px, py));\n this.lastFrameUpdate = now();\n var pos = vec(px, py);\n for (var i = 0, p; p = this.flames.r[i]; i++)\n p.sub(pos).rotate(this.angle).add(pos);\n for (var i = 0, p; p = this.flames.y[i]; i++)\n p.sub(pos).rotate(this.angle).add(pos);\n }\n });\n var BombManager = new Class({\n initialize: function (game) {\n this.game = game;\n this.bombShowDelay = 30;\n this.nextBomb = this.bombShowDelay;\n }, update: function (tdelta) {\n if (this.game.isKeyPressed('F') && this.isReady()) {\n this.blow();\n }\n if (this.nextBomb === -1 || !this.game.sessionManager.isPlaying) {\n return;\n }\n this.nextBomb -= tdelta;\n if (this.nextBomb < 0) {\n this.game.menuManager.showBombMenu();\n this.nextBomb = -1;\n this.game.ui.showMessage(\"BOMB IS READY<br />(lower right corner or F)\");\n }\n }, blow: function () {\n var message = this.game.ui.showMessage(\"3...\", 5000);\n delay(1000, function () {\n message.innerHTML = \"2...\";\n }, this);\n delay(2000, function () {\n message.innerHTML = \"1...\";\n }, this);\n delay(3000, function () {\n message.innerHTML = \"boom\";\n }, this);\n delay(3000, this.blowStuffUp, this);\n this.nextBomb = this.bombShowDelay;\n }, blowStuffUp: function () {\n this.game.bulletManager.updateEnemyIndex();\n var index = this.game.bulletManager.enemyIndex;\n for (var i = 0, el; (el = index[i]) && i < 10; i++) {\n var rect = getRect(el);\n var center = new Vector(rect.left + rect.width / 2, rect.top + rect.height / 2);\n this.game.explosionManager.addExplosion(center, el, MegaParticleExplosion);\n el.parentNode.removeChild(el);\n }\n this.game.menuManager.hideBombMenu();\n this.nextBomb = this.bombShowDelay;\n }, isReady: function () {\n return this.nextBomb === -1;\n }\n });\n var ELEMENTSTHATARENOTTOBEINCLUDED = ['BR', 'SCRIPT', 'STYLE', 'TITLE', 'META', 'HEAD', 'OPTION', 'OPTGROUP', 'LINK'];\n var ELEMENTSIZETHRESHOLD = 5;\n var BulletManager = new Class({\n initialize: function (game) {\n this.game = game;\n this.lastBlink = 0;\n this.blinkActive = false;\n this.enemyIndex = [];\n this.updateDelay = 2.5;\n this.nextUpdate = this.updateDelay;\n }, update: function (tdelta) {\n if (this.game.isKeyPressed('B')) {\n this.blink();\n } else if (this.blinkActive) {\n this.endBlink();\n }\n this.nextUpdate -= tdelta;\n if (this.nextUpdate < 0) {\n this.updateEnemyIndex();\n }\n }, blink: function () {\n if (now() - this.lastBlink > 250) {\n for (var i = 0, el; el = this.enemyIndex[i]; i++) {\n if (!this.blinkActive)\n el.style.outline = '1px solid red'; else\n el.style.outline = el.KICKASSOLDBORDER;\n }\n this.blinkActive = !this.blinkActive;\n this.lastBlink = now();\n if (!this.blinkActive) {\n this.updateEnemyIndex();\n }\n }\n }, endBlink: function () {\n for (var i = 0, el; el = this.enemyIndex[i]; i++)\n el.style.outline = el.KICKASSOLDBORDER;\n this.lastBlink = 0;\n this.blinkActive = false;\n }, updateEnemyIndex: function () {\n var all = document.getElementsByTagName('*');\n this.enemyIndex = [];\n for (var i = 0, el; el = all[i]; i++) {\n if (this.isDestroyable(el)) {\n this.enemyIndex.push(el);\n el.KICKASSOLDBORDER = el.style.outline || (document.defaultView.getComputedStyle(el, null).outline);\n }\n }\n this.nextUpdate = this.updateDelay;\n }, isDestroyable: function (element, ignoreSize) {\n if (this.shouldIgnoreElement(element, ignoreSize))\n return false;\n for (var i = 0, child; child = element.childNodes[i]; i++) {\n if (child.nodeType === 1 && ELEMENTSTHATARENOTTOBEINCLUDED.indexOf(child.tagName) === -1 && (child.offsetWidth >= ELEMENTSIZETHRESHOLD && child.offsetHeight >= ELEMENTSIZETHRESHOLD) && document.defaultView.getComputedStyle(child, null).visibility !== 'hidden') {\n return false;\n }\n }\n return true;\n }, isDestroyableFromCollision: function (element) {\n return this.isDestroyable(element, true);\n }, shouldIgnoreElement: function (element, ignoreSize) {\n if (element.nodeType !== 1)\n return true;\n if (element == document.documentElement || element == document.body)\n return true;\n if (ELEMENTSTHATARENOTTOBEINCLUDED.indexOf(element.tagName) !== -1)\n return true;\n if (element.style.visibility == 'hidden' || element.style.display == 'none')\n return true;\n if (typeof element.className == \"string\" && element.className.indexOf('KICKASSELEMENT') != -1)\n return true;\n if (!ignoreSize) {\n if (element.offsetWidth < ELEMENTSIZETHRESHOLD || element.offsetHeight < ELEMENTSIZETHRESHOLD)\n return true;\n }\n var rect;\n if (element.offsetLeft < 0 || element.offsetTop < 0) {\n rect = getRect(element);\n if (rect.left + rect.width < 0 || rect.top + rect.height < 0)\n return true;\n }\n if (!rect)\n rect = getRect(element);\n if (rect.top >= this.game.scrollSize.y)\n return true;\n return false;\n }, destroy: function () {\n for (var key in this.bullets) if (this.bullets.hasOwnProperty(key))\n for (var i = 0, bullet; bullet = this.bullets[key][i]; i++)\n bullet.destroy();\n this.bullets = {};\n }\n });\n var SessionManager = new Class({\n initialize: function (game) {\n this.game = game;\n this.isPlaying = false;\n }, update: function (tdelta) {\n if (this.isPlaying && this.game.bulletManager.enemyIndex.length == 0) {\n this.weHaveWon();\n }\n }, weHaveWon: function () {\n this.isPlaying = false;\n this.game.ui.showMessage(\"You're done!\");\n if (this.game.isCampaign()) {\n this.game.menuManager.showMenu();\n this.game.menuManager.navigateTo('highscores');\n } else {\n this.game.menuManager.showMenu();\n }\n this.game.menuManager.sendMessageToMenu(\"gameFinished:!\");\n }\n });\n var ExplosionManager = new Class({\n initialize: function (game) {\n this.game = game;\n this.explosions = [];\n }, update: function (tdelta) {\n var time = now();\n for (var i = 0, explosion; explosion = this.explosions[i]; i++) {\n if (time - explosion.bornAt > (explosion.ttl || 500)) {\n explosion.destroy();\n this.explosions.splice(i, 1);\n continue;\n }\n explosion.update(tdelta);\n }\n }, addExplosion: function (pos, forElement, explosionClass) {\n explosionClass = explosionClass || ParticleExplosion;\n var explosion = new explosionClass(pos, forElement);\n explosion.game = this.game;\n explosion.checkBounds();\n this.explosions.push(explosion);\n if (this.game.audioManager.explosion) {\n this.game.audioManager.explosion.play();\n }\n }, destroy: function () {\n for (var i = 0, explosion; explosion = this.explosions[i]; i++)\n explosion.destroy();\n this.explosions = [];\n }\n });\n var Cannon = new Class({\n initialize: function (player, game, x, y, angle) {\n this.player = player;\n this.game = game;\n this.pos = new Vector(x, y);\n this.angle = angle || 0;\n }, shootPressed: function () {\n }, shootReleased: function () {\n }, checkCollisions: function () {\n }, getExplosionClass: function () {\n return ParticleExplosion;\n }, update: function (tdelta) {\n this.game.hideAll();\n this.checkCollisions(tdelta);\n this.game.showAll();\n }, checkCollision: function (bullet) {\n var hit = bullet.checkCollision();\n if (!hit)\n return false;\n this.game.explosionManager.addExplosion(bullet.pos, hit, this.getExplosionClass());\n this.game.menuManager.addPoints(Math.min(hit.getElementsByTagName('*').length + 1, 100), bullet.pos);\n if (!hit.isShot) {\n hit.parentNode.removeChild(hit);\n }\n if (this.game.statisticsManager) {\n this.game.statisticsManager.addElementsDestroyed();\n }\n return true;\n }, createBullet: function (bulletClass) {\n var pos = this.getABulletPos();\n var dir = this.getABulletDir();\n var bullet = new bulletClass(pos, dir);\n bullet.game = this.game;\n bullet.manager = this;\n bullet.initCanvas();\n bullet.vel.add(bullet.vel.cp().setLength(this.player.vel.len()));\n return bullet;\n }, getABulletPos: function () {\n return this.player.pos.cp().add(this.pos.cp().rotate(this.player.dir.angle() + Math.PI / 2));\n }, getABulletDir: function () {\n return this.player.dir.cp().rotate(this.angle);\n }, destroy: function () {\n }\n });\n var LaserCannon = new Class({\n Extends: Cannon, initialize: function (player, game, x, y, angle) {\n Cannon.prototype.initialize.apply(this, arguments);\n this.lasers = [];\n }, getExplosionClass: function () {\n return SplitExplosion;\n }, update: function (tdelta) {\n if (!this.lasers.length)\n return;\n this.removeOld();\n Cannon.prototype.update.call(this, tdelta);\n }, checkCollisions: function (tdelta) {\n for (var i = 0, laser; laser = this.lasers[i]; i++) {\n laser.update(tdelta);\n if (this.checkCollision(laser)) {\n }\n }\n }, removeOld: function () {\n for (var i = 0, laser; laser = this.lasers[i]; i++) {\n if (laser.outOfBounds) {\n laser.destroy();\n this.lasers.splice(i, 1);\n }\n }\n }, shootPressed: function () {\n if (this.lasers.length > 5) {\n return;\n }\n if (now() - this.lastFired < 500) {\n return;\n }\n this.lastFired = now();\n if (this.game.statisticsManager) {\n this.game.statisticsManager.addShotFired();\n }\n this.lasers.push(this.createBullet(LaserBullet));\n }, destroy: function () {\n if (this.lasers.length) {\n for (var i = 0, laser; laser = this.lasers[i]; i++) {\n laser.destroy();\n }\n this.lasers = [];\n }\n }\n });\n var BallCannon = new Class({\n Extends: Cannon, initialize: function () {\n Cannon.prototype.initialize.apply(this, arguments);\n this.lastFired = 0;\n this.bullets = [];\n }, getExplosionClass: function () {\n return ParticleExplosion;\n }, update: function (tdelta) {\n if (!this.bullets.length) {\n return;\n }\n this.removeOld();\n Cannon.prototype.update.call(this, tdelta);\n }, removeOld: function () {\n var time = now();\n for (var i = 0, bullet; bullet = this.bullets[i]; i++) {\n if (time - bullet.bornAt > 2000) {\n bullet.destroy();\n this.bullets.splice(i, 1);\n }\n }\n }, checkCollisions: function (tdelta) {\n for (var i = 0, bullet; bullet = this.bullets[i]; i++) {\n bullet.update(tdelta);\n if (this.checkCollision(bullet)) {\n bullet.destroy();\n this.bullets.splice(i, 1);\n }\n }\n }, shootPressed: function () {\n if (now() - this.lastFired < 200) {\n return;\n }\n this.lastFired = now();\n this.addBullet();\n if (this.game.statisticsManager) {\n this.game.statisticsManager.addShotFired();\n }\n }, addBullet: function () {\n if (this.bullets.length > 7) {\n this.bullets[0].destroy();\n this.bullets.shift();\n }\n var bullet = this.createBullet(Bullet);\n this.bullets.push(bullet);\n }, destroy: function () {\n for (var i = 0, bullet; bullet = this.bullets[i]; i++) {\n bullet.destroy();\n }\n this.bullets = [];\n }\n });\n var Bullet = new Class({\n initialize: function (pos, dir) {\n this.pos = pos.cp();\n this.dir = dir;\n this.vel = new Vector(500, 500);\n this.bornAt = now();\n }, initCanvas: function () {\n this.sheet = new Sheet(new Rect(this.pos.x, this.pos.y, 5, 5));\n this.sheet.drawBullet();\n }, draw: function () {\n this.sheet.setPosition(this.pos);\n }, update: function (tdelta) {\n this.pos.add(this.vel.setAngle(this.dir.angle()).mulNew(tdelta));\n this.checkBounds();\n this.draw();\n }, checkCollision: function () {\n var element = document.elementFromPoint(this.pos.x, this.pos.y);\n if (element && element.nodeType == 3)\n element = element.parentNode;\n var didFind = element && this.game.bulletManager.isDestroyableFromCollision(element) ? element : false;\n return didFind;\n }, checkBounds: function () {\n var w = this.game.windowSize.width;\n var h = this.game.windowSize.height;\n var rightBound = this.pos.x + this.sheet.rect.size.width / 2;\n var bottomBound = this.pos.y + this.sheet.rect.size.height / 2;\n if (rightBound > w)\n this.pos.x = 0; else if (this.pos.x < 0)\n this.pos.x = w - this.sheet.rect.size.width / 2;\n if (bottomBound > h)\n this.pos.y = 0; else if (this.pos.y < 0)\n this.pos.y = h - this.sheet.rect.size.height / 2;\n }, destroy: function () {\n this.sheet.destroy();\n }\n });\n var LaserBullet = new Class({\n Extends: Bullet, initialize: function () {\n Bullet.prototype.initialize.apply(this, arguments);\n this.vel = new Vector(750, 750);\n this.lastDrawPos = this.pos.cp();\n }, initCanvas: function () {\n var s = Math.max(GameGlobals.laserImage.width, GameGlobals.laserImage.height);\n this.sheet = new Sheet(new Rect(0, 0, s, s));\n }, update: function (tdelta) {\n Bullet.prototype.update.apply(this, arguments);\n }, draw: function () {\n this.sheet.drawLaser(this.pos, this.dir);\n this.lastDrawPos = this.pos.cp();\n }, checkBounds: function () {\n var w = this.game.windowSize.width;\n var h = this.game.windowSize.height;\n var rightBound = this.pos.x + this.sheet.rect.size.width / 2;\n var bottomBound = this.pos.y + this.sheet.rect.size.height / 2;\n if (rightBound > w || this.pos.x < 0)\n this.outOfBounds = true;\n if (bottomBound > h || this.pos.y < 0)\n this.outOfBounds = true;\n }, destroy: function () {\n this.sheet.destroy();\n }\n });\n GameGlobals.laserImage = document.createElement('img');\n GameGlobals.laserImage.src = GameGlobals.path('css/gfx/kickass/laser.png');\n var Explosion = new Class({\n initialize: function (pos, element) {\n this.bornAt = now();\n this.pos = pos.cp();\n }, update: function (tdelta) {\n }, checkBounds: function () {\n }, destroy: function () {\n }\n });\n var ParticleExplosion = new Class({\n Extends: Explosion, initialize: function (pos, element) {\n Explosion.prototype.initialize.apply(this, arguments);\n this.particleVel = new Vector(150, 0);\n this.particles = [];\n this.generateParticles();\n this.sheet = new Sheet(new Rect(pos.x, pos.y, 250, 250));\n }, update: function (tdelta) {\n for (var i = 0, particle; particle = this.particles[i]; i++)\n particle.pos.add(particle.vel.mulNew(tdelta).mul(random(0.5, 1.0)).setAngle(particle.dir.angle()));\n this.sheet.clear();\n this.sheet.drawExplosion(this.particles);\n }, generateParticles: function () {\n for (var i = 0, j = !GameGlobals.hasCanvas ? 10 : 40; i < j; i++) {\n this.particles.push({\n dir: (new Vector(random(0, 20) - 10, random(0, 20) - 10)).normalize(),\n vel: this.particleVel.cp(),\n pos: new Vector(0, 0),\n color: ['yellow', 'red'][random(0, 1)]\n });\n }\n }, checkBounds: function () {\n var right = this.sheet.rect.getRight();\n var bottom = this.sheet.rect.getBottom();\n var w = this.game.windowSize.width;\n var h = this.game.windowSize.height;\n if (right > w)\n this.pos.x -= right - w;\n if (bottom > h)\n this.pos.y -= bottom - h;\n this.sheet.setPosition(this.pos);\n }, destroy: function () {\n this.sheet.destroy();\n }\n });\n var MegaParticleExplosion = new Class({\n Extends: ParticleExplosion, initialize: function (pos, element) {\n Explosion.prototype.initialize.apply(this, arguments);\n this.particleVel = new Vector(200, 0);\n this.particles = [];\n this.generateParticles();\n this.sheet = new Sheet(new Rect(pos.x, pos.y, 500, 500));\n this.ttl = 2000;\n this.generationDelay = 0.6;\n this.generationTimes = 2;\n this.nextGenerate = this.generationDelay;\n }, update: function (tdelta) {\n this.nextGenerate -= tdelta;\n if (this.nextGenerate <= 0 && this.generationTimes > 0) {\n this.nextGenerate = this.generationDelay;\n this.generateParticles();\n this.generationTimes--;\n }\n ParticleExplosion.prototype.update.call(this, tdelta);\n }\n });\n var SplitExplosion = new Class({\n Extends: Explosion, initialize: function (pos, element) {\n if (!element) return;\n Explosion.prototype.initialize.apply(this, arguments);\n this.element = element;\n this.fx = new Fx();\n this.fx.addListener(this);\n this.start();\n }, update: function (tdelta) {\n if (!this.element) return;\n this.fx.update();\n }, set: function (key, value) {\n if (key == 'opacity') {\n }\n }, start: function () {\n var pieces = this.createClones();\n var left = pieces[0], right = pieces[1];\n var lT = 'rotate(-' + random(30, 50) + 'deg) translate(-100px, 40px)';\n var rT = 'rotate(' + random(30, 50) + 'deg) translate(100px, 40px)';\n setStyles(left, {'transform': lT});\n setStyles(right, {'transform': rT});\n this.left = left;\n this.right = right;\n this.fx.add('opacity', {start: 1, end: 0.5, duration: 500});\n }, createClones: function () {\n var coords = getRect(this.element);\n var leftContainer = this.createContainer(coords);\n var rightContainer = this.createContainer(coords);\n var left = cloneElement(this.element);\n var right = cloneElement(this.element);\n addClass(left, 'KICKASSELEMENT');\n addClass(right, 'KICKASSELEMENT');\n var styles = {margin: 0, overflow: 'hidden'};\n setStyles(left, styles);\n setStyles(right, styles);\n leftContainer.appendChild(left);\n rightContainer.appendChild(right);\n rightContainer.style.left = coords.left + coords.width / 2 + 'px';\n rightContainer.scrollLeft += coords.width / 2;\n this.element.style.opacity = 0;\n this.element.style.visibility = 'hidden';\n this.element.style.display = 'none';\n return each([leftContainer, rightContainer], function (el) {\n el.style.transition = 'transform 500ms ease-in';\n });\n }, createContainer: function (coords) {\n var ret = document.createElement('div');\n setStyles(ret, {\n position: 'absolute',\n left: coords.left,\n top: coords.top,\n width: coords.width * 0.5,\n height: coords.height,\n overflow: 'hidden'\n });\n getAppContainerElement().appendChild(ret);\n return ret;\n }, destroy: function () {\n try {\n this.left.parentNode.removeChild(this.left);\n this.right.parentNode.removeChild(this.right);\n this.element.parentNode.removeChild(this.element);\n } catch (e) {\n }\n }\n });\n var Weapons = {\n 1: {name: 'Cannon', id: 'cannon', cannonClass: BallCannon},\n 2: {name: 'Laser', id: 'laser', cannonClass: LaserCannon}\n };\n var WeaponMap = {'cannon': Weapons[1], 'laser': Weapons[2]};\n var SheetCanvas = new Class({\n initialize: function (rect) {\n this.canvas = document.createElement('canvas');\n this.canvas.className = 'KICKASSELEMENT';\n with (this.canvas.style) {\n position = 'absolute';\n zIndex = '1000000';\n }\n GameGlobals.kickass.registerElement(this.canvas);\n if (this.canvas.getContext)\n this.ctx = this.canvas.getContext('2d');\n this.rect = rect;\n this.angle = 0;\n this.updateCanvas();\n getAppContainerElement().appendChild(this.canvas);\n }, tracePoly: function (verts) {\n if (!verts[0]) return;\n this.ctx.save();\n this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2);\n this.ctx.rotate(this.angle);\n this.ctx.beginPath();\n this.ctx.moveTo(verts[0].x, verts[0].y);\n for (var i = 0; i < verts.length; i++) {\n this.ctx.lineTo(verts[i].x, verts[i].y);\n }\n this.ctx.restore();\n }, setAngle: function (angle) {\n this.angle = angle;\n }, updateCanvas: function () {\n if (this.canvas.width != this.rect.size.width)\n this.canvas.width = this.rect.size.width;\n if (this.canvas.height != this.rect.size.height)\n this.canvas.height = this.rect.size.height;\n this.canvas.style.left = GameGlobals.kickass.scrollPos.x + (this.rect.pos.x - this.rect.size.width / 2) + 'px';\n this.canvas.style.top = GameGlobals.kickass.scrollPos.y + (this.rect.pos.y - this.rect.size.height / 2) + 'px';\n }, drawLine: function (xFrom, yFrom, xTo, yTo) {\n this.ctx.save();\n this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2);\n this.ctx.beginPath();\n this.ctx.moveTo(xFrom, yFrom);\n this.ctx.lineTo(xTo, yTo);\n this.ctx.closePath();\n this.ctx.stroke();\n this.ctx.restore();\n }, drawCircle: function (radius, pos) {\n pos = pos || {x: 0, y: 0};\n this.ctx.save();\n this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2);\n if (pos)\n this.ctx.translate(pos.x, pos.y);\n this.ctx.beginPath();\n this.ctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n this.ctx.fill();\n this.ctx.closePath();\n this.ctx.restore();\n }, drawRect: function (x, y, w, h) {\n this.ctx.save();\n this.ctx.translate(this.rect.size.width / 2, this.rect.size.height / 2);\n this.ctx.translate(x, y);\n this.ctx.fillRect(x, y, w, h);\n this.ctx.restore();\n this.ctx.fill();\n }, drawImageFull: function (image) {\n this.ctx.drawImage(image, 0, 0, this.rect.size.width, this.rect.size.height);\n }, drawImage: function (image, x, y) {\n this.ctx.save();\n this.ctx.translate(this.rect.size.width / 2 + x, this.rect.size.height / 2 + y);\n this.ctx.rotate(this.angle);\n this.ctx.drawImage(image, 0, -11);\n this.ctx.restore();\n }, setFillColor: function (color) {\n this.ctx.fillStyle = color;\n }, setStrokeColor: function (color) {\n this.ctx.strokeStyle = color;\n }, setLineWidth: function (width) {\n this.ctx.lineWidth = width;\n }, fillPath: function () {\n this.ctx.fill();\n }, strokePath: function () {\n this.ctx.stroke();\n }, clear: function () {\n this.ctx.clearRect(0, 0, this.rect.size.width, this.rect.size.height);\n }, destroy: function () {\n GameGlobals.kickass.unregisterElement(this.canvas);\n this.canvas.parentNode.removeChild(this.canvas);\n }\n });\n var Sheet = new Class({\n initialize: function (rect) {\n this.rect = rect;\n this.drawer = new SheetCanvas(rect);\n }, clear: function () {\n this.drawer.clear();\n }, setPosition: function (pos) {\n this.rect.pos = pos.cp();\n this.drawer.rect = this.rect;\n this.drawer.updateCanvas();\n }, setAngle: function (angle) {\n this.drawer.setAngle(angle);\n }, drawPlayer: function (verts) {\n this.drawer.setFillColor('white');\n this.drawer.setStrokeColor('black');\n this.drawer.setLineWidth(1.5);\n this.drawer.tracePoly(verts);\n this.drawer.fillPath();\n this.drawer.tracePoly(verts);\n this.drawer.strokePath();\n }, drawBrokenPlayer: function (verts, lineOffsets) {\n this.drawer.setStrokeColor('black');\n this.drawer.setLineWidth(1.5);\n for (var i = 1, vert, lastVert = verts[0]; vert = verts[i]; i++, lastVert = vert) {\n var o = lineOffsets[i - 1];\n this.drawer.drawLine(lastVert.x + o.pos.x, lastVert.x + o.pos.y, vert.x + o.pos.x, vert.y + o.pos.y);\n }\n }, drawFlames: function (flames, angle) {\n this.drawer.setLineWidth(1.5);\n this.drawer.setFillColor('red');\n this.drawer.tracePoly(flames.r);\n this.drawer.fillPath();\n this.drawer.setFillColor('yellow');\n this.drawer.tracePoly(flames.y);\n this.drawer.fillPath();\n }, drawBullet: function () {\n this.drawer.setFillColor(GameGlobals.bulletColor);\n this.drawer.drawCircle(2.5);\n }, drawExplosion: function (particles) {\n for (var i = 0, particle; particle = particles[i]; i++) {\n this.drawer.setFillColor(particle.color);\n this.drawer.drawRect(particle.pos.x, particle.pos.y, 3, 3);\n }\n }, drawFace: function (face) {\n this.drawer.drawImageFull(face);\n }, drawLaser: function (pos, dir) {\n this.clear();\n this.setPosition(pos);\n this.drawer.setAngle(dir.angle());\n this.drawer.drawImage(GameGlobals.laserImage, 0, 0);\n }, transformToSheetCoordinates: function (vec) {\n var ret = vec.cp().sub(new Vector(this.rect.size.width / 2, this.rect.size.height / 2));\n return ret;\n }, destroy: function () {\n this.drawer.destroy();\n }\n });\n var namespace = getGlobalNamespace();\n\n var initKickAss = function () {\n // If an instance of KickAss is already present, we add a player\n if (!namespace.KICKASSGAME) {\n if (namespace.KICKASS_SITE_KEY) {\n var mySite = new MySite(namespace.KICKASS_SITE_KEY);\n mySite.load(function (ok) {\n namespace.KICKASSGAME = GameGlobals.kickass = new KickAss({\n mySite: ok ? mySite : false\n });\n\n namespace.KICKASSGAME.begin();\n });\n } else {\n namespace.KICKASSGAME = GameGlobals.kickass = new KickAss();\n namespace.KICKASSGAME.begin();\n }\n } else {\n namespace.KICKASSGAME.addPlayer();\n }\n };\n\n if (namespace.LAZYLOAD_KICKASS) {\n window.startBrowserBlaster = initKickAss;\n } else {\n initKickAss();\n }\n\n function getAppContainerElement() {\n if (namespace.KICKASS_CONTAINER_ELEMENT) {\n return document.getElementById(namespace.KICKASS_CONTAINER_ELEMENT);\n } else {\n return document.body;\n }\n }\n})(typeof exports != 'undefined' ? exports : window);"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"../../../js/plugins/aplayer.js","names":["RightMenuAplayer","playStatus","APlayer","fn","undefined","player","setAPlayerObject","observer","setAPlayerObserver","meting","document","querySelectorAll","length","forEach","item","index","meta","id","volantis","GLOBAL_CONFIG","plugins","aplayer","updateTitle","on","e","updateAPlayerControllerStatus","status","onUpdateAPlayerVolume","volumeBarWrap","getElementsByClassName","children","volumeBar","thumbMove","updateAPlayerVolume","thumbUp","classList","remove","removeEventListener","addEventListener","event","stopPropagation","add","error","console","log","percentage","clientX","changedTouches","getBoundingClientRect","left","clientWidth","Math","max","min","volume","style","width","audio","paused","checkAPlayer","toggle","skipBack","play","skipForward","percent","list","obj","audios","innerHTML","title","aplayerBackward","aplayerToggle","aplayerForward","Object","freeze","requestAnimationFrame"],"sources":["js/plugins/aplayer.js"],"mappings":"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","ignoreList":[],"sourcesContent":["/**\n * 右键音乐\n * */\nconst RightMenuAplayer = (() => {\n let playStatus; // 播放器状态\n const APlayer = {}; // 右键音乐所控制的播放器\n const fn = {};\n\n fn.checkAPlayer = () => {\n if (playStatus === undefined || APlayer.player === undefined) {\n fn.setAPlayerObject();\n } else if (APlayer.observer === undefined) {\n fn.setAPlayerObserver();\n }\n }\n\n // 设置全局播放器所对应的 aplyer 对象\n fn.setAPlayerObject = () => {\n let meting = document.querySelectorAll('.footer meting-js');\n if (meting.length == 0) {\n meting = document.querySelectorAll('meting-js');\n }\n APlayer.player = undefined;\n meting.forEach((item, index) => {\n if (item.meta.id == volantis.GLOBAL_CONFIG.plugins.aplayer.id && item.aplayer && APlayer.player === undefined) {\n APlayer.player = item.aplayer;\n fn.setAPlayerObserver();\n fn.updateTitle();\n }\n });\n }\n\n // 事件监听\n fn.setAPlayerObserver = () => {\n try {\n APlayer.player.on('play', function (e) {\n fn.updateAPlayerControllerStatus(e);\n APlayer.status = 'play';\n });\n APlayer.player.on('pause', function (e) {\n fn.updateAPlayerControllerStatus(e);\n APlayer.status = 'pause';\n });\n APlayer.player.on('volumechange', function (e) {\n fn.onUpdateAPlayerVolume(e);\n });\n APlayer.player.on('loadstart', function (e) {\n fn.updateTitle(e);\n });\n\n // 监听音量手势\n APlayer.volumeBarWrap = document.getElementsByClassName('nav volume')[0].children[0];\n APlayer.volumeBar = APlayer.volumeBarWrap.children[0];\n\n const thumbMove = (e) => {\n fn.updateAPlayerVolume(e);\n };\n\n const thumbUp = (e) => {\n APlayer.volumeBarWrap.classList.remove('aplayer-volume-bar-wrap-active');\n document.removeEventListener('mouseup', thumbUp);\n document.removeEventListener('mousemove', thumbMove);\n fn.updateAPlayerVolume(e);\n };\n\n APlayer.volumeBarWrap.addEventListener('mousedown', (event) => {\n event.stopPropagation();\n APlayer.volumeBarWrap.classList.add('aplayer-volume-bar-wrap-active');\n document.addEventListener('mousemove', thumbMove);\n document.addEventListener('mouseup', thumbUp);\n });\n\n APlayer.volumeBarWrap.addEventListener('click', (event) => {\n event.stopPropagation();\n });\n\n fn.updateAPlayerControllerStatus();\n fn.onUpdateAPlayerVolume();\n APlayer.observer = true;\n } catch (error) {\n console.log(error);\n APlayer.observer = undefined;\n }\n }\n\n fn.updateAPlayerVolume = (e) => {\n let percentage = ((e.clientX || e.changedTouches[0].clientX) -\n APlayer.volumeBar.getBoundingClientRect().left) / APlayer.volumeBar.clientWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n APlayer.player.volume(percentage);\n }\n\n fn.onUpdateAPlayerVolume = () => {\n try {\n APlayer.volumeBar.children[0].style.width = APlayer.player.audio.volume * 100 + '%';\n } catch (error) {\n console.log(error);\n }\n }\n\n // 更新控制器状态\n fn.updateAPlayerControllerStatus = () => {\n try {\n if (APlayer.player.audio.paused) {\n playStatus = 'pause';\n document.getElementsByClassName('nav toggle')[0].children[0].classList.add('fa-play');\n document.getElementsByClassName('nav toggle')[0].children[0].classList.remove('fa-pause');\n } else {\n playStatus = 'play';\n document.getElementsByClassName('nav toggle')[0].children[0].classList.remove('fa-play');\n document.getElementsByClassName('nav toggle')[0].children[0].classList.add('fa-pause');\n }\n } catch (error) {\n console.log(error);\n }\n }\n\n // 播放/暂停\n fn.aplayerToggle = () => {\n fn.checkAPlayer();\n try {\n APlayer.player.toggle();\n } catch (error) {\n console.log(error);\n }\n }\n\n // 上一曲\n fn.aplayerBackward = () => {\n fn.checkAPlayer();\n try {\n APlayer.player.skipBack();\n APlayer.player.play();\n } catch (error) {\n console.log(error);\n }\n }\n\n // 下一曲\n fn.aplayerForward = () => {\n fn.checkAPlayer();\n try {\n APlayer.player.skipForward();\n APlayer.player.play();\n } catch (error) {\n console.log(error);\n }\n }\n\n // 调节音量\n fn.aplayerVolume = (percent) => {\n fn.checkAPlayer();\n try {\n APlayer.player.volume(percent);\n } catch (error) {\n console.log(error);\n }\n }\n\n // 更新音乐标题\n fn.updateTitle = () => {\n fn.checkAPlayer();\n try {\n const index = APlayer.player.list.index;\n const obj = APlayer.player.list.audios[index];\n document.getElementsByClassName('nav music-title')[0].innerHTML = obj.title;\n } catch (error) {\n //console.log(error);\n }\n }\n\n return {\n checkAPlayer: fn.checkAPlayer,\n aplayerBackward: fn.aplayerBackward,\n aplayerToggle: fn.aplayerToggle,\n aplayerForward: fn.aplayerForward,\n APlayer: APlayer\n }\n})()\n\nObject.freeze(RightMenuAplayer);\n\nvolantis.requestAnimationFrame(() => {\n RightMenuAplayer.checkAPlayer();\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"../../../js/plugins/parallax.js","names":["Parallax","options","speed","zIndex","fade","slidein","slider","mirrors","length","opac","parseFloat","style","opacity","setTimeout","mirror","remove","shift","start","document","createElement","classList","add","visibility","position","top","left","overflow","window","appendChild","src","alt","mirrorItem","push","addEventListener","update","init","loadDimensions","wH","documentElement","clientHeight","wW","clientWidth","getScrollTop","scrollPos","pageYOffset","compatMode","scrollTop","body","lastPosition","loop","yoffset","winScrollTop","sT","Math","max","sL","scrollLeft","overScroll","min","loadScrollPosition","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","refreshItem","aspectRatio","naturalWidth","naturalHeight","aspect","boxWidth","boxHeight","boxOffsetTop","boxOffsetLeft","boxOffsetBottom","winHeight","maxOffset","minOffset","imageHeightMin","imageOffsetMin","margin","imageWidth","imageHeight","offsetBaseTop","offsetLeft","renderItem","scrollBottom","mirrorTop","mirrorLeft","offsetTop","transform","height","width","maxWidth","forEach","e"],"sources":["js/plugins/parallax.js"],"mappings":"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","ignoreList":[],"sourcesContent":["let Parallax = {};\nParallax.options = {};\nParallax.options.speed = 0.25;\nParallax.options.zIndex = -100;\nParallax.options.fade = 1500;\nParallax.slidein = () => {\n let slider = Parallax.mirrors[0].slider;\n if (Parallax.mirrors.length >= 2) {\n slider = Parallax.mirrors[1].slider;\n }\n var opac = parseFloat(slider.style.opacity);\n if (opac !== 1) {\n if (Parallax.mirrors.length >= 2) {\n opac = opac + 0.1;\n slider.style.opacity = opac;\n setTimeout(Parallax.slidein, Parallax.options.fade / 10);\n }else{\n slider.style.opacity = 1;\n }\n } else {\n if (Parallax.mirrors.length >= 2) {\n Parallax.mirrors[0].mirror.remove();\n Parallax.mirrors.shift();\n }\n }\n};\nParallax.start = () => {\n let mirror = document.createElement(\"div\");\n mirror.classList.add(\"parallax-mirror\");\n mirror.style.visibility = \"hidden\";\n mirror.style.zIndex = Parallax.options.zIndex;\n mirror.style.position = \"fixed\";\n mirror.style.top = 0;\n mirror.style.left = 0;\n mirror.style.overflow = \"hidden\";\n Parallax.window.appendChild(mirror);\n let slider = document.createElement(\"img\");\n slider.src = Parallax.options.src;\n slider.alt = \"parallax\";\n slider.classList.add(\"parallax-slider\");\n slider.style.opacity = 0;\n mirror.appendChild(slider);\n if (!Parallax.mirrors) {\n Parallax.mirrors = [];\n }\n let mirrorItem = {};\n mirrorItem.mirror = mirror;\n mirrorItem.slider = slider;\n Parallax.mirrors.push(mirrorItem);\n Parallax.slidein();\n slider.addEventListener(\n \"load\",\n function () {\n Parallax.update();\n },\n false\n );\n};\nParallax.init = () => {\n function loadDimensions() {\n Parallax.wH = document.documentElement.clientHeight;\n Parallax.wW = document.documentElement.clientWidth;\n }\n function getScrollTop() {\n var scrollPos;\n if (window.pageYOffset) {\n scrollPos = window.pageYOffset;\n } else if (document.compatMode && document.compatMode != \"BackCompat\") {\n scrollPos = document.documentElement.scrollTop;\n } else if (document.body) {\n scrollPos = document.body.scrollTop;\n }\n return scrollPos;\n }\n function loadScrollPosition() {\n const winScrollTop = getScrollTop();\n Parallax.sT = Math.max(0, winScrollTop);\n Parallax.sL = Math.max(0, document.body.scrollLeft);\n Parallax.overScroll = Math.min(winScrollTop, 0);\n }\n window.addEventListener(\n \"resize\",\n function () {\n loadDimensions();\n Parallax.update();\n },\n false\n );\n loadDimensions();\n let lastPosition = -1;\n (function loop() {\n const yoffset = getScrollTop();\n if (lastPosition !== yoffset) {\n lastPosition = yoffset;\n loadScrollPosition();\n Parallax.update();\n }\n window.requestAnimationFrame =\n window.requestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.webkitRequestAnimationFrame;\n window.requestAnimationFrame(loop);\n })();\n};\n\nParallax.refreshItem = (slider) => {\n Parallax.options.aspectRatio =\n slider.naturalWidth / (slider.naturalHeight || 1);\n const aspect = Parallax.options.aspectRatio || 1;\n Parallax.options.boxWidth = Parallax.window.clientWidth;\n Parallax.options.boxHeight = Parallax.window.clientHeight;\n Parallax.options.boxOffsetTop = Parallax.window.scrollTop;\n Parallax.options.boxOffsetLeft = Parallax.window.scrollLeft;\n Parallax.options.boxOffsetBottom =\n Parallax.options.boxOffsetTop + Parallax.options.boxHeight;\n const winHeight = Parallax.wH;\n const maxOffset = Parallax.options.boxOffsetTop;\n const minOffset = Math.max(\n Parallax.options.boxOffsetTop + Parallax.options.boxHeight - winHeight,\n 0\n );\n const imageHeightMin =\n (Parallax.options.boxHeight +\n (maxOffset - minOffset) * (1 - Parallax.options.speed)) |\n 0;\n const imageOffsetMin =\n ((Parallax.options.boxOffsetTop - maxOffset) *\n (1 - Parallax.options.speed)) |\n 0;\n let margin;\n if (Parallax.options.boxWidth < imageHeightMin * aspect) {\n Parallax.options.imageWidth = (imageHeightMin * aspect) | 0;\n Parallax.options.imageHeight = imageHeightMin;\n Parallax.options.offsetBaseTop = imageOffsetMin;\n margin = Parallax.options.imageWidth - Parallax.options.boxWidth;\n Parallax.options.offsetLeft = (-margin / 2) | 0;\n } else {\n Parallax.options.imageWidth = Parallax.options.boxWidth;\n Parallax.options.imageHeight = (Parallax.options.boxWidth / aspect) | 0;\n Parallax.options.offsetLeft = 0;\n margin = Parallax.options.imageHeight - imageHeightMin;\n Parallax.options.offsetBaseTop = (imageOffsetMin - margin / 2) | 0;\n }\n};\nParallax.renderItem = (mirror, slider) => {\n const scrollTop = Parallax.sT;\n const scrollLeft = Parallax.sL;\n const scrollBottom = scrollTop + Parallax.wH;\n if (\n Parallax.options.boxOffsetBottom > scrollTop &&\n Parallax.options.boxOffsetTop <= scrollBottom\n ) {\n Parallax.options.visibility = \"visible\";\n Parallax.options.mirrorTop = Parallax.options.boxOffsetTop - scrollTop;\n Parallax.options.mirrorLeft = Parallax.options.boxOffsetLeft - scrollLeft;\n Parallax.options.offsetTop =\n Parallax.options.offsetBaseTop -\n Parallax.options.mirrorTop * (1 - Parallax.options.speed);\n } else {\n Parallax.options.visibility = \"hidden\";\n }\n mirror.style.transform =\n \"translate3d(\" +\n Parallax.options.mirrorLeft +\n \"px, \" +\n Parallax.options.mirrorTop +\n \"px, 0px)\";\n mirror.style.visibility = Parallax.options.visibility;\n mirror.style.height = Parallax.options.boxHeight + \"px\";\n mirror.style.width = Parallax.options.boxWidth + \"px\";\n\n slider.style.transform =\n \"translate3d(\" +\n Parallax.options.offsetLeft +\n \"px, \" +\n Parallax.options.offsetTop +\n \"px, 0px)\";\n slider.style.position = \"absolute\";\n slider.style.height = Parallax.options.imageHeight + \"px\";\n slider.style.width = Parallax.options.imageWidth + \"px\";\n slider.style.maxWidth = \"none\";\n};\nParallax.update = () => {\n if (!Parallax.mirrors) {\n return\n }\n Parallax.mirrors.forEach((e) => {\n Parallax.refreshItem(e.slider);\n Parallax.renderItem(e.mirror, e.slider);\n });\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"../../../js/plugins/rightMenus.js","names":["RightMenus","defaultEvent","defaultGroup","messageRightMenu","volantis","GLOBAL_CONFIG","plugins","message","enable","rightmenu","corsAnywhere","rightmenus","options","urlRegx","imgRegx","initialMenu","fun","init","pjax","send","hideMenu","isReadModel","readMode","readClipboard","async","clipboardText","navigator","permissions","query","name","state","clipboard","readText","window","clipboardRead","writeClipText","text","writeText","then","Promise","resolve","catch","err","reject","writeClipImg","link","success","error","image","Image","crossOrigin","addEventListener","canvas","document","createElement","context","getContext","width","height","drawImage","toBlob","blob","write","ClipboardItem","e","src","insertAtCaret","elemt","value","startPos","selectionStart","endPos","selectionEnd","selection","focus","createRange","scrollTop","substring","length","rightMenuConfig","fn","_rightMenuWrapper","getElementById","_rightMenuContent","_rightMenuList","querySelectorAll","_rightMenuListWithHr","_readBkg","_menuMusic","_backward","querySelector","_toggle","_forward","globalData","mouseEvent","isInputBox","selectText","inputValue","isLink","linkUrl","isMediaLink","mediaLinkUrl","isImage","isArticle","pathName","isReadClipboard","isShowMusic","statusCheck","globalDataBackup","Object","assign","initEvent","elementAppend","contextmenu","menuEvent","parentNode","removeChild","readBkg","className","id","body","appendChild","menuPosition","event","mouseClientX","clientX","mouseClientY","clientY","screenWidth","documentElement","clientWidth","screenHeight","clientHeight","style","display","menuControl","menuWidth","offsetWidth","menuHeight","offsetHeight","showLeft","showTop","left","top","notice","menuNotic","console","globalDataSet","forEach","item","nodeName","firstElementChild","groupName","getAttribute","itemEvent","articleShowLink","every","method","handle","start","elementHrItem","hide","nextElementSibling","getSelection","toString","target","tagName","toLowerCase","href","test","currentSrc","location","pathname","aplayer","RightMenuAplayer","undefined","APlayer","player","musicAlwaysShow","status","oncontextmenu","ctrlKey","stopPropagation","preventDefault","removeEventListener","eventName","RightMenusFunction","debug","VolantisApp","icon","iconPrefix","time","onclick","aplayerBackward","aplayerToggle","aplayerForward","NoticeRightMenu","localStorage","getItem","displayMode","setItem","copyText","utilWriteClipText","messageCopyright","copyLink","copyAll","select","copyPaste","result","copyCut","statrPos","inputStr","copyImg","hideMessage","printMode","question","printHtml","DOMController","setAttribute","removeList","setStyleList","setTimeout","print","innerHTML","reload","ScrollReveal","clean","setStyle","fadeToggleList","toggleClassList","backgroundColor","hasClass","freeze","requestAnimationFrame","readyState"],"sources":["js/plugins/rightMenus.js"],"mappings":"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","ignoreList":[],"sourcesContent":["\nconst RightMenus = {\n defaultEvent: ['copyText', 'copyLink', 'copyPaste', 'copyAll', 'copyCut', 'copyImg', 'printMode', 'readMode'],\n defaultGroup: ['navigation', 'inputBox', 'seletctText', 'elementCheck', 'elementImage', 'articlePage'],\n messageRightMenu: volantis.GLOBAL_CONFIG.plugins.message.enable && volantis.GLOBAL_CONFIG.plugins.message.rightmenu.enable,\n corsAnywhere: volantis.GLOBAL_CONFIG.plugins.rightmenus.options.corsAnywhere,\n urlRegx: /^((https|http)?:\\/\\/)+[A-Za-z0-9]+\\.[A-Za-z0-9]+[\\/=\\?%\\-&_~`@[\\]\\':+!]*([^<>\\\"\\\"])*$/,\n imgRegx: /\\.(jpe?g|png|webp|svg|gif|jifi)(-|_|!|\\?|\\/)?.*$/,\n\n /**\n * 加载右键菜单\n */\n initialMenu: () => {\n RightMenus.fun.init();\n volantis.pjax.send(() => {\n RightMenus.fun.hideMenu();\n if (volantis.isReadModel) RightMenus.fun.readMode();\n })\n },\n\n /**\n * 读取剪切板\n * @returns text\n */\n readClipboard: async () => {\n let clipboardText;\n const result = await navigator.permissions.query({ name: 'clipboard-read' });\n switch (result.state) {\n case 'granted':\n case 'prompt':\n clipboardText = await navigator.clipboard.readText()\n break;\n default:\n window.clipboardRead = false;\n break;\n }\n return clipboardText;\n },\n\n /**\n * 写入文本到剪切板\n * @param {String} text\n */\n writeClipText: text => {\n return navigator.clipboard\n .writeText(text)\n .then(() => {\n return Promise.resolve()\n })\n .catch(err => {\n return Promise.reject(err)\n })\n },\n\n /**\n * 写入图片到剪切板\n * @param {*} link\n * @param {*} success\n * @param {*} error\n */\n writeClipImg: async (link, success, error) => {\n const image = new Image;\n image.crossOrigin = \"Anonymous\";\n image.addEventListener('load', () => {\n let canvas = document.createElement(\"canvas\");\n let context = canvas.getContext(\"2d\");\n canvas.width = image.width;\n canvas.height = image.height;\n context.drawImage(image, 0, 0);\n canvas.toBlob(blob => {\n navigator.clipboard.write([\n new ClipboardItem({ 'image/png': blob })\n ]).then(e => {\n success(e)\n }).catch(e => {\n error(e)\n })\n }, 'image/png')\n }, false)\n image.src = `${link}?(lll¬ω¬)~~`;\n },\n\n /**\n * 粘贴文本到剪切板\n * @param {*} elemt\n * @param {*} value\n */\n insertAtCaret: (elemt, value) => {\n const startPos = elemt.selectionStart,\n endPos = elemt.selectionEnd;\n if (document.selection) {\n elemt.focus();\n var sel = document.selection.createRange();\n sel.text = value;\n elemt.focus();\n } else {\n if (startPos || startPos == '0') {\n var scrollTop = elemt.scrollTop;\n elemt.value = elemt.value.substring(0, startPos) + value + elemt.value.substring(endPos, elemt.value.length);\n elemt.focus();\n elemt.selectionStart = startPos + value.length;\n elemt.selectionEnd = startPos + value.length;\n elemt.scrollTop = scrollTop;\n } else {\n elemt.value += value;\n elemt.focus();\n }\n }\n }\n}\n\n/**\n * 事件处理区域\n */\nRightMenus.fun = (() => {\n const rightMenuConfig = volantis.GLOBAL_CONFIG.plugins.rightmenus;\n\n const\n fn = {},\n _rightMenuWrapper = document.getElementById('rightmenu-wrapper'),\n _rightMenuContent = document.getElementById('rightmenu-content'),\n _rightMenuList = document.querySelectorAll('#rightmenu-content li.menuLoad-Content'),\n _rightMenuListWithHr = document.querySelectorAll('#rightmenu-content li, #rightmenu-content hr, #menuMusic'),\n _readBkg = document.getElementById('read_bkg'),\n _menuMusic = document.getElementById('menuMusic'),\n _backward = document.querySelector('#menuMusic .backward'),\n _toggle = document.querySelector('#menuMusic .toggle'),\n _forward = document.querySelector('#menuMusic .forward');\n\n // 公共数据\n let globalData = {\n mouseEvent: null,\n isInputBox: false,\n selectText: '',\n inputValue: '',\n isLink: false,\n linkUrl: '',\n isMediaLink: false,\n mediaLinkUrl: '',\n isImage: false,\n isArticle: false,\n pathName: '',\n isReadClipboard: true,\n isShowMusic: false,\n statusCheck: false\n }\n const globalDataBackup = Object.assign({}, globalData);\n\n /**\n * 初始化监听事件处理\n */\n fn.initEvent = () => {\n fn.elementAppend();\n fn.contextmenu();\n fn.menuEvent();\n }\n\n /**\n * 预置元素设定\n */\n fn.elementAppend = () => {\n // 阅读模式\n if (_readBkg) _readBkg.parentNode.removeChild(_readBkg);\n const readBkg = document.createElement(\"div\");\n readBkg.className = \"common_read_bkg common_read_hide\";\n readBkg.id = \"read_bkg\";\n window.document.body.appendChild(readBkg);\n }\n\n /**\n * 右键菜单位置设定\n * @param {*} event\n */\n fn.menuPosition = (event) => {\n try {\n let mouseClientX = event.clientX;\n let mouseClientY = event.clientY;\n let screenWidth = document.documentElement.clientWidth || document.body.clientWidth;\n let screenHeight = document.documentElement.clientHeight || document.body.clientHeight;\n\n _rightMenuWrapper.style.display = 'block';\n fn.menuControl(event);\n\n let menuWidth = _rightMenuContent.offsetWidth;\n let menuHeight = _rightMenuContent.offsetHeight;\n let showLeft = mouseClientX + menuWidth > screenWidth ? mouseClientX - menuWidth + 10 : mouseClientX;\n let showTop = mouseClientY + menuHeight > screenHeight ? mouseClientY - menuHeight + 10 : mouseClientY;\n showTop = mouseClientY + menuHeight > screenHeight && showTop < menuHeight && mouseClientY < menuHeight ?\n showTop + (screenHeight - menuHeight - showTop - 10) : showTop;\n _rightMenuWrapper.style.left = `${showLeft}px`;\n _rightMenuWrapper.style.top = `${showTop}px`;\n if (volantis.GLOBAL_CONFIG.plugins.message.rightmenu.notice) fn.menuNotic();\n } catch (error) {\n console.error(error);\n fn.hideMenu();\n return true;\n }\n return false;\n }\n\n /**\n * 菜单项控制\n * @param {*} event\n */\n fn.menuControl = (event) => {\n fn.globalDataSet(event);\n if (!!_menuMusic) _menuMusic.style.display = globalData.isShowMusic ? 'block' : 'none';\n _rightMenuList.forEach(item => {\n item.style.display = 'none';\n const nodeName = item.firstElementChild.nodeName;\n const groupName = item.firstElementChild.getAttribute('data-group');\n const itemEvent = item.firstElementChild.getAttribute('data-event');\n if (globalData.statusCheck || globalData.isArticle) {\n switch (groupName) {\n case 'inputBox':\n if (globalData.isInputBox) {\n item.style.display = 'block';\n if (itemEvent === 'copyCut' && !globalData.selectText) item.style.display = 'none';\n if (itemEvent === 'copyAll' && !globalData.inputValue) item.style.display = 'none';\n if (itemEvent === 'copyPaste' && !globalData.isReadClipboard) item.style.display = 'none';\n }\n break;\n case 'seletctText':\n if (!!globalData.selectText) item.style.display = 'block';\n break;\n case 'elementCheck':\n if (globalData.isLink || globalData.isMediaLink) item.style.display = 'block';\n break;\n case 'elementImage':\n if (globalData.isImage) item.style.display = 'block';\n break;\n case 'articlePage':\n if (globalData.isArticle) item.style.display = 'block';\n break;\n default:\n item.style.display = nodeName === 'A'\n ? globalData.isArticle && !globalData.statusCheck && rightMenuConfig.options.articleShowLink\n ? 'block'\n : 'none'\n : 'block';\n break;\n }\n } else if (nodeName === 'A' || RightMenus.defaultGroup.every(item => { return groupName !== item })) {\n item.style.display = 'block';\n }\n })\n\n // 执行外部事件\n volantis.mouseEvent = event;\n volantis.rightmenu.method.handle.start()\n\n // 过滤 HR 元素\n let elementHrItem = { item: null, hide: true };\n _rightMenuListWithHr.forEach((item) => {\n if (item.nodeName === \"HR\") {\n item.style.display = 'block';\n if (!elementHrItem.item) {\n elementHrItem.item = item;\n return;\n }\n if (elementHrItem.hide || elementHrItem.item.nextElementSibling.nodeName === \"hr\") {\n elementHrItem.item.style.display = 'none';\n }\n elementHrItem.item = item;\n elementHrItem.hide = true;\n } else {\n if (item.style.display === 'block' && elementHrItem.hide) {\n elementHrItem.hide = false;\n }\n }\n })\n if (!!elementHrItem.item && elementHrItem.hide) elementHrItem.item.style.display = 'none';\n }\n\n /**\n * 元素状态判断/全局数据设置\n * @param {*} event\n */\n fn.globalDataSet = (event) => {\n globalData = Object.assign({}, globalDataBackup);\n globalData.mouseEvent = event;\n globalData.selectText = window.getSelection().toString();\n\n // 判断是否为输入框\n if (event.target.tagName.toLowerCase() === 'input' || event.target.tagName.toLowerCase() === 'textarea') {\n globalData.isInputBox = true;\n globalData.inputValue = event.target.value;\n }\n\n // 判断是否允许读取剪切板\n if (globalData.isInputBox && window.clipboardRead === false) {\n globalData.isReadClipboard = false;\n }\n\n // 判断是否包含链接\n if (!!event.target.href && RightMenus.urlRegx.test(event.target.href)) {\n globalData.isLink = true;\n globalData.linkUrl = event.target.href;\n }\n\n // 判断是否包含媒体链接\n if (!!event.target.currentSrc && RightMenus.urlRegx.test(event.target.currentSrc)) {\n globalData.isMediaLink = true;\n globalData.mediaLinkUrl = event.target.currentSrc;\n }\n\n // 判断是否为图片地址\n if (globalData.isMediaLink && RightMenus.imgRegx.test(globalData.mediaLinkUrl)) {\n globalData.isImage = true;\n }\n\n // 判断是否为文章页面\n if (!!(document.querySelector('#post.article') || null)) {\n globalData.isArticle = true;\n globalData.pathName = window.location.pathname;\n }\n\n // 判断是否显示音乐控制器\n if (volantis.GLOBAL_CONFIG.plugins.aplayer?.enable\n && typeof RightMenuAplayer !== 'undefined'\n && RightMenuAplayer.APlayer.player !== undefined) {\n if (rightMenuConfig.options.musicAlwaysShow\n || RightMenuAplayer.APlayer.status === 'play'\n || RightMenuAplayer.APlayer.status === 'undefined') {\n globalData.isShowMusic = true;\n }\n }\n\n // 设定校验状态\n if (!!globalData.selectText || globalData.isInputBox || globalData.isLink || globalData.isMediaLink) {\n globalData.statusCheck = true;\n }\n }\n\n /**\n * 全局右键监听函数\n */\n fn.contextmenu = () => {\n window.document.oncontextmenu = (event) => {\n if (event.ctrlKey || document.body.offsetWidth <= 500) {\n fn.hideMenu();\n return true;\n }\n return fn.menuPosition(event);\n }\n\n _rightMenuWrapper.oncontextmenu = (event) => {\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n\n window.removeEventListener('blur', fn.hideMenu);\n window.addEventListener('blur', fn.hideMenu);\n document.body.removeEventListener('click', fn.hideMenu);\n document.body.addEventListener('click', fn.hideMenu);\n }\n\n /**\n * 菜单项事件处理函数\n */\n fn.menuEvent = () => {\n _rightMenuList.forEach(item => {\n let eventName = item.firstElementChild.getAttribute('data-event');\n const id = item.firstElementChild.getAttribute('id');\n const groupName = item.firstElementChild.getAttribute('data-group');\n if (item.firstElementChild.nodeName === \"A\") return;\n item.addEventListener('click', () => {\n try {\n if (RightMenus.defaultEvent.every(item => { return eventName !== item })) {\n if (groupName === 'seletctText') {\n RightMenusFunction[id](globalData.selectText)\n } else if (groupName === 'elementCheck') {\n RightMenusFunction[id](globalData.isLink ? globalData.linkUrl : globalData.mediaLinkUrl)\n } else if (groupName === 'elementImage') {\n RightMenusFunction[id](globalData.mediaLinkUrl)\n } else {\n RightMenusFunction[id]()\n }\n } else {\n fn[eventName]()\n }\n } catch (error) {\n if (volantis.GLOBAL_CONFIG.debug === \"rightMenus\") {\n console.error({\n id: id,\n error: error,\n globalData: globalData,\n groupName: groupName,\n eventName: eventName\n });\n }\n if (RightMenus.messageRightMenu) {\n VolantisApp.message('错误提示', error, {\n icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',\n time: '15000'\n });\n }\n }\n })\n })\n\n if (_forward && _toggle && _forward) {\n _backward.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n RightMenuAplayer.aplayerBackward();\n }\n _toggle.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n RightMenuAplayer.aplayerToggle();\n }\n _forward.onclick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n RightMenuAplayer.aplayerForward();\n }\n }\n }\n\n /**\n * 隐藏菜单显示\n */\n fn.hideMenu = () => {\n _rightMenuWrapper.style.display = null;\n _rightMenuWrapper.style.left = null;\n _rightMenuWrapper.style.top = null;\n }\n\n /**\n * 右键菜单覆盖提示\n */\n fn.menuNotic = () => {\n const NoticeRightMenu = localStorage.getItem('NoticeRightMenu') === 'true';\n if (RightMenus.messageRightMenu && !NoticeRightMenu)\n VolantisApp.message('右键菜单', '唤醒原系统菜单请使用:<kbd>Ctrl</kbd> + <kbd>右键</kbd>', {\n icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',\n displayMode: 1,\n time: 9000\n }, () => {\n localStorage.setItem('NoticeRightMenu', 'true')\n });\n }\n\n fn.copyText = () => {\n VolantisApp.utilWriteClipText(globalData.selectText)\n .then(() => {\n if (RightMenus.messageRightMenu) {\n VolantisApp.messageCopyright();\n }\n }).catch(e => {\n if (RightMenus.messageRightMenu) {\n VolantisApp.message('系统提示', e, {\n icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',\n displayMode: 1,\n time: 9000\n });\n }\n })\n }\n\n fn.copyLink = () => {\n VolantisApp.utilWriteClipText(globalData.linkUrl || globalData.mediaLinkUrl)\n .then(() => {\n if (RightMenus.messageRightMenu) {\n VolantisApp.messageCopyright();\n }\n }).catch(e => {\n if (RightMenus.messageRightMenu) {\n VolantisApp.message('系统提示', e, {\n icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',\n displayMode: 1,\n time: 9000\n });\n }\n })\n }\n\n fn.copyAll = () => {\n globalData.mouseEvent.target.select();\n }\n\n fn.copyPaste = async () => {\n const result = await RightMenus.readClipboard() || '';\n if (RightMenus.messageRightMenu && window.clipboardRead === false) {\n VolantisApp.message('系统提示', '未授予剪切板读取权限!');\n } else if (RightMenus.messageRightMenu && result === '') {\n VolantisApp.message('系统提示', '仅支持复制文本内容!');\n } else {\n RightMenus.insertAtCaret(globalData.mouseEvent.target, result);\n }\n }\n\n fn.copyCut = () => {\n const statrPos = globalData.mouseEvent.target.selectionStart;\n const endPos = globalData.mouseEvent.target.selectionEnd;\n const inputStr = globalData.inputValue;\n fn.copyText(globalData.selectText);\n globalData.mouseEvent.target.value = inputStr.substring(0, statrPos) + inputStr.substring(endPos, inputStr.length);\n globalData.mouseEvent.target.selectionStart = statrPos;\n globalData.mouseEvent.target.selectionEnd = statrPos;\n globalData.mouseEvent.target.focus();\n }\n\n fn.copyImg = () => {\n if (volantis.GLOBAL_CONFIG.plugins.message.rightmenu.notice) {\n VolantisApp.message('系统提示', '复制中,请等待。', {\n icon: rightMenuConfig.options.iconPrefix + ' fa-images'\n })\n }\n RightMenus.writeClipImg(globalData.mediaLinkUrl, e => {\n if (RightMenus.messageRightMenu) {\n VolantisApp.hideMessage();\n VolantisApp.message('系统提示', '图片复制成功!', {\n icon: rightMenuConfig.options.iconPrefix + ' fa-images'\n });\n }\n }, (e) => {\n console.error(e);\n if (RightMenus.messageRightMenu) {\n VolantisApp.hideMessage();\n VolantisApp.message('系统提示', '复制失败:' + e, {\n icon: rightMenuConfig.options.iconPrefix + ' fa-exclamation-square red',\n time: 9000\n });\n }\n })\n }\n\n fn.printMode = () => {\n if (window.location.pathname === globalData.pathName) {\n if (RightMenus.messageRightMenu) {\n const message = '是否打印当前页面?<br><em style=\"font-size: 80%\">建议打印时勾选背景图形</em><br>'\n VolantisApp.question('', message, { time: 9000 }, () => { fn.printHtml() })\n } else {\n fn.printHtml()\n }\n }\n }\n\n fn.printHtml = () => {\n if (volantis.isReadModel) fn.readMode();\n DOMController.setAttribute('details', 'open', 'true');\n DOMController.removeList([\n '.cus-article-bkg', '.iziToast-overlay', '.iziToast-wrapper', '.prev-next',\n 'footer', '#l_header', '#l_cover', '#l_side', '#comments', '#s-top', '#BKG',\n '#rightmenu-wrapper', '.nav-tabs', '.parallax-mirror', '.new-meta-item.share', \n '.new-meta-box', 'button.btn-copy', 'iframe'\n ]);\n DOMController.setStyleList([\n ['body', 'backgroundColor', 'unset'], ['#l_main, .copyright.license', 'width', '100%'], \n ['#post', 'boxShadow', 'none'], ['#post', 'background', 'none'], ['#post', 'padding', '0'], \n ['h1', 'textAlign', 'center'], ['h1', 'fontWeight', '600'], ['h1', 'fontSize', '2rem'], ['h1', 'marginBottom', '20px'], \n ['.tab-pane', 'display', 'block'], ['.tab-content', 'borderTop', 'none'], ['.highlight>table pre', 'whiteSpace', 'pre-wrap'], \n ['.highlight>table pre', 'wordBreak', 'break-all'], ['.fancybox img', 'height', 'auto'], ['.fancybox img', 'weight', 'auto'], \n ['.copyright.license', 'margin', '0'], ['.copyright.license', 'padding', '1.25em 20px'], \n ['figure.highlight, .copyright.license', 'display', 'inline-block'], \n ]);\n setTimeout(() => {\n window.print();\n document.body.innerHTML = '';\n window.location.reload();\n }, 50);\n }\n\n fn.readMode = () => {\n if (typeof ScrollReveal === 'function') ScrollReveal().clean('#comments');\n DOMController.setStyle('#l_header', 'opacity', 0);\n DOMController.fadeToggleList([\n document.querySelector('#l_cover'), document.querySelector('footer'),\n document.querySelector('#s-top'), document.querySelector('.article-meta#bottom'),\n document.querySelector('.prev-next'), document.querySelector('#l_side'),\n document.querySelector('#comments'), \n ]);\n DOMController.toggleClassList([\n [document.querySelector('#l_main'), 'common_read'], [document.querySelector('#l_main'), 'common_read_main'],\n [document.querySelector('#l_body'), 'common_read'], [document.querySelector('#safearea'), 'common_read'],\n [document.querySelector('#pjax-container'), 'common_read'], [document.querySelector('#read_bkg'), 'common_read_hide'],\n [document.querySelector('h1'), 'common_read_h1'], [document.querySelector('#post'), 'post_read'],\n [document.querySelector('#l_cover'), 'read_cover'], [document.querySelector('.widget.toc-wrapper'), 'post_read']\n ]);\n DOMController.setStyle('.copyright.license', 'margin', '15px 0');\n volantis.isReadModel = volantis.isReadModel === undefined ? true : !volantis.isReadModel;\n if (volantis.isReadModel) {\n if (RightMenus.messageRightMenu) VolantisApp.message('系统提示', '阅读模式已开启,您可以点击屏幕空白处退出。', {\n backgroundColor: 'var(--color-read-post)',\n icon: rightMenuConfig.options.iconPrefix + ' fa-book-reader',\n displayMode: 1,\n time: 5000\n });\n document.querySelector('#l_body').removeEventListener('click', fn.readMode);\n document.querySelector('#l_body').addEventListener('click', (event) => {\n if (DOMController.hasClass(event.target, 'common_read')) {\n fn.readMode();\n }\n });\n } else {\n document.querySelector('#l_body').removeEventListener('click', fn.readMode);\n document.querySelector('#post').removeEventListener('click', fn.readMode);\n DOMController.setStyle('.prev-next', 'display', 'flex');\n DOMController.setStyle('.copyright.license', 'margin', '15px -40px');\n DOMController.setStyle('#l_header', 'opacity', 'unset');\n }\n }\n\n return {\n init: fn.initEvent,\n hideMenu: fn.hideMenu,\n readMode: fn.readMode\n }\n})()\n\nObject.freeze(RightMenus);\nvolantis.requestAnimationFrame(() => {\n if (document.readyState !== 'loading') {\n RightMenus.initialMenu();\n } else {\n document.addEventListener(\"DOMContentLoaded\", function () {\n RightMenus.initialMenu();\n })\n }\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"../../../../js/plugins/tags/contributors.js","names":["ContributorsJS","requestAPI","url","callback","timeout","retryTimes","request","Promise","resolve","reject","status","timer","setTimeout","fetch","then","response","clearTimeout","ok","json","Error","data","catch","error","layout","cfg","el","api","querySelector","remove","cellALL","forEach","item","i","user","html_url","login","avatar_url","avatar","innerHTML","innerText","e","start","els","document","getElementsByClassName","length","getAttribute","Object","class","volantis","GLOBAL_CONFIG","default","addEventListener"],"sources":["js/plugins/tags/contributors.js"],"mappings":"AAAA,MAAMA,eAAiB,CACrBC,WAAY,CAACC,EAAKC,EAAUC,KAC1B,IAAIC,EAAa,GAEjB,SAASC,IACP,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3B,IAAIC,EAAS,EACTC,EAAQC,YAAW,KACN,IAAXF,IACFA,EAAS,EACTC,EAAQ,KACRF,EAAO,QACW,GAAdJ,GACFD,IAEJ,GACC,KACHS,MAAMX,GAAKY,MAAK,SAAUC,GAOxB,GANe,IAAXL,IACFM,aAAaL,GACbH,EAAQO,GACRJ,EAAQ,KACRD,EAAS,GAEPK,EAASE,GACX,OAAOF,EAASG,OAElB,MAAM,IAAIC,MAAM,+BAClB,IAAGL,MAAK,SAAUM,GAChBf,EAAa,EACbF,EAASiB,EACX,IAAGC,OAAM,SAAUC,GACbjB,EAAa,GACfA,GAAc,EACdO,YAAW,KACTN,GAAS,GACR,MAEHF,GAEJ,GAAE,GAEN,CACAE,EAAS,EAEXiB,OAASC,IACP,MAAMC,EAAKD,EAAIC,GACfzB,eAAeC,WAAWuB,EAAIE,KAAK,SAAUN,GAC3CK,EAAGE,cAAc,iBAAiBC,SAClC,IAAIC,EAAU,IACbT,GAAQ,IAAIU,SAAQ,CAACC,EAAMC,KAC1B,IAAIC,EAAO,0BACXA,GAAQ,0EACRA,GAAQ,UAAYF,EAAKG,SAAW,KACpCD,GAAQ,aAAeF,EAAKI,MAAQ,WAAaJ,EAAKK,YAAcZ,EAAIa,QAAU,oCAClFJ,GAAQ,2BAA6BF,EAAKI,MAAQ,gBAClDF,GAAQ,OAERJ,GADAI,GAAQ,QACO,IAEjBR,EAAGE,cAAc,eAAeW,UAAYT,CAC9C,IAAG,WACD,IACEJ,EAAGE,cAAc,qBAAqBC,SACtCH,EAAGE,cAAc,mBAAmBY,UAAU,cAChD,CAAE,MAAOC,GAAK,CAChB,GAAE,EAEJC,MAAO,KACL,MAAMC,EAAMC,SAASC,uBAAuB,uBAC5C,IAAK,IAAIZ,EAAI,EAAGA,EAAIU,EAAIG,OAAQb,IAAK,CACnC,MAAMP,EAAKiB,EAAIV,GACTN,EAAMD,EAAGqB,aAAa,OAC5B,GAAW,MAAPpB,EAAJ,CAGA,IAAIF,EAAM,IAAIuB,OACdvB,EAAIC,GAAKA,EACTD,EAAIE,IAAMA,EACVF,EAAIwB,MAAQvB,EAAGqB,aAAa,SAC5BtB,EAAIa,OAASY,SAASC,cAAcC,QAAQd,OAC5CrC,eAAeuB,OAAOC,EANtB,CAOF,IAMJxB,eAAeyC,QACfE,SAASS,iBAAiB,iBAAiB,WACzCpD,eAAeyC,OACjB","ignoreList":[],"sourcesContent":["const ContributorsJS = {\n requestAPI: (url, callback, timeout) => {\n let retryTimes = 5;\n\n function request() {\n return new Promise((resolve, reject) => {\n let status = 0; // 0 等待 1 完成 2 超时\n let timer = setTimeout(() => {\n if (status === 0) {\n status = 2;\n timer = null;\n reject('请求超时');\n if (retryTimes == 0) {\n timeout();\n }\n }\n }, 5000);\n fetch(url).then(function (response) {\n if (status !== 2) {\n clearTimeout(timer);\n resolve(response);\n timer = null;\n status = 1;\n }\n if (response.ok) {\n return response.json();\n }\n throw new Error('Network response was not ok.');\n }).then(function (data) {\n retryTimes = 0;\n callback(data);\n }).catch(function (error) {\n if (retryTimes > 0) {\n retryTimes -= 1;\n setTimeout(() => {\n request();\n }, 5000);\n } else {\n timeout();\n }\n });\n });\n }\n request();\n },\n layout: (cfg) => {\n const el = cfg.el;\n ContributorsJS.requestAPI(cfg.api, function (data) {\n el.querySelector('.loading-wrap').remove();\n var cellALL = \"\";\n (data || []).forEach((item, i) => {\n var user = '<div class=\"user-card\">';\n user += '<a class=\"card-link\" target=\"_blank\" rel=\"external noopener noreferrer\"';\n user += ' href=\"' + item.html_url + '\">';\n user += '<img alt=\"' + item.login + '\" src=\"' + (item.avatar_url || cfg.avatar) + '\" onerror=\"errorImgAvatar(this)\">';\n user += '<div class=\"name\"><span>' + item.login + '</span></div>';\n user += '</a>';\n user += '</div>';\n cellALL += user;\n });\n el.querySelector('.group-body').innerHTML = cellALL;\n }, function () {\n try {\n el.querySelector('.loading-wrap svg').remove();\n el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。');\n } catch (e) { }\n });\n },\n start: () => {\n const els = document.getElementsByClassName('contributorsjs-wrap');\n for (var i = 0; i < els.length; i++) {\n const el = els[i];\n const api = el.getAttribute('api');\n if (api == null) {\n continue;\n }\n var cfg = new Object();\n cfg.el = el;\n cfg.api = api;\n cfg.class = el.getAttribute('class');\n cfg.avatar = volantis.GLOBAL_CONFIG.default.avatar;\n ContributorsJS.layout(cfg);\n }\n }\n}\n\n\n\nContributorsJS.start();\ndocument.addEventListener('pjax:complete', function () {\n ContributorsJS.start();\n});"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"../../../../js/plugins/tags/friends.js","names":["FriendsJS","requestAPI","url","callback","timeout","retryTimes","request","Promise","resolve","reject","status","timer","setTimeout","fetch","then","response","clearTimeout","ok","json","Error","data","catch","error","layout","cfg","el","api","querySelector","remove","arr","content","cellALL","forEach","item","i","user","title","avatar","innerHTML","innerText","e","start","els","document","getElementsByClassName","length","getAttribute","Object","class","volantis","GLOBAL_CONFIG","default","addEventListener"],"sources":["js/plugins/tags/friends.js"],"mappings":"AAAA,MAAMA,UAAY,CAChBC,WAAY,CAACC,EAAKC,EAAUC,KAC1B,IAAIC,EAAa,GAEjB,SAASC,IACP,OAAO,IAAIC,SAAQ,CAACC,EAASC,KAC3B,IAAIC,EAAS,EACTC,EAAQC,YAAW,KACN,IAAXF,IACFA,EAAS,EACTC,EAAQ,KACRF,EAAO,QACW,GAAdJ,GACFD,IAEJ,GACC,KACHS,MAAMX,GAAKY,MAAK,SAAUC,GAOxB,GANe,IAAXL,IACFM,aAAaL,GACbH,EAAQO,GACRJ,EAAQ,KACRD,EAAS,GAEPK,EAASE,GACX,OAAOF,EAASG,OAElB,MAAM,IAAIC,MAAM,+BAClB,IAAGL,MAAK,SAAUM,GAChBf,EAAa,EACbF,EAASiB,EACX,IAAGC,OAAM,SAAUC,GACbjB,EAAa,GACfA,GAAc,EACdO,YAAW,KACTN,GAAS,GACR,MAEHF,GAEJ,GAAE,GAEN,CACAE,EAAS,EAEXiB,OAASC,IACP,MAAMC,EAAKD,EAAIC,GACfzB,UAAUC,WAAWuB,EAAIE,KAAK,SAAUN,GACtCK,EAAGE,cAAc,iBAAiBC,SAClC,MAAMC,EAAMT,EAAKU,QACjB,IAAIC,EAAU,GACdF,EAAIG,SAAQ,CAACC,EAAMC,KACjB,IAAIC,EAAO,0BACXA,GAAQ,0EACRA,GAAQ,UAAYF,EAAK/B,IAAM,KAC/BiC,GAAQ,aAAeF,EAAKG,MAAQ,WAAaH,EAAKI,QAAUb,EAAIa,QAAU,oCAC9EF,GAAQ,2BAA6BF,EAAKG,MAAQ,gBAClDD,GAAQ,OAERJ,GADAI,GAAQ,QACO,IAEjBV,EAAGE,cAAc,eAAeW,UAAYP,CAC9C,IAAG,WACD,IACEN,EAAGE,cAAc,qBAAqBC,SACtCH,EAAGE,cAAc,mBAAmBY,UAAU,cAChD,CAAE,MAAOC,GAAK,CAChB,GAAE,EAEJC,MAAO,KACL,MAAMC,EAAMC,SAASC,uBAAuB,kBAC5C,IAAK,IAAIV,EAAI,EAAGA,EAAIQ,EAAIG,OAAQX,IAAK,CACnC,MAAMT,EAAKiB,EAAIR,GACTR,EAAMD,EAAGqB,aAAa,OAC5B,GAAW,MAAPpB,EAAJ,CAGA,IAAIF,EAAM,IAAIuB,OACdvB,EAAIC,GAAKA,EACTD,EAAIE,IAAMA,EACVF,EAAIwB,MAAQvB,EAAGqB,aAAa,SAC5BtB,EAAIa,OAASY,SAASC,cAAcC,QAAQd,OAC5CrC,UAAUuB,OAAOC,EANjB,CAOF,IAMJxB,UAAUyC,QACVE,SAASS,iBAAiB,iBAAiB,WACzCpD,UAAUyC,OACZ","ignoreList":[],"sourcesContent":["const FriendsJS = {\n requestAPI: (url, callback, timeout) => {\n let retryTimes = 5;\n\n function request() {\n return new Promise((resolve, reject) => {\n let status = 0; // 0 等待 1 完成 2 超时\n let timer = setTimeout(() => {\n if (status === 0) {\n status = 2;\n timer = null;\n reject('请求超时');\n if (retryTimes == 0) {\n timeout();\n }\n }\n }, 5000);\n fetch(url).then(function (response) {\n if (status !== 2) {\n clearTimeout(timer);\n resolve(response);\n timer = null;\n status = 1;\n }\n if (response.ok) {\n return response.json();\n }\n throw new Error('Network response was not ok.');\n }).then(function (data) {\n retryTimes = 0;\n callback(data);\n }).catch(function (error) {\n if (retryTimes > 0) {\n retryTimes -= 1;\n setTimeout(() => {\n request();\n }, 5000);\n } else {\n timeout();\n }\n });\n });\n }\n request();\n },\n layout: (cfg) => {\n const el = cfg.el;\n FriendsJS.requestAPI(cfg.api, function (data) {\n el.querySelector('.loading-wrap').remove();\n const arr = data.content;\n var cellALL = \"\";\n arr.forEach((item, i) => {\n var user = '<div class=\"user-card\">';\n user += '<a class=\"card-link\" target=\"_blank\" rel=\"external noopener noreferrer\"';\n user += ' href=\"' + item.url + '\">';\n user += '<img alt=\"' + item.title + '\" src=\"' + (item.avatar || cfg.avatar) + '\" onerror=\"errorImgAvatar(this)\">';\n user += '<div class=\"name\"><span>' + item.title + '</span></div>';\n user += '</a>';\n user += '</div>';\n cellALL += user;\n });\n el.querySelector('.group-body').innerHTML = cellALL;\n }, function () {\n try {\n el.querySelector('.loading-wrap svg').remove();\n el.querySelector('.loading-wrap p').innerText('加载失败,请稍后重试。');\n } catch (e) { }\n });\n },\n start: () => {\n const els = document.getElementsByClassName('friendsjs-wrap');\n for (var i = 0; i < els.length; i++) {\n const el = els[i];\n const api = el.getAttribute('api');\n if (api == null) {\n continue;\n }\n var cfg = new Object();\n cfg.el = el;\n cfg.api = api;\n cfg.class = el.getAttribute('class');\n cfg.avatar = volantis.GLOBAL_CONFIG.default.avatar;\n FriendsJS.layout(cfg);\n }\n }\n}\n\n\n\nFriendsJS.start();\ndocument.addEventListener('pjax:complete', function () {\n FriendsJS.start();\n});"]}