ÿþ  v   a   r       c   r   e   a   t   e   M   o   d   u   l   e       =       (   (   )       =   >       {   
           v   a   r       _   s   c   r   i   p   t   N   a   m   e       =       t   y   p   e   o   f       d   o   c   u   m   e   n   t       !   =       '   u   n   d   e   f   i   n   e   d   '       ?       d   o   c   u   m   e   n   t   .   c   u   r   r   e   n   t   S   c   r   i   p   t   ?   .   s   r   c       :       u   n   d   e   f   i   n   e   d   ;   
           r   e   t   u   r   n       (   
   a   s   y   n   c       f   u   n   c   t   i   o   n   (   m   o   d   u   l   e   A   r   g       =       {   }   )       {   
           v   a   r       m   o   d   u   l   e   R   t   n   ;   
   
   v   a   r       M   o   d   u   l   e   =   m   o   d   u   l   e   A   r   g   ;   v   a   r       r   e   a   d   y   P   r   o   m   i   s   e   R   e   s   o   l   v   e   ,   r   e   a   d   y   P   r   o   m   i   s   e   R   e   j   e   c   t   ;   v   a   r       r   e   a   d   y   P   r   o   m   i   s   e   =   n   e   w       P   r   o   m   i   s   e   (   (   r   e   s   o   l   v   e   ,   r   e   j   e   c   t   )   =   >   {   r   e   a   d   y   P   r   o   m   i   s   e   R   e   s   o   l   v   e   =   r   e   s   o   l   v   e   ;   r   e   a   d   y   P   r   o   m   i   s   e   R   e   j   e   c   t   =   r   e   j   e   c   t   }   )   ;   v   a   r       E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   E   B   =   t   r   u   e   ;   v   a   r       E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   O   R   K   E   R   =   f   a   l   s   e   ;   v   a   r       a   r   g   u   m   e   n   t   s   _   =   [   ]   ;   v   a   r       t   h   i   s   P   r   o   g   r   a   m   =   "   .   /   t   h   i   s   .   p   r   o   g   r   a   m   "   ;   v   a   r       q   u   i   t   _   =   (   s   t   a   t   u   s   ,   t   o   T   h   r   o   w   )   =   >   {   t   h   r   o   w       t   o   T   h   r   o   w   }   ;   v   a   r       s   c   r   i   p   t   D   i   r   e   c   t   o   r   y   =   "   "   ;   f   u   n   c   t   i   o   n       l   o   c   a   t   e   F   i   l   e   (   p   a   t   h   )   {   i   f   (   M   o   d   u   l   e   [   "   l   o   c   a   t   e   F   i   l   e   "   ]   )   {   r   e   t   u   r   n       M   o   d   u   l   e   [   "   l   o   c   a   t   e   F   i   l   e   "   ]   (   p   a   t   h   ,   s   c   r   i   p   t   D   i   r   e   c   t   o   r   y   )   }   r   e   t   u   r   n       s   c   r   i   p   t   D   i   r   e   c   t   o   r   y   +   p   a   t   h   }   v   a   r       r   e   a   d   A   s   y   n   c   ,   r   e   a   d   B   i   n   a   r   y   ;   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   E   B   |   |   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   O   R   K   E   R   )   {   t   r   y   {   s   c   r   i   p   t   D   i   r   e   c   t   o   r   y   =   n   e   w       U   R   L   (   "   .   "   ,   _   s   c   r   i   p   t   N   a   m   e   )   .   h   r   e   f   }   c   a   t   c   h   {   }   {   r   e   a   d   A   s   y   n   c   =   a   s   y   n   c       u   r   l   =   >   {   v   a   r       r   e   s   p   o   n   s   e   =   a   w   a   i   t       f   e   t   c   h   (   u   r   l   ,   {   c   r   e   d   e   n   t   i   a   l   s   :   "   s   a   m   e   -   o   r   i   g   i   n   "   }   )   ;   i   f   (   r   e   s   p   o   n   s   e   .   o   k   )   {   r   e   t   u   r   n       r   e   s   p   o   n   s   e   .   a   r   r   a   y   B   u   f   f   e   r   (   )   }   t   h   r   o   w       n   e   w       E   r   r   o   r   (   r   e   s   p   o   n   s   e   .   s   t   a   t   u   s   +   "       :       "   +   r   e   s   p   o   n   s   e   .   u   r   l   )   }   }   }   e   l   s   e   {   }   v   a   r       o   u   t   =   c   o   n   s   o   l   e   .   l   o   g   .   b   i   n   d   (   c   o   n   s   o   l   e   )   ;   v   a   r       e   r   r   =   c   o   n   s   o   l   e   .   e   r   r   o   r   .   b   i   n   d   (   c   o   n   s   o   l   e   )   ;   v   a   r       w   a   s   m   B   i   n   a   r   y   ;   v   a   r       w   a   s   m   M   e   m   o   r   y   ;   v   a   r       A   B   O   R   T   =   f   a   l   s   e   ;   v   a   r       E   X   I   T   S   T   A   T   U   S   ;   v   a   r       H   E   A   P   8   ,   H   E   A   P   U   8   ,   H   E   A   P   1   6   ,   H   E   A   P   U   1   6   ,   H   E   A   P   3   2   ,   H   E   A   P   U   3   2   ,   H   E   A   P   F   3   2   ,   H   E   A   P   6   4   ,   H   E   A   P   U   6   4   ,   H   E   A   P   F   6   4   ;   v   a   r       r   u   n   t   i   m   e   I   n   i   t   i   a   l   i   z   e   d   =   f   a   l   s   e   ;   f   u   n   c   t   i   o   n       u   p   d   a   t   e   M   e   m   o   r   y   V   i   e   w   s   (   )   {   v   a   r       b   =   w   a   s   m   M   e   m   o   r   y   .   b   u   f   f   e   r   ;   H   E   A   P   8   =   n   e   w       I   n   t   8   A   r   r   a   y   (   b   )   ;   H   E   A   P   1   6   =   n   e   w       I   n   t   1   6   A   r   r   a   y   (   b   )   ;   H   E   A   P   U   8   =   n   e   w       U   i   n   t   8   A   r   r   a   y   (   b   )   ;   H   E   A   P   U   1   6   =   n   e   w       U   i   n   t   1   6   A   r   r   a   y   (   b   )   ;   H   E   A   P   3   2   =   n   e   w       I   n   t   3   2   A   r   r   a   y   (   b   )   ;   H   E   A   P   U   3   2   =   n   e   w       U   i   n   t   3   2   A   r   r   a   y   (   b   )   ;   H   E   A   P   F   3   2   =   n   e   w       F   l   o   a   t   3   2   A   r   r   a   y   (   b   )   ;   H   E   A   P   F   6   4   =   n   e   w       F   l   o   a   t   6   4   A   r   r   a   y   (   b   )   ;   H   E   A   P   6   4   =   n   e   w       B   i   g   I   n   t   6   4   A   r   r   a   y   (   b   )   ;   H   E   A   P   U   6   4   =   n   e   w       B   i   g   U   i   n   t   6   4   A   r   r   a   y   (   b   )   }   f   u   n   c   t   i   o   n       p   r   e   R   u   n   (   )   {   i   f   (   M   o   d   u   l   e   [   "   p   r   e   R   u   n   "   ]   )   {   i   f   (   t   y   p   e   o   f       M   o   d   u   l   e   [   "   p   r   e   R   u   n   "   ]   =   =   "   f   u   n   c   t   i   o   n   "   )   M   o   d   u   l   e   [   "   p   r   e   R   u   n   "   ]   =   [   M   o   d   u   l   e   [   "   p   r   e   R   u   n   "   ]   ]   ;   w   h   i   l   e   (   M   o   d   u   l   e   [   "   p   r   e   R   u   n   "   ]   .   l   e   n   g   t   h   )   {   a   d   d   O   n   P   r   e   R   u   n   (   M   o   d   u   l   e   [   "   p   r   e   R   u   n   "   ]   .   s   h   i   f   t   (   )   )   }   }   c   a   l   l   R   u   n   t   i   m   e   C   a   l   l   b   a   c   k   s   (   o   n   P   r   e   R   u   n   s   )   }   f   u   n   c   t   i   o   n       i   n   i   t   R   u   n   t   i   m   e   (   )   {   r   u   n   t   i   m   e   I   n   i   t   i   a   l   i   z   e   d   =   t   r   u   e   ;   i   f   (   !   M   o   d   u   l   e   [   "   n   o   F   S   I   n   i   t   "   ]   &   &   !   F   S   .   i   n   i   t   i   a   l   i   z   e   d   )   F   S   .   i   n   i   t   (   )   ;   T   T   Y   .   i   n   i   t   (   )   ;   w   a   s   m   E   x   p   o   r   t   s   [   "   b   i   "   ]   (   )   ;   F   S   .   i   g   n   o   r   e   P   e   r   m   i   s   s   i   o   n   s   =   f   a   l   s   e   }   f   u   n   c   t   i   o   n       p   r   e   M   a   i   n   (   )   {   }   f   u   n   c   t   i   o   n       p   o   s   t   R   u   n   (   )   {   i   f   (   M   o   d   u   l   e   [   "   p   o   s   t   R   u   n   "   ]   )   {   i   f   (   t   y   p   e   o   f       M   o   d   u   l   e   [   "   p   o   s   t   R   u   n   "   ]   =   =   "   f   u   n   c   t   i   o   n   "   )   M   o   d   u   l   e   [   "   p   o   s   t   R   u   n   "   ]   =   [   M   o   d   u   l   e   [   "   p   o   s   t   R   u   n   "   ]   ]   ;   w   h   i   l   e   (   M   o   d   u   l   e   [   "   p   o   s   t   R   u   n   "   ]   .   l   e   n   g   t   h   )   {   a   d   d   O   n   P   o   s   t   R   u   n   (   M   o   d   u   l   e   [   "   p   o   s   t   R   u   n   "   ]   .   s   h   i   f   t   (   )   )   }   }   c   a   l   l   R   u   n   t   i   m   e   C   a   l   l   b   a   c   k   s   (   o   n   P   o   s   t   R   u   n   s   )   }   v   a   r       r   u   n   D   e   p   e   n   d   e   n   c   i   e   s   =   0   ;   v   a   r       d   e   p   e   n   d   e   n   c   i   e   s   F   u   l   f   i   l   l   e   d   =   n   u   l   l   ;   f   u   n   c   t   i   o   n       a   d   d   R   u   n   D   e   p   e   n   d   e   n   c   y   (   i   d   )   {   r   u   n   D   e   p   e   n   d   e   n   c   i   e   s   +   +   ;   M   o   d   u   l   e   [   "   m   o   n   i   t   o   r   R   u   n   D   e   p   e   n   d   e   n   c   i   e   s   "   ]   ?   .   (   r   u   n   D   e   p   e   n   d   e   n   c   i   e   s   )   }   f   u   n   c   t   i   o   n       r   e   m   o   v   e   R   u   n   D   e   p   e   n   d   e   n   c   y   (   i   d   )   {   r   u   n   D   e   p   e   n   d   e   n   c   i   e   s   -   -   ;   M   o   d   u   l   e   [   "   m   o   n   i   t   o   r   R   u   n   D   e   p   e   n   d   e   n   c   i   e   s   "   ]   ?   .   (   r   u   n   D   e   p   e   n   d   e   n   c   i   e   s   )   ;   i   f   (   r   u   n   D   e   p   e   n   d   e   n   c   i   e   s   =   =   0   )   {   i   f   (   d   e   p   e   n   d   e   n   c   i   e   s   F   u   l   f   i   l   l   e   d   )   {   v   a   r       c   a   l   l   b   a   c   k   =   d   e   p   e   n   d   e   n   c   i   e   s   F   u   l   f   i   l   l   e   d   ;   d   e   p   e   n   d   e   n   c   i   e   s   F   u   l   f   i   l   l   e   d   =   n   u   l   l   ;   c   a   l   l   b   a   c   k   (   )   }   }   }   f   u   n   c   t   i   o   n       a   b   o   r   t   (   w   h   a   t   )   {   M   o   d   u   l   e   [   "   o   n   A   b   o   r   t   "   ]   ?   .   (   w   h   a   t   )   ;   w   h   a   t   =   "   A   b   o   r   t   e   d   (   "   +   w   h   a   t   +   "   )   "   ;   e   r   r   (   w   h   a   t   )   ;   A   B   O   R   T   =   t   r   u   e   ;   w   h   a   t   +   =   "   .       B   u   i   l   d       w   i   t   h       -   s   A   S   S   E   R   T   I   O   N   S       f   o   r       m   o   r   e       i   n   f   o   .   "   ;   v   a   r       e   =   n   e   w       W   e   b   A   s   s   e   m   b   l   y   .   R   u   n   t   i   m   e   E   r   r   o   r   (   w   h   a   t   )   ;   r   e   a   d   y   P   r   o   m   i   s   e   R   e   j   e   c   t   (   e   )   ;   t   h   r   o   w       e   }   v   a   r       w   a   s   m   B   i   n   a   r   y   F   i   l   e   ;   f   u   n   c   t   i   o   n       f   i   n   d   W   a   s   m   B   i   n   a   r   y   (   )   {   r   e   t   u   r   n       l   o   c   a   t   e   F   i   l   e   (   "   p   r   o   j   e   c   t   m   .   w   a   s   m   "   )   }   f   u   n   c   t   i   o   n       g   e   t   B   i   n   a   r   y   S   y   n   c   (   f   i   l   e   )   {   i   f   (   f   i   l   e   =   =   w   a   s   m   B   i   n   a   r   y   F   i   l   e   &   &   w   a   s   m   B   i   n   a   r   y   )   {   r   e   t   u   r   n       n   e   w       U   i   n   t   8   A   r   r   a   y   (   w   a   s   m   B   i   n   a   r   y   )   }   i   f   (   r   e   a   d   B   i   n   a   r   y   )   {   r   e   t   u   r   n       r   e   a   d   B   i   n   a   r   y   (   f   i   l   e   )   }   t   h   r   o   w   "   b   o   t   h       a   s   y   n   c       a   n   d       s   y   n   c       f   e   t   c   h   i   n   g       o   f       t   h   e       w   a   s   m       f   a   i   l   e   d   "   }   a   s   y   n   c       f   u   n   c   t   i   o   n       g   e   t   W   a   s   m   B   i   n   a   r   y   (   b   i   n   a   r   y   F   i   l   e   )   {   i   f   (   !   w   a   s   m   B   i   n   a   r   y   )   {   t   r   y   {   v   a   r       r   e   s   p   o   n   s   e   =   a   w   a   i   t       r   e   a   d   A   s   y   n   c   (   b   i   n   a   r   y   F   i   l   e   )   ;   r   e   t   u   r   n       n   e   w       U   i   n   t   8   A   r   r   a   y   (   r   e   s   p   o   n   s   e   )   }   c   a   t   c   h   {   }   }   r   e   t   u   r   n       g   e   t   B   i   n   a   r   y   S   y   n   c   (   b   i   n   a   r   y   F   i   l   e   )   }   a   s   y   n   c       f   u   n   c   t   i   o   n       i   n   s   t   a   n   t   i   a   t   e   A   r   r   a   y   B   u   f   f   e   r   (   b   i   n   a   r   y   F   i   l   e   ,   i   m   p   o   r   t   s   )   {   t   r   y   {   v   a   r       b   i   n   a   r   y   =   a   w   a   i   t       g   e   t   W   a   s   m   B   i   n   a   r   y   (   b   i   n   a   r   y   F   i   l   e   )   ;   v   a   r       i   n   s   t   a   n   c   e   =   a   w   a   i   t       W   e   b   A   s   s   e   m   b   l   y   .   i   n   s   t   a   n   t   i   a   t   e   (   b   i   n   a   r   y   ,   i   m   p   o   r   t   s   )   ;   r   e   t   u   r   n       i   n   s   t   a   n   c   e   }   c   a   t   c   h   (   r   e   a   s   o   n   )   {   e   r   r   (   `   f   a   i   l   e   d       t   o       a   s   y   n   c   h   r   o   n   o   u   s   l   y       p   r   e   p   a   r   e       w   a   s   m   :       $   {   r   e   a   s   o   n   }   `   )   ;   a   b   o   r   t   (   r   e   a   s   o   n   )   }   }   a   s   y   n   c       f   u   n   c   t   i   o   n       i   n   s   t   a   n   t   i   a   t   e   A   s   y   n   c   (   b   i   n   a   r   y   ,   b   i   n   a   r   y   F   i   l   e   ,   i   m   p   o   r   t   s   )   {   i   f   (   !   b   i   n   a   r   y   &   &   t   y   p   e   o   f       W   e   b   A   s   s   e   m   b   l   y   .   i   n   s   t   a   n   t   i   a   t   e   S   t   r   e   a   m   i   n   g   =   =   "   f   u   n   c   t   i   o   n   "   )   {   t   r   y   {   v   a   r       r   e   s   p   o   n   s   e   =   f   e   t   c   h   (   b   i   n   a   r   y   F   i   l   e   ,   {   c   r   e   d   e   n   t   i   a   l   s   :   "   s   a   m   e   -   o   r   i   g   i   n   "   }   )   ;   v   a   r       i   n   s   t   a   n   t   i   a   t   i   o   n   R   e   s   u   l   t   =   a   w   a   i   t       W   e   b   A   s   s   e   m   b   l   y   .   i   n   s   t   a   n   t   i   a   t   e   S   t   r   e   a   m   i   n   g   (   r   e   s   p   o   n   s   e   ,   i   m   p   o   r   t   s   )   ;   r   e   t   u   r   n       i   n   s   t   a   n   t   i   a   t   i   o   n   R   e   s   u   l   t   }   c   a   t   c   h   (   r   e   a   s   o   n   )   {   e   r   r   (   `   w   a   s   m       s   t   r   e   a   m   i   n   g       c   o   m   p   i   l   e       f   a   i   l   e   d   :       $   {   r   e   a   s   o   n   }   `   )   ;   e   r   r   (   "   f   a   l   l   i   n   g       b   a   c   k       t   o       A   r   r   a   y   B   u   f   f   e   r       i   n   s   t   a   n   t   i   a   t   i   o   n   "   )   }   }   r   e   t   u   r   n       i   n   s   t   a   n   t   i   a   t   e   A   r   r   a   y   B   u   f   f   e   r   (   b   i   n   a   r   y   F   i   l   e   ,   i   m   p   o   r   t   s   )   }   f   u   n   c   t   i   o   n       g   e   t   W   a   s   m   I   m   p   o   r   t   s   (   )   {   r   e   t   u   r   n   {   a   :   w   a   s   m   I   m   p   o   r   t   s   }   }   a   s   y   n   c       f   u   n   c   t   i   o   n       c   r   e   a   t   e   W   a   s   m   (   )   {   f   u   n   c   t   i   o   n       r   e   c   e   i   v   e   I   n   s   t   a   n   c   e   (   i   n   s   t   a   n   c   e   ,   m   o   d   u   l   e   )   {   w   a   s   m   E   x   p   o   r   t   s   =   i   n   s   t   a   n   c   e   .   e   x   p   o   r   t   s   ;   w   a   s   m   E   x   p   o   r   t   s   =   a   p   p   l   y   S   i   g   n   a   t   u   r   e   C   o   n   v   e   r   s   i   o   n   s   (   w   a   s   m   E   x   p   o   r   t   s   )   ;   w   a   s   m   M   e   m   o   r   y   =   w   a   s   m   E   x   p   o   r   t   s   [   "   a   i   "   ]   ;   u   p   d   a   t   e   M   e   m   o   r   y   V   i   e   w   s   (   )   ;   w   a   s   m   T   a   b   l   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   e   i   "   ]   ;   r   e   m   o   v   e   R   u   n   D   e   p   e   n   d   e   n   c   y   (   "   w   a   s   m   -   i   n   s   t   a   n   t   i   a   t   e   "   )   ;   r   e   t   u   r   n       w   a   s   m   E   x   p   o   r   t   s   }   a   d   d   R   u   n   D   e   p   e   n   d   e   n   c   y   (   "   w   a   s   m   -   i   n   s   t   a   n   t   i   a   t   e   "   )   ;   f   u   n   c   t   i   o   n       r   e   c   e   i   v   e   I   n   s   t   a   n   t   i   a   t   i   o   n   R   e   s   u   l   t   (   r   e   s   u   l   t   )   {   r   e   t   u   r   n       r   e   c   e   i   v   e   I   n   s   t   a   n   c   e   (   r   e   s   u   l   t   [   "   i   n   s   t   a   n   c   e   "   ]   )   }   v   a   r       i   n   f   o   =   g   e   t   W   a   s   m   I   m   p   o   r   t   s   (   )   ;   i   f   (   M   o   d   u   l   e   [   "   i   n   s   t   a   n   t   i   a   t   e   W   a   s   m   "   ]   )   {   r   e   t   u   r   n       n   e   w       P   r   o   m   i   s   e   (   (   r   e   s   o   l   v   e   ,   r   e   j   e   c   t   )   =   >   {   M   o   d   u   l   e   [   "   i   n   s   t   a   n   t   i   a   t   e   W   a   s   m   "   ]   (   i   n   f   o   ,   (   m   o   d   ,   i   n   s   t   )   =   >   {   r   e   s   o   l   v   e   (   r   e   c   e   i   v   e   I   n   s   t   a   n   c   e   (   m   o   d   ,   i   n   s   t   )   )   }   )   }   )   }   w   a   s   m   B   i   n   a   r   y   F   i   l   e   ?   ?   =   f   i   n   d   W   a   s   m   B   i   n   a   r   y   (   )   ;   t   r   y   {   v   a   r       r   e   s   u   l   t   =   a   w   a   i   t       i   n   s   t   a   n   t   i   a   t   e   A   s   y   n   c   (   w   a   s   m   B   i   n   a   r   y   ,   w   a   s   m   B   i   n   a   r   y   F   i   l   e   ,   i   n   f   o   )   ;   v   a   r       e   x   p   o   r   t   s   =   r   e   c   e   i   v   e   I   n   s   t   a   n   t   i   a   t   i   o   n   R   e   s   u   l   t   (   r   e   s   u   l   t   )   ;   r   e   t   u   r   n       e   x   p   o   r   t   s   }   c   a   t   c   h   (   e   )   {   r   e   a   d   y   P   r   o   m   i   s   e   R   e   j   e   c   t   (   e   )   ;   r   e   t   u   r   n       P   r   o   m   i   s   e   .   r   e   j   e   c   t   (   e   )   }   }   c   l   a   s   s       E   x   i   t   S   t   a   t   u   s   {   n   a   m   e   =   "   E   x   i   t   S   t   a   t   u   s   "   ;   c   o   n   s   t   r   u   c   t   o   r   (   s   t   a   t   u   s   )   {   t   h   i   s   .   m   e   s   s   a   g   e   =   `   P   r   o   g   r   a   m       t   e   r   m   i   n   a   t   e   d       w   i   t   h       e   x   i   t   (   $   {   s   t   a   t   u   s   }   )   `   ;   t   h   i   s   .   s   t   a   t   u   s   =   s   t   a   t   u   s   }   }   v   a   r       c   a   l   l   R   u   n   t   i   m   e   C   a   l   l   b   a   c   k   s   =   c   a   l   l   b   a   c   k   s   =   >   {   w   h   i   l   e   (   c   a   l   l   b   a   c   k   s   .   l   e   n   g   t   h   >   0   )   {   c   a   l   l   b   a   c   k   s   .   s   h   i   f   t   (   )   (   M   o   d   u   l   e   )   }   }   ;   v   a   r       o   n   P   o   s   t   R   u   n   s   =   [   ]   ;   v   a   r       a   d   d   O   n   P   o   s   t   R   u   n   =   c   b   =   >   o   n   P   o   s   t   R   u   n   s   .   p   u   s   h   (   c   b   )   ;   v   a   r       o   n   P   r   e   R   u   n   s   =   [   ]   ;   v   a   r       a   d   d   O   n   P   r   e   R   u   n   =   c   b   =   >   o   n   P   r   e   R   u   n   s   .   p   u   s   h   (   c   b   )   ;   v   a   r       n   o   E   x   i   t   R   u   n   t   i   m   e   =   t   r   u   e   ;   f   u   n   c   t   i   o   n       s   e   t   V   a   l   u   e   (   p   t   r   ,   v   a   l   u   e   ,   t   y   p   e   =   "   i   8   "   )   {   i   f   (   t   y   p   e   .   e   n   d   s   W   i   t   h   (   "   *   "   )   )   t   y   p   e   =   "   *   "   ;   s   w   i   t   c   h   (   t   y   p   e   )   {   c   a   s   e   "   i   1   "   :   H   E   A   P   8   [   p   t   r   >   >   >   0   ]   =   v   a   l   u   e   ;   b   r   e   a   k   ;   c   a   s   e   "   i   8   "   :   H   E   A   P   8   [   p   t   r   >   >   >   0   ]   =   v   a   l   u   e   ;   b   r   e   a   k   ;   c   a   s   e   "   i   1   6   "   :   H   E   A   P   1   6   [   p   t   r   >   >   >   1   >   >   >   0   ]   =   v   a   l   u   e   ;   b   r   e   a   k   ;   c   a   s   e   "   i   3   2   "   :   H   E   A   P   3   2   [   p   t   r   >   >   >   2   >   >   >   0   ]   =   v   a   l   u   e   ;   b   r   e   a   k   ;   c   a   s   e   "   i   6   4   "   :   H   E   A   P   6   4   [   p   t   r   >   >   >   3   >   >   >   0   ]   =   B   i   g   I   n   t   (   v   a   l   u   e   )   ;   b   r   e   a   k   ;   c   a   s   e   "   f   l   o   a   t   "   :   H   E   A   P   F   3   2   [   p   t   r   >   >   >   2   >   >   >   0   ]   =   v   a   l   u   e   ;   b   r   e   a   k   ;   c   a   s   e   "   d   o   u   b   l   e   "   :   H   E   A   P   F   6   4   [   p   t   r   >   >   >   3   >   >   >   0   ]   =   v   a   l   u   e   ;   b   r   e   a   k   ;   c   a   s   e   "   *   "   :   H   E   A   P   U   3   2   [   p   t   r   >   >   >   2   >   >   >   0   ]   =   v   a   l   u   e   ;   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   a   b   o   r   t   (   `   i   n   v   a   l   i   d       t   y   p   e       f   o   r       s   e   t   V   a   l   u   e   :       $   {   t   y   p   e   }   `   )   }   }   v   a   r       s   t   a   c   k   R   e   s   t   o   r   e   =   v   a   l   =   >   _   _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   r   e   s   t   o   r   e   (   v   a   l   )   ;   v   a   r       s   t   a   c   k   S   a   v   e   =   (   )   =   >   _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   g   e   t   _   c   u   r   r   e   n   t   (   )   ;   v   a   r       e   x   c   e   p   t   i   o   n   C   a   u   g   h   t   =   [   ]   ;   v   a   r       u   n   c   a   u   g   h   t   E   x   c   e   p   t   i   o   n   C   o   u   n   t   =   0   ;   v   a   r       I   N   T   5   3   _   M   A   X   =   9   0   0   7   1   9   9   2   5   4   7   4   0   9   9   2   ;   v   a   r       I   N   T   5   3   _   M   I   N   =   -   9   0   0   7   1   9   9   2   5   4   7   4   0   9   9   2   ;   v   a   r       b   i   g   i   n   t   T   o   I   5   3   C   h   e   c   k   e   d   =   n   u   m   =   >   n   u   m   <   I   N   T   5   3   _   M   I   N   |   |   n   u   m   >   I   N   T   5   3   _   M   A   X   ?   N   a   N   :   N   u   m   b   e   r   (   n   u   m   )   ;   f   u   n   c   t   i   o   n       _   _   _   c   x   a   _   b   e   g   i   n   _   c   a   t   c   h   (   p   t   r   )   {   p   t   r   >   >   >   =   0   ;   v   a   r       i   n   f   o   =   n   e   w       E   x   c   e   p   t   i   o   n   I   n   f   o   (   p   t   r   )   ;   i   f   (   !   i   n   f   o   .   g   e   t   _   c   a   u   g   h   t   (   )   )   {   i   n   f   o   .   s   e   t   _   c   a   u   g   h   t   (   t   r   u   e   )   ;   u   n   c   a   u   g   h   t   E   x   c   e   p   t   i   o   n   C   o   u   n   t   -   -   }   i   n   f   o   .   s   e   t   _   r   e   t   h   r   o   w   n   (   f   a   l   s   e   )   ;   e   x   c   e   p   t   i   o   n   C   a   u   g   h   t   .   p   u   s   h   (   i   n   f   o   )   ;   _   _   _   c   x   a   _   i   n   c   r   e   m   e   n   t   _   e   x   c   e   p   t   i   o   n   _   r   e   f   c   o   u   n   t   (   p   t   r   )   ;   r   e   t   u   r   n       _   _   _   c   x   a   _   g   e   t   _   e   x   c   e   p   t   i   o   n   _   p   t   r   (   p   t   r   )   }   v   a   r       e   x   c   e   p   t   i   o   n   L   a   s   t   =   0   ;   v   a   r       _   _   _   c   x   a   _   e   n   d   _   c   a   t   c   h   =   (   )   =   >   {   _   s   e   t   T   h   r   e   w   (   0   ,   0   )   ;   v   a   r       i   n   f   o   =   e   x   c   e   p   t   i   o   n   C   a   u   g   h   t   .   p   o   p   (   )   ;   _   _   _   c   x   a   _   d   e   c   r   e   m   e   n   t   _   e   x   c   e   p   t   i   o   n   _   r   e   f   c   o   u   n   t   (   i   n   f   o   .   e   x   c   P   t   r   )   ;   e   x   c   e   p   t   i   o   n   L   a   s   t   =   0   }   ;   c   l   a   s   s       E   x   c   e   p   t   i   o   n   I   n   f   o   {   c   o   n   s   t   r   u   c   t   o   r   (   e   x   c   P   t   r   )   {   t   h   i   s   .   e   x   c   P   t   r   =   e   x   c   P   t   r   ;   t   h   i   s   .   p   t   r   =   e   x   c   P   t   r   -   2   4   }   s   e   t   _   t   y   p   e   (   t   y   p   e   )   {   H   E   A   P   U   3   2   [   t   h   i   s   .   p   t   r   +   4   >   >   >   2   >   >   >   0   ]   =   t   y   p   e   }   g   e   t   _   t   y   p   e   (   )   {   r   e   t   u   r   n       H   E   A   P   U   3   2   [   t   h   i   s   .   p   t   r   +   4   >   >   >   2   >   >   >   0   ]   }   s   e   t   _   d   e   s   t   r   u   c   t   o   r   (   d   e   s   t   r   u   c   t   o   r   )   {   H   E   A   P   U   3   2   [   t   h   i   s   .   p   t   r   +   8   >   >   >   2   >   >   >   0   ]   =   d   e   s   t   r   u   c   t   o   r   }   g   e   t   _   d   e   s   t   r   u   c   t   o   r   (   )   {   r   e   t   u   r   n       H   E   A   P   U   3   2   [   t   h   i   s   .   p   t   r   +   8   >   >   >   2   >   >   >   0   ]   }   s   e   t   _   c   a   u   g   h   t   (   c   a   u   g   h   t   )   {   c   a   u   g   h   t   =   c   a   u   g   h   t   ?   1   :   0   ;   H   E   A   P   8   [   t   h   i   s   .   p   t   r   +   1   2   >   >   >   0   ]   =   c   a   u   g   h   t   }   g   e   t   _   c   a   u   g   h   t   (   )   {   r   e   t   u   r   n       H   E   A   P   8   [   t   h   i   s   .   p   t   r   +   1   2   >   >   >   0   ]   !   =   0   }   s   e   t   _   r   e   t   h   r   o   w   n   (   r   e   t   h   r   o   w   n   )   {   r   e   t   h   r   o   w   n   =   r   e   t   h   r   o   w   n   ?   1   :   0   ;   H   E   A   P   8   [   t   h   i   s   .   p   t   r   +   1   3   >   >   >   0   ]   =   r   e   t   h   r   o   w   n   }   g   e   t   _   r   e   t   h   r   o   w   n   (   )   {   r   e   t   u   r   n       H   E   A   P   8   [   t   h   i   s   .   p   t   r   +   1   3   >   >   >   0   ]   !   =   0   }   i   n   i   t   (   t   y   p   e   ,   d   e   s   t   r   u   c   t   o   r   )   {   t   h   i   s   .   s   e   t   _   a   d   j   u   s   t   e   d   _   p   t   r   (   0   )   ;   t   h   i   s   .   s   e   t   _   t   y   p   e   (   t   y   p   e   )   ;   t   h   i   s   .   s   e   t   _   d   e   s   t   r   u   c   t   o   r   (   d   e   s   t   r   u   c   t   o   r   )   }   s   e   t   _   a   d   j   u   s   t   e   d   _   p   t   r   (   a   d   j   u   s   t   e   d   P   t   r   )   {   H   E   A   P   U   3   2   [   t   h   i   s   .   p   t   r   +   1   6   >   >   >   2   >   >   >   0   ]   =   a   d   j   u   s   t   e   d   P   t   r   }   g   e   t   _   a   d   j   u   s   t   e   d   _   p   t   r   (   )   {   r   e   t   u   r   n       H   E   A   P   U   3   2   [   t   h   i   s   .   p   t   r   +   1   6   >   >   >   2   >   >   >   0   ]   }   }   v   a   r       s   e   t   T   e   m   p   R   e   t   0   =   v   a   l   =   >   _   _   e   m   s   c   r   i   p   t   e   n   _   t   e   m   p   r   e   t   _   s   e   t   (   v   a   l   )   ;   v   a   r       f   i   n   d   M   a   t   c   h   i   n   g   C   a   t   c   h   =   a   r   g   s   =   >   {   v   a   r       t   h   r   o   w   n   =   e   x   c   e   p   t   i   o   n   L   a   s   t   ;   i   f   (   !   t   h   r   o   w   n   )   {   s   e   t   T   e   m   p   R   e   t   0   (   0   )   ;   r   e   t   u   r   n       0   }   v   a   r       i   n   f   o   =   n   e   w       E   x   c   e   p   t   i   o   n   I   n   f   o   (   t   h   r   o   w   n   )   ;   i   n   f   o   .   s   e   t   _   a   d   j   u   s   t   e   d   _   p   t   r   (   t   h   r   o   w   n   )   ;   v   a   r       t   h   r   o   w   n   T   y   p   e   =   i   n   f   o   .   g   e   t   _   t   y   p   e   (   )   ;   i   f   (   !   t   h   r   o   w   n   T   y   p   e   )   {   s   e   t   T   e   m   p   R   e   t   0   (   0   )   ;   r   e   t   u   r   n       t   h   r   o   w   n   }   f   o   r   (   v   a   r       c   a   u   g   h   t   T   y   p   e       o   f       a   r   g   s   )   {   i   f   (   c   a   u   g   h   t   T   y   p   e   =   =   =   0   |   |   c   a   u   g   h   t   T   y   p   e   =   =   =   t   h   r   o   w   n   T   y   p   e   )   {   b   r   e   a   k   }   v   a   r       a   d   j   u   s   t   e   d   _   p   t   r   _   a   d   d   r   =   i   n   f   o   .   p   t   r   +   1   6   ;   i   f   (   _   _   _   c   x   a   _   c   a   n   _   c   a   t   c   h   (   c   a   u   g   h   t   T   y   p   e   ,   t   h   r   o   w   n   T   y   p   e   ,   a   d   j   u   s   t   e   d   _   p   t   r   _   a   d   d   r   )   )   {   s   e   t   T   e   m   p   R   e   t   0   (   c   a   u   g   h   t   T   y   p   e   )   ;   r   e   t   u   r   n       t   h   r   o   w   n   }   }   s   e   t   T   e   m   p   R   e   t   0   (   t   h   r   o   w   n   T   y   p   e   )   ;   r   e   t   u   r   n       t   h   r   o   w   n   }   ;   f   u   n   c   t   i   o   n       _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   2   (   )   {   r   e   t   u   r   n       f   i   n   d   M   a   t   c   h   i   n   g   C   a   t   c   h   (   [   ]   )   }   f   u   n   c   t   i   o   n       _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   3   (   a   r   g   0   )   {   a   r   g   0   >   >   >   =   0   ;   r   e   t   u   r   n       f   i   n   d   M   a   t   c   h   i   n   g   C   a   t   c   h   (   [   a   r   g   0   ]   )   }   f   u   n   c   t   i   o   n       _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   4   (   a   r   g   0   ,   a   r   g   1   )   {   a   r   g   0   >   >   >   =   0   ;   a   r   g   1   >   >   >   =   0   ;   r   e   t   u   r   n       f   i   n   d   M   a   t   c   h   i   n   g   C   a   t   c   h   (   [   a   r   g   0   ,   a   r   g   1   ]   )   }   f   u   n   c   t   i   o   n       _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   5   (   a   r   g   0   ,   a   r   g   1   ,   a   r   g   2   )   {   a   r   g   0   >   >   >   =   0   ;   a   r   g   1   >   >   >   =   0   ;   a   r   g   2   >   >   >   =   0   ;   r   e   t   u   r   n       f   i   n   d   M   a   t   c   h   i   n   g   C   a   t   c   h   (   [   a   r   g   0   ,   a   r   g   1   ,   a   r   g   2   ]   )   }   v   a   r       _   _   _   c   x   a   _   r   e   t   h   r   o   w   =   (   )   =   >   {   v   a   r       i   n   f   o   =   e   x   c   e   p   t   i   o   n   C   a   u   g   h   t   .   p   o   p   (   )   ;   i   f   (   !   i   n   f   o   )   {   a   b   o   r   t   (   "   n   o       e   x   c   e   p   t   i   o   n       t   o       t   h   r   o   w   "   )   }   v   a   r       p   t   r   =   i   n   f   o   .   e   x   c   P   t   r   ;   i   f   (   !   i   n   f   o   .   g   e   t   _   r   e   t   h   r   o   w   n   (   )   )   {   e   x   c   e   p   t   i   o   n   C   a   u   g   h   t   .   p   u   s   h   (   i   n   f   o   )   ;   i   n   f   o   .   s   e   t   _   r   e   t   h   r   o   w   n   (   t   r   u   e   )   ;   i   n   f   o   .   s   e   t   _   c   a   u   g   h   t   (   f   a   l   s   e   )   ;   u   n   c   a   u   g   h   t   E   x   c   e   p   t   i   o   n   C   o   u   n   t   +   +   }   e   x   c   e   p   t   i   o   n   L   a   s   t   =   p   t   r   ;   t   h   r   o   w       e   x   c   e   p   t   i   o   n   L   a   s   t   }   ;   f   u   n   c   t   i   o   n       _   _   _   c   x   a   _   t   h   r   o   w   (   p   t   r   ,   t   y   p   e   ,   d   e   s   t   r   u   c   t   o   r   )   {   p   t   r   >   >   >   =   0   ;   t   y   p   e   >   >   >   =   0   ;   d   e   s   t   r   u   c   t   o   r   >   >   >   =   0   ;   v   a   r       i   n   f   o   =   n   e   w       E   x   c   e   p   t   i   o   n   I   n   f   o   (   p   t   r   )   ;   i   n   f   o   .   i   n   i   t   (   t   y   p   e   ,   d   e   s   t   r   u   c   t   o   r   )   ;   e   x   c   e   p   t   i   o   n   L   a   s   t   =   p   t   r   ;   u   n   c   a   u   g   h   t   E   x   c   e   p   t   i   o   n   C   o   u   n   t   +   +   ;   t   h   r   o   w       e   x   c   e   p   t   i   o   n   L   a   s   t   }   f   u   n   c   t   i   o   n       _   _   _   r   e   s   u   m   e   E   x   c   e   p   t   i   o   n   (   p   t   r   )   {   p   t   r   >   >   >   =   0   ;   i   f   (   !   e   x   c   e   p   t   i   o   n   L   a   s   t   )   {   e   x   c   e   p   t   i   o   n   L   a   s   t   =   p   t   r   }   t   h   r   o   w       e   x   c   e   p   t   i   o   n   L   a   s   t   }   v   a   r       s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   I   =   (   )   =   >   {   v   a   r       r   e   t   =   H   E   A   P   3   2   [   +   S   Y   S   C   A   L   L   S   .   v   a   r   a   r   g   s   >   >   >   2   >   >   >   0   ]   ;   S   Y   S   C   A   L   L   S   .   v   a   r   a   r   g   s   +   =   4   ;   r   e   t   u   r   n       r   e   t   }   ;   v   a   r       s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   P   =   s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   I   ;   v   a   r       P   A   T   H   =   {   i   s   A   b   s   :   p   a   t   h   =   >   p   a   t   h   .   c   h   a   r   A   t   (   0   )   =   =   =   "   /   "   ,   s   p   l   i   t   P   a   t   h   :   f   i   l   e   n   a   m   e   =   >   {   v   a   r       s   p   l   i   t   P   a   t   h   R   e   =   /   ^   (   \   /   ?   |   )   (   [   \   s   \   S   ]   *   ?   )   (   (   ?   :   \   .   {   1   ,   2   }   |   [   ^   \   /   ]   +   ?   |   )   (   \   .   [   ^   .   \   /   ]   *   |   )   )   (   ?   :   [   \   /   ]   *   )   $   /   ;   r   e   t   u   r   n       s   p   l   i   t   P   a   t   h   R   e   .   e   x   e   c   (   f   i   l   e   n   a   m   e   )   .   s   l   i   c   e   (   1   )   }   ,   n   o   r   m   a   l   i   z   e   A   r   r   a   y   :   (   p   a   r   t   s   ,   a   l   l   o   w   A   b   o   v   e   R   o   o   t   )   =   >   {   v   a   r       u   p   =   0   ;   f   o   r   (   v   a   r       i   =   p   a   r   t   s   .   l   e   n   g   t   h   -   1   ;   i   >   =   0   ;   i   -   -   )   {   v   a   r       l   a   s   t   =   p   a   r   t   s   [   i   ]   ;   i   f   (   l   a   s   t   =   =   =   "   .   "   )   {   p   a   r   t   s   .   s   p   l   i   c   e   (   i   ,   1   )   }   e   l   s   e       i   f   (   l   a   s   t   =   =   =   "   .   .   "   )   {   p   a   r   t   s   .   s   p   l   i   c   e   (   i   ,   1   )   ;   u   p   +   +   }   e   l   s   e       i   f   (   u   p   )   {   p   a   r   t   s   .   s   p   l   i   c   e   (   i   ,   1   )   ;   u   p   -   -   }   }   i   f   (   a   l   l   o   w   A   b   o   v   e   R   o   o   t   )   {   f   o   r   (   ;   u   p   ;   u   p   -   -   )   {   p   a   r   t   s   .   u   n   s   h   i   f   t   (   "   .   .   "   )   }   }   r   e   t   u   r   n       p   a   r   t   s   }   ,   n   o   r   m   a   l   i   z   e   :   p   a   t   h   =   >   {   v   a   r       i   s   A   b   s   o   l   u   t   e   =   P   A   T   H   .   i   s   A   b   s   (   p   a   t   h   )   ,   t   r   a   i   l   i   n   g   S   l   a   s   h   =   p   a   t   h   .   s   l   i   c   e   (   -   1   )   =   =   =   "   /   "   ;   p   a   t   h   =   P   A   T   H   .   n   o   r   m   a   l   i   z   e   A   r   r   a   y   (   p   a   t   h   .   s   p   l   i   t   (   "   /   "   )   .   f   i   l   t   e   r   (   p   =   >   !   !   p   )   ,   !   i   s   A   b   s   o   l   u   t   e   )   .   j   o   i   n   (   "   /   "   )   ;   i   f   (   !   p   a   t   h   &   &   !   i   s   A   b   s   o   l   u   t   e   )   {   p   a   t   h   =   "   .   "   }   i   f   (   p   a   t   h   &   &   t   r   a   i   l   i   n   g   S   l   a   s   h   )   {   p   a   t   h   +   =   "   /   "   }   r   e   t   u   r   n   (   i   s   A   b   s   o   l   u   t   e   ?   "   /   "   :   "   "   )   +   p   a   t   h   }   ,   d   i   r   n   a   m   e   :   p   a   t   h   =   >   {   v   a   r       r   e   s   u   l   t   =   P   A   T   H   .   s   p   l   i   t   P   a   t   h   (   p   a   t   h   )   ,   r   o   o   t   =   r   e   s   u   l   t   [   0   ]   ,   d   i   r   =   r   e   s   u   l   t   [   1   ]   ;   i   f   (   !   r   o   o   t   &   &   !   d   i   r   )   {   r   e   t   u   r   n   "   .   "   }   i   f   (   d   i   r   )   {   d   i   r   =   d   i   r   .   s   l   i   c   e   (   0   ,   -   1   )   }   r   e   t   u   r   n       r   o   o   t   +   d   i   r   }   ,   b   a   s   e   n   a   m   e   :   p   a   t   h   =   >   p   a   t   h   &   &   p   a   t   h   .   m   a   t   c   h   (   /   (   [   ^   \   /   ]   +   |   \   /   )   \   /   *   $   /   )   [   1   ]   ,   j   o   i   n   :   (   .   .   .   p   a   t   h   s   )   =   >   P   A   T   H   .   n   o   r   m   a   l   i   z   e   (   p   a   t   h   s   .   j   o   i   n   (   "   /   "   )   )   ,   j   o   i   n   2   :   (   l   ,   r   )   =   >   P   A   T   H   .   n   o   r   m   a   l   i   z   e   (   l   +   "   /   "   +   r   )   }   ;   v   a   r       i   n   i   t   R   a   n   d   o   m   F   i   l   l   =   (   )   =   >   v   i   e   w   =   >   c   r   y   p   t   o   .   g   e   t   R   a   n   d   o   m   V   a   l   u   e   s   (   v   i   e   w   )   ;   v   a   r       r   a   n   d   o   m   F   i   l   l   =   v   i   e   w   =   >   {   (   r   a   n   d   o   m   F   i   l   l   =   i   n   i   t   R   a   n   d   o   m   F   i   l   l   (   )   )   (   v   i   e   w   )   }   ;   v   a   r       P   A   T   H   _   F   S   =   {   r   e   s   o   l   v   e   :   (   .   .   .   a   r   g   s   )   =   >   {   v   a   r       r   e   s   o   l   v   e   d   P   a   t   h   =   "   "   ,   r   e   s   o   l   v   e   d   A   b   s   o   l   u   t   e   =   f   a   l   s   e   ;   f   o   r   (   v   a   r       i   =   a   r   g   s   .   l   e   n   g   t   h   -   1   ;   i   >   =   -   1   &   &   !   r   e   s   o   l   v   e   d   A   b   s   o   l   u   t   e   ;   i   -   -   )   {   v   a   r       p   a   t   h   =   i   >   =   0   ?   a   r   g   s   [   i   ]   :   F   S   .   c   w   d   (   )   ;   i   f   (   t   y   p   e   o   f       p   a   t   h   !   =   "   s   t   r   i   n   g   "   )   {   t   h   r   o   w       n   e   w       T   y   p   e   E   r   r   o   r   (   "   A   r   g   u   m   e   n   t   s       t   o       p   a   t   h   .   r   e   s   o   l   v   e       m   u   s   t       b   e       s   t   r   i   n   g   s   "   )   }   e   l   s   e       i   f   (   !   p   a   t   h   )   {   r   e   t   u   r   n   "   "   }   r   e   s   o   l   v   e   d   P   a   t   h   =   p   a   t   h   +   "   /   "   +   r   e   s   o   l   v   e   d   P   a   t   h   ;   r   e   s   o   l   v   e   d   A   b   s   o   l   u   t   e   =   P   A   T   H   .   i   s   A   b   s   (   p   a   t   h   )   }   r   e   s   o   l   v   e   d   P   a   t   h   =   P   A   T   H   .   n   o   r   m   a   l   i   z   e   A   r   r   a   y   (   r   e   s   o   l   v   e   d   P   a   t   h   .   s   p   l   i   t   (   "   /   "   )   .   f   i   l   t   e   r   (   p   =   >   !   !   p   )   ,   !   r   e   s   o   l   v   e   d   A   b   s   o   l   u   t   e   )   .   j   o   i   n   (   "   /   "   )   ;   r   e   t   u   r   n   (   r   e   s   o   l   v   e   d   A   b   s   o   l   u   t   e   ?   "   /   "   :   "   "   )   +   r   e   s   o   l   v   e   d   P   a   t   h   |   |   "   .   "   }   ,   r   e   l   a   t   i   v   e   :   (   f   r   o   m   ,   t   o   )   =   >   {   f   r   o   m   =   P   A   T   H   _   F   S   .   r   e   s   o   l   v   e   (   f   r   o   m   )   .   s   l   i   c   e   (   1   )   ;   t   o   =   P   A   T   H   _   F   S   .   r   e   s   o   l   v   e   (   t   o   )   .   s   l   i   c   e   (   1   )   ;   f   u   n   c   t   i   o   n       t   r   i   m   (   a   r   r   )   {   v   a   r       s   t   a   r   t   =   0   ;   f   o   r   (   ;   s   t   a   r   t   <   a   r   r   .   l   e   n   g   t   h   ;   s   t   a   r   t   +   +   )   {   i   f   (   a   r   r   [   s   t   a   r   t   ]   !   =   =   "   "   )   b   r   e   a   k   }   v   a   r       e   n   d   =   a   r   r   .   l   e   n   g   t   h   -   1   ;   f   o   r   (   ;   e   n   d   >   =   0   ;   e   n   d   -   -   )   {   i   f   (   a   r   r   [   e   n   d   ]   !   =   =   "   "   )   b   r   e   a   k   }   i   f   (   s   t   a   r   t   >   e   n   d   )   r   e   t   u   r   n   [   ]   ;   r   e   t   u   r   n       a   r   r   .   s   l   i   c   e   (   s   t   a   r   t   ,   e   n   d   -   s   t   a   r   t   +   1   )   }   v   a   r       f   r   o   m   P   a   r   t   s   =   t   r   i   m   (   f   r   o   m   .   s   p   l   i   t   (   "   /   "   )   )   ;   v   a   r       t   o   P   a   r   t   s   =   t   r   i   m   (   t   o   .   s   p   l   i   t   (   "   /   "   )   )   ;   v   a   r       l   e   n   g   t   h   =   M   a   t   h   .   m   i   n   (   f   r   o   m   P   a   r   t   s   .   l   e   n   g   t   h   ,   t   o   P   a   r   t   s   .   l   e   n   g   t   h   )   ;   v   a   r       s   a   m   e   P   a   r   t   s   L   e   n   g   t   h   =   l   e   n   g   t   h   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   g   t   h   ;   i   +   +   )   {   i   f   (   f   r   o   m   P   a   r   t   s   [   i   ]   !   =   =   t   o   P   a   r   t   s   [   i   ]   )   {   s   a   m   e   P   a   r   t   s   L   e   n   g   t   h   =   i   ;   b   r   e   a   k   }   }   v   a   r       o   u   t   p   u   t   P   a   r   t   s   =   [   ]   ;   f   o   r   (   v   a   r       i   =   s   a   m   e   P   a   r   t   s   L   e   n   g   t   h   ;   i   <   f   r   o   m   P   a   r   t   s   .   l   e   n   g   t   h   ;   i   +   +   )   {   o   u   t   p   u   t   P   a   r   t   s   .   p   u   s   h   (   "   .   .   "   )   }   o   u   t   p   u   t   P   a   r   t   s   =   o   u   t   p   u   t   P   a   r   t   s   .   c   o   n   c   a   t   (   t   o   P   a   r   t   s   .   s   l   i   c   e   (   s   a   m   e   P   a   r   t   s   L   e   n   g   t   h   )   )   ;   r   e   t   u   r   n       o   u   t   p   u   t   P   a   r   t   s   .   j   o   i   n   (   "   /   "   )   }   }   ;   v   a   r       U   T   F   8   D   e   c   o   d   e   r   =   t   y   p   e   o   f       T   e   x   t   D   e   c   o   d   e   r   !   =   "   u   n   d   e   f   i   n   e   d   "   ?   n   e   w       T   e   x   t   D   e   c   o   d   e   r   :   u   n   d   e   f   i   n   e   d   ;   v   a   r       U   T   F   8   A   r   r   a   y   T   o   S   t   r   i   n   g   =   (   h   e   a   p   O   r   A   r   r   a   y   ,   i   d   x   =   0   ,   m   a   x   B   y   t   e   s   T   o   R   e   a   d   =   N   a   N   )   =   >   {   i   d   x   >   >   >   =   0   ;   v   a   r       e   n   d   I   d   x   =   i   d   x   +   m   a   x   B   y   t   e   s   T   o   R   e   a   d   ;   v   a   r       e   n   d   P   t   r   =   i   d   x   ;   w   h   i   l   e   (   h   e   a   p   O   r   A   r   r   a   y   [   e   n   d   P   t   r   ]   &   &   !   (   e   n   d   P   t   r   >   =   e   n   d   I   d   x   )   )   +   +   e   n   d   P   t   r   ;   i   f   (   e   n   d   P   t   r   -   i   d   x   >   1   6   &   &   h   e   a   p   O   r   A   r   r   a   y   .   b   u   f   f   e   r   &   &   U   T   F   8   D   e   c   o   d   e   r   )   {   r   e   t   u   r   n       U   T   F   8   D   e   c   o   d   e   r   .   d   e   c   o   d   e   (   h   e   a   p   O   r   A   r   r   a   y   .   s   u   b   a   r   r   a   y   (   i   d   x   ,   e   n   d   P   t   r   )   )   }   v   a   r       s   t   r   =   "   "   ;   w   h   i   l   e   (   i   d   x   <   e   n   d   P   t   r   )   {   v   a   r       u   0   =   h   e   a   p   O   r   A   r   r   a   y   [   i   d   x   +   +   ]   ;   i   f   (   !   (   u   0   &   1   2   8   )   )   {   s   t   r   +   =   S   t   r   i   n   g   .   f   r   o   m   C   h   a   r   C   o   d   e   (   u   0   )   ;   c   o   n   t   i   n   u   e   }   v   a   r       u   1   =   h   e   a   p   O   r   A   r   r   a   y   [   i   d   x   +   +   ]   &   6   3   ;   i   f   (   (   u   0   &   2   2   4   )   =   =   1   9   2   )   {   s   t   r   +   =   S   t   r   i   n   g   .   f   r   o   m   C   h   a   r   C   o   d   e   (   (   u   0   &   3   1   )   <   <   6   |   u   1   )   ;   c   o   n   t   i   n   u   e   }   v   a   r       u   2   =   h   e   a   p   O   r   A   r   r   a   y   [   i   d   x   +   +   ]   &   6   3   ;   i   f   (   (   u   0   &   2   4   0   )   =   =   2   2   4   )   {   u   0   =   (   u   0   &   1   5   )   <   <   1   2   |   u   1   <   <   6   |   u   2   }   e   l   s   e   {   u   0   =   (   u   0   &   7   )   <   <   1   8   |   u   1   <   <   1   2   |   u   2   <   <   6   |   h   e   a   p   O   r   A   r   r   a   y   [   i   d   x   +   +   ]   &   6   3   }   i   f   (   u   0   <   6   5   5   3   6   )   {   s   t   r   +   =   S   t   r   i   n   g   .   f   r   o   m   C   h   a   r   C   o   d   e   (   u   0   )   }   e   l   s   e   {   v   a   r       c   h   =   u   0   -   6   5   5   3   6   ;   s   t   r   +   =   S   t   r   i   n   g   .   f   r   o   m   C   h   a   r   C   o   d   e   (   5   5   2   9   6   |   c   h   >   >   1   0   ,   5   6   3   2   0   |   c   h   &   1   0   2   3   )   }   }   r   e   t   u   r   n       s   t   r   }   ;   v   a   r       F   S   _   s   t   d   i   n   _   g   e   t   C   h   a   r   _   b   u   f   f   e   r   =   [   ]   ;   v   a   r       l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   =   s   t   r   =   >   {   v   a   r       l   e   n   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   s   t   r   .   l   e   n   g   t   h   ;   +   +   i   )   {   v   a   r       c   =   s   t   r   .   c   h   a   r   C   o   d   e   A   t   (   i   )   ;   i   f   (   c   <   =   1   2   7   )   {   l   e   n   +   +   }   e   l   s   e       i   f   (   c   <   =   2   0   4   7   )   {   l   e   n   +   =   2   }   e   l   s   e       i   f   (   c   >   =   5   5   2   9   6   &   &   c   <   =   5   7   3   4   3   )   {   l   e   n   +   =   4   ;   +   +   i   }   e   l   s   e   {   l   e   n   +   =   3   }   }   r   e   t   u   r   n       l   e   n   }   ;   v   a   r       s   t   r   i   n   g   T   o   U   T   F   8   A   r   r   a   y   =   (   s   t   r   ,   h   e   a   p   ,   o   u   t   I   d   x   ,   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   )   =   >   {   o   u   t   I   d   x   >   >   >   =   0   ;   i   f   (   !   (   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   >   0   )   )   r   e   t   u   r   n       0   ;   v   a   r       s   t   a   r   t   I   d   x   =   o   u   t   I   d   x   ;   v   a   r       e   n   d   I   d   x   =   o   u   t   I   d   x   +   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   -   1   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   s   t   r   .   l   e   n   g   t   h   ;   +   +   i   )   {   v   a   r       u   =   s   t   r   .   c   o   d   e   P   o   i   n   t   A   t   (   i   )   ;   i   f   (   u   <   =   1   2   7   )   {   i   f   (   o   u   t   I   d   x   >   =   e   n   d   I   d   x   )   b   r   e   a   k   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   >   >   >   0   ]   =   u   }   e   l   s   e       i   f   (   u   <   =   2   0   4   7   )   {   i   f   (   o   u   t   I   d   x   +   1   >   =   e   n   d   I   d   x   )   b   r   e   a   k   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   >   >   >   0   ]   =   1   9   2   |   u   >   >   6   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   >   >   >   0   ]   =   1   2   8   |   u   &   6   3   }   e   l   s   e       i   f   (   u   <   =   6   5   5   3   5   )   {   i   f   (   o   u   t   I   d   x   +   2   >   =   e   n   d   I   d   x   )   b   r   e   a   k   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   >   >   >   0   ]   =   2   2   4   |   u   >   >   1   2   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   >   >   >   0   ]   =   1   2   8   |   u   >   >   6   &   6   3   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   >   >   >   0   ]   =   1   2   8   |   u   &   6   3   }   e   l   s   e   {   i   f   (   o   u   t   I   d   x   +   3   >   =   e   n   d   I   d   x   )   b   r   e   a   k   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   >   >   >   0   ]   =   2   4   0   |   u   >   >   1   8   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   >   >   >   0   ]   =   1   2   8   |   u   >   >   1   2   &   6   3   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   >   >   >   0   ]   =   1   2   8   |   u   >   >   6   &   6   3   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   >   >   >   0   ]   =   1   2   8   |   u   &   6   3   ;   i   +   +   }   }   h   e   a   p   [   o   u   t   I   d   x   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       o   u   t   I   d   x   -   s   t   a   r   t   I   d   x   }   ;   v   a   r       i   n   t   A   r   r   a   y   F   r   o   m   S   t   r   i   n   g   =   (   s   t   r   i   n   g   y   ,   d   o   n   t   A   d   d   N   u   l   l   ,   l   e   n   g   t   h   )   =   >   {   v   a   r       l   e   n   =   l   e   n   g   t   h   >   0   ?   l   e   n   g   t   h   :   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   s   t   r   i   n   g   y   )   +   1   ;   v   a   r       u   8   a   r   r   a   y   =   n   e   w       A   r   r   a   y   (   l   e   n   )   ;   v   a   r       n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   =   s   t   r   i   n   g   T   o   U   T   F   8   A   r   r   a   y   (   s   t   r   i   n   g   y   ,   u   8   a   r   r   a   y   ,   0   ,   u   8   a   r   r   a   y   .   l   e   n   g   t   h   )   ;   i   f   (   d   o   n   t   A   d   d   N   u   l   l   )   u   8   a   r   r   a   y   .   l   e   n   g   t   h   =   n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   ;   r   e   t   u   r   n       u   8   a   r   r   a   y   }   ;   v   a   r       F   S   _   s   t   d   i   n   _   g   e   t   C   h   a   r   =   (   )   =   >   {   i   f   (   !   F   S   _   s   t   d   i   n   _   g   e   t   C   h   a   r   _   b   u   f   f   e   r   .   l   e   n   g   t   h   )   {   v   a   r       r   e   s   u   l   t   =   n   u   l   l   ;   i   f   (   t   y   p   e   o   f       w   i   n   d   o   w   !   =   "   u   n   d   e   f   i   n   e   d   "   &   &   t   y   p   e   o   f       w   i   n   d   o   w   .   p   r   o   m   p   t   =   =   "   f   u   n   c   t   i   o   n   "   )   {   r   e   s   u   l   t   =   w   i   n   d   o   w   .   p   r   o   m   p   t   (   "   I   n   p   u   t   :       "   )   ;   i   f   (   r   e   s   u   l   t   !   =   =   n   u   l   l   )   {   r   e   s   u   l   t   +   =   "   \   n   "   }   }   e   l   s   e   {   }   i   f   (   !   r   e   s   u   l   t   )   {   r   e   t   u   r   n       n   u   l   l   }   F   S   _   s   t   d   i   n   _   g   e   t   C   h   a   r   _   b   u   f   f   e   r   =   i   n   t   A   r   r   a   y   F   r   o   m   S   t   r   i   n   g   (   r   e   s   u   l   t   ,   t   r   u   e   )   }   r   e   t   u   r   n       F   S   _   s   t   d   i   n   _   g   e   t   C   h   a   r   _   b   u   f   f   e   r   .   s   h   i   f   t   (   )   }   ;   v   a   r       T   T   Y   =   {   t   t   y   s   :   [   ]   ,   i   n   i   t   (   )   {   }   ,   s   h   u   t   d   o   w   n   (   )   {   }   ,   r   e   g   i   s   t   e   r   (   d   e   v   ,   o   p   s   )   {   T   T   Y   .   t   t   y   s   [   d   e   v   ]   =   {   i   n   p   u   t   :   [   ]   ,   o   u   t   p   u   t   :   [   ]   ,   o   p   s   }   ;   F   S   .   r   e   g   i   s   t   e   r   D   e   v   i   c   e   (   d   e   v   ,   T   T   Y   .   s   t   r   e   a   m   _   o   p   s   )   }   ,   s   t   r   e   a   m   _   o   p   s   :   {   o   p   e   n   (   s   t   r   e   a   m   )   {   v   a   r       t   t   y   =   T   T   Y   .   t   t   y   s   [   s   t   r   e   a   m   .   n   o   d   e   .   r   d   e   v   ]   ;   i   f   (   !   t   t   y   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   3   )   }   s   t   r   e   a   m   .   t   t   y   =   t   t   y   ;   s   t   r   e   a   m   .   s   e   e   k   a   b   l   e   =   f   a   l   s   e   }   ,   c   l   o   s   e   (   s   t   r   e   a   m   )   {   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   f   s   y   n   c   (   s   t   r   e   a   m   .   t   t   y   )   }   ,   f   s   y   n   c   (   s   t   r   e   a   m   )   {   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   f   s   y   n   c   (   s   t   r   e   a   m   .   t   t   y   )   }   ,   r   e   a   d   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   )   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   |   |   !   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   g   e   t   _   c   h   a   r   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   6   0   )   }   v   a   r       b   y   t   e   s   R   e   a   d   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   g   t   h   ;   i   +   +   )   {   v   a   r       r   e   s   u   l   t   ;   t   r   y   {   r   e   s   u   l   t   =   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   g   e   t   _   c   h   a   r   (   s   t   r   e   a   m   .   t   t   y   )   }   c   a   t   c   h   (   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   9   )   }   i   f   (   r   e   s   u   l   t   =   =   =   u   n   d   e   f   i   n   e   d   &   &   b   y   t   e   s   R   e   a   d   =   =   =   0   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   6   )   }   i   f   (   r   e   s   u   l   t   =   =   =   n   u   l   l   |   |   r   e   s   u   l   t   =   =   =   u   n   d   e   f   i   n   e   d   )   b   r   e   a   k   ;   b   y   t   e   s   R   e   a   d   +   +   ;   b   u   f   f   e   r   [   o   f   f   s   e   t   +   i   ]   =   r   e   s   u   l   t   }   i   f   (   b   y   t   e   s   R   e   a   d   )   {   s   t   r   e   a   m   .   n   o   d   e   .   a   t   i   m   e   =   D   a   t   e   .   n   o   w   (   )   }   r   e   t   u   r   n       b   y   t   e   s   R   e   a   d   }   ,   w   r   i   t   e   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   )   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   |   |   !   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   p   u   t   _   c   h   a   r   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   6   0   )   }   t   r   y   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   g   t   h   ;   i   +   +   )   {   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   p   u   t   _   c   h   a   r   (   s   t   r   e   a   m   .   t   t   y   ,   b   u   f   f   e   r   [   o   f   f   s   e   t   +   i   ]   )   }   }   c   a   t   c   h   (   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   9   )   }   i   f   (   l   e   n   g   t   h   )   {   s   t   r   e   a   m   .   n   o   d   e   .   m   t   i   m   e   =   s   t   r   e   a   m   .   n   o   d   e   .   c   t   i   m   e   =   D   a   t   e   .   n   o   w   (   )   }   r   e   t   u   r   n       i   }   }   ,   d   e   f   a   u   l   t   _   t   t   y   _   o   p   s   :   {   g   e   t   _   c   h   a   r   (   t   t   y   )   {   r   e   t   u   r   n       F   S   _   s   t   d   i   n   _   g   e   t   C   h   a   r   (   )   }   ,   p   u   t   _   c   h   a   r   (   t   t   y   ,   v   a   l   )   {   i   f   (   v   a   l   =   =   =   n   u   l   l   |   |   v   a   l   =   =   =   1   0   )   {   o   u   t   (   U   T   F   8   A   r   r   a   y   T   o   S   t   r   i   n   g   (   t   t   y   .   o   u   t   p   u   t   )   )   ;   t   t   y   .   o   u   t   p   u   t   =   [   ]   }   e   l   s   e   {   i   f   (   v   a   l   !   =   0   )   t   t   y   .   o   u   t   p   u   t   .   p   u   s   h   (   v   a   l   )   }   }   ,   f   s   y   n   c   (   t   t   y   )   {   i   f   (   t   t   y   .   o   u   t   p   u   t   ?   .   l   e   n   g   t   h   >   0   )   {   o   u   t   (   U   T   F   8   A   r   r   a   y   T   o   S   t   r   i   n   g   (   t   t   y   .   o   u   t   p   u   t   )   )   ;   t   t   y   .   o   u   t   p   u   t   =   [   ]   }   }   ,   i   o   c   t   l   _   t   c   g   e   t   s   (   t   t   y   )   {   r   e   t   u   r   n   {   c   _   i   f   l   a   g   :   2   5   8   5   6   ,   c   _   o   f   l   a   g   :   5   ,   c   _   c   f   l   a   g   :   1   9   1   ,   c   _   l   f   l   a   g   :   3   5   3   8   7   ,   c   _   c   c   :   [   3   ,   2   8   ,   1   2   7   ,   2   1   ,   4   ,   0   ,   1   ,   0   ,   1   7   ,   1   9   ,   2   6   ,   0   ,   1   8   ,   1   5   ,   2   3   ,   2   2   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ,   0   ]   }   }   ,   i   o   c   t   l   _   t   c   s   e   t   s   (   t   t   y   ,   o   p   t   i   o   n   a   l   _   a   c   t   i   o   n   s   ,   d   a   t   a   )   {   r   e   t   u   r   n       0   }   ,   i   o   c   t   l   _   t   i   o   c   g   w   i   n   s   z   (   t   t   y   )   {   r   e   t   u   r   n   [   2   4   ,   8   0   ]   }   }   ,   d   e   f   a   u   l   t   _   t   t   y   1   _   o   p   s   :   {   p   u   t   _   c   h   a   r   (   t   t   y   ,   v   a   l   )   {   i   f   (   v   a   l   =   =   =   n   u   l   l   |   |   v   a   l   =   =   =   1   0   )   {   e   r   r   (   U   T   F   8   A   r   r   a   y   T   o   S   t   r   i   n   g   (   t   t   y   .   o   u   t   p   u   t   )   )   ;   t   t   y   .   o   u   t   p   u   t   =   [   ]   }   e   l   s   e   {   i   f   (   v   a   l   !   =   0   )   t   t   y   .   o   u   t   p   u   t   .   p   u   s   h   (   v   a   l   )   }   }   ,   f   s   y   n   c   (   t   t   y   )   {   i   f   (   t   t   y   .   o   u   t   p   u   t   ?   .   l   e   n   g   t   h   >   0   )   {   e   r   r   (   U   T   F   8   A   r   r   a   y   T   o   S   t   r   i   n   g   (   t   t   y   .   o   u   t   p   u   t   )   )   ;   t   t   y   .   o   u   t   p   u   t   =   [   ]   }   }   }   }   ;   v   a   r       m   m   a   p   A   l   l   o   c   =   s   i   z   e   =   >   {   a   b   o   r   t   (   )   }   ;   v   a   r       M   E   M   F   S   =   {   o   p   s   _   t   a   b   l   e   :   n   u   l   l   ,   m   o   u   n   t   (   m   o   u   n   t   )   {   r   e   t   u   r   n       M   E   M   F   S   .   c   r   e   a   t   e   N   o   d   e   (   n   u   l   l   ,   "   /   "   ,   1   6   8   9   5   ,   0   )   }   ,   c   r   e   a   t   e   N   o   d   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   m   o   d   e   ,   d   e   v   )   {   i   f   (   F   S   .   i   s   B   l   k   d   e   v   (   m   o   d   e   )   |   |   F   S   .   i   s   F   I   F   O   (   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   6   3   )   }   M   E   M   F   S   .   o   p   s   _   t   a   b   l   e   |   |   =   {   d   i   r   :   {   n   o   d   e   :   {   g   e   t   a   t   t   r   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   g   e   t   a   t   t   r   ,   s   e   t   a   t   t   r   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   s   e   t   a   t   t   r   ,   l   o   o   k   u   p   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   l   o   o   k   u   p   ,   m   k   n   o   d   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   m   k   n   o   d   ,   r   e   n   a   m   e   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   r   e   n   a   m   e   ,   u   n   l   i   n   k   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   u   n   l   i   n   k   ,   r   m   d   i   r   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   r   m   d   i   r   ,   r   e   a   d   d   i   r   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   r   e   a   d   d   i   r   ,   s   y   m   l   i   n   k   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   s   y   m   l   i   n   k   }   ,   s   t   r   e   a   m   :   {   l   l   s   e   e   k   :   M   E   M   F   S   .   s   t   r   e   a   m   _   o   p   s   .   l   l   s   e   e   k   }   }   ,   f   i   l   e   :   {   n   o   d   e   :   {   g   e   t   a   t   t   r   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   g   e   t   a   t   t   r   ,   s   e   t   a   t   t   r   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   s   e   t   a   t   t   r   }   ,   s   t   r   e   a   m   :   {   l   l   s   e   e   k   :   M   E   M   F   S   .   s   t   r   e   a   m   _   o   p   s   .   l   l   s   e   e   k   ,   r   e   a   d   :   M   E   M   F   S   .   s   t   r   e   a   m   _   o   p   s   .   r   e   a   d   ,   w   r   i   t   e   :   M   E   M   F   S   .   s   t   r   e   a   m   _   o   p   s   .   w   r   i   t   e   ,   m   m   a   p   :   M   E   M   F   S   .   s   t   r   e   a   m   _   o   p   s   .   m   m   a   p   ,   m   s   y   n   c   :   M   E   M   F   S   .   s   t   r   e   a   m   _   o   p   s   .   m   s   y   n   c   }   }   ,   l   i   n   k   :   {   n   o   d   e   :   {   g   e   t   a   t   t   r   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   g   e   t   a   t   t   r   ,   s   e   t   a   t   t   r   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   s   e   t   a   t   t   r   ,   r   e   a   d   l   i   n   k   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   r   e   a   d   l   i   n   k   }   ,   s   t   r   e   a   m   :   {   }   }   ,   c   h   r   d   e   v   :   {   n   o   d   e   :   {   g   e   t   a   t   t   r   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   g   e   t   a   t   t   r   ,   s   e   t   a   t   t   r   :   M   E   M   F   S   .   n   o   d   e   _   o   p   s   .   s   e   t   a   t   t   r   }   ,   s   t   r   e   a   m   :   F   S   .   c   h   r   d   e   v   _   s   t   r   e   a   m   _   o   p   s   }   }   ;   v   a   r       n   o   d   e   =   F   S   .   c   r   e   a   t   e   N   o   d   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   m   o   d   e   ,   d   e   v   )   ;   i   f   (   F   S   .   i   s   D   i   r   (   n   o   d   e   .   m   o   d   e   )   )   {   n   o   d   e   .   n   o   d   e   _   o   p   s   =   M   E   M   F   S   .   o   p   s   _   t   a   b   l   e   .   d   i   r   .   n   o   d   e   ;   n   o   d   e   .   s   t   r   e   a   m   _   o   p   s   =   M   E   M   F   S   .   o   p   s   _   t   a   b   l   e   .   d   i   r   .   s   t   r   e   a   m   ;   n   o   d   e   .   c   o   n   t   e   n   t   s   =   {   }   }   e   l   s   e       i   f   (   F   S   .   i   s   F   i   l   e   (   n   o   d   e   .   m   o   d   e   )   )   {   n   o   d   e   .   n   o   d   e   _   o   p   s   =   M   E   M   F   S   .   o   p   s   _   t   a   b   l   e   .   f   i   l   e   .   n   o   d   e   ;   n   o   d   e   .   s   t   r   e   a   m   _   o   p   s   =   M   E   M   F   S   .   o   p   s   _   t   a   b   l   e   .   f   i   l   e   .   s   t   r   e   a   m   ;   n   o   d   e   .   u   s   e   d   B   y   t   e   s   =   0   ;   n   o   d   e   .   c   o   n   t   e   n   t   s   =   n   u   l   l   }   e   l   s   e       i   f   (   F   S   .   i   s   L   i   n   k   (   n   o   d   e   .   m   o   d   e   )   )   {   n   o   d   e   .   n   o   d   e   _   o   p   s   =   M   E   M   F   S   .   o   p   s   _   t   a   b   l   e   .   l   i   n   k   .   n   o   d   e   ;   n   o   d   e   .   s   t   r   e   a   m   _   o   p   s   =   M   E   M   F   S   .   o   p   s   _   t   a   b   l   e   .   l   i   n   k   .   s   t   r   e   a   m   }   e   l   s   e       i   f   (   F   S   .   i   s   C   h   r   d   e   v   (   n   o   d   e   .   m   o   d   e   )   )   {   n   o   d   e   .   n   o   d   e   _   o   p   s   =   M   E   M   F   S   .   o   p   s   _   t   a   b   l   e   .   c   h   r   d   e   v   .   n   o   d   e   ;   n   o   d   e   .   s   t   r   e   a   m   _   o   p   s   =   M   E   M   F   S   .   o   p   s   _   t   a   b   l   e   .   c   h   r   d   e   v   .   s   t   r   e   a   m   }   n   o   d   e   .   a   t   i   m   e   =   n   o   d   e   .   m   t   i   m   e   =   n   o   d   e   .   c   t   i   m   e   =   D   a   t   e   .   n   o   w   (   )   ;   i   f   (   p   a   r   e   n   t   )   {   p   a   r   e   n   t   .   c   o   n   t   e   n   t   s   [   n   a   m   e   ]   =   n   o   d   e   ;   p   a   r   e   n   t   .   a   t   i   m   e   =   p   a   r   e   n   t   .   m   t   i   m   e   =   p   a   r   e   n   t   .   c   t   i   m   e   =   n   o   d   e   .   a   t   i   m   e   }   r   e   t   u   r   n       n   o   d   e   }   ,   g   e   t   F   i   l   e   D   a   t   a   A   s   T   y   p   e   d   A   r   r   a   y   (   n   o   d   e   )   {   i   f   (   !   n   o   d   e   .   c   o   n   t   e   n   t   s   )   r   e   t   u   r   n       n   e   w       U   i   n   t   8   A   r   r   a   y   (   0   )   ;   i   f   (   n   o   d   e   .   c   o   n   t   e   n   t   s   .   s   u   b   a   r   r   a   y   )   r   e   t   u   r   n       n   o   d   e   .   c   o   n   t   e   n   t   s   .   s   u   b   a   r   r   a   y   (   0   ,   n   o   d   e   .   u   s   e   d   B   y   t   e   s   )   ;   r   e   t   u   r   n       n   e   w       U   i   n   t   8   A   r   r   a   y   (   n   o   d   e   .   c   o   n   t   e   n   t   s   )   }   ,   e   x   p   a   n   d   F   i   l   e   S   t   o   r   a   g   e   (   n   o   d   e   ,   n   e   w   C   a   p   a   c   i   t   y   )   {   v   a   r       p   r   e   v   C   a   p   a   c   i   t   y   =   n   o   d   e   .   c   o   n   t   e   n   t   s   ?   n   o   d   e   .   c   o   n   t   e   n   t   s   .   l   e   n   g   t   h   :   0   ;   i   f   (   p   r   e   v   C   a   p   a   c   i   t   y   >   =   n   e   w   C   a   p   a   c   i   t   y   )   r   e   t   u   r   n   ;   v   a   r       C   A   P   A   C   I   T   Y   _   D   O   U   B   L   I   N   G   _   M   A   X   =   1   0   2   4   *   1   0   2   4   ;   n   e   w   C   a   p   a   c   i   t   y   =   M   a   t   h   .   m   a   x   (   n   e   w   C   a   p   a   c   i   t   y   ,   p   r   e   v   C   a   p   a   c   i   t   y   *   (   p   r   e   v   C   a   p   a   c   i   t   y   <   C   A   P   A   C   I   T   Y   _   D   O   U   B   L   I   N   G   _   M   A   X   ?   2   :   1   .   1   2   5   )   >   >   >   0   )   ;   i   f   (   p   r   e   v   C   a   p   a   c   i   t   y   !   =   0   )   n   e   w   C   a   p   a   c   i   t   y   =   M   a   t   h   .   m   a   x   (   n   e   w   C   a   p   a   c   i   t   y   ,   2   5   6   )   ;   v   a   r       o   l   d   C   o   n   t   e   n   t   s   =   n   o   d   e   .   c   o   n   t   e   n   t   s   ;   n   o   d   e   .   c   o   n   t   e   n   t   s   =   n   e   w       U   i   n   t   8   A   r   r   a   y   (   n   e   w   C   a   p   a   c   i   t   y   )   ;   i   f   (   n   o   d   e   .   u   s   e   d   B   y   t   e   s   >   0   )   n   o   d   e   .   c   o   n   t   e   n   t   s   .   s   e   t   (   o   l   d   C   o   n   t   e   n   t   s   .   s   u   b   a   r   r   a   y   (   0   ,   n   o   d   e   .   u   s   e   d   B   y   t   e   s   )   ,   0   )   }   ,   r   e   s   i   z   e   F   i   l   e   S   t   o   r   a   g   e   (   n   o   d   e   ,   n   e   w   S   i   z   e   )   {   i   f   (   n   o   d   e   .   u   s   e   d   B   y   t   e   s   =   =   n   e   w   S   i   z   e   )   r   e   t   u   r   n   ;   i   f   (   n   e   w   S   i   z   e   =   =   0   )   {   n   o   d   e   .   c   o   n   t   e   n   t   s   =   n   u   l   l   ;   n   o   d   e   .   u   s   e   d   B   y   t   e   s   =   0   }   e   l   s   e   {   v   a   r       o   l   d   C   o   n   t   e   n   t   s   =   n   o   d   e   .   c   o   n   t   e   n   t   s   ;   n   o   d   e   .   c   o   n   t   e   n   t   s   =   n   e   w       U   i   n   t   8   A   r   r   a   y   (   n   e   w   S   i   z   e   )   ;   i   f   (   o   l   d   C   o   n   t   e   n   t   s   )   {   n   o   d   e   .   c   o   n   t   e   n   t   s   .   s   e   t   (   o   l   d   C   o   n   t   e   n   t   s   .   s   u   b   a   r   r   a   y   (   0   ,   M   a   t   h   .   m   i   n   (   n   e   w   S   i   z   e   ,   n   o   d   e   .   u   s   e   d   B   y   t   e   s   )   )   )   }   n   o   d   e   .   u   s   e   d   B   y   t   e   s   =   n   e   w   S   i   z   e   }   }   ,   n   o   d   e   _   o   p   s   :   {   g   e   t   a   t   t   r   (   n   o   d   e   )   {   v   a   r       a   t   t   r   =   {   }   ;   a   t   t   r   .   d   e   v   =   F   S   .   i   s   C   h   r   d   e   v   (   n   o   d   e   .   m   o   d   e   )   ?   n   o   d   e   .   i   d   :   1   ;   a   t   t   r   .   i   n   o   =   n   o   d   e   .   i   d   ;   a   t   t   r   .   m   o   d   e   =   n   o   d   e   .   m   o   d   e   ;   a   t   t   r   .   n   l   i   n   k   =   1   ;   a   t   t   r   .   u   i   d   =   0   ;   a   t   t   r   .   g   i   d   =   0   ;   a   t   t   r   .   r   d   e   v   =   n   o   d   e   .   r   d   e   v   ;   i   f   (   F   S   .   i   s   D   i   r   (   n   o   d   e   .   m   o   d   e   )   )   {   a   t   t   r   .   s   i   z   e   =   4   0   9   6   }   e   l   s   e       i   f   (   F   S   .   i   s   F   i   l   e   (   n   o   d   e   .   m   o   d   e   )   )   {   a   t   t   r   .   s   i   z   e   =   n   o   d   e   .   u   s   e   d   B   y   t   e   s   }   e   l   s   e       i   f   (   F   S   .   i   s   L   i   n   k   (   n   o   d   e   .   m   o   d   e   )   )   {   a   t   t   r   .   s   i   z   e   =   n   o   d   e   .   l   i   n   k   .   l   e   n   g   t   h   }   e   l   s   e   {   a   t   t   r   .   s   i   z   e   =   0   }   a   t   t   r   .   a   t   i   m   e   =   n   e   w       D   a   t   e   (   n   o   d   e   .   a   t   i   m   e   )   ;   a   t   t   r   .   m   t   i   m   e   =   n   e   w       D   a   t   e   (   n   o   d   e   .   m   t   i   m   e   )   ;   a   t   t   r   .   c   t   i   m   e   =   n   e   w       D   a   t   e   (   n   o   d   e   .   c   t   i   m   e   )   ;   a   t   t   r   .   b   l   k   s   i   z   e   =   4   0   9   6   ;   a   t   t   r   .   b   l   o   c   k   s   =   M   a   t   h   .   c   e   i   l   (   a   t   t   r   .   s   i   z   e   /   a   t   t   r   .   b   l   k   s   i   z   e   )   ;   r   e   t   u   r   n       a   t   t   r   }   ,   s   e   t   a   t   t   r   (   n   o   d   e   ,   a   t   t   r   )   {   f   o   r   (   c   o   n   s   t       k   e   y       o   f   [   "   m   o   d   e   "   ,   "   a   t   i   m   e   "   ,   "   m   t   i   m   e   "   ,   "   c   t   i   m   e   "   ]   )   {   i   f   (   a   t   t   r   [   k   e   y   ]   !   =   n   u   l   l   )   {   n   o   d   e   [   k   e   y   ]   =   a   t   t   r   [   k   e   y   ]   }   }   i   f   (   a   t   t   r   .   s   i   z   e   !   =   =   u   n   d   e   f   i   n   e   d   )   {   M   E   M   F   S   .   r   e   s   i   z   e   F   i   l   e   S   t   o   r   a   g   e   (   n   o   d   e   ,   a   t   t   r   .   s   i   z   e   )   }   }   ,   l   o   o   k   u   p   (   p   a   r   e   n   t   ,   n   a   m   e   )   {   t   h   r   o   w       M   E   M   F   S   .   d   o   e   s   N   o   t   E   x   i   s   t   E   r   r   o   r   }   ,   m   k   n   o   d   (   p   a   r   e   n   t   ,   n   a   m   e   ,   m   o   d   e   ,   d   e   v   )   {   r   e   t   u   r   n       M   E   M   F   S   .   c   r   e   a   t   e   N   o   d   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   m   o   d   e   ,   d   e   v   )   }   ,   r   e   n   a   m   e   (   o   l   d   _   n   o   d   e   ,   n   e   w   _   d   i   r   ,   n   e   w   _   n   a   m   e   )   {   v   a   r       n   e   w   _   n   o   d   e   ;   t   r   y   {   n   e   w   _   n   o   d   e   =   F   S   .   l   o   o   k   u   p   N   o   d   e   (   n   e   w   _   d   i   r   ,   n   e   w   _   n   a   m   e   )   }   c   a   t   c   h   (   e   )   {   }   i   f   (   n   e   w   _   n   o   d   e   )   {   i   f   (   F   S   .   i   s   D   i   r   (   o   l   d   _   n   o   d   e   .   m   o   d   e   )   )   {   f   o   r   (   v   a   r       i       i   n       n   e   w   _   n   o   d   e   .   c   o   n   t   e   n   t   s   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   5   5   )   }   }   F   S   .   h   a   s   h   R   e   m   o   v   e   N   o   d   e   (   n   e   w   _   n   o   d   e   )   }   d   e   l   e   t   e       o   l   d   _   n   o   d   e   .   p   a   r   e   n   t   .   c   o   n   t   e   n   t   s   [   o   l   d   _   n   o   d   e   .   n   a   m   e   ]   ;   n   e   w   _   d   i   r   .   c   o   n   t   e   n   t   s   [   n   e   w   _   n   a   m   e   ]   =   o   l   d   _   n   o   d   e   ;   o   l   d   _   n   o   d   e   .   n   a   m   e   =   n   e   w   _   n   a   m   e   ;   n   e   w   _   d   i   r   .   c   t   i   m   e   =   n   e   w   _   d   i   r   .   m   t   i   m   e   =   o   l   d   _   n   o   d   e   .   p   a   r   e   n   t   .   c   t   i   m   e   =   o   l   d   _   n   o   d   e   .   p   a   r   e   n   t   .   m   t   i   m   e   =   D   a   t   e   .   n   o   w   (   )   }   ,   u   n   l   i   n   k   (   p   a   r   e   n   t   ,   n   a   m   e   )   {   d   e   l   e   t   e       p   a   r   e   n   t   .   c   o   n   t   e   n   t   s   [   n   a   m   e   ]   ;   p   a   r   e   n   t   .   c   t   i   m   e   =   p   a   r   e   n   t   .   m   t   i   m   e   =   D   a   t   e   .   n   o   w   (   )   }   ,   r   m   d   i   r   (   p   a   r   e   n   t   ,   n   a   m   e   )   {   v   a   r       n   o   d   e   =   F   S   .   l   o   o   k   u   p   N   o   d   e   (   p   a   r   e   n   t   ,   n   a   m   e   )   ;   f   o   r   (   v   a   r       i       i   n       n   o   d   e   .   c   o   n   t   e   n   t   s   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   5   5   )   }   d   e   l   e   t   e       p   a   r   e   n   t   .   c   o   n   t   e   n   t   s   [   n   a   m   e   ]   ;   p   a   r   e   n   t   .   c   t   i   m   e   =   p   a   r   e   n   t   .   m   t   i   m   e   =   D   a   t   e   .   n   o   w   (   )   }   ,   r   e   a   d   d   i   r   (   n   o   d   e   )   {   r   e   t   u   r   n   [   "   .   "   ,   "   .   .   "   ,   .   .   .   O   b   j   e   c   t   .   k   e   y   s   (   n   o   d   e   .   c   o   n   t   e   n   t   s   )   ]   }   ,   s   y   m   l   i   n   k   (   p   a   r   e   n   t   ,   n   e   w   n   a   m   e   ,   o   l   d   p   a   t   h   )   {   v   a   r       n   o   d   e   =   M   E   M   F   S   .   c   r   e   a   t   e   N   o   d   e   (   p   a   r   e   n   t   ,   n   e   w   n   a   m   e   ,   5   1   1   |   4   0   9   6   0   ,   0   )   ;   n   o   d   e   .   l   i   n   k   =   o   l   d   p   a   t   h   ;   r   e   t   u   r   n       n   o   d   e   }   ,   r   e   a   d   l   i   n   k   (   n   o   d   e   )   {   i   f   (   !   F   S   .   i   s   L   i   n   k   (   n   o   d   e   .   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   r   e   t   u   r   n       n   o   d   e   .   l   i   n   k   }   }   ,   s   t   r   e   a   m   _   o   p   s   :   {   r   e   a   d   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   )   {   v   a   r       c   o   n   t   e   n   t   s   =   s   t   r   e   a   m   .   n   o   d   e   .   c   o   n   t   e   n   t   s   ;   i   f   (   p   o   s   i   t   i   o   n   >   =   s   t   r   e   a   m   .   n   o   d   e   .   u   s   e   d   B   y   t   e   s   )   r   e   t   u   r   n       0   ;   v   a   r       s   i   z   e   =   M   a   t   h   .   m   i   n   (   s   t   r   e   a   m   .   n   o   d   e   .   u   s   e   d   B   y   t   e   s   -   p   o   s   i   t   i   o   n   ,   l   e   n   g   t   h   )   ;   i   f   (   s   i   z   e   >   8   &   &   c   o   n   t   e   n   t   s   .   s   u   b   a   r   r   a   y   )   {   b   u   f   f   e   r   .   s   e   t   (   c   o   n   t   e   n   t   s   .   s   u   b   a   r   r   a   y   (   p   o   s   i   t   i   o   n   ,   p   o   s   i   t   i   o   n   +   s   i   z   e   )   ,   o   f   f   s   e   t   )   }   e   l   s   e   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   s   i   z   e   ;   i   +   +   )   b   u   f   f   e   r   [   o   f   f   s   e   t   +   i   ]   =   c   o   n   t   e   n   t   s   [   p   o   s   i   t   i   o   n   +   i   ]   }   r   e   t   u   r   n       s   i   z   e   }   ,   w   r   i   t   e   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   ,   c   a   n   O   w   n   )   {   i   f   (   !   l   e   n   g   t   h   )   r   e   t   u   r   n       0   ;   v   a   r       n   o   d   e   =   s   t   r   e   a   m   .   n   o   d   e   ;   n   o   d   e   .   m   t   i   m   e   =   n   o   d   e   .   c   t   i   m   e   =   D   a   t   e   .   n   o   w   (   )   ;   i   f   (   b   u   f   f   e   r   .   s   u   b   a   r   r   a   y   &   &   (   !   n   o   d   e   .   c   o   n   t   e   n   t   s   |   |   n   o   d   e   .   c   o   n   t   e   n   t   s   .   s   u   b   a   r   r   a   y   )   )   {   i   f   (   c   a   n   O   w   n   )   {   n   o   d   e   .   c   o   n   t   e   n   t   s   =   b   u   f   f   e   r   .   s   u   b   a   r   r   a   y   (   o   f   f   s   e   t   ,   o   f   f   s   e   t   +   l   e   n   g   t   h   )   ;   n   o   d   e   .   u   s   e   d   B   y   t   e   s   =   l   e   n   g   t   h   ;   r   e   t   u   r   n       l   e   n   g   t   h   }   e   l   s   e       i   f   (   n   o   d   e   .   u   s   e   d   B   y   t   e   s   =   =   =   0   &   &   p   o   s   i   t   i   o   n   =   =   =   0   )   {   n   o   d   e   .   c   o   n   t   e   n   t   s   =   b   u   f   f   e   r   .   s   l   i   c   e   (   o   f   f   s   e   t   ,   o   f   f   s   e   t   +   l   e   n   g   t   h   )   ;   n   o   d   e   .   u   s   e   d   B   y   t   e   s   =   l   e   n   g   t   h   ;   r   e   t   u   r   n       l   e   n   g   t   h   }   e   l   s   e       i   f   (   p   o   s   i   t   i   o   n   +   l   e   n   g   t   h   <   =   n   o   d   e   .   u   s   e   d   B   y   t   e   s   )   {   n   o   d   e   .   c   o   n   t   e   n   t   s   .   s   e   t   (   b   u   f   f   e   r   .   s   u   b   a   r   r   a   y   (   o   f   f   s   e   t   ,   o   f   f   s   e   t   +   l   e   n   g   t   h   )   ,   p   o   s   i   t   i   o   n   )   ;   r   e   t   u   r   n       l   e   n   g   t   h   }   }   M   E   M   F   S   .   e   x   p   a   n   d   F   i   l   e   S   t   o   r   a   g   e   (   n   o   d   e   ,   p   o   s   i   t   i   o   n   +   l   e   n   g   t   h   )   ;   i   f   (   n   o   d   e   .   c   o   n   t   e   n   t   s   .   s   u   b   a   r   r   a   y   &   &   b   u   f   f   e   r   .   s   u   b   a   r   r   a   y   )   {   n   o   d   e   .   c   o   n   t   e   n   t   s   .   s   e   t   (   b   u   f   f   e   r   .   s   u   b   a   r   r   a   y   (   o   f   f   s   e   t   ,   o   f   f   s   e   t   +   l   e   n   g   t   h   )   ,   p   o   s   i   t   i   o   n   )   }   e   l   s   e   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   g   t   h   ;   i   +   +   )   {   n   o   d   e   .   c   o   n   t   e   n   t   s   [   p   o   s   i   t   i   o   n   +   i   ]   =   b   u   f   f   e   r   [   o   f   f   s   e   t   +   i   ]   }   }   n   o   d   e   .   u   s   e   d   B   y   t   e   s   =   M   a   t   h   .   m   a   x   (   n   o   d   e   .   u   s   e   d   B   y   t   e   s   ,   p   o   s   i   t   i   o   n   +   l   e   n   g   t   h   )   ;   r   e   t   u   r   n       l   e   n   g   t   h   }   ,   l   l   s   e   e   k   (   s   t   r   e   a   m   ,   o   f   f   s   e   t   ,   w   h   e   n   c   e   )   {   v   a   r       p   o   s   i   t   i   o   n   =   o   f   f   s   e   t   ;   i   f   (   w   h   e   n   c   e   =   =   =   1   )   {   p   o   s   i   t   i   o   n   +   =   s   t   r   e   a   m   .   p   o   s   i   t   i   o   n   }   e   l   s   e       i   f   (   w   h   e   n   c   e   =   =   =   2   )   {   i   f   (   F   S   .   i   s   F   i   l   e   (   s   t   r   e   a   m   .   n   o   d   e   .   m   o   d   e   )   )   {   p   o   s   i   t   i   o   n   +   =   s   t   r   e   a   m   .   n   o   d   e   .   u   s   e   d   B   y   t   e   s   }   }   i   f   (   p   o   s   i   t   i   o   n   <   0   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   r   e   t   u   r   n       p   o   s   i   t   i   o   n   }   ,   m   m   a   p   (   s   t   r   e   a   m   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   ,   p   r   o   t   ,   f   l   a   g   s   )   {   i   f   (   !   F   S   .   i   s   F   i   l   e   (   s   t   r   e   a   m   .   n   o   d   e   .   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   3   )   }   v   a   r       p   t   r   ;   v   a   r       a   l   l   o   c   a   t   e   d   ;   v   a   r       c   o   n   t   e   n   t   s   =   s   t   r   e   a   m   .   n   o   d   e   .   c   o   n   t   e   n   t   s   ;   i   f   (   !   (   f   l   a   g   s   &   2   )   &   &   c   o   n   t   e   n   t   s   &   &   c   o   n   t   e   n   t   s   .   b   u   f   f   e   r   =   =   =   H   E   A   P   8   .   b   u   f   f   e   r   )   {   a   l   l   o   c   a   t   e   d   =   f   a   l   s   e   ;   p   t   r   =   c   o   n   t   e   n   t   s   .   b   y   t   e   O   f   f   s   e   t   }   e   l   s   e   {   a   l   l   o   c   a   t   e   d   =   t   r   u   e   ;   p   t   r   =   m   m   a   p   A   l   l   o   c   (   l   e   n   g   t   h   )   ;   i   f   (   !   p   t   r   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   8   )   }   i   f   (   c   o   n   t   e   n   t   s   )   {   i   f   (   p   o   s   i   t   i   o   n   >   0   |   |   p   o   s   i   t   i   o   n   +   l   e   n   g   t   h   <   c   o   n   t   e   n   t   s   .   l   e   n   g   t   h   )   {   i   f   (   c   o   n   t   e   n   t   s   .   s   u   b   a   r   r   a   y   )   {   c   o   n   t   e   n   t   s   =   c   o   n   t   e   n   t   s   .   s   u   b   a   r   r   a   y   (   p   o   s   i   t   i   o   n   ,   p   o   s   i   t   i   o   n   +   l   e   n   g   t   h   )   }   e   l   s   e   {   c   o   n   t   e   n   t   s   =   A   r   r   a   y   .   p   r   o   t   o   t   y   p   e   .   s   l   i   c   e   .   c   a   l   l   (   c   o   n   t   e   n   t   s   ,   p   o   s   i   t   i   o   n   ,   p   o   s   i   t   i   o   n   +   l   e   n   g   t   h   )   }   }   H   E   A   P   8   .   s   e   t   (   c   o   n   t   e   n   t   s   ,   p   t   r   >   >   >   0   )   }   }   r   e   t   u   r   n   {   p   t   r   ,   a   l   l   o   c   a   t   e   d   }   }   ,   m   s   y   n   c   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   m   m   a   p   F   l   a   g   s   )   {   M   E   M   F   S   .   s   t   r   e   a   m   _   o   p   s   .   w   r   i   t   e   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   0   ,   l   e   n   g   t   h   ,   o   f   f   s   e   t   ,   f   a   l   s   e   )   ;   r   e   t   u   r   n       0   }   }   }   ;   v   a   r       a   s   y   n   c   L   o   a   d   =   a   s   y   n   c       u   r   l   =   >   {   v   a   r       a   r   r   a   y   B   u   f   f   e   r   =   a   w   a   i   t       r   e   a   d   A   s   y   n   c   (   u   r   l   )   ;   r   e   t   u   r   n       n   e   w       U   i   n   t   8   A   r   r   a   y   (   a   r   r   a   y   B   u   f   f   e   r   )   }   ;   v   a   r       F   S   _   c   r   e   a   t   e   D   a   t   a   F   i   l   e   =   (   .   .   .   a   r   g   s   )   =   >   F   S   .   c   r   e   a   t   e   D   a   t   a   F   i   l   e   (   .   .   .   a   r   g   s   )   ;   v   a   r       g   e   t   U   n   i   q   u   e   R   u   n   D   e   p   e   n   d   e   n   c   y   =   i   d   =   >   i   d   ;   v   a   r       p   r   e   l   o   a   d   P   l   u   g   i   n   s   =   [   ]   ;   v   a   r       F   S   _   h   a   n   d   l   e   d   B   y   P   r   e   l   o   a   d   P   l   u   g   i   n   =   (   b   y   t   e   A   r   r   a   y   ,   f   u   l   l   n   a   m   e   ,   f   i   n   i   s   h   ,   o   n   e   r   r   o   r   )   =   >   {   i   f   (   t   y   p   e   o   f       B   r   o   w   s   e   r   !   =   "   u   n   d   e   f   i   n   e   d   "   )   B   r   o   w   s   e   r   .   i   n   i   t   (   )   ;   v   a   r       h   a   n   d   l   e   d   =   f   a   l   s   e   ;   p   r   e   l   o   a   d   P   l   u   g   i   n   s   .   f   o   r   E   a   c   h   (   p   l   u   g   i   n   =   >   {   i   f   (   h   a   n   d   l   e   d   )   r   e   t   u   r   n   ;   i   f   (   p   l   u   g   i   n   [   "   c   a   n   H   a   n   d   l   e   "   ]   (   f   u   l   l   n   a   m   e   )   )   {   p   l   u   g   i   n   [   "   h   a   n   d   l   e   "   ]   (   b   y   t   e   A   r   r   a   y   ,   f   u   l   l   n   a   m   e   ,   f   i   n   i   s   h   ,   o   n   e   r   r   o   r   )   ;   h   a   n   d   l   e   d   =   t   r   u   e   }   }   )   ;   r   e   t   u   r   n       h   a   n   d   l   e   d   }   ;   v   a   r       F   S   _   c   r   e   a   t   e   P   r   e   l   o   a   d   e   d   F   i   l   e   =   (   p   a   r   e   n   t   ,   n   a   m   e   ,   u   r   l   ,   c   a   n   R   e   a   d   ,   c   a   n   W   r   i   t   e   ,   o   n   l   o   a   d   ,   o   n   e   r   r   o   r   ,   d   o   n   t   C   r   e   a   t   e   F   i   l   e   ,   c   a   n   O   w   n   ,   p   r   e   F   i   n   i   s   h   )   =   >   {   v   a   r       f   u   l   l   n   a   m   e   =   n   a   m   e   ?   P   A   T   H   _   F   S   .   r   e   s   o   l   v   e   (   P   A   T   H   .   j   o   i   n   2   (   p   a   r   e   n   t   ,   n   a   m   e   )   )   :   p   a   r   e   n   t   ;   v   a   r       d   e   p   =   g   e   t   U   n   i   q   u   e   R   u   n   D   e   p   e   n   d   e   n   c   y   (   `   c   p       $   {   f   u   l   l   n   a   m   e   }   `   )   ;   f   u   n   c   t   i   o   n       p   r   o   c   e   s   s   D   a   t   a   (   b   y   t   e   A   r   r   a   y   )   {   f   u   n   c   t   i   o   n       f   i   n   i   s   h   (   b   y   t   e   A   r   r   a   y   )   {   p   r   e   F   i   n   i   s   h   ?   .   (   )   ;   i   f   (   !   d   o   n   t   C   r   e   a   t   e   F   i   l   e   )   {   F   S   _   c   r   e   a   t   e   D   a   t   a   F   i   l   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   b   y   t   e   A   r   r   a   y   ,   c   a   n   R   e   a   d   ,   c   a   n   W   r   i   t   e   ,   c   a   n   O   w   n   )   }   o   n   l   o   a   d   ?   .   (   )   ;   r   e   m   o   v   e   R   u   n   D   e   p   e   n   d   e   n   c   y   (   d   e   p   )   }   i   f   (   F   S   _   h   a   n   d   l   e   d   B   y   P   r   e   l   o   a   d   P   l   u   g   i   n   (   b   y   t   e   A   r   r   a   y   ,   f   u   l   l   n   a   m   e   ,   f   i   n   i   s   h   ,   (   )   =   >   {   o   n   e   r   r   o   r   ?   .   (   )   ;   r   e   m   o   v   e   R   u   n   D   e   p   e   n   d   e   n   c   y   (   d   e   p   )   }   )   )   {   r   e   t   u   r   n   }   f   i   n   i   s   h   (   b   y   t   e   A   r   r   a   y   )   }   a   d   d   R   u   n   D   e   p   e   n   d   e   n   c   y   (   d   e   p   )   ;   i   f   (   t   y   p   e   o   f       u   r   l   =   =   "   s   t   r   i   n   g   "   )   {   a   s   y   n   c   L   o   a   d   (   u   r   l   )   .   t   h   e   n   (   p   r   o   c   e   s   s   D   a   t   a   ,   o   n   e   r   r   o   r   )   }   e   l   s   e   {   p   r   o   c   e   s   s   D   a   t   a   (   u   r   l   )   }   }   ;   v   a   r       F   S   _   m   o   d   e   S   t   r   i   n   g   T   o   F   l   a   g   s   =   s   t   r   =   >   {   v   a   r       f   l   a   g   M   o   d   e   s   =   {   r   :   0   ,   "   r   +   "   :   2   ,   w   :   5   1   2   |   6   4   |   1   ,   "   w   +   "   :   5   1   2   |   6   4   |   2   ,   a   :   1   0   2   4   |   6   4   |   1   ,   "   a   +   "   :   1   0   2   4   |   6   4   |   2   }   ;   v   a   r       f   l   a   g   s   =   f   l   a   g   M   o   d   e   s   [   s   t   r   ]   ;   i   f   (   t   y   p   e   o   f       f   l   a   g   s   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   t   h   r   o   w       n   e   w       E   r   r   o   r   (   `   U   n   k   n   o   w   n       f   i   l   e       o   p   e   n       m   o   d   e   :       $   {   s   t   r   }   `   )   }   r   e   t   u   r   n       f   l   a   g   s   }   ;   v   a   r       F   S   _   g   e   t   M   o   d   e   =   (   c   a   n   R   e   a   d   ,   c   a   n   W   r   i   t   e   )   =   >   {   v   a   r       m   o   d   e   =   0   ;   i   f   (   c   a   n   R   e   a   d   )   m   o   d   e   |   =   2   9   2   |   7   3   ;   i   f   (   c   a   n   W   r   i   t   e   )   m   o   d   e   |   =   1   4   6   ;   r   e   t   u   r   n       m   o   d   e   }   ;   v   a   r       F   S   =   {   r   o   o   t   :   n   u   l   l   ,   m   o   u   n   t   s   :   [   ]   ,   d   e   v   i   c   e   s   :   {   }   ,   s   t   r   e   a   m   s   :   [   ]   ,   n   e   x   t   I   n   o   d   e   :   1   ,   n   a   m   e   T   a   b   l   e   :   n   u   l   l   ,   c   u   r   r   e   n   t   P   a   t   h   :   "   /   "   ,   i   n   i   t   i   a   l   i   z   e   d   :   f   a   l   s   e   ,   i   g   n   o   r   e   P   e   r   m   i   s   s   i   o   n   s   :   t   r   u   e   ,   f   i   l   e   s   y   s   t   e   m   s   :   n   u   l   l   ,   s   y   n   c   F   S   R   e   q   u   e   s   t   s   :   0   ,   r   e   a   d   F   i   l   e   s   :   {   }   ,   E   r   r   n   o   E   r   r   o   r   :   c   l   a   s   s   {   n   a   m   e   =   "   E   r   r   n   o   E   r   r   o   r   "   ;   c   o   n   s   t   r   u   c   t   o   r   (   e   r   r   n   o   )   {   t   h   i   s   .   e   r   r   n   o   =   e   r   r   n   o   }   }   ,   F   S   S   t   r   e   a   m   :   c   l   a   s   s   {   s   h   a   r   e   d   =   {   }   ;   g   e   t       o   b   j   e   c   t   (   )   {   r   e   t   u   r   n       t   h   i   s   .   n   o   d   e   }   s   e   t       o   b   j   e   c   t   (   v   a   l   )   {   t   h   i   s   .   n   o   d   e   =   v   a   l   }   g   e   t       i   s   R   e   a   d   (   )   {   r   e   t   u   r   n   (   t   h   i   s   .   f   l   a   g   s   &   2   0   9   7   1   5   5   )   !   =   =   1   }   g   e   t       i   s   W   r   i   t   e   (   )   {   r   e   t   u   r   n   (   t   h   i   s   .   f   l   a   g   s   &   2   0   9   7   1   5   5   )   !   =   =   0   }   g   e   t       i   s   A   p   p   e   n   d   (   )   {   r   e   t   u   r   n       t   h   i   s   .   f   l   a   g   s   &   1   0   2   4   }   g   e   t       f   l   a   g   s   (   )   {   r   e   t   u   r   n       t   h   i   s   .   s   h   a   r   e   d   .   f   l   a   g   s   }   s   e   t       f   l   a   g   s   (   v   a   l   )   {   t   h   i   s   .   s   h   a   r   e   d   .   f   l   a   g   s   =   v   a   l   }   g   e   t       p   o   s   i   t   i   o   n   (   )   {   r   e   t   u   r   n       t   h   i   s   .   s   h   a   r   e   d   .   p   o   s   i   t   i   o   n   }   s   e   t       p   o   s   i   t   i   o   n   (   v   a   l   )   {   t   h   i   s   .   s   h   a   r   e   d   .   p   o   s   i   t   i   o   n   =   v   a   l   }   }   ,   F   S   N   o   d   e   :   c   l   a   s   s   {   n   o   d   e   _   o   p   s   =   {   }   ;   s   t   r   e   a   m   _   o   p   s   =   {   }   ;   r   e   a   d   M   o   d   e   =   2   9   2   |   7   3   ;   w   r   i   t   e   M   o   d   e   =   1   4   6   ;   m   o   u   n   t   e   d   =   n   u   l   l   ;   c   o   n   s   t   r   u   c   t   o   r   (   p   a   r   e   n   t   ,   n   a   m   e   ,   m   o   d   e   ,   r   d   e   v   )   {   i   f   (   !   p   a   r   e   n   t   )   {   p   a   r   e   n   t   =   t   h   i   s   }   t   h   i   s   .   p   a   r   e   n   t   =   p   a   r   e   n   t   ;   t   h   i   s   .   m   o   u   n   t   =   p   a   r   e   n   t   .   m   o   u   n   t   ;   t   h   i   s   .   i   d   =   F   S   .   n   e   x   t   I   n   o   d   e   +   +   ;   t   h   i   s   .   n   a   m   e   =   n   a   m   e   ;   t   h   i   s   .   m   o   d   e   =   m   o   d   e   ;   t   h   i   s   .   r   d   e   v   =   r   d   e   v   ;   t   h   i   s   .   a   t   i   m   e   =   t   h   i   s   .   m   t   i   m   e   =   t   h   i   s   .   c   t   i   m   e   =   D   a   t   e   .   n   o   w   (   )   }   g   e   t       r   e   a   d   (   )   {   r   e   t   u   r   n   (   t   h   i   s   .   m   o   d   e   &   t   h   i   s   .   r   e   a   d   M   o   d   e   )   =   =   =   t   h   i   s   .   r   e   a   d   M   o   d   e   }   s   e   t       r   e   a   d   (   v   a   l   )   {   v   a   l   ?   t   h   i   s   .   m   o   d   e   |   =   t   h   i   s   .   r   e   a   d   M   o   d   e   :   t   h   i   s   .   m   o   d   e   &   =   ~   t   h   i   s   .   r   e   a   d   M   o   d   e   }   g   e   t       w   r   i   t   e   (   )   {   r   e   t   u   r   n   (   t   h   i   s   .   m   o   d   e   &   t   h   i   s   .   w   r   i   t   e   M   o   d   e   )   =   =   =   t   h   i   s   .   w   r   i   t   e   M   o   d   e   }   s   e   t       w   r   i   t   e   (   v   a   l   )   {   v   a   l   ?   t   h   i   s   .   m   o   d   e   |   =   t   h   i   s   .   w   r   i   t   e   M   o   d   e   :   t   h   i   s   .   m   o   d   e   &   =   ~   t   h   i   s   .   w   r   i   t   e   M   o   d   e   }   g   e   t       i   s   F   o   l   d   e   r   (   )   {   r   e   t   u   r   n       F   S   .   i   s   D   i   r   (   t   h   i   s   .   m   o   d   e   )   }   g   e   t       i   s   D   e   v   i   c   e   (   )   {   r   e   t   u   r   n       F   S   .   i   s   C   h   r   d   e   v   (   t   h   i   s   .   m   o   d   e   )   }   }   ,   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   o   p   t   s   =   {   }   )   {   i   f   (   !   p   a   t   h   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   }   o   p   t   s   .   f   o   l   l   o   w   _   m   o   u   n   t   ?   ?   =   t   r   u   e   ;   i   f   (   !   P   A   T   H   .   i   s   A   b   s   (   p   a   t   h   )   )   {   p   a   t   h   =   F   S   .   c   w   d   (   )   +   "   /   "   +   p   a   t   h   }   l   i   n   k   l   o   o   p   :   f   o   r   (   v   a   r       n   l   i   n   k   s   =   0   ;   n   l   i   n   k   s   <   4   0   ;   n   l   i   n   k   s   +   +   )   {   v   a   r       p   a   r   t   s   =   p   a   t   h   .   s   p   l   i   t   (   "   /   "   )   .   f   i   l   t   e   r   (   p   =   >   !   !   p   )   ;   v   a   r       c   u   r   r   e   n   t   =   F   S   .   r   o   o   t   ;   v   a   r       c   u   r   r   e   n   t   _   p   a   t   h   =   "   /   "   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   p   a   r   t   s   .   l   e   n   g   t   h   ;   i   +   +   )   {   v   a   r       i   s   l   a   s   t   =   i   =   =   =   p   a   r   t   s   .   l   e   n   g   t   h   -   1   ;   i   f   (   i   s   l   a   s   t   &   &   o   p   t   s   .   p   a   r   e   n   t   )   {   b   r   e   a   k   }   i   f   (   p   a   r   t   s   [   i   ]   =   =   =   "   .   "   )   {   c   o   n   t   i   n   u   e   }   i   f   (   p   a   r   t   s   [   i   ]   =   =   =   "   .   .   "   )   {   c   u   r   r   e   n   t   _   p   a   t   h   =   P   A   T   H   .   d   i   r   n   a   m   e   (   c   u   r   r   e   n   t   _   p   a   t   h   )   ;   i   f   (   F   S   .   i   s   R   o   o   t   (   c   u   r   r   e   n   t   )   )   {   p   a   t   h   =   c   u   r   r   e   n   t   _   p   a   t   h   +   "   /   "   +   p   a   r   t   s   .   s   l   i   c   e   (   i   +   1   )   .   j   o   i   n   (   "   /   "   )   ;   c   o   n   t   i   n   u   e       l   i   n   k   l   o   o   p   }   e   l   s   e   {   c   u   r   r   e   n   t   =   c   u   r   r   e   n   t   .   p   a   r   e   n   t   }   c   o   n   t   i   n   u   e   }   c   u   r   r   e   n   t   _   p   a   t   h   =   P   A   T   H   .   j   o   i   n   2   (   c   u   r   r   e   n   t   _   p   a   t   h   ,   p   a   r   t   s   [   i   ]   )   ;   t   r   y   {   c   u   r   r   e   n   t   =   F   S   .   l   o   o   k   u   p   N   o   d   e   (   c   u   r   r   e   n   t   ,   p   a   r   t   s   [   i   ]   )   }   c   a   t   c   h   (   e   )   {   i   f   (   e   ?   .   e   r   r   n   o   =   =   =   4   4   &   &   i   s   l   a   s   t   &   &   o   p   t   s   .   n   o   e   n   t   _   o   k   a   y   )   {   r   e   t   u   r   n   {   p   a   t   h   :   c   u   r   r   e   n   t   _   p   a   t   h   }   }   t   h   r   o   w       e   }   i   f   (   F   S   .   i   s   M   o   u   n   t   p   o   i   n   t   (   c   u   r   r   e   n   t   )   &   &   (   !   i   s   l   a   s   t   |   |   o   p   t   s   .   f   o   l   l   o   w   _   m   o   u   n   t   )   )   {   c   u   r   r   e   n   t   =   c   u   r   r   e   n   t   .   m   o   u   n   t   e   d   .   r   o   o   t   }   i   f   (   F   S   .   i   s   L   i   n   k   (   c   u   r   r   e   n   t   .   m   o   d   e   )   &   &   (   !   i   s   l   a   s   t   |   |   o   p   t   s   .   f   o   l   l   o   w   )   )   {   i   f   (   !   c   u   r   r   e   n   t   .   n   o   d   e   _   o   p   s   .   r   e   a   d   l   i   n   k   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   5   2   )   }   v   a   r       l   i   n   k   =   c   u   r   r   e   n   t   .   n   o   d   e   _   o   p   s   .   r   e   a   d   l   i   n   k   (   c   u   r   r   e   n   t   )   ;   i   f   (   !   P   A   T   H   .   i   s   A   b   s   (   l   i   n   k   )   )   {   l   i   n   k   =   P   A   T   H   .   d   i   r   n   a   m   e   (   c   u   r   r   e   n   t   _   p   a   t   h   )   +   "   /   "   +   l   i   n   k   }   p   a   t   h   =   l   i   n   k   +   "   /   "   +   p   a   r   t   s   .   s   l   i   c   e   (   i   +   1   )   .   j   o   i   n   (   "   /   "   )   ;   c   o   n   t   i   n   u   e       l   i   n   k   l   o   o   p   }   }   r   e   t   u   r   n   {   p   a   t   h   :   c   u   r   r   e   n   t   _   p   a   t   h   ,   n   o   d   e   :   c   u   r   r   e   n   t   }   }   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   3   2   )   }   ,   g   e   t   P   a   t   h   (   n   o   d   e   )   {   v   a   r       p   a   t   h   ;   w   h   i   l   e   (   t   r   u   e   )   {   i   f   (   F   S   .   i   s   R   o   o   t   (   n   o   d   e   )   )   {   v   a   r       m   o   u   n   t   =   n   o   d   e   .   m   o   u   n   t   .   m   o   u   n   t   p   o   i   n   t   ;   i   f   (   !   p   a   t   h   )   r   e   t   u   r   n       m   o   u   n   t   ;   r   e   t   u   r   n       m   o   u   n   t   [   m   o   u   n   t   .   l   e   n   g   t   h   -   1   ]   !   =   =   "   /   "   ?   `   $   {   m   o   u   n   t   }   /   $   {   p   a   t   h   }   `   :   m   o   u   n   t   +   p   a   t   h   }   p   a   t   h   =   p   a   t   h   ?   `   $   {   n   o   d   e   .   n   a   m   e   }   /   $   {   p   a   t   h   }   `   :   n   o   d   e   .   n   a   m   e   ;   n   o   d   e   =   n   o   d   e   .   p   a   r   e   n   t   }   }   ,   h   a   s   h   N   a   m   e   (   p   a   r   e   n   t   i   d   ,   n   a   m   e   )   {   v   a   r       h   a   s   h   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   a   m   e   .   l   e   n   g   t   h   ;   i   +   +   )   {   h   a   s   h   =   (   h   a   s   h   <   <   5   )   -   h   a   s   h   +   n   a   m   e   .   c   h   a   r   C   o   d   e   A   t   (   i   )   |   0   }   r   e   t   u   r   n   (   p   a   r   e   n   t   i   d   +   h   a   s   h   >   >   >   0   )   %   F   S   .   n   a   m   e   T   a   b   l   e   .   l   e   n   g   t   h   }   ,   h   a   s   h   A   d   d   N   o   d   e   (   n   o   d   e   )   {   v   a   r       h   a   s   h   =   F   S   .   h   a   s   h   N   a   m   e   (   n   o   d   e   .   p   a   r   e   n   t   .   i   d   ,   n   o   d   e   .   n   a   m   e   )   ;   n   o   d   e   .   n   a   m   e   _   n   e   x   t   =   F   S   .   n   a   m   e   T   a   b   l   e   [   h   a   s   h   ]   ;   F   S   .   n   a   m   e   T   a   b   l   e   [   h   a   s   h   ]   =   n   o   d   e   }   ,   h   a   s   h   R   e   m   o   v   e   N   o   d   e   (   n   o   d   e   )   {   v   a   r       h   a   s   h   =   F   S   .   h   a   s   h   N   a   m   e   (   n   o   d   e   .   p   a   r   e   n   t   .   i   d   ,   n   o   d   e   .   n   a   m   e   )   ;   i   f   (   F   S   .   n   a   m   e   T   a   b   l   e   [   h   a   s   h   ]   =   =   =   n   o   d   e   )   {   F   S   .   n   a   m   e   T   a   b   l   e   [   h   a   s   h   ]   =   n   o   d   e   .   n   a   m   e   _   n   e   x   t   }   e   l   s   e   {   v   a   r       c   u   r   r   e   n   t   =   F   S   .   n   a   m   e   T   a   b   l   e   [   h   a   s   h   ]   ;   w   h   i   l   e   (   c   u   r   r   e   n   t   )   {   i   f   (   c   u   r   r   e   n   t   .   n   a   m   e   _   n   e   x   t   =   =   =   n   o   d   e   )   {   c   u   r   r   e   n   t   .   n   a   m   e   _   n   e   x   t   =   n   o   d   e   .   n   a   m   e   _   n   e   x   t   ;   b   r   e   a   k   }   c   u   r   r   e   n   t   =   c   u   r   r   e   n   t   .   n   a   m   e   _   n   e   x   t   }   }   }   ,   l   o   o   k   u   p   N   o   d   e   (   p   a   r   e   n   t   ,   n   a   m   e   )   {   v   a   r       e   r   r   C   o   d   e   =   F   S   .   m   a   y   L   o   o   k   u   p   (   p   a   r   e   n   t   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   v   a   r       h   a   s   h   =   F   S   .   h   a   s   h   N   a   m   e   (   p   a   r   e   n   t   .   i   d   ,   n   a   m   e   )   ;   f   o   r   (   v   a   r       n   o   d   e   =   F   S   .   n   a   m   e   T   a   b   l   e   [   h   a   s   h   ]   ;   n   o   d   e   ;   n   o   d   e   =   n   o   d   e   .   n   a   m   e   _   n   e   x   t   )   {   v   a   r       n   o   d   e   N   a   m   e   =   n   o   d   e   .   n   a   m   e   ;   i   f   (   n   o   d   e   .   p   a   r   e   n   t   .   i   d   =   =   =   p   a   r   e   n   t   .   i   d   &   &   n   o   d   e   N   a   m   e   =   =   =   n   a   m   e   )   {   r   e   t   u   r   n       n   o   d   e   }   }   r   e   t   u   r   n       F   S   .   l   o   o   k   u   p   (   p   a   r   e   n   t   ,   n   a   m   e   )   }   ,   c   r   e   a   t   e   N   o   d   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   m   o   d   e   ,   r   d   e   v   )   {   v   a   r       n   o   d   e   =   n   e   w       F   S   .   F   S   N   o   d   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   m   o   d   e   ,   r   d   e   v   )   ;   F   S   .   h   a   s   h   A   d   d   N   o   d   e   (   n   o   d   e   )   ;   r   e   t   u   r   n       n   o   d   e   }   ,   d   e   s   t   r   o   y   N   o   d   e   (   n   o   d   e   )   {   F   S   .   h   a   s   h   R   e   m   o   v   e   N   o   d   e   (   n   o   d   e   )   }   ,   i   s   R   o   o   t   (   n   o   d   e   )   {   r   e   t   u   r   n       n   o   d   e   =   =   =   n   o   d   e   .   p   a   r   e   n   t   }   ,   i   s   M   o   u   n   t   p   o   i   n   t   (   n   o   d   e   )   {   r   e   t   u   r   n   !   !   n   o   d   e   .   m   o   u   n   t   e   d   }   ,   i   s   F   i   l   e   (   m   o   d   e   )   {   r   e   t   u   r   n   (   m   o   d   e   &   6   1   4   4   0   )   =   =   =   3   2   7   6   8   }   ,   i   s   D   i   r   (   m   o   d   e   )   {   r   e   t   u   r   n   (   m   o   d   e   &   6   1   4   4   0   )   =   =   =   1   6   3   8   4   }   ,   i   s   L   i   n   k   (   m   o   d   e   )   {   r   e   t   u   r   n   (   m   o   d   e   &   6   1   4   4   0   )   =   =   =   4   0   9   6   0   }   ,   i   s   C   h   r   d   e   v   (   m   o   d   e   )   {   r   e   t   u   r   n   (   m   o   d   e   &   6   1   4   4   0   )   =   =   =   8   1   9   2   }   ,   i   s   B   l   k   d   e   v   (   m   o   d   e   )   {   r   e   t   u   r   n   (   m   o   d   e   &   6   1   4   4   0   )   =   =   =   2   4   5   7   6   }   ,   i   s   F   I   F   O   (   m   o   d   e   )   {   r   e   t   u   r   n   (   m   o   d   e   &   6   1   4   4   0   )   =   =   =   4   0   9   6   }   ,   i   s   S   o   c   k   e   t   (   m   o   d   e   )   {   r   e   t   u   r   n   (   m   o   d   e   &   4   9   1   5   2   )   =   =   =   4   9   1   5   2   }   ,   f   l   a   g   s   T   o   P   e   r   m   i   s   s   i   o   n   S   t   r   i   n   g   (   f   l   a   g   )   {   v   a   r       p   e   r   m   s   =   [   "   r   "   ,   "   w   "   ,   "   r   w   "   ]   [   f   l   a   g   &   3   ]   ;   i   f   (   f   l   a   g   &   5   1   2   )   {   p   e   r   m   s   +   =   "   w   "   }   r   e   t   u   r   n       p   e   r   m   s   }   ,   n   o   d   e   P   e   r   m   i   s   s   i   o   n   s   (   n   o   d   e   ,   p   e   r   m   s   )   {   i   f   (   F   S   .   i   g   n   o   r   e   P   e   r   m   i   s   s   i   o   n   s   )   {   r   e   t   u   r   n       0   }   i   f   (   p   e   r   m   s   .   i   n   c   l   u   d   e   s   (   "   r   "   )   &   &   !   (   n   o   d   e   .   m   o   d   e   &   2   9   2   )   )   {   r   e   t   u   r   n       2   }   e   l   s   e       i   f   (   p   e   r   m   s   .   i   n   c   l   u   d   e   s   (   "   w   "   )   &   &   !   (   n   o   d   e   .   m   o   d   e   &   1   4   6   )   )   {   r   e   t   u   r   n       2   }   e   l   s   e       i   f   (   p   e   r   m   s   .   i   n   c   l   u   d   e   s   (   "   x   "   )   &   &   !   (   n   o   d   e   .   m   o   d   e   &   7   3   )   )   {   r   e   t   u   r   n       2   }   r   e   t   u   r   n       0   }   ,   m   a   y   L   o   o   k   u   p   (   d   i   r   )   {   i   f   (   !   F   S   .   i   s   D   i   r   (   d   i   r   .   m   o   d   e   )   )   r   e   t   u   r   n       5   4   ;   v   a   r       e   r   r   C   o   d   e   =   F   S   .   n   o   d   e   P   e   r   m   i   s   s   i   o   n   s   (   d   i   r   ,   "   x   "   )   ;   i   f   (   e   r   r   C   o   d   e   )   r   e   t   u   r   n       e   r   r   C   o   d   e   ;   i   f   (   !   d   i   r   .   n   o   d   e   _   o   p   s   .   l   o   o   k   u   p   )   r   e   t   u   r   n       2   ;   r   e   t   u   r   n       0   }   ,   m   a   y   C   r   e   a   t   e   (   d   i   r   ,   n   a   m   e   )   {   i   f   (   !   F   S   .   i   s   D   i   r   (   d   i   r   .   m   o   d   e   )   )   {   r   e   t   u   r   n       5   4   }   t   r   y   {   v   a   r       n   o   d   e   =   F   S   .   l   o   o   k   u   p   N   o   d   e   (   d   i   r   ,   n   a   m   e   )   ;   r   e   t   u   r   n       2   0   }   c   a   t   c   h   (   e   )   {   }   r   e   t   u   r   n       F   S   .   n   o   d   e   P   e   r   m   i   s   s   i   o   n   s   (   d   i   r   ,   "   w   x   "   )   }   ,   m   a   y   D   e   l   e   t   e   (   d   i   r   ,   n   a   m   e   ,   i   s   d   i   r   )   {   v   a   r       n   o   d   e   ;   t   r   y   {   n   o   d   e   =   F   S   .   l   o   o   k   u   p   N   o   d   e   (   d   i   r   ,   n   a   m   e   )   }   c   a   t   c   h   (   e   )   {   r   e   t   u   r   n       e   .   e   r   r   n   o   }   v   a   r       e   r   r   C   o   d   e   =   F   S   .   n   o   d   e   P   e   r   m   i   s   s   i   o   n   s   (   d   i   r   ,   "   w   x   "   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   r   e   t   u   r   n       e   r   r   C   o   d   e   }   i   f   (   i   s   d   i   r   )   {   i   f   (   !   F   S   .   i   s   D   i   r   (   n   o   d   e   .   m   o   d   e   )   )   {   r   e   t   u   r   n       5   4   }   i   f   (   F   S   .   i   s   R   o   o   t   (   n   o   d   e   )   |   |   F   S   .   g   e   t   P   a   t   h   (   n   o   d   e   )   =   =   =   F   S   .   c   w   d   (   )   )   {   r   e   t   u   r   n       1   0   }   }   e   l   s   e   {   i   f   (   F   S   .   i   s   D   i   r   (   n   o   d   e   .   m   o   d   e   )   )   {   r   e   t   u   r   n       3   1   }   }   r   e   t   u   r   n       0   }   ,   m   a   y   O   p   e   n   (   n   o   d   e   ,   f   l   a   g   s   )   {   i   f   (   !   n   o   d   e   )   {   r   e   t   u   r   n       4   4   }   i   f   (   F   S   .   i   s   L   i   n   k   (   n   o   d   e   .   m   o   d   e   )   )   {   r   e   t   u   r   n       3   2   }   e   l   s   e       i   f   (   F   S   .   i   s   D   i   r   (   n   o   d   e   .   m   o   d   e   )   )   {   i   f   (   F   S   .   f   l   a   g   s   T   o   P   e   r   m   i   s   s   i   o   n   S   t   r   i   n   g   (   f   l   a   g   s   )   !   =   =   "   r   "   |   |   f   l   a   g   s   &   (   5   1   2   |   6   4   )   )   {   r   e   t   u   r   n       3   1   }   }   r   e   t   u   r   n       F   S   .   n   o   d   e   P   e   r   m   i   s   s   i   o   n   s   (   n   o   d   e   ,   F   S   .   f   l   a   g   s   T   o   P   e   r   m   i   s   s   i   o   n   S   t   r   i   n   g   (   f   l   a   g   s   )   )   }   ,   c   h   e   c   k   O   p   E   x   i   s   t   s   (   o   p   ,   e   r   r   )   {   i   f   (   !   o   p   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   )   }   r   e   t   u   r   n       o   p   }   ,   M   A   X   _   O   P   E   N   _   F   D   S   :   4   0   9   6   ,   n   e   x   t   f   d   (   )   {   f   o   r   (   v   a   r       f   d   =   0   ;   f   d   <   =   F   S   .   M   A   X   _   O   P   E   N   _   F   D   S   ;   f   d   +   +   )   {   i   f   (   !   F   S   .   s   t   r   e   a   m   s   [   f   d   ]   )   {   r   e   t   u   r   n       f   d   }   }   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   3   3   )   }   ,   g   e   t   S   t   r   e   a   m   C   h   e   c   k   e   d   (   f   d   )   {   v   a   r       s   t   r   e   a   m   =   F   S   .   g   e   t   S   t   r   e   a   m   (   f   d   )   ;   i   f   (   !   s   t   r   e   a   m   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   8   )   }   r   e   t   u   r   n       s   t   r   e   a   m   }   ,   g   e   t   S   t   r   e   a   m   :   f   d   =   >   F   S   .   s   t   r   e   a   m   s   [   f   d   ]   ,   c   r   e   a   t   e   S   t   r   e   a   m   (   s   t   r   e   a   m   ,   f   d   =   -   1   )   {   s   t   r   e   a   m   =   O   b   j   e   c   t   .   a   s   s   i   g   n   (   n   e   w       F   S   .   F   S   S   t   r   e   a   m   ,   s   t   r   e   a   m   )   ;   i   f   (   f   d   =   =   -   1   )   {   f   d   =   F   S   .   n   e   x   t   f   d   (   )   }   s   t   r   e   a   m   .   f   d   =   f   d   ;   F   S   .   s   t   r   e   a   m   s   [   f   d   ]   =   s   t   r   e   a   m   ;   r   e   t   u   r   n       s   t   r   e   a   m   }   ,   c   l   o   s   e   S   t   r   e   a   m   (   f   d   )   {   F   S   .   s   t   r   e   a   m   s   [   f   d   ]   =   n   u   l   l   }   ,   d   u   p   S   t   r   e   a   m   (   o   r   i   g   S   t   r   e   a   m   ,   f   d   =   -   1   )   {   v   a   r       s   t   r   e   a   m   =   F   S   .   c   r   e   a   t   e   S   t   r   e   a   m   (   o   r   i   g   S   t   r   e   a   m   ,   f   d   )   ;   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   ?   .   d   u   p   ?   .   (   s   t   r   e   a   m   )   ;   r   e   t   u   r   n       s   t   r   e   a   m   }   ,   d   o   S   e   t   A   t   t   r   (   s   t   r   e   a   m   ,   n   o   d   e   ,   a   t   t   r   )   {   v   a   r       s   e   t   a   t   t   r   =   s   t   r   e   a   m   ?   .   s   t   r   e   a   m   _   o   p   s   .   s   e   t   a   t   t   r   ;   v   a   r       a   r   g   =   s   e   t   a   t   t   r   ?   s   t   r   e   a   m   :   n   o   d   e   ;   s   e   t   a   t   t   r   ?   ?   =   n   o   d   e   .   n   o   d   e   _   o   p   s   .   s   e   t   a   t   t   r   ;   F   S   .   c   h   e   c   k   O   p   E   x   i   s   t   s   (   s   e   t   a   t   t   r   ,   6   3   )   ;   s   e   t   a   t   t   r   (   a   r   g   ,   a   t   t   r   )   }   ,   c   h   r   d   e   v   _   s   t   r   e   a   m   _   o   p   s   :   {   o   p   e   n   (   s   t   r   e   a   m   )   {   v   a   r       d   e   v   i   c   e   =   F   S   .   g   e   t   D   e   v   i   c   e   (   s   t   r   e   a   m   .   n   o   d   e   .   r   d   e   v   )   ;   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   =   d   e   v   i   c   e   .   s   t   r   e   a   m   _   o   p   s   ;   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   o   p   e   n   ?   .   (   s   t   r   e   a   m   )   }   ,   l   l   s   e   e   k   (   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   7   0   )   }   }   ,   m   a   j   o   r   :   d   e   v   =   >   d   e   v   >   >   8   ,   m   i   n   o   r   :   d   e   v   =   >   d   e   v   &   2   5   5   ,   m   a   k   e   d   e   v   :   (   m   a   ,   m   i   )   =   >   m   a   <   <   8   |   m   i   ,   r   e   g   i   s   t   e   r   D   e   v   i   c   e   (   d   e   v   ,   o   p   s   )   {   F   S   .   d   e   v   i   c   e   s   [   d   e   v   ]   =   {   s   t   r   e   a   m   _   o   p   s   :   o   p   s   }   }   ,   g   e   t   D   e   v   i   c   e   :   d   e   v   =   >   F   S   .   d   e   v   i   c   e   s   [   d   e   v   ]   ,   g   e   t   M   o   u   n   t   s   (   m   o   u   n   t   )   {   v   a   r       m   o   u   n   t   s   =   [   ]   ;   v   a   r       c   h   e   c   k   =   [   m   o   u   n   t   ]   ;   w   h   i   l   e   (   c   h   e   c   k   .   l   e   n   g   t   h   )   {   v   a   r       m   =   c   h   e   c   k   .   p   o   p   (   )   ;   m   o   u   n   t   s   .   p   u   s   h   (   m   )   ;   c   h   e   c   k   .   p   u   s   h   (   .   .   .   m   .   m   o   u   n   t   s   )   }   r   e   t   u   r   n       m   o   u   n   t   s   }   ,   s   y   n   c   f   s   (   p   o   p   u   l   a   t   e   ,   c   a   l   l   b   a   c   k   )   {   i   f   (   t   y   p   e   o   f       p   o   p   u   l   a   t   e   =   =   "   f   u   n   c   t   i   o   n   "   )   {   c   a   l   l   b   a   c   k   =   p   o   p   u   l   a   t   e   ;   p   o   p   u   l   a   t   e   =   f   a   l   s   e   }   F   S   .   s   y   n   c   F   S   R   e   q   u   e   s   t   s   +   +   ;   i   f   (   F   S   .   s   y   n   c   F   S   R   e   q   u   e   s   t   s   >   1   )   {   e   r   r   (   `   w   a   r   n   i   n   g   :       $   {   F   S   .   s   y   n   c   F   S   R   e   q   u   e   s   t   s   }       F   S   .   s   y   n   c   f   s       o   p   e   r   a   t   i   o   n   s       i   n       f   l   i   g   h   t       a   t       o   n   c   e   ,       p   r   o   b   a   b   l   y       j   u   s   t       d   o   i   n   g       e   x   t   r   a       w   o   r   k   `   )   }   v   a   r       m   o   u   n   t   s   =   F   S   .   g   e   t   M   o   u   n   t   s   (   F   S   .   r   o   o   t   .   m   o   u   n   t   )   ;   v   a   r       c   o   m   p   l   e   t   e   d   =   0   ;   f   u   n   c   t   i   o   n       d   o   C   a   l   l   b   a   c   k   (   e   r   r   C   o   d   e   )   {   F   S   .   s   y   n   c   F   S   R   e   q   u   e   s   t   s   -   -   ;   r   e   t   u   r   n       c   a   l   l   b   a   c   k   (   e   r   r   C   o   d   e   )   }   f   u   n   c   t   i   o   n       d   o   n   e   (   e   r   r   C   o   d   e   )   {   i   f   (   e   r   r   C   o   d   e   )   {   i   f   (   !   d   o   n   e   .   e   r   r   o   r   e   d   )   {   d   o   n   e   .   e   r   r   o   r   e   d   =   t   r   u   e   ;   r   e   t   u   r   n       d   o   C   a   l   l   b   a   c   k   (   e   r   r   C   o   d   e   )   }   r   e   t   u   r   n   }   i   f   (   +   +   c   o   m   p   l   e   t   e   d   >   =   m   o   u   n   t   s   .   l   e   n   g   t   h   )   {   d   o   C   a   l   l   b   a   c   k   (   n   u   l   l   )   }   }   m   o   u   n   t   s   .   f   o   r   E   a   c   h   (   m   o   u   n   t   =   >   {   i   f   (   !   m   o   u   n   t   .   t   y   p   e   .   s   y   n   c   f   s   )   {   r   e   t   u   r   n       d   o   n   e   (   n   u   l   l   )   }   m   o   u   n   t   .   t   y   p   e   .   s   y   n   c   f   s   (   m   o   u   n   t   ,   p   o   p   u   l   a   t   e   ,   d   o   n   e   )   }   )   }   ,   m   o   u   n   t   (   t   y   p   e   ,   o   p   t   s   ,   m   o   u   n   t   p   o   i   n   t   )   {   v   a   r       r   o   o   t   =   m   o   u   n   t   p   o   i   n   t   =   =   =   "   /   "   ;   v   a   r       p   s   e   u   d   o   =   !   m   o   u   n   t   p   o   i   n   t   ;   v   a   r       n   o   d   e   ;   i   f   (   r   o   o   t   &   &   F   S   .   r   o   o   t   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   1   0   )   }   e   l   s   e       i   f   (   !   r   o   o   t   &   &   !   p   s   e   u   d   o   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   m   o   u   n   t   p   o   i   n   t   ,   {   f   o   l   l   o   w   _   m   o   u   n   t   :   f   a   l   s   e   }   )   ;   m   o   u   n   t   p   o   i   n   t   =   l   o   o   k   u   p   .   p   a   t   h   ;   n   o   d   e   =   l   o   o   k   u   p   .   n   o   d   e   ;   i   f   (   F   S   .   i   s   M   o   u   n   t   p   o   i   n   t   (   n   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   1   0   )   }   i   f   (   !   F   S   .   i   s   D   i   r   (   n   o   d   e   .   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   5   4   )   }   }   v   a   r       m   o   u   n   t   =   {   t   y   p   e   ,   o   p   t   s   ,   m   o   u   n   t   p   o   i   n   t   ,   m   o   u   n   t   s   :   [   ]   }   ;   v   a   r       m   o   u   n   t   R   o   o   t   =   t   y   p   e   .   m   o   u   n   t   (   m   o   u   n   t   )   ;   m   o   u   n   t   R   o   o   t   .   m   o   u   n   t   =   m   o   u   n   t   ;   m   o   u   n   t   .   r   o   o   t   =   m   o   u   n   t   R   o   o   t   ;   i   f   (   r   o   o   t   )   {   F   S   .   r   o   o   t   =   m   o   u   n   t   R   o   o   t   }   e   l   s   e       i   f   (   n   o   d   e   )   {   n   o   d   e   .   m   o   u   n   t   e   d   =   m   o   u   n   t   ;   i   f   (   n   o   d   e   .   m   o   u   n   t   )   {   n   o   d   e   .   m   o   u   n   t   .   m   o   u   n   t   s   .   p   u   s   h   (   m   o   u   n   t   )   }   }   r   e   t   u   r   n       m   o   u   n   t   R   o   o   t   }   ,   u   n   m   o   u   n   t   (   m   o   u   n   t   p   o   i   n   t   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   m   o   u   n   t   p   o   i   n   t   ,   {   f   o   l   l   o   w   _   m   o   u   n   t   :   f   a   l   s   e   }   )   ;   i   f   (   !   F   S   .   i   s   M   o   u   n   t   p   o   i   n   t   (   l   o   o   k   u   p   .   n   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   v   a   r       n   o   d   e   =   l   o   o   k   u   p   .   n   o   d   e   ;   v   a   r       m   o   u   n   t   =   n   o   d   e   .   m   o   u   n   t   e   d   ;   v   a   r       m   o   u   n   t   s   =   F   S   .   g   e   t   M   o   u   n   t   s   (   m   o   u   n   t   )   ;   O   b   j   e   c   t   .   k   e   y   s   (   F   S   .   n   a   m   e   T   a   b   l   e   )   .   f   o   r   E   a   c   h   (   h   a   s   h   =   >   {   v   a   r       c   u   r   r   e   n   t   =   F   S   .   n   a   m   e   T   a   b   l   e   [   h   a   s   h   ]   ;   w   h   i   l   e   (   c   u   r   r   e   n   t   )   {   v   a   r       n   e   x   t   =   c   u   r   r   e   n   t   .   n   a   m   e   _   n   e   x   t   ;   i   f   (   m   o   u   n   t   s   .   i   n   c   l   u   d   e   s   (   c   u   r   r   e   n   t   .   m   o   u   n   t   )   )   {   F   S   .   d   e   s   t   r   o   y   N   o   d   e   (   c   u   r   r   e   n   t   )   }   c   u   r   r   e   n   t   =   n   e   x   t   }   }   )   ;   n   o   d   e   .   m   o   u   n   t   e   d   =   n   u   l   l   ;   v   a   r       i   d   x   =   n   o   d   e   .   m   o   u   n   t   .   m   o   u   n   t   s   .   i   n   d   e   x   O   f   (   m   o   u   n   t   )   ;   n   o   d   e   .   m   o   u   n   t   .   m   o   u   n   t   s   .   s   p   l   i   c   e   (   i   d   x   ,   1   )   }   ,   l   o   o   k   u   p   (   p   a   r   e   n   t   ,   n   a   m   e   )   {   r   e   t   u   r   n       p   a   r   e   n   t   .   n   o   d   e   _   o   p   s   .   l   o   o   k   u   p   (   p   a   r   e   n   t   ,   n   a   m   e   )   }   ,   m   k   n   o   d   (   p   a   t   h   ,   m   o   d   e   ,   d   e   v   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   p   a   r   e   n   t   :   t   r   u   e   }   )   ;   v   a   r       p   a   r   e   n   t   =   l   o   o   k   u   p   .   n   o   d   e   ;   v   a   r       n   a   m   e   =   P   A   T   H   .   b   a   s   e   n   a   m   e   (   p   a   t   h   )   ;   i   f   (   !   n   a   m   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   i   f   (   n   a   m   e   =   =   =   "   .   "   |   |   n   a   m   e   =   =   =   "   .   .   "   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   0   )   }   v   a   r       e   r   r   C   o   d   e   =   F   S   .   m   a   y   C   r   e   a   t   e   (   p   a   r   e   n   t   ,   n   a   m   e   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   i   f   (   !   p   a   r   e   n   t   .   n   o   d   e   _   o   p   s   .   m   k   n   o   d   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   6   3   )   }   r   e   t   u   r   n       p   a   r   e   n   t   .   n   o   d   e   _   o   p   s   .   m   k   n   o   d   (   p   a   r   e   n   t   ,   n   a   m   e   ,   m   o   d   e   ,   d   e   v   )   }   ,   s   t   a   t   f   s   (   p   a   t   h   )   {   r   e   t   u   r   n       F   S   .   s   t   a   t   f   s   N   o   d   e   (   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   t   r   u   e   }   )   .   n   o   d   e   )   }   ,   s   t   a   t   f   s   S   t   r   e   a   m   (   s   t   r   e   a   m   )   {   r   e   t   u   r   n       F   S   .   s   t   a   t   f   s   N   o   d   e   (   s   t   r   e   a   m   .   n   o   d   e   )   }   ,   s   t   a   t   f   s   N   o   d   e   (   n   o   d   e   )   {   v   a   r       r   t   n   =   {   b   s   i   z   e   :   4   0   9   6   ,   f   r   s   i   z   e   :   4   0   9   6   ,   b   l   o   c   k   s   :   1   e   6   ,   b   f   r   e   e   :   5   e   5   ,   b   a   v   a   i   l   :   5   e   5   ,   f   i   l   e   s   :   F   S   .   n   e   x   t   I   n   o   d   e   ,   f   f   r   e   e   :   F   S   .   n   e   x   t   I   n   o   d   e   -   1   ,   f   s   i   d   :   4   2   ,   f   l   a   g   s   :   2   ,   n   a   m   e   l   e   n   :   2   5   5   }   ;   i   f   (   n   o   d   e   .   n   o   d   e   _   o   p   s   .   s   t   a   t   f   s   )   {   O   b   j   e   c   t   .   a   s   s   i   g   n   (   r   t   n   ,   n   o   d   e   .   n   o   d   e   _   o   p   s   .   s   t   a   t   f   s   (   n   o   d   e   .   m   o   u   n   t   .   o   p   t   s   .   r   o   o   t   )   )   }   r   e   t   u   r   n       r   t   n   }   ,   c   r   e   a   t   e   (   p   a   t   h   ,   m   o   d   e   =   4   3   8   )   {   m   o   d   e   &   =   4   0   9   5   ;   m   o   d   e   |   =   3   2   7   6   8   ;   r   e   t   u   r   n       F   S   .   m   k   n   o   d   (   p   a   t   h   ,   m   o   d   e   ,   0   )   }   ,   m   k   d   i   r   (   p   a   t   h   ,   m   o   d   e   =   5   1   1   )   {   m   o   d   e   &   =   5   1   1   |   5   1   2   ;   m   o   d   e   |   =   1   6   3   8   4   ;   r   e   t   u   r   n       F   S   .   m   k   n   o   d   (   p   a   t   h   ,   m   o   d   e   ,   0   )   }   ,   m   k   d   i   r   T   r   e   e   (   p   a   t   h   ,   m   o   d   e   )   {   v   a   r       d   i   r   s   =   p   a   t   h   .   s   p   l   i   t   (   "   /   "   )   ;   v   a   r       d   =   "   "   ;   f   o   r   (   v   a   r       d   i   r       o   f       d   i   r   s   )   {   i   f   (   !   d   i   r   )   c   o   n   t   i   n   u   e   ;   i   f   (   d   |   |   P   A   T   H   .   i   s   A   b   s   (   p   a   t   h   )   )   d   +   =   "   /   "   ;   d   +   =   d   i   r   ;   t   r   y   {   F   S   .   m   k   d   i   r   (   d   ,   m   o   d   e   )   }   c   a   t   c   h   (   e   )   {   i   f   (   e   .   e   r   r   n   o   !   =   2   0   )   t   h   r   o   w       e   }   }   }   ,   m   k   d   e   v   (   p   a   t   h   ,   m   o   d   e   ,   d   e   v   )   {   i   f   (   t   y   p   e   o   f       d   e   v   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   d   e   v   =   m   o   d   e   ;   m   o   d   e   =   4   3   8   }   m   o   d   e   |   =   8   1   9   2   ;   r   e   t   u   r   n       F   S   .   m   k   n   o   d   (   p   a   t   h   ,   m   o   d   e   ,   d   e   v   )   }   ,   s   y   m   l   i   n   k   (   o   l   d   p   a   t   h   ,   n   e   w   p   a   t   h   )   {   i   f   (   !   P   A   T   H   _   F   S   .   r   e   s   o   l   v   e   (   o   l   d   p   a   t   h   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   }   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   n   e   w   p   a   t   h   ,   {   p   a   r   e   n   t   :   t   r   u   e   }   )   ;   v   a   r       p   a   r   e   n   t   =   l   o   o   k   u   p   .   n   o   d   e   ;   i   f   (   !   p   a   r   e   n   t   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   }   v   a   r       n   e   w   n   a   m   e   =   P   A   T   H   .   b   a   s   e   n   a   m   e   (   n   e   w   p   a   t   h   )   ;   v   a   r       e   r   r   C   o   d   e   =   F   S   .   m   a   y   C   r   e   a   t   e   (   p   a   r   e   n   t   ,   n   e   w   n   a   m   e   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   i   f   (   !   p   a   r   e   n   t   .   n   o   d   e   _   o   p   s   .   s   y   m   l   i   n   k   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   6   3   )   }   r   e   t   u   r   n       p   a   r   e   n   t   .   n   o   d   e   _   o   p   s   .   s   y   m   l   i   n   k   (   p   a   r   e   n   t   ,   n   e   w   n   a   m   e   ,   o   l   d   p   a   t   h   )   }   ,   r   e   n   a   m   e   (   o   l   d   _   p   a   t   h   ,   n   e   w   _   p   a   t   h   )   {   v   a   r       o   l   d   _   d   i   r   n   a   m   e   =   P   A   T   H   .   d   i   r   n   a   m   e   (   o   l   d   _   p   a   t   h   )   ;   v   a   r       n   e   w   _   d   i   r   n   a   m   e   =   P   A   T   H   .   d   i   r   n   a   m   e   (   n   e   w   _   p   a   t   h   )   ;   v   a   r       o   l   d   _   n   a   m   e   =   P   A   T   H   .   b   a   s   e   n   a   m   e   (   o   l   d   _   p   a   t   h   )   ;   v   a   r       n   e   w   _   n   a   m   e   =   P   A   T   H   .   b   a   s   e   n   a   m   e   (   n   e   w   _   p   a   t   h   )   ;   v   a   r       l   o   o   k   u   p   ,   o   l   d   _   d   i   r   ,   n   e   w   _   d   i   r   ;   l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   o   l   d   _   p   a   t   h   ,   {   p   a   r   e   n   t   :   t   r   u   e   }   )   ;   o   l   d   _   d   i   r   =   l   o   o   k   u   p   .   n   o   d   e   ;   l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   n   e   w   _   p   a   t   h   ,   {   p   a   r   e   n   t   :   t   r   u   e   }   )   ;   n   e   w   _   d   i   r   =   l   o   o   k   u   p   .   n   o   d   e   ;   i   f   (   !   o   l   d   _   d   i   r   |   |   !   n   e   w   _   d   i   r   )   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   ;   i   f   (   o   l   d   _   d   i   r   .   m   o   u   n   t   !   =   =   n   e   w   _   d   i   r   .   m   o   u   n   t   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   7   5   )   }   v   a   r       o   l   d   _   n   o   d   e   =   F   S   .   l   o   o   k   u   p   N   o   d   e   (   o   l   d   _   d   i   r   ,   o   l   d   _   n   a   m   e   )   ;   v   a   r       r   e   l   a   t   i   v   e   =   P   A   T   H   _   F   S   .   r   e   l   a   t   i   v   e   (   o   l   d   _   p   a   t   h   ,   n   e   w   _   d   i   r   n   a   m   e   )   ;   i   f   (   r   e   l   a   t   i   v   e   .   c   h   a   r   A   t   (   0   )   !   =   =   "   .   "   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   r   e   l   a   t   i   v   e   =   P   A   T   H   _   F   S   .   r   e   l   a   t   i   v   e   (   n   e   w   _   p   a   t   h   ,   o   l   d   _   d   i   r   n   a   m   e   )   ;   i   f   (   r   e   l   a   t   i   v   e   .   c   h   a   r   A   t   (   0   )   !   =   =   "   .   "   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   5   5   )   }   v   a   r       n   e   w   _   n   o   d   e   ;   t   r   y   {   n   e   w   _   n   o   d   e   =   F   S   .   l   o   o   k   u   p   N   o   d   e   (   n   e   w   _   d   i   r   ,   n   e   w   _   n   a   m   e   )   }   c   a   t   c   h   (   e   )   {   }   i   f   (   o   l   d   _   n   o   d   e   =   =   =   n   e   w   _   n   o   d   e   )   {   r   e   t   u   r   n   }   v   a   r       i   s   d   i   r   =   F   S   .   i   s   D   i   r   (   o   l   d   _   n   o   d   e   .   m   o   d   e   )   ;   v   a   r       e   r   r   C   o   d   e   =   F   S   .   m   a   y   D   e   l   e   t   e   (   o   l   d   _   d   i   r   ,   o   l   d   _   n   a   m   e   ,   i   s   d   i   r   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   e   r   r   C   o   d   e   =   n   e   w   _   n   o   d   e   ?   F   S   .   m   a   y   D   e   l   e   t   e   (   n   e   w   _   d   i   r   ,   n   e   w   _   n   a   m   e   ,   i   s   d   i   r   )   :   F   S   .   m   a   y   C   r   e   a   t   e   (   n   e   w   _   d   i   r   ,   n   e   w   _   n   a   m   e   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   i   f   (   !   o   l   d   _   d   i   r   .   n   o   d   e   _   o   p   s   .   r   e   n   a   m   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   6   3   )   }   i   f   (   F   S   .   i   s   M   o   u   n   t   p   o   i   n   t   (   o   l   d   _   n   o   d   e   )   |   |   n   e   w   _   n   o   d   e   &   &   F   S   .   i   s   M   o   u   n   t   p   o   i   n   t   (   n   e   w   _   n   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   1   0   )   }   i   f   (   n   e   w   _   d   i   r   !   =   =   o   l   d   _   d   i   r   )   {   e   r   r   C   o   d   e   =   F   S   .   n   o   d   e   P   e   r   m   i   s   s   i   o   n   s   (   o   l   d   _   d   i   r   ,   "   w   "   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   }   F   S   .   h   a   s   h   R   e   m   o   v   e   N   o   d   e   (   o   l   d   _   n   o   d   e   )   ;   t   r   y   {   o   l   d   _   d   i   r   .   n   o   d   e   _   o   p   s   .   r   e   n   a   m   e   (   o   l   d   _   n   o   d   e   ,   n   e   w   _   d   i   r   ,   n   e   w   _   n   a   m   e   )   ;   o   l   d   _   n   o   d   e   .   p   a   r   e   n   t   =   n   e   w   _   d   i   r   }   c   a   t   c   h   (   e   )   {   t   h   r   o   w       e   }   f   i   n   a   l   l   y   {   F   S   .   h   a   s   h   A   d   d   N   o   d   e   (   o   l   d   _   n   o   d   e   )   }   }   ,   r   m   d   i   r   (   p   a   t   h   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   p   a   r   e   n   t   :   t   r   u   e   }   )   ;   v   a   r       p   a   r   e   n   t   =   l   o   o   k   u   p   .   n   o   d   e   ;   v   a   r       n   a   m   e   =   P   A   T   H   .   b   a   s   e   n   a   m   e   (   p   a   t   h   )   ;   v   a   r       n   o   d   e   =   F   S   .   l   o   o   k   u   p   N   o   d   e   (   p   a   r   e   n   t   ,   n   a   m   e   )   ;   v   a   r       e   r   r   C   o   d   e   =   F   S   .   m   a   y   D   e   l   e   t   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   t   r   u   e   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   i   f   (   !   p   a   r   e   n   t   .   n   o   d   e   _   o   p   s   .   r   m   d   i   r   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   6   3   )   }   i   f   (   F   S   .   i   s   M   o   u   n   t   p   o   i   n   t   (   n   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   1   0   )   }   p   a   r   e   n   t   .   n   o   d   e   _   o   p   s   .   r   m   d   i   r   (   p   a   r   e   n   t   ,   n   a   m   e   )   ;   F   S   .   d   e   s   t   r   o   y   N   o   d   e   (   n   o   d   e   )   }   ,   r   e   a   d   d   i   r   (   p   a   t   h   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   t   r   u   e   }   )   ;   v   a   r       n   o   d   e   =   l   o   o   k   u   p   .   n   o   d   e   ;   v   a   r       r   e   a   d   d   i   r   =   F   S   .   c   h   e   c   k   O   p   E   x   i   s   t   s   (   n   o   d   e   .   n   o   d   e   _   o   p   s   .   r   e   a   d   d   i   r   ,   5   4   )   ;   r   e   t   u   r   n       r   e   a   d   d   i   r   (   n   o   d   e   )   }   ,   u   n   l   i   n   k   (   p   a   t   h   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   p   a   r   e   n   t   :   t   r   u   e   }   )   ;   v   a   r       p   a   r   e   n   t   =   l   o   o   k   u   p   .   n   o   d   e   ;   i   f   (   !   p   a   r   e   n   t   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   }   v   a   r       n   a   m   e   =   P   A   T   H   .   b   a   s   e   n   a   m   e   (   p   a   t   h   )   ;   v   a   r       n   o   d   e   =   F   S   .   l   o   o   k   u   p   N   o   d   e   (   p   a   r   e   n   t   ,   n   a   m   e   )   ;   v   a   r       e   r   r   C   o   d   e   =   F   S   .   m   a   y   D   e   l   e   t   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   f   a   l   s   e   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   i   f   (   !   p   a   r   e   n   t   .   n   o   d   e   _   o   p   s   .   u   n   l   i   n   k   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   6   3   )   }   i   f   (   F   S   .   i   s   M   o   u   n   t   p   o   i   n   t   (   n   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   1   0   )   }   p   a   r   e   n   t   .   n   o   d   e   _   o   p   s   .   u   n   l   i   n   k   (   p   a   r   e   n   t   ,   n   a   m   e   )   ;   F   S   .   d   e   s   t   r   o   y   N   o   d   e   (   n   o   d   e   )   }   ,   r   e   a   d   l   i   n   k   (   p   a   t   h   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   )   ;   v   a   r       l   i   n   k   =   l   o   o   k   u   p   .   n   o   d   e   ;   i   f   (   !   l   i   n   k   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   }   i   f   (   !   l   i   n   k   .   n   o   d   e   _   o   p   s   .   r   e   a   d   l   i   n   k   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   r   e   t   u   r   n       l   i   n   k   .   n   o   d   e   _   o   p   s   .   r   e   a   d   l   i   n   k   (   l   i   n   k   )   }   ,   s   t   a   t   (   p   a   t   h   ,   d   o   n   t   F   o   l   l   o   w   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   !   d   o   n   t   F   o   l   l   o   w   }   )   ;   v   a   r       n   o   d   e   =   l   o   o   k   u   p   .   n   o   d   e   ;   v   a   r       g   e   t   a   t   t   r   =   F   S   .   c   h   e   c   k   O   p   E   x   i   s   t   s   (   n   o   d   e   .   n   o   d   e   _   o   p   s   .   g   e   t   a   t   t   r   ,   6   3   )   ;   r   e   t   u   r   n       g   e   t   a   t   t   r   (   n   o   d   e   )   }   ,   f   s   t   a   t   (   f   d   )   {   v   a   r       s   t   r   e   a   m   =   F   S   .   g   e   t   S   t   r   e   a   m   C   h   e   c   k   e   d   (   f   d   )   ;   v   a   r       n   o   d   e   =   s   t   r   e   a   m   .   n   o   d   e   ;   v   a   r       g   e   t   a   t   t   r   =   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   g   e   t   a   t   t   r   ;   v   a   r       a   r   g   =   g   e   t   a   t   t   r   ?   s   t   r   e   a   m   :   n   o   d   e   ;   g   e   t   a   t   t   r   ?   ?   =   n   o   d   e   .   n   o   d   e   _   o   p   s   .   g   e   t   a   t   t   r   ;   F   S   .   c   h   e   c   k   O   p   E   x   i   s   t   s   (   g   e   t   a   t   t   r   ,   6   3   )   ;   r   e   t   u   r   n       g   e   t   a   t   t   r   (   a   r   g   )   }   ,   l   s   t   a   t   (   p   a   t   h   )   {   r   e   t   u   r   n       F   S   .   s   t   a   t   (   p   a   t   h   ,   t   r   u   e   )   }   ,   d   o   C   h   m   o   d   (   s   t   r   e   a   m   ,   n   o   d   e   ,   m   o   d   e   ,   d   o   n   t   F   o   l   l   o   w   )   {   F   S   .   d   o   S   e   t   A   t   t   r   (   s   t   r   e   a   m   ,   n   o   d   e   ,   {   m   o   d   e   :   m   o   d   e   &   4   0   9   5   |   n   o   d   e   .   m   o   d   e   &   ~   4   0   9   5   ,   c   t   i   m   e   :   D   a   t   e   .   n   o   w   (   )   ,   d   o   n   t   F   o   l   l   o   w   }   )   }   ,   c   h   m   o   d   (   p   a   t   h   ,   m   o   d   e   ,   d   o   n   t   F   o   l   l   o   w   )   {   v   a   r       n   o   d   e   ;   i   f   (   t   y   p   e   o   f       p   a   t   h   =   =   "   s   t   r   i   n   g   "   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   !   d   o   n   t   F   o   l   l   o   w   }   )   ;   n   o   d   e   =   l   o   o   k   u   p   .   n   o   d   e   }   e   l   s   e   {   n   o   d   e   =   p   a   t   h   }   F   S   .   d   o   C   h   m   o   d   (   n   u   l   l   ,   n   o   d   e   ,   m   o   d   e   ,   d   o   n   t   F   o   l   l   o   w   )   }   ,   l   c   h   m   o   d   (   p   a   t   h   ,   m   o   d   e   )   {   F   S   .   c   h   m   o   d   (   p   a   t   h   ,   m   o   d   e   ,   t   r   u   e   )   }   ,   f   c   h   m   o   d   (   f   d   ,   m   o   d   e   )   {   v   a   r       s   t   r   e   a   m   =   F   S   .   g   e   t   S   t   r   e   a   m   C   h   e   c   k   e   d   (   f   d   )   ;   F   S   .   d   o   C   h   m   o   d   (   s   t   r   e   a   m   ,   s   t   r   e   a   m   .   n   o   d   e   ,   m   o   d   e   ,   f   a   l   s   e   )   }   ,   d   o   C   h   o   w   n   (   s   t   r   e   a   m   ,   n   o   d   e   ,   d   o   n   t   F   o   l   l   o   w   )   {   F   S   .   d   o   S   e   t   A   t   t   r   (   s   t   r   e   a   m   ,   n   o   d   e   ,   {   t   i   m   e   s   t   a   m   p   :   D   a   t   e   .   n   o   w   (   )   ,   d   o   n   t   F   o   l   l   o   w   }   )   }   ,   c   h   o   w   n   (   p   a   t   h   ,   u   i   d   ,   g   i   d   ,   d   o   n   t   F   o   l   l   o   w   )   {   v   a   r       n   o   d   e   ;   i   f   (   t   y   p   e   o   f       p   a   t   h   =   =   "   s   t   r   i   n   g   "   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   !   d   o   n   t   F   o   l   l   o   w   }   )   ;   n   o   d   e   =   l   o   o   k   u   p   .   n   o   d   e   }   e   l   s   e   {   n   o   d   e   =   p   a   t   h   }   F   S   .   d   o   C   h   o   w   n   (   n   u   l   l   ,   n   o   d   e   ,   d   o   n   t   F   o   l   l   o   w   )   }   ,   l   c   h   o   w   n   (   p   a   t   h   ,   u   i   d   ,   g   i   d   )   {   F   S   .   c   h   o   w   n   (   p   a   t   h   ,   u   i   d   ,   g   i   d   ,   t   r   u   e   )   }   ,   f   c   h   o   w   n   (   f   d   ,   u   i   d   ,   g   i   d   )   {   v   a   r       s   t   r   e   a   m   =   F   S   .   g   e   t   S   t   r   e   a   m   C   h   e   c   k   e   d   (   f   d   )   ;   F   S   .   d   o   C   h   o   w   n   (   s   t   r   e   a   m   ,   s   t   r   e   a   m   .   n   o   d   e   ,   f   a   l   s   e   )   }   ,   d   o   T   r   u   n   c   a   t   e   (   s   t   r   e   a   m   ,   n   o   d   e   ,   l   e   n   )   {   i   f   (   F   S   .   i   s   D   i   r   (   n   o   d   e   .   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   3   1   )   }   i   f   (   !   F   S   .   i   s   F   i   l   e   (   n   o   d   e   .   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   v   a   r       e   r   r   C   o   d   e   =   F   S   .   n   o   d   e   P   e   r   m   i   s   s   i   o   n   s   (   n   o   d   e   ,   "   w   "   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   F   S   .   d   o   S   e   t   A   t   t   r   (   s   t   r   e   a   m   ,   n   o   d   e   ,   {   s   i   z   e   :   l   e   n   ,   t   i   m   e   s   t   a   m   p   :   D   a   t   e   .   n   o   w   (   )   }   )   }   ,   t   r   u   n   c   a   t   e   (   p   a   t   h   ,   l   e   n   )   {   i   f   (   l   e   n   <   0   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   v   a   r       n   o   d   e   ;   i   f   (   t   y   p   e   o   f       p   a   t   h   =   =   "   s   t   r   i   n   g   "   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   t   r   u   e   }   )   ;   n   o   d   e   =   l   o   o   k   u   p   .   n   o   d   e   }   e   l   s   e   {   n   o   d   e   =   p   a   t   h   }   F   S   .   d   o   T   r   u   n   c   a   t   e   (   n   u   l   l   ,   n   o   d   e   ,   l   e   n   )   }   ,   f   t   r   u   n   c   a   t   e   (   f   d   ,   l   e   n   )   {   v   a   r       s   t   r   e   a   m   =   F   S   .   g   e   t   S   t   r   e   a   m   C   h   e   c   k   e   d   (   f   d   )   ;   i   f   (   l   e   n   <   0   |   |   (   s   t   r   e   a   m   .   f   l   a   g   s   &   2   0   9   7   1   5   5   )   =   =   =   0   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   F   S   .   d   o   T   r   u   n   c   a   t   e   (   s   t   r   e   a   m   ,   s   t   r   e   a   m   .   n   o   d   e   ,   l   e   n   )   }   ,   u   t   i   m   e   (   p   a   t   h   ,   a   t   i   m   e   ,   m   t   i   m   e   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   t   r   u   e   }   )   ;   v   a   r       n   o   d   e   =   l   o   o   k   u   p   .   n   o   d   e   ;   v   a   r       s   e   t   a   t   t   r   =   F   S   .   c   h   e   c   k   O   p   E   x   i   s   t   s   (   n   o   d   e   .   n   o   d   e   _   o   p   s   .   s   e   t   a   t   t   r   ,   6   3   )   ;   s   e   t   a   t   t   r   (   n   o   d   e   ,   {   a   t   i   m   e   ,   m   t   i   m   e   }   )   }   ,   o   p   e   n   (   p   a   t   h   ,   f   l   a   g   s   ,   m   o   d   e   =   4   3   8   )   {   i   f   (   p   a   t   h   =   =   =   "   "   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   }   f   l   a   g   s   =   t   y   p   e   o   f       f   l   a   g   s   =   =   "   s   t   r   i   n   g   "   ?   F   S   _   m   o   d   e   S   t   r   i   n   g   T   o   F   l   a   g   s   (   f   l   a   g   s   )   :   f   l   a   g   s   ;   i   f   (   f   l   a   g   s   &   6   4   )   {   m   o   d   e   =   m   o   d   e   &   4   0   9   5   |   3   2   7   6   8   }   e   l   s   e   {   m   o   d   e   =   0   }   v   a   r       n   o   d   e   ;   v   a   r       i   s   D   i   r   P   a   t   h   ;   i   f   (   t   y   p   e   o   f       p   a   t   h   =   =   "   o   b   j   e   c   t   "   )   {   n   o   d   e   =   p   a   t   h   }   e   l   s   e   {   i   s   D   i   r   P   a   t   h   =   p   a   t   h   .   e   n   d   s   W   i   t   h   (   "   /   "   )   ;   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   !   (   f   l   a   g   s   &   1   3   1   0   7   2   )   ,   n   o   e   n   t   _   o   k   a   y   :   t   r   u   e   }   )   ;   n   o   d   e   =   l   o   o   k   u   p   .   n   o   d   e   ;   p   a   t   h   =   l   o   o   k   u   p   .   p   a   t   h   }   v   a   r       c   r   e   a   t   e   d   =   f   a   l   s   e   ;   i   f   (   f   l   a   g   s   &   6   4   )   {   i   f   (   n   o   d   e   )   {   i   f   (   f   l   a   g   s   &   1   2   8   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   0   )   }   }   e   l   s   e       i   f   (   i   s   D   i   r   P   a   t   h   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   3   1   )   }   e   l   s   e   {   n   o   d   e   =   F   S   .   m   k   n   o   d   (   p   a   t   h   ,   m   o   d   e   |   5   1   1   ,   0   )   ;   c   r   e   a   t   e   d   =   t   r   u   e   }   }   i   f   (   !   n   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   }   i   f   (   F   S   .   i   s   C   h   r   d   e   v   (   n   o   d   e   .   m   o   d   e   )   )   {   f   l   a   g   s   &   =   ~   5   1   2   }   i   f   (   f   l   a   g   s   &   6   5   5   3   6   &   &   !   F   S   .   i   s   D   i   r   (   n   o   d   e   .   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   5   4   )   }   i   f   (   !   c   r   e   a   t   e   d   )   {   v   a   r       e   r   r   C   o   d   e   =   F   S   .   m   a   y   O   p   e   n   (   n   o   d   e   ,   f   l   a   g   s   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   }   i   f   (   f   l   a   g   s   &   5   1   2   &   &   !   c   r   e   a   t   e   d   )   {   F   S   .   t   r   u   n   c   a   t   e   (   n   o   d   e   ,   0   )   }   f   l   a   g   s   &   =   ~   (   1   2   8   |   5   1   2   |   1   3   1   0   7   2   )   ;   v   a   r       s   t   r   e   a   m   =   F   S   .   c   r   e   a   t   e   S   t   r   e   a   m   (   {   n   o   d   e   ,   p   a   t   h   :   F   S   .   g   e   t   P   a   t   h   (   n   o   d   e   )   ,   f   l   a   g   s   ,   s   e   e   k   a   b   l   e   :   t   r   u   e   ,   p   o   s   i   t   i   o   n   :   0   ,   s   t   r   e   a   m   _   o   p   s   :   n   o   d   e   .   s   t   r   e   a   m   _   o   p   s   ,   u   n   g   o   t   t   e   n   :   [   ]   ,   e   r   r   o   r   :   f   a   l   s   e   }   )   ;   i   f   (   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   o   p   e   n   )   {   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   o   p   e   n   (   s   t   r   e   a   m   )   }   i   f   (   c   r   e   a   t   e   d   )   {   F   S   .   c   h   m   o   d   (   n   o   d   e   ,   m   o   d   e   &   5   1   1   )   }   i   f   (   M   o   d   u   l   e   [   "   l   o   g   R   e   a   d   F   i   l   e   s   "   ]   &   &   !   (   f   l   a   g   s   &   1   )   )   {   i   f   (   !   (   p   a   t   h       i   n       F   S   .   r   e   a   d   F   i   l   e   s   )   )   {   F   S   .   r   e   a   d   F   i   l   e   s   [   p   a   t   h   ]   =   1   }   }   r   e   t   u   r   n       s   t   r   e   a   m   }   ,   c   l   o   s   e   (   s   t   r   e   a   m   )   {   i   f   (   F   S   .   i   s   C   l   o   s   e   d   (   s   t   r   e   a   m   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   8   )   }   i   f   (   s   t   r   e   a   m   .   g   e   t   d   e   n   t   s   )   s   t   r   e   a   m   .   g   e   t   d   e   n   t   s   =   n   u   l   l   ;   t   r   y   {   i   f   (   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   c   l   o   s   e   )   {   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   c   l   o   s   e   (   s   t   r   e   a   m   )   }   }   c   a   t   c   h   (   e   )   {   t   h   r   o   w       e   }   f   i   n   a   l   l   y   {   F   S   .   c   l   o   s   e   S   t   r   e   a   m   (   s   t   r   e   a   m   .   f   d   )   }   s   t   r   e   a   m   .   f   d   =   n   u   l   l   }   ,   i   s   C   l   o   s   e   d   (   s   t   r   e   a   m   )   {   r   e   t   u   r   n       s   t   r   e   a   m   .   f   d   =   =   =   n   u   l   l   }   ,   l   l   s   e   e   k   (   s   t   r   e   a   m   ,   o   f   f   s   e   t   ,   w   h   e   n   c   e   )   {   i   f   (   F   S   .   i   s   C   l   o   s   e   d   (   s   t   r   e   a   m   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   8   )   }   i   f   (   !   s   t   r   e   a   m   .   s   e   e   k   a   b   l   e   |   |   !   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   l   l   s   e   e   k   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   7   0   )   }   i   f   (   w   h   e   n   c   e   !   =   0   &   &   w   h   e   n   c   e   !   =   1   &   &   w   h   e   n   c   e   !   =   2   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   s   t   r   e   a   m   .   p   o   s   i   t   i   o   n   =   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   l   l   s   e   e   k   (   s   t   r   e   a   m   ,   o   f   f   s   e   t   ,   w   h   e   n   c   e   )   ;   s   t   r   e   a   m   .   u   n   g   o   t   t   e   n   =   [   ]   ;   r   e   t   u   r   n       s   t   r   e   a   m   .   p   o   s   i   t   i   o   n   }   ,   r   e   a   d   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   )   {   i   f   (   l   e   n   g   t   h   <   0   |   |   p   o   s   i   t   i   o   n   <   0   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   i   f   (   F   S   .   i   s   C   l   o   s   e   d   (   s   t   r   e   a   m   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   8   )   }   i   f   (   (   s   t   r   e   a   m   .   f   l   a   g   s   &   2   0   9   7   1   5   5   )   =   =   =   1   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   8   )   }   i   f   (   F   S   .   i   s   D   i   r   (   s   t   r   e   a   m   .   n   o   d   e   .   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   3   1   )   }   i   f   (   !   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   r   e   a   d   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   v   a   r       s   e   e   k   i   n   g   =   t   y   p   e   o   f       p   o   s   i   t   i   o   n   !   =   "   u   n   d   e   f   i   n   e   d   "   ;   i   f   (   !   s   e   e   k   i   n   g   )   {   p   o   s   i   t   i   o   n   =   s   t   r   e   a   m   .   p   o   s   i   t   i   o   n   }   e   l   s   e       i   f   (   !   s   t   r   e   a   m   .   s   e   e   k   a   b   l   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   7   0   )   }   v   a   r       b   y   t   e   s   R   e   a   d   =   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   r   e   a   d   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   )   ;   i   f   (   !   s   e   e   k   i   n   g   )   s   t   r   e   a   m   .   p   o   s   i   t   i   o   n   +   =   b   y   t   e   s   R   e   a   d   ;   r   e   t   u   r   n       b   y   t   e   s   R   e   a   d   }   ,   w   r   i   t   e   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   ,   c   a   n   O   w   n   )   {   i   f   (   l   e   n   g   t   h   <   0   |   |   p   o   s   i   t   i   o   n   <   0   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   i   f   (   F   S   .   i   s   C   l   o   s   e   d   (   s   t   r   e   a   m   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   8   )   }   i   f   (   (   s   t   r   e   a   m   .   f   l   a   g   s   &   2   0   9   7   1   5   5   )   =   =   =   0   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   8   )   }   i   f   (   F   S   .   i   s   D   i   r   (   s   t   r   e   a   m   .   n   o   d   e   .   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   3   1   )   }   i   f   (   !   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   w   r   i   t   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   i   f   (   s   t   r   e   a   m   .   s   e   e   k   a   b   l   e   &   &   s   t   r   e   a   m   .   f   l   a   g   s   &   1   0   2   4   )   {   F   S   .   l   l   s   e   e   k   (   s   t   r   e   a   m   ,   0   ,   2   )   }   v   a   r       s   e   e   k   i   n   g   =   t   y   p   e   o   f       p   o   s   i   t   i   o   n   !   =   "   u   n   d   e   f   i   n   e   d   "   ;   i   f   (   !   s   e   e   k   i   n   g   )   {   p   o   s   i   t   i   o   n   =   s   t   r   e   a   m   .   p   o   s   i   t   i   o   n   }   e   l   s   e       i   f   (   !   s   t   r   e   a   m   .   s   e   e   k   a   b   l   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   7   0   )   }   v   a   r       b   y   t   e   s   W   r   i   t   t   e   n   =   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   w   r   i   t   e   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   ,   c   a   n   O   w   n   )   ;   i   f   (   !   s   e   e   k   i   n   g   )   s   t   r   e   a   m   .   p   o   s   i   t   i   o   n   +   =   b   y   t   e   s   W   r   i   t   t   e   n   ;   r   e   t   u   r   n       b   y   t   e   s   W   r   i   t   t   e   n   }   ,   m   m   a   p   (   s   t   r   e   a   m   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   ,   p   r   o   t   ,   f   l   a   g   s   )   {   i   f   (   (   p   r   o   t   &   2   )   !   =   =   0   &   &   (   f   l   a   g   s   &   2   )   =   =   =   0   &   &   (   s   t   r   e   a   m   .   f   l   a   g   s   &   2   0   9   7   1   5   5   )   !   =   =   2   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   )   }   i   f   (   (   s   t   r   e   a   m   .   f   l   a   g   s   &   2   0   9   7   1   5   5   )   =   =   =   1   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   )   }   i   f   (   !   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   m   m   a   p   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   3   )   }   i   f   (   !   l   e   n   g   t   h   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   8   )   }   r   e   t   u   r   n       s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   m   m   a   p   (   s   t   r   e   a   m   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   ,   p   r   o   t   ,   f   l   a   g   s   )   }   ,   m   s   y   n   c   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   m   m   a   p   F   l   a   g   s   )   {   i   f   (   !   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   m   s   y   n   c   )   {   r   e   t   u   r   n       0   }   r   e   t   u   r   n       s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   m   s   y   n   c   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   m   m   a   p   F   l   a   g   s   )   }   ,   i   o   c   t   l   (   s   t   r   e   a   m   ,   c   m   d   ,   a   r   g   )   {   i   f   (   !   s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   i   o   c   t   l   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   5   9   )   }   r   e   t   u   r   n       s   t   r   e   a   m   .   s   t   r   e   a   m   _   o   p   s   .   i   o   c   t   l   (   s   t   r   e   a   m   ,   c   m   d   ,   a   r   g   )   }   ,   r   e   a   d   F   i   l   e   (   p   a   t   h   ,   o   p   t   s   =   {   }   )   {   o   p   t   s   .   f   l   a   g   s   =   o   p   t   s   .   f   l   a   g   s   |   |   0   ;   o   p   t   s   .   e   n   c   o   d   i   n   g   =   o   p   t   s   .   e   n   c   o   d   i   n   g   |   |   "   b   i   n   a   r   y   "   ;   i   f   (   o   p   t   s   .   e   n   c   o   d   i   n   g   !   =   =   "   u   t   f   8   "   &   &   o   p   t   s   .   e   n   c   o   d   i   n   g   !   =   =   "   b   i   n   a   r   y   "   )   {   t   h   r   o   w       n   e   w       E   r   r   o   r   (   `   I   n   v   a   l   i   d       e   n   c   o   d   i   n   g       t   y   p   e       "   $   {   o   p   t   s   .   e   n   c   o   d   i   n   g   }   "   `   )   }   v   a   r       r   e   t   ;   v   a   r       s   t   r   e   a   m   =   F   S   .   o   p   e   n   (   p   a   t   h   ,   o   p   t   s   .   f   l   a   g   s   )   ;   v   a   r       s   t   a   t   =   F   S   .   s   t   a   t   (   p   a   t   h   )   ;   v   a   r       l   e   n   g   t   h   =   s   t   a   t   .   s   i   z   e   ;   v   a   r       b   u   f   =   n   e   w       U   i   n   t   8   A   r   r   a   y   (   l   e   n   g   t   h   )   ;   F   S   .   r   e   a   d   (   s   t   r   e   a   m   ,   b   u   f   ,   0   ,   l   e   n   g   t   h   ,   0   )   ;   i   f   (   o   p   t   s   .   e   n   c   o   d   i   n   g   =   =   =   "   u   t   f   8   "   )   {   r   e   t   =   U   T   F   8   A   r   r   a   y   T   o   S   t   r   i   n   g   (   b   u   f   )   }   e   l   s   e       i   f   (   o   p   t   s   .   e   n   c   o   d   i   n   g   =   =   =   "   b   i   n   a   r   y   "   )   {   r   e   t   =   b   u   f   }   F   S   .   c   l   o   s   e   (   s   t   r   e   a   m   )   ;   r   e   t   u   r   n       r   e   t   }   ,   w   r   i   t   e   F   i   l   e   (   p   a   t   h   ,   d   a   t   a   ,   o   p   t   s   =   {   }   )   {   o   p   t   s   .   f   l   a   g   s   =   o   p   t   s   .   f   l   a   g   s   |   |   5   7   7   ;   v   a   r       s   t   r   e   a   m   =   F   S   .   o   p   e   n   (   p   a   t   h   ,   o   p   t   s   .   f   l   a   g   s   ,   o   p   t   s   .   m   o   d   e   )   ;   i   f   (   t   y   p   e   o   f       d   a   t   a   =   =   "   s   t   r   i   n   g   "   )   {   v   a   r       b   u   f   =   n   e   w       U   i   n   t   8   A   r   r   a   y   (   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   d   a   t   a   )   +   1   )   ;   v   a   r       a   c   t   u   a   l   N   u   m   B   y   t   e   s   =   s   t   r   i   n   g   T   o   U   T   F   8   A   r   r   a   y   (   d   a   t   a   ,   b   u   f   ,   0   ,   b   u   f   .   l   e   n   g   t   h   )   ;   F   S   .   w   r   i   t   e   (   s   t   r   e   a   m   ,   b   u   f   ,   0   ,   a   c   t   u   a   l   N   u   m   B   y   t   e   s   ,   u   n   d   e   f   i   n   e   d   ,   o   p   t   s   .   c   a   n   O   w   n   )   }   e   l   s   e       i   f   (   A   r   r   a   y   B   u   f   f   e   r   .   i   s   V   i   e   w   (   d   a   t   a   )   )   {   F   S   .   w   r   i   t   e   (   s   t   r   e   a   m   ,   d   a   t   a   ,   0   ,   d   a   t   a   .   b   y   t   e   L   e   n   g   t   h   ,   u   n   d   e   f   i   n   e   d   ,   o   p   t   s   .   c   a   n   O   w   n   )   }   e   l   s   e   {   t   h   r   o   w       n   e   w       E   r   r   o   r   (   "   U   n   s   u   p   p   o   r   t   e   d       d   a   t   a       t   y   p   e   "   )   }   F   S   .   c   l   o   s   e   (   s   t   r   e   a   m   )   }   ,   c   w   d   :   (   )   =   >   F   S   .   c   u   r   r   e   n   t   P   a   t   h   ,   c   h   d   i   r   (   p   a   t   h   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   t   r   u   e   }   )   ;   i   f   (   l   o   o   k   u   p   .   n   o   d   e   =   =   =   n   u   l   l   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   }   i   f   (   !   F   S   .   i   s   D   i   r   (   l   o   o   k   u   p   .   n   o   d   e   .   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   5   4   )   }   v   a   r       e   r   r   C   o   d   e   =   F   S   .   n   o   d   e   P   e   r   m   i   s   s   i   o   n   s   (   l   o   o   k   u   p   .   n   o   d   e   ,   "   x   "   )   ;   i   f   (   e   r   r   C   o   d   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   e   r   r   C   o   d   e   )   }   F   S   .   c   u   r   r   e   n   t   P   a   t   h   =   l   o   o   k   u   p   .   p   a   t   h   }   ,   c   r   e   a   t   e   D   e   f   a   u   l   t   D   i   r   e   c   t   o   r   i   e   s   (   )   {   F   S   .   m   k   d   i   r   (   "   /   t   m   p   "   )   ;   F   S   .   m   k   d   i   r   (   "   /   h   o   m   e   "   )   ;   F   S   .   m   k   d   i   r   (   "   /   h   o   m   e   /   w   e   b   _   u   s   e   r   "   )   }   ,   c   r   e   a   t   e   D   e   f   a   u   l   t   D   e   v   i   c   e   s   (   )   {   F   S   .   m   k   d   i   r   (   "   /   d   e   v   "   )   ;   F   S   .   r   e   g   i   s   t   e   r   D   e   v   i   c   e   (   F   S   .   m   a   k   e   d   e   v   (   1   ,   3   )   ,   {   r   e   a   d   :   (   )   =   >   0   ,   w   r   i   t   e   :   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   )   =   >   l   e   n   g   t   h   ,   l   l   s   e   e   k   :   (   )   =   >   0   }   )   ;   F   S   .   m   k   d   e   v   (   "   /   d   e   v   /   n   u   l   l   "   ,   F   S   .   m   a   k   e   d   e   v   (   1   ,   3   )   )   ;   T   T   Y   .   r   e   g   i   s   t   e   r   (   F   S   .   m   a   k   e   d   e   v   (   5   ,   0   )   ,   T   T   Y   .   d   e   f   a   u   l   t   _   t   t   y   _   o   p   s   )   ;   T   T   Y   .   r   e   g   i   s   t   e   r   (   F   S   .   m   a   k   e   d   e   v   (   6   ,   0   )   ,   T   T   Y   .   d   e   f   a   u   l   t   _   t   t   y   1   _   o   p   s   )   ;   F   S   .   m   k   d   e   v   (   "   /   d   e   v   /   t   t   y   "   ,   F   S   .   m   a   k   e   d   e   v   (   5   ,   0   )   )   ;   F   S   .   m   k   d   e   v   (   "   /   d   e   v   /   t   t   y   1   "   ,   F   S   .   m   a   k   e   d   e   v   (   6   ,   0   )   )   ;   v   a   r       r   a   n   d   o   m   B   u   f   f   e   r   =   n   e   w       U   i   n   t   8   A   r   r   a   y   (   1   0   2   4   )   ,   r   a   n   d   o   m   L   e   f   t   =   0   ;   v   a   r       r   a   n   d   o   m   B   y   t   e   =   (   )   =   >   {   i   f   (   r   a   n   d   o   m   L   e   f   t   =   =   =   0   )   {   r   a   n   d   o   m   F   i   l   l   (   r   a   n   d   o   m   B   u   f   f   e   r   )   ;   r   a   n   d   o   m   L   e   f   t   =   r   a   n   d   o   m   B   u   f   f   e   r   .   b   y   t   e   L   e   n   g   t   h   }   r   e   t   u   r   n       r   a   n   d   o   m   B   u   f   f   e   r   [   -   -   r   a   n   d   o   m   L   e   f   t   ]   }   ;   F   S   .   c   r   e   a   t   e   D   e   v   i   c   e   (   "   /   d   e   v   "   ,   "   r   a   n   d   o   m   "   ,   r   a   n   d   o   m   B   y   t   e   )   ;   F   S   .   c   r   e   a   t   e   D   e   v   i   c   e   (   "   /   d   e   v   "   ,   "   u   r   a   n   d   o   m   "   ,   r   a   n   d   o   m   B   y   t   e   )   ;   F   S   .   m   k   d   i   r   (   "   /   d   e   v   /   s   h   m   "   )   ;   F   S   .   m   k   d   i   r   (   "   /   d   e   v   /   s   h   m   /   t   m   p   "   )   }   ,   c   r   e   a   t   e   S   p   e   c   i   a   l   D   i   r   e   c   t   o   r   i   e   s   (   )   {   F   S   .   m   k   d   i   r   (   "   /   p   r   o   c   "   )   ;   v   a   r       p   r   o   c   _   s   e   l   f   =   F   S   .   m   k   d   i   r   (   "   /   p   r   o   c   /   s   e   l   f   "   )   ;   F   S   .   m   k   d   i   r   (   "   /   p   r   o   c   /   s   e   l   f   /   f   d   "   )   ;   F   S   .   m   o   u   n   t   (   {   m   o   u   n   t   (   )   {   v   a   r       n   o   d   e   =   F   S   .   c   r   e   a   t   e   N   o   d   e   (   p   r   o   c   _   s   e   l   f   ,   "   f   d   "   ,   1   6   8   9   5   ,   7   3   )   ;   n   o   d   e   .   s   t   r   e   a   m   _   o   p   s   =   {   l   l   s   e   e   k   :   M   E   M   F   S   .   s   t   r   e   a   m   _   o   p   s   .   l   l   s   e   e   k   }   ;   n   o   d   e   .   n   o   d   e   _   o   p   s   =   {   l   o   o   k   u   p   (   p   a   r   e   n   t   ,   n   a   m   e   )   {   v   a   r       f   d   =   +   n   a   m   e   ;   v   a   r       s   t   r   e   a   m   =   F   S   .   g   e   t   S   t   r   e   a   m   C   h   e   c   k   e   d   (   f   d   )   ;   v   a   r       r   e   t   =   {   p   a   r   e   n   t   :   n   u   l   l   ,   m   o   u   n   t   :   {   m   o   u   n   t   p   o   i   n   t   :   "   f   a   k   e   "   }   ,   n   o   d   e   _   o   p   s   :   {   r   e   a   d   l   i   n   k   :   (   )   =   >   s   t   r   e   a   m   .   p   a   t   h   }   ,   i   d   :   f   d   +   1   }   ;   r   e   t   .   p   a   r   e   n   t   =   r   e   t   ;   r   e   t   u   r   n       r   e   t   }   ,   r   e   a   d   d   i   r   (   )   {   r   e   t   u   r   n       A   r   r   a   y   .   f   r   o   m   (   F   S   .   s   t   r   e   a   m   s   .   e   n   t   r   i   e   s   (   )   )   .   f   i   l   t   e   r   (   (   [   k   ,   v   ]   )   =   >   v   )   .   m   a   p   (   (   [   k   ,   v   ]   )   =   >   k   .   t   o   S   t   r   i   n   g   (   )   )   }   }   ;   r   e   t   u   r   n       n   o   d   e   }   }   ,   {   }   ,   "   /   p   r   o   c   /   s   e   l   f   /   f   d   "   )   }   ,   c   r   e   a   t   e   S   t   a   n   d   a   r   d   S   t   r   e   a   m   s   (   i   n   p   u   t   ,   o   u   t   p   u   t   ,   e   r   r   o   r   )   {   i   f   (   i   n   p   u   t   )   {   F   S   .   c   r   e   a   t   e   D   e   v   i   c   e   (   "   /   d   e   v   "   ,   "   s   t   d   i   n   "   ,   i   n   p   u   t   )   }   e   l   s   e   {   F   S   .   s   y   m   l   i   n   k   (   "   /   d   e   v   /   t   t   y   "   ,   "   /   d   e   v   /   s   t   d   i   n   "   )   }   i   f   (   o   u   t   p   u   t   )   {   F   S   .   c   r   e   a   t   e   D   e   v   i   c   e   (   "   /   d   e   v   "   ,   "   s   t   d   o   u   t   "   ,   n   u   l   l   ,   o   u   t   p   u   t   )   }   e   l   s   e   {   F   S   .   s   y   m   l   i   n   k   (   "   /   d   e   v   /   t   t   y   "   ,   "   /   d   e   v   /   s   t   d   o   u   t   "   )   }   i   f   (   e   r   r   o   r   )   {   F   S   .   c   r   e   a   t   e   D   e   v   i   c   e   (   "   /   d   e   v   "   ,   "   s   t   d   e   r   r   "   ,   n   u   l   l   ,   e   r   r   o   r   )   }   e   l   s   e   {   F   S   .   s   y   m   l   i   n   k   (   "   /   d   e   v   /   t   t   y   1   "   ,   "   /   d   e   v   /   s   t   d   e   r   r   "   )   }   v   a   r       s   t   d   i   n   =   F   S   .   o   p   e   n   (   "   /   d   e   v   /   s   t   d   i   n   "   ,   0   )   ;   v   a   r       s   t   d   o   u   t   =   F   S   .   o   p   e   n   (   "   /   d   e   v   /   s   t   d   o   u   t   "   ,   1   )   ;   v   a   r       s   t   d   e   r   r   =   F   S   .   o   p   e   n   (   "   /   d   e   v   /   s   t   d   e   r   r   "   ,   1   )   }   ,   s   t   a   t   i   c   I   n   i   t   (   )   {   F   S   .   n   a   m   e   T   a   b   l   e   =   n   e   w       A   r   r   a   y   (   4   0   9   6   )   ;   F   S   .   m   o   u   n   t   (   M   E   M   F   S   ,   {   }   ,   "   /   "   )   ;   F   S   .   c   r   e   a   t   e   D   e   f   a   u   l   t   D   i   r   e   c   t   o   r   i   e   s   (   )   ;   F   S   .   c   r   e   a   t   e   D   e   f   a   u   l   t   D   e   v   i   c   e   s   (   )   ;   F   S   .   c   r   e   a   t   e   S   p   e   c   i   a   l   D   i   r   e   c   t   o   r   i   e   s   (   )   ;   F   S   .   f   i   l   e   s   y   s   t   e   m   s   =   {   M   E   M   F   S   }   }   ,   i   n   i   t   (   i   n   p   u   t   ,   o   u   t   p   u   t   ,   e   r   r   o   r   )   {   F   S   .   i   n   i   t   i   a   l   i   z   e   d   =   t   r   u   e   ;   i   n   p   u   t   ?   ?   =   M   o   d   u   l   e   [   "   s   t   d   i   n   "   ]   ;   o   u   t   p   u   t   ?   ?   =   M   o   d   u   l   e   [   "   s   t   d   o   u   t   "   ]   ;   e   r   r   o   r   ?   ?   =   M   o   d   u   l   e   [   "   s   t   d   e   r   r   "   ]   ;   F   S   .   c   r   e   a   t   e   S   t   a   n   d   a   r   d   S   t   r   e   a   m   s   (   i   n   p   u   t   ,   o   u   t   p   u   t   ,   e   r   r   o   r   )   }   ,   q   u   i   t   (   )   {   F   S   .   i   n   i   t   i   a   l   i   z   e   d   =   f   a   l   s   e   ;   f   o   r   (   v   a   r       s   t   r   e   a   m       o   f       F   S   .   s   t   r   e   a   m   s   )   {   i   f   (   s   t   r   e   a   m   )   {   F   S   .   c   l   o   s   e   (   s   t   r   e   a   m   )   }   }   }   ,   f   i   n   d   O   b   j   e   c   t   (   p   a   t   h   ,   d   o   n   t   R   e   s   o   l   v   e   L   a   s   t   L   i   n   k   )   {   v   a   r       r   e   t   =   F   S   .   a   n   a   l   y   z   e   P   a   t   h   (   p   a   t   h   ,   d   o   n   t   R   e   s   o   l   v   e   L   a   s   t   L   i   n   k   )   ;   i   f   (   !   r   e   t   .   e   x   i   s   t   s   )   {   r   e   t   u   r   n       n   u   l   l   }   r   e   t   u   r   n       r   e   t   .   o   b   j   e   c   t   }   ,   a   n   a   l   y   z   e   P   a   t   h   (   p   a   t   h   ,   d   o   n   t   R   e   s   o   l   v   e   L   a   s   t   L   i   n   k   )   {   t   r   y   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   !   d   o   n   t   R   e   s   o   l   v   e   L   a   s   t   L   i   n   k   }   )   ;   p   a   t   h   =   l   o   o   k   u   p   .   p   a   t   h   }   c   a   t   c   h   (   e   )   {   }   v   a   r       r   e   t   =   {   i   s   R   o   o   t   :   f   a   l   s   e   ,   e   x   i   s   t   s   :   f   a   l   s   e   ,   e   r   r   o   r   :   0   ,   n   a   m   e   :   n   u   l   l   ,   p   a   t   h   :   n   u   l   l   ,   o   b   j   e   c   t   :   n   u   l   l   ,   p   a   r   e   n   t   E   x   i   s   t   s   :   f   a   l   s   e   ,   p   a   r   e   n   t   P   a   t   h   :   n   u   l   l   ,   p   a   r   e   n   t   O   b   j   e   c   t   :   n   u   l   l   }   ;   t   r   y   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   p   a   r   e   n   t   :   t   r   u   e   }   )   ;   r   e   t   .   p   a   r   e   n   t   E   x   i   s   t   s   =   t   r   u   e   ;   r   e   t   .   p   a   r   e   n   t   P   a   t   h   =   l   o   o   k   u   p   .   p   a   t   h   ;   r   e   t   .   p   a   r   e   n   t   O   b   j   e   c   t   =   l   o   o   k   u   p   .   n   o   d   e   ;   r   e   t   .   n   a   m   e   =   P   A   T   H   .   b   a   s   e   n   a   m   e   (   p   a   t   h   )   ;   l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   p   a   t   h   ,   {   f   o   l   l   o   w   :   !   d   o   n   t   R   e   s   o   l   v   e   L   a   s   t   L   i   n   k   }   )   ;   r   e   t   .   e   x   i   s   t   s   =   t   r   u   e   ;   r   e   t   .   p   a   t   h   =   l   o   o   k   u   p   .   p   a   t   h   ;   r   e   t   .   o   b   j   e   c   t   =   l   o   o   k   u   p   .   n   o   d   e   ;   r   e   t   .   n   a   m   e   =   l   o   o   k   u   p   .   n   o   d   e   .   n   a   m   e   ;   r   e   t   .   i   s   R   o   o   t   =   l   o   o   k   u   p   .   p   a   t   h   =   =   =   "   /   "   }   c   a   t   c   h   (   e   )   {   r   e   t   .   e   r   r   o   r   =   e   .   e   r   r   n   o   }   r   e   t   u   r   n       r   e   t   }   ,   c   r   e   a   t   e   P   a   t   h   (   p   a   r   e   n   t   ,   p   a   t   h   ,   c   a   n   R   e   a   d   ,   c   a   n   W   r   i   t   e   )   {   p   a   r   e   n   t   =   t   y   p   e   o   f       p   a   r   e   n   t   =   =   "   s   t   r   i   n   g   "   ?   p   a   r   e   n   t   :   F   S   .   g   e   t   P   a   t   h   (   p   a   r   e   n   t   )   ;   v   a   r       p   a   r   t   s   =   p   a   t   h   .   s   p   l   i   t   (   "   /   "   )   .   r   e   v   e   r   s   e   (   )   ;   w   h   i   l   e   (   p   a   r   t   s   .   l   e   n   g   t   h   )   {   v   a   r       p   a   r   t   =   p   a   r   t   s   .   p   o   p   (   )   ;   i   f   (   !   p   a   r   t   )   c   o   n   t   i   n   u   e   ;   v   a   r       c   u   r   r   e   n   t   =   P   A   T   H   .   j   o   i   n   2   (   p   a   r   e   n   t   ,   p   a   r   t   )   ;   t   r   y   {   F   S   .   m   k   d   i   r   (   c   u   r   r   e   n   t   )   }   c   a   t   c   h   (   e   )   {   i   f   (   e   .   e   r   r   n   o   !   =   2   0   )   t   h   r   o   w       e   }   p   a   r   e   n   t   =   c   u   r   r   e   n   t   }   r   e   t   u   r   n       c   u   r   r   e   n   t   }   ,   c   r   e   a   t   e   F   i   l   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   p   r   o   p   e   r   t   i   e   s   ,   c   a   n   R   e   a   d   ,   c   a   n   W   r   i   t   e   )   {   v   a   r       p   a   t   h   =   P   A   T   H   .   j   o   i   n   2   (   t   y   p   e   o   f       p   a   r   e   n   t   =   =   "   s   t   r   i   n   g   "   ?   p   a   r   e   n   t   :   F   S   .   g   e   t   P   a   t   h   (   p   a   r   e   n   t   )   ,   n   a   m   e   )   ;   v   a   r       m   o   d   e   =   F   S   _   g   e   t   M   o   d   e   (   c   a   n   R   e   a   d   ,   c   a   n   W   r   i   t   e   )   ;   r   e   t   u   r   n       F   S   .   c   r   e   a   t   e   (   p   a   t   h   ,   m   o   d   e   )   }   ,   c   r   e   a   t   e   D   a   t   a   F   i   l   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   d   a   t   a   ,   c   a   n   R   e   a   d   ,   c   a   n   W   r   i   t   e   ,   c   a   n   O   w   n   )   {   v   a   r       p   a   t   h   =   n   a   m   e   ;   i   f   (   p   a   r   e   n   t   )   {   p   a   r   e   n   t   =   t   y   p   e   o   f       p   a   r   e   n   t   =   =   "   s   t   r   i   n   g   "   ?   p   a   r   e   n   t   :   F   S   .   g   e   t   P   a   t   h   (   p   a   r   e   n   t   )   ;   p   a   t   h   =   n   a   m   e   ?   P   A   T   H   .   j   o   i   n   2   (   p   a   r   e   n   t   ,   n   a   m   e   )   :   p   a   r   e   n   t   }   v   a   r       m   o   d   e   =   F   S   _   g   e   t   M   o   d   e   (   c   a   n   R   e   a   d   ,   c   a   n   W   r   i   t   e   )   ;   v   a   r       n   o   d   e   =   F   S   .   c   r   e   a   t   e   (   p   a   t   h   ,   m   o   d   e   )   ;   i   f   (   d   a   t   a   )   {   i   f   (   t   y   p   e   o   f       d   a   t   a   =   =   "   s   t   r   i   n   g   "   )   {   v   a   r       a   r   r   =   n   e   w       A   r   r   a   y   (   d   a   t   a   .   l   e   n   g   t   h   )   ;   f   o   r   (   v   a   r       i   =   0   ,   l   e   n   =   d   a   t   a   .   l   e   n   g   t   h   ;   i   <   l   e   n   ;   +   +   i   )   a   r   r   [   i   ]   =   d   a   t   a   .   c   h   a   r   C   o   d   e   A   t   (   i   )   ;   d   a   t   a   =   a   r   r   }   F   S   .   c   h   m   o   d   (   n   o   d   e   ,   m   o   d   e   |   1   4   6   )   ;   v   a   r       s   t   r   e   a   m   =   F   S   .   o   p   e   n   (   n   o   d   e   ,   5   7   7   )   ;   F   S   .   w   r   i   t   e   (   s   t   r   e   a   m   ,   d   a   t   a   ,   0   ,   d   a   t   a   .   l   e   n   g   t   h   ,   0   ,   c   a   n   O   w   n   )   ;   F   S   .   c   l   o   s   e   (   s   t   r   e   a   m   )   ;   F   S   .   c   h   m   o   d   (   n   o   d   e   ,   m   o   d   e   )   }   }   ,   c   r   e   a   t   e   D   e   v   i   c   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   i   n   p   u   t   ,   o   u   t   p   u   t   )   {   v   a   r       p   a   t   h   =   P   A   T   H   .   j   o   i   n   2   (   t   y   p   e   o   f       p   a   r   e   n   t   =   =   "   s   t   r   i   n   g   "   ?   p   a   r   e   n   t   :   F   S   .   g   e   t   P   a   t   h   (   p   a   r   e   n   t   )   ,   n   a   m   e   )   ;   v   a   r       m   o   d   e   =   F   S   _   g   e   t   M   o   d   e   (   !   !   i   n   p   u   t   ,   !   !   o   u   t   p   u   t   )   ;   F   S   .   c   r   e   a   t   e   D   e   v   i   c   e   .   m   a   j   o   r   ?   ?   =   6   4   ;   v   a   r       d   e   v   =   F   S   .   m   a   k   e   d   e   v   (   F   S   .   c   r   e   a   t   e   D   e   v   i   c   e   .   m   a   j   o   r   +   +   ,   0   )   ;   F   S   .   r   e   g   i   s   t   e   r   D   e   v   i   c   e   (   d   e   v   ,   {   o   p   e   n   (   s   t   r   e   a   m   )   {   s   t   r   e   a   m   .   s   e   e   k   a   b   l   e   =   f   a   l   s   e   }   ,   c   l   o   s   e   (   s   t   r   e   a   m   )   {   i   f   (   o   u   t   p   u   t   ?   .   b   u   f   f   e   r   ?   .   l   e   n   g   t   h   )   {   o   u   t   p   u   t   (   1   0   )   }   }   ,   r   e   a   d   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   )   {   v   a   r       b   y   t   e   s   R   e   a   d   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   g   t   h   ;   i   +   +   )   {   v   a   r       r   e   s   u   l   t   ;   t   r   y   {   r   e   s   u   l   t   =   i   n   p   u   t   (   )   }   c   a   t   c   h   (   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   9   )   }   i   f   (   r   e   s   u   l   t   =   =   =   u   n   d   e   f   i   n   e   d   &   &   b   y   t   e   s   R   e   a   d   =   =   =   0   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   6   )   }   i   f   (   r   e   s   u   l   t   =   =   =   n   u   l   l   |   |   r   e   s   u   l   t   =   =   =   u   n   d   e   f   i   n   e   d   )   b   r   e   a   k   ;   b   y   t   e   s   R   e   a   d   +   +   ;   b   u   f   f   e   r   [   o   f   f   s   e   t   +   i   ]   =   r   e   s   u   l   t   }   i   f   (   b   y   t   e   s   R   e   a   d   )   {   s   t   r   e   a   m   .   n   o   d   e   .   a   t   i   m   e   =   D   a   t   e   .   n   o   w   (   )   }   r   e   t   u   r   n       b   y   t   e   s   R   e   a   d   }   ,   w   r   i   t   e   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   )   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   g   t   h   ;   i   +   +   )   {   t   r   y   {   o   u   t   p   u   t   (   b   u   f   f   e   r   [   o   f   f   s   e   t   +   i   ]   )   }   c   a   t   c   h   (   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   9   )   }   }   i   f   (   l   e   n   g   t   h   )   {   s   t   r   e   a   m   .   n   o   d   e   .   m   t   i   m   e   =   s   t   r   e   a   m   .   n   o   d   e   .   c   t   i   m   e   =   D   a   t   e   .   n   o   w   (   )   }   r   e   t   u   r   n       i   }   }   )   ;   r   e   t   u   r   n       F   S   .   m   k   d   e   v   (   p   a   t   h   ,   m   o   d   e   ,   d   e   v   )   }   ,   f   o   r   c   e   L   o   a   d   F   i   l   e   (   o   b   j   )   {   i   f   (   o   b   j   .   i   s   D   e   v   i   c   e   |   |   o   b   j   .   i   s   F   o   l   d   e   r   |   |   o   b   j   .   l   i   n   k   |   |   o   b   j   .   c   o   n   t   e   n   t   s   )   r   e   t   u   r   n       t   r   u   e   ;   i   f   (   t   y   p   e   o   f       X   M   L   H   t   t   p   R   e   q   u   e   s   t   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   t   h   r   o   w       n   e   w       E   r   r   o   r   (   "   L   a   z   y       l   o   a   d   i   n   g       s   h   o   u   l   d       h   a   v   e       b   e   e   n       p   e   r   f   o   r   m   e   d       (   c   o   n   t   e   n   t   s       s   e   t   )       i   n       c   r   e   a   t   e   L   a   z   y   F   i   l   e   ,       b   u   t       i   t       w   a   s       n   o   t   .       L   a   z   y       l   o   a   d   i   n   g       o   n   l   y       w   o   r   k   s       i   n       w   e   b       w   o   r   k   e   r   s   .       U   s   e       -   -   e   m   b   e   d   -   f   i   l   e       o   r       -   -   p   r   e   l   o   a   d   -   f   i   l   e       i   n       e   m   c   c       o   n       t   h   e       m   a   i   n       t   h   r   e   a   d   .   "   )   }   e   l   s   e   {   t   r   y   {   o   b   j   .   c   o   n   t   e   n   t   s   =   r   e   a   d   B   i   n   a   r   y   (   o   b   j   .   u   r   l   )   ;   o   b   j   .   u   s   e   d   B   y   t   e   s   =   o   b   j   .   c   o   n   t   e   n   t   s   .   l   e   n   g   t   h   }   c   a   t   c   h   (   e   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   2   9   )   }   }   }   ,   c   r   e   a   t   e   L   a   z   y   F   i   l   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   u   r   l   ,   c   a   n   R   e   a   d   ,   c   a   n   W   r   i   t   e   )   {   c   l   a   s   s       L   a   z   y   U   i   n   t   8   A   r   r   a   y   {   l   e   n   g   t   h   K   n   o   w   n   =   f   a   l   s   e   ;   c   h   u   n   k   s   =   [   ]   ;   g   e   t   (   i   d   x   )   {   i   f   (   i   d   x   >   t   h   i   s   .   l   e   n   g   t   h   -   1   |   |   i   d   x   <   0   )   {   r   e   t   u   r   n       u   n   d   e   f   i   n   e   d   }   v   a   r       c   h   u   n   k   O   f   f   s   e   t   =   i   d   x   %   t   h   i   s   .   c   h   u   n   k   S   i   z   e   ;   v   a   r       c   h   u   n   k   N   u   m   =   i   d   x   /   t   h   i   s   .   c   h   u   n   k   S   i   z   e   |   0   ;   r   e   t   u   r   n       t   h   i   s   .   g   e   t   t   e   r   (   c   h   u   n   k   N   u   m   )   [   c   h   u   n   k   O   f   f   s   e   t   ]   }   s   e   t   D   a   t   a   G   e   t   t   e   r   (   g   e   t   t   e   r   )   {   t   h   i   s   .   g   e   t   t   e   r   =   g   e   t   t   e   r   }   c   a   c   h   e   L   e   n   g   t   h   (   )   {   v   a   r       x   h   r   =   n   e   w       X   M   L   H   t   t   p   R   e   q   u   e   s   t   ;   x   h   r   .   o   p   e   n   (   "   H   E   A   D   "   ,   u   r   l   ,   f   a   l   s   e   )   ;   x   h   r   .   s   e   n   d   (   n   u   l   l   )   ;   i   f   (   !   (   x   h   r   .   s   t   a   t   u   s   >   =   2   0   0   &   &   x   h   r   .   s   t   a   t   u   s   <   3   0   0   |   |   x   h   r   .   s   t   a   t   u   s   =   =   =   3   0   4   )   )   t   h   r   o   w       n   e   w       E   r   r   o   r   (   "   C   o   u   l   d   n   '   t       l   o   a   d       "   +   u   r   l   +   "   .       S   t   a   t   u   s   :       "   +   x   h   r   .   s   t   a   t   u   s   )   ;   v   a   r       d   a   t   a   l   e   n   g   t   h   =   N   u   m   b   e   r   (   x   h   r   .   g   e   t   R   e   s   p   o   n   s   e   H   e   a   d   e   r   (   "   C   o   n   t   e   n   t   -   l   e   n   g   t   h   "   )   )   ;   v   a   r       h   e   a   d   e   r   ;   v   a   r       h   a   s   B   y   t   e   S   e   r   v   i   n   g   =   (   h   e   a   d   e   r   =   x   h   r   .   g   e   t   R   e   s   p   o   n   s   e   H   e   a   d   e   r   (   "   A   c   c   e   p   t   -   R   a   n   g   e   s   "   )   )   &   &   h   e   a   d   e   r   =   =   =   "   b   y   t   e   s   "   ;   v   a   r       u   s   e   s   G   z   i   p   =   (   h   e   a   d   e   r   =   x   h   r   .   g   e   t   R   e   s   p   o   n   s   e   H   e   a   d   e   r   (   "   C   o   n   t   e   n   t   -   E   n   c   o   d   i   n   g   "   )   )   &   &   h   e   a   d   e   r   =   =   =   "   g   z   i   p   "   ;   v   a   r       c   h   u   n   k   S   i   z   e   =   1   0   2   4   *   1   0   2   4   ;   i   f   (   !   h   a   s   B   y   t   e   S   e   r   v   i   n   g   )   c   h   u   n   k   S   i   z   e   =   d   a   t   a   l   e   n   g   t   h   ;   v   a   r       d   o   X   H   R   =   (   f   r   o   m   ,   t   o   )   =   >   {   i   f   (   f   r   o   m   >   t   o   )   t   h   r   o   w       n   e   w       E   r   r   o   r   (   "   i   n   v   a   l   i   d       r   a   n   g   e       (   "   +   f   r   o   m   +   "   ,       "   +   t   o   +   "   )       o   r       n   o       b   y   t   e   s       r   e   q   u   e   s   t   e   d   !   "   )   ;   i   f   (   t   o   >   d   a   t   a   l   e   n   g   t   h   -   1   )   t   h   r   o   w       n   e   w       E   r   r   o   r   (   "   o   n   l   y       "   +   d   a   t   a   l   e   n   g   t   h   +   "       b   y   t   e   s       a   v   a   i   l   a   b   l   e   !       p   r   o   g   r   a   m   m   e   r       e   r   r   o   r   !   "   )   ;   v   a   r       x   h   r   =   n   e   w       X   M   L   H   t   t   p   R   e   q   u   e   s   t   ;   x   h   r   .   o   p   e   n   (   "   G   E   T   "   ,   u   r   l   ,   f   a   l   s   e   )   ;   i   f   (   d   a   t   a   l   e   n   g   t   h   !   =   =   c   h   u   n   k   S   i   z   e   )   x   h   r   .   s   e   t   R   e   q   u   e   s   t   H   e   a   d   e   r   (   "   R   a   n   g   e   "   ,   "   b   y   t   e   s   =   "   +   f   r   o   m   +   "   -   "   +   t   o   )   ;   x   h   r   .   r   e   s   p   o   n   s   e   T   y   p   e   =   "   a   r   r   a   y   b   u   f   f   e   r   "   ;   i   f   (   x   h   r   .   o   v   e   r   r   i   d   e   M   i   m   e   T   y   p   e   )   {   x   h   r   .   o   v   e   r   r   i   d   e   M   i   m   e   T   y   p   e   (   "   t   e   x   t   /   p   l   a   i   n   ;       c   h   a   r   s   e   t   =   x   -   u   s   e   r   -   d   e   f   i   n   e   d   "   )   }   x   h   r   .   s   e   n   d   (   n   u   l   l   )   ;   i   f   (   !   (   x   h   r   .   s   t   a   t   u   s   >   =   2   0   0   &   &   x   h   r   .   s   t   a   t   u   s   <   3   0   0   |   |   x   h   r   .   s   t   a   t   u   s   =   =   =   3   0   4   )   )   t   h   r   o   w       n   e   w       E   r   r   o   r   (   "   C   o   u   l   d   n   '   t       l   o   a   d       "   +   u   r   l   +   "   .       S   t   a   t   u   s   :       "   +   x   h   r   .   s   t   a   t   u   s   )   ;   i   f   (   x   h   r   .   r   e   s   p   o   n   s   e   !   =   =   u   n   d   e   f   i   n   e   d   )   {   r   e   t   u   r   n       n   e   w       U   i   n   t   8   A   r   r   a   y   (   x   h   r   .   r   e   s   p   o   n   s   e   |   |   [   ]   )   }   r   e   t   u   r   n       i   n   t   A   r   r   a   y   F   r   o   m   S   t   r   i   n   g   (   x   h   r   .   r   e   s   p   o   n   s   e   T   e   x   t   |   |   "   "   ,   t   r   u   e   )   }   ;   v   a   r       l   a   z   y   A   r   r   a   y   =   t   h   i   s   ;   l   a   z   y   A   r   r   a   y   .   s   e   t   D   a   t   a   G   e   t   t   e   r   (   c   h   u   n   k   N   u   m   =   >   {   v   a   r       s   t   a   r   t   =   c   h   u   n   k   N   u   m   *   c   h   u   n   k   S   i   z   e   ;   v   a   r       e   n   d   =   (   c   h   u   n   k   N   u   m   +   1   )   *   c   h   u   n   k   S   i   z   e   -   1   ;   e   n   d   =   M   a   t   h   .   m   i   n   (   e   n   d   ,   d   a   t   a   l   e   n   g   t   h   -   1   )   ;   i   f   (   t   y   p   e   o   f       l   a   z   y   A   r   r   a   y   .   c   h   u   n   k   s   [   c   h   u   n   k   N   u   m   ]   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   l   a   z   y   A   r   r   a   y   .   c   h   u   n   k   s   [   c   h   u   n   k   N   u   m   ]   =   d   o   X   H   R   (   s   t   a   r   t   ,   e   n   d   )   }   i   f   (   t   y   p   e   o   f       l   a   z   y   A   r   r   a   y   .   c   h   u   n   k   s   [   c   h   u   n   k   N   u   m   ]   =   =   "   u   n   d   e   f   i   n   e   d   "   )   t   h   r   o   w       n   e   w       E   r   r   o   r   (   "   d   o   X   H   R       f   a   i   l   e   d   !   "   )   ;   r   e   t   u   r   n       l   a   z   y   A   r   r   a   y   .   c   h   u   n   k   s   [   c   h   u   n   k   N   u   m   ]   }   )   ;   i   f   (   u   s   e   s   G   z   i   p   |   |   !   d   a   t   a   l   e   n   g   t   h   )   {   c   h   u   n   k   S   i   z   e   =   d   a   t   a   l   e   n   g   t   h   =   1   ;   d   a   t   a   l   e   n   g   t   h   =   t   h   i   s   .   g   e   t   t   e   r   (   0   )   .   l   e   n   g   t   h   ;   c   h   u   n   k   S   i   z   e   =   d   a   t   a   l   e   n   g   t   h   ;   o   u   t   (   "   L   a   z   y   F   i   l   e   s       o   n       g   z   i   p       f   o   r   c   e   s       d   o   w   n   l   o   a   d       o   f       t   h   e       w   h   o   l   e       f   i   l   e       w   h   e   n       l   e   n   g   t   h       i   s       a   c   c   e   s   s   e   d   "   )   }   t   h   i   s   .   _   l   e   n   g   t   h   =   d   a   t   a   l   e   n   g   t   h   ;   t   h   i   s   .   _   c   h   u   n   k   S   i   z   e   =   c   h   u   n   k   S   i   z   e   ;   t   h   i   s   .   l   e   n   g   t   h   K   n   o   w   n   =   t   r   u   e   }   g   e   t       l   e   n   g   t   h   (   )   {   i   f   (   !   t   h   i   s   .   l   e   n   g   t   h   K   n   o   w   n   )   {   t   h   i   s   .   c   a   c   h   e   L   e   n   g   t   h   (   )   }   r   e   t   u   r   n       t   h   i   s   .   _   l   e   n   g   t   h   }   g   e   t       c   h   u   n   k   S   i   z   e   (   )   {   i   f   (   !   t   h   i   s   .   l   e   n   g   t   h   K   n   o   w   n   )   {   t   h   i   s   .   c   a   c   h   e   L   e   n   g   t   h   (   )   }   r   e   t   u   r   n       t   h   i   s   .   _   c   h   u   n   k   S   i   z   e   }   }   i   f   (   t   y   p   e   o   f       X   M   L   H   t   t   p   R   e   q   u   e   s   t   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   i   f   (   !   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   O   R   K   E   R   )   t   h   r   o   w   "   C   a   n   n   o   t       d   o       s   y   n   c   h   r   o   n   o   u   s       b   i   n   a   r   y       X   H   R   s       o   u   t   s   i   d   e       w   e   b   w   o   r   k   e   r   s       i   n       m   o   d   e   r   n       b   r   o   w   s   e   r   s   .       U   s   e       -   -   e   m   b   e   d   -   f   i   l   e       o   r       -   -   p   r   e   l   o   a   d   -   f   i   l   e       i   n       e   m   c   c   "   ;   v   a   r       l   a   z   y   A   r   r   a   y   =   n   e   w       L   a   z   y   U   i   n   t   8   A   r   r   a   y   ;   v   a   r       p   r   o   p   e   r   t   i   e   s   =   {   i   s   D   e   v   i   c   e   :   f   a   l   s   e   ,   c   o   n   t   e   n   t   s   :   l   a   z   y   A   r   r   a   y   }   }   e   l   s   e   {   v   a   r       p   r   o   p   e   r   t   i   e   s   =   {   i   s   D   e   v   i   c   e   :   f   a   l   s   e   ,   u   r   l   }   }   v   a   r       n   o   d   e   =   F   S   .   c   r   e   a   t   e   F   i   l   e   (   p   a   r   e   n   t   ,   n   a   m   e   ,   p   r   o   p   e   r   t   i   e   s   ,   c   a   n   R   e   a   d   ,   c   a   n   W   r   i   t   e   )   ;   i   f   (   p   r   o   p   e   r   t   i   e   s   .   c   o   n   t   e   n   t   s   )   {   n   o   d   e   .   c   o   n   t   e   n   t   s   =   p   r   o   p   e   r   t   i   e   s   .   c   o   n   t   e   n   t   s   }   e   l   s   e       i   f   (   p   r   o   p   e   r   t   i   e   s   .   u   r   l   )   {   n   o   d   e   .   c   o   n   t   e   n   t   s   =   n   u   l   l   ;   n   o   d   e   .   u   r   l   =   p   r   o   p   e   r   t   i   e   s   .   u   r   l   }   O   b   j   e   c   t   .   d   e   f   i   n   e   P   r   o   p   e   r   t   i   e   s   (   n   o   d   e   ,   {   u   s   e   d   B   y   t   e   s   :   {   g   e   t   :   f   u   n   c   t   i   o   n   (   )   {   r   e   t   u   r   n       t   h   i   s   .   c   o   n   t   e   n   t   s   .   l   e   n   g   t   h   }   }   }   )   ;   v   a   r       s   t   r   e   a   m   _   o   p   s   =   {   }   ;   v   a   r       k   e   y   s   =   O   b   j   e   c   t   .   k   e   y   s   (   n   o   d   e   .   s   t   r   e   a   m   _   o   p   s   )   ;   k   e   y   s   .   f   o   r   E   a   c   h   (   k   e   y   =   >   {   v   a   r       f   n   =   n   o   d   e   .   s   t   r   e   a   m   _   o   p   s   [   k   e   y   ]   ;   s   t   r   e   a   m   _   o   p   s   [   k   e   y   ]   =   (   .   .   .   a   r   g   s   )   =   >   {   F   S   .   f   o   r   c   e   L   o   a   d   F   i   l   e   (   n   o   d   e   )   ;   r   e   t   u   r   n       f   n   (   .   .   .   a   r   g   s   )   }   }   )   ;   f   u   n   c   t   i   o   n       w   r   i   t   e   C   h   u   n   k   s   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   )   {   v   a   r       c   o   n   t   e   n   t   s   =   s   t   r   e   a   m   .   n   o   d   e   .   c   o   n   t   e   n   t   s   ;   i   f   (   p   o   s   i   t   i   o   n   >   =   c   o   n   t   e   n   t   s   .   l   e   n   g   t   h   )   r   e   t   u   r   n       0   ;   v   a   r       s   i   z   e   =   M   a   t   h   .   m   i   n   (   c   o   n   t   e   n   t   s   .   l   e   n   g   t   h   -   p   o   s   i   t   i   o   n   ,   l   e   n   g   t   h   )   ;   i   f   (   c   o   n   t   e   n   t   s   .   s   l   i   c   e   )   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   s   i   z   e   ;   i   +   +   )   {   b   u   f   f   e   r   [   o   f   f   s   e   t   +   i   ]   =   c   o   n   t   e   n   t   s   [   p   o   s   i   t   i   o   n   +   i   ]   }   }   e   l   s   e   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   s   i   z   e   ;   i   +   +   )   {   b   u   f   f   e   r   [   o   f   f   s   e   t   +   i   ]   =   c   o   n   t   e   n   t   s   .   g   e   t   (   p   o   s   i   t   i   o   n   +   i   )   }   }   r   e   t   u   r   n       s   i   z   e   }   s   t   r   e   a   m   _   o   p   s   .   r   e   a   d   =   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   )   =   >   {   F   S   .   f   o   r   c   e   L   o   a   d   F   i   l   e   (   n   o   d   e   )   ;   r   e   t   u   r   n       w   r   i   t   e   C   h   u   n   k   s   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   )   }   ;   s   t   r   e   a   m   _   o   p   s   .   m   m   a   p   =   (   s   t   r   e   a   m   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   ,   p   r   o   t   ,   f   l   a   g   s   )   =   >   {   F   S   .   f   o   r   c   e   L   o   a   d   F   i   l   e   (   n   o   d   e   )   ;   v   a   r       p   t   r   =   m   m   a   p   A   l   l   o   c   (   l   e   n   g   t   h   )   ;   i   f   (   !   p   t   r   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   8   )   }   w   r   i   t   e   C   h   u   n   k   s   (   s   t   r   e   a   m   ,   H   E   A   P   8   ,   p   t   r   ,   l   e   n   g   t   h   ,   p   o   s   i   t   i   o   n   )   ;   r   e   t   u   r   n   {   p   t   r   ,   a   l   l   o   c   a   t   e   d   :   t   r   u   e   }   }   ;   n   o   d   e   .   s   t   r   e   a   m   _   o   p   s   =   s   t   r   e   a   m   _   o   p   s   ;   r   e   t   u   r   n       n   o   d   e   }   }   ;   v   a   r       U   T   F   8   T   o   S   t   r   i   n   g   =   (   p   t   r   ,   m   a   x   B   y   t   e   s   T   o   R   e   a   d   )   =   >   {   p   t   r   >   >   >   =   0   ;   r   e   t   u   r   n       p   t   r   ?   U   T   F   8   A   r   r   a   y   T   o   S   t   r   i   n   g   (   H   E   A   P   U   8   ,   p   t   r   ,   m   a   x   B   y   t   e   s   T   o   R   e   a   d   )   :   "   "   }   ;   v   a   r       S   Y   S   C   A   L   L   S   =   {   D   E   F   A   U   L   T   _   P   O   L   L   M   A   S   K   :   5   ,   c   a   l   c   u   l   a   t   e   A   t   (   d   i   r   f   d   ,   p   a   t   h   ,   a   l   l   o   w   E   m   p   t   y   )   {   i   f   (   P   A   T   H   .   i   s   A   b   s   (   p   a   t   h   )   )   {   r   e   t   u   r   n       p   a   t   h   }   v   a   r       d   i   r   ;   i   f   (   d   i   r   f   d   =   =   =   -   1   0   0   )   {   d   i   r   =   F   S   .   c   w   d   (   )   }   e   l   s   e   {   v   a   r       d   i   r   s   t   r   e   a   m   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   e   a   m   F   r   o   m   F   D   (   d   i   r   f   d   )   ;   d   i   r   =   d   i   r   s   t   r   e   a   m   .   p   a   t   h   }   i   f   (   p   a   t   h   .   l   e   n   g   t   h   =   =   0   )   {   i   f   (   !   a   l   l   o   w   E   m   p   t   y   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   }   r   e   t   u   r   n       d   i   r   }   r   e   t   u   r   n       d   i   r   +   "   /   "   +   p   a   t   h   }   ,   w   r   i   t   e   S   t   a   t   (   b   u   f   ,   s   t   a   t   )   {   H   E   A   P   3   2   [   b   u   f   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   .   d   e   v   ;   H   E   A   P   3   2   [   b   u   f   +   4   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   .   m   o   d   e   ;   H   E   A   P   U   3   2   [   b   u   f   +   8   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   .   n   l   i   n   k   ;   H   E   A   P   3   2   [   b   u   f   +   1   2   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   .   u   i   d   ;   H   E   A   P   3   2   [   b   u   f   +   1   6   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   .   g   i   d   ;   H   E   A   P   3   2   [   b   u   f   +   2   0   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   .   r   d   e   v   ;   H   E   A   P   6   4   [   b   u   f   +   2   4   >   >   >   3   >   >   >   0   ]   =   B   i   g   I   n   t   (   s   t   a   t   .   s   i   z   e   )   ;   H   E   A   P   3   2   [   b   u   f   +   3   2   >   >   >   2   >   >   >   0   ]   =   4   0   9   6   ;   H   E   A   P   3   2   [   b   u   f   +   3   6   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   .   b   l   o   c   k   s   ;   v   a   r       a   t   i   m   e   =   s   t   a   t   .   a   t   i   m   e   .   g   e   t   T   i   m   e   (   )   ;   v   a   r       m   t   i   m   e   =   s   t   a   t   .   m   t   i   m   e   .   g   e   t   T   i   m   e   (   )   ;   v   a   r       c   t   i   m   e   =   s   t   a   t   .   c   t   i   m   e   .   g   e   t   T   i   m   e   (   )   ;   H   E   A   P   6   4   [   b   u   f   +   4   0   >   >   >   3   >   >   >   0   ]   =   B   i   g   I   n   t   (   M   a   t   h   .   f   l   o   o   r   (   a   t   i   m   e   /   1   e   3   )   )   ;   H   E   A   P   U   3   2   [   b   u   f   +   4   8   >   >   >   2   >   >   >   0   ]   =   a   t   i   m   e   %   1   e   3   *   1   e   3   *   1   e   3   ;   H   E   A   P   6   4   [   b   u   f   +   5   6   >   >   >   3   >   >   >   0   ]   =   B   i   g   I   n   t   (   M   a   t   h   .   f   l   o   o   r   (   m   t   i   m   e   /   1   e   3   )   )   ;   H   E   A   P   U   3   2   [   b   u   f   +   6   4   >   >   >   2   >   >   >   0   ]   =   m   t   i   m   e   %   1   e   3   *   1   e   3   *   1   e   3   ;   H   E   A   P   6   4   [   b   u   f   +   7   2   >   >   >   3   >   >   >   0   ]   =   B   i   g   I   n   t   (   M   a   t   h   .   f   l   o   o   r   (   c   t   i   m   e   /   1   e   3   )   )   ;   H   E   A   P   U   3   2   [   b   u   f   +   8   0   >   >   >   2   >   >   >   0   ]   =   c   t   i   m   e   %   1   e   3   *   1   e   3   *   1   e   3   ;   H   E   A   P   6   4   [   b   u   f   +   8   8   >   >   >   3   >   >   >   0   ]   =   B   i   g   I   n   t   (   s   t   a   t   .   i   n   o   )   ;   r   e   t   u   r   n       0   }   ,   w   r   i   t   e   S   t   a   t   F   s   (   b   u   f   ,   s   t   a   t   s   )   {   H   E   A   P   3   2   [   b   u   f   +   4   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   s   .   b   s   i   z   e   ;   H   E   A   P   3   2   [   b   u   f   +   4   0   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   s   .   b   s   i   z   e   ;   H   E   A   P   3   2   [   b   u   f   +   8   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   s   .   b   l   o   c   k   s   ;   H   E   A   P   3   2   [   b   u   f   +   1   2   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   s   .   b   f   r   e   e   ;   H   E   A   P   3   2   [   b   u   f   +   1   6   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   s   .   b   a   v   a   i   l   ;   H   E   A   P   3   2   [   b   u   f   +   2   0   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   s   .   f   i   l   e   s   ;   H   E   A   P   3   2   [   b   u   f   +   2   4   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   s   .   f   f   r   e   e   ;   H   E   A   P   3   2   [   b   u   f   +   2   8   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   s   .   f   s   i   d   ;   H   E   A   P   3   2   [   b   u   f   +   4   4   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   s   .   f   l   a   g   s   ;   H   E   A   P   3   2   [   b   u   f   +   3   6   >   >   >   2   >   >   >   0   ]   =   s   t   a   t   s   .   n   a   m   e   l   e   n   }   ,   d   o   M   s   y   n   c   (   a   d   d   r   ,   s   t   r   e   a   m   ,   l   e   n   ,   f   l   a   g   s   ,   o   f   f   s   e   t   )   {   i   f   (   !   F   S   .   i   s   F   i   l   e   (   s   t   r   e   a   m   .   n   o   d   e   .   m   o   d   e   )   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   3   )   }   i   f   (   f   l   a   g   s   &   2   )   {   r   e   t   u   r   n       0   }   v   a   r       b   u   f   f   e   r   =   H   E   A   P   U   8   .   s   l   i   c   e   (   a   d   d   r   ,   a   d   d   r   +   l   e   n   )   ;   F   S   .   m   s   y   n   c   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   l   e   n   ,   f   l   a   g   s   )   }   ,   g   e   t   S   t   r   e   a   m   F   r   o   m   F   D   (   f   d   )   {   v   a   r       s   t   r   e   a   m   =   F   S   .   g   e   t   S   t   r   e   a   m   C   h   e   c   k   e   d   (   f   d   )   ;   r   e   t   u   r   n       s   t   r   e   a   m   }   ,   v   a   r   a   r   g   s   :   u   n   d   e   f   i   n   e   d   ,   g   e   t   S   t   r   (   p   t   r   )   {   v   a   r       r   e   t   =   U   T   F   8   T   o   S   t   r   i   n   g   (   p   t   r   )   ;   r   e   t   u   r   n       r   e   t   }   }   ;   f   u   n   c   t   i   o   n       _   _   _   s   y   s   c   a   l   l   _   f   c   n   t   l   6   4   (   f   d   ,   c   m   d   ,   v   a   r   a   r   g   s   )   {   v   a   r   a   r   g   s   >   >   >   =   0   ;   S   Y   S   C   A   L   L   S   .   v   a   r   a   r   g   s   =   v   a   r   a   r   g   s   ;   t   r   y   {   v   a   r       s   t   r   e   a   m   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   e   a   m   F   r   o   m   F   D   (   f   d   )   ;   s   w   i   t   c   h   (   c   m   d   )   {   c   a   s   e       0   :   {   v   a   r       a   r   g   =   s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   I   (   )   ;   i   f   (   a   r   g   <   0   )   {   r   e   t   u   r   n   -   2   8   }   w   h   i   l   e   (   F   S   .   s   t   r   e   a   m   s   [   a   r   g   ]   )   {   a   r   g   +   +   }   v   a   r       n   e   w   S   t   r   e   a   m   ;   n   e   w   S   t   r   e   a   m   =   F   S   .   d   u   p   S   t   r   e   a   m   (   s   t   r   e   a   m   ,   a   r   g   )   ;   r   e   t   u   r   n       n   e   w   S   t   r   e   a   m   .   f   d   }   c   a   s   e       1   :   c   a   s   e       2   :   r   e   t   u   r   n       0   ;   c   a   s   e       3   :   r   e   t   u   r   n       s   t   r   e   a   m   .   f   l   a   g   s   ;   c   a   s   e       4   :   {   v   a   r       a   r   g   =   s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   I   (   )   ;   s   t   r   e   a   m   .   f   l   a   g   s   |   =   a   r   g   ;   r   e   t   u   r   n       0   }   c   a   s   e       1   2   :   {   v   a   r       a   r   g   =   s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   P   (   )   ;   v   a   r       o   f   f   s   e   t   =   0   ;   H   E   A   P   1   6   [   a   r   g   +   o   f   f   s   e   t   >   >   >   1   >   >   >   0   ]   =   2   ;   r   e   t   u   r   n       0   }   c   a   s   e       1   3   :   c   a   s   e       1   4   :   r   e   t   u   r   n       0   }   r   e   t   u   r   n   -   2   8   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n   -   e   .   e   r   r   n   o   }   }   v   a   r       s   t   r   i   n   g   T   o   U   T   F   8   =   (   s   t   r   ,   o   u   t   P   t   r   ,   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   )   =   >   s   t   r   i   n   g   T   o   U   T   F   8   A   r   r   a   y   (   s   t   r   ,   H   E   A   P   U   8   ,   o   u   t   P   t   r   ,   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   )   ;   f   u   n   c   t   i   o   n       _   _   _   s   y   s   c   a   l   l   _   g   e   t   d   e   n   t   s   6   4   (   f   d   ,   d   i   r   p   ,   c   o   u   n   t   )   {   d   i   r   p   >   >   >   =   0   ;   c   o   u   n   t   >   >   >   =   0   ;   t   r   y   {   v   a   r       s   t   r   e   a   m   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   e   a   m   F   r   o   m   F   D   (   f   d   )   ;   s   t   r   e   a   m   .   g   e   t   d   e   n   t   s   |   |   =   F   S   .   r   e   a   d   d   i   r   (   s   t   r   e   a   m   .   p   a   t   h   )   ;   v   a   r       s   t   r   u   c   t   _   s   i   z   e   =   2   8   0   ;   v   a   r       p   o   s   =   0   ;   v   a   r       o   f   f   =   F   S   .   l   l   s   e   e   k   (   s   t   r   e   a   m   ,   0   ,   1   )   ;   v   a   r       s   t   a   r   t   I   d   x   =   M   a   t   h   .   f   l   o   o   r   (   o   f   f   /   s   t   r   u   c   t   _   s   i   z   e   )   ;   v   a   r       e   n   d   I   d   x   =   M   a   t   h   .   m   i   n   (   s   t   r   e   a   m   .   g   e   t   d   e   n   t   s   .   l   e   n   g   t   h   ,   s   t   a   r   t   I   d   x   +   M   a   t   h   .   f   l   o   o   r   (   c   o   u   n   t   /   s   t   r   u   c   t   _   s   i   z   e   )   )   ;   f   o   r   (   v   a   r       i   d   x   =   s   t   a   r   t   I   d   x   ;   i   d   x   <   e   n   d   I   d   x   ;   i   d   x   +   +   )   {   v   a   r       i   d   ;   v   a   r       t   y   p   e   ;   v   a   r       n   a   m   e   =   s   t   r   e   a   m   .   g   e   t   d   e   n   t   s   [   i   d   x   ]   ;   i   f   (   n   a   m   e   =   =   =   "   .   "   )   {   i   d   =   s   t   r   e   a   m   .   n   o   d   e   .   i   d   ;   t   y   p   e   =   4   }   e   l   s   e       i   f   (   n   a   m   e   =   =   =   "   .   .   "   )   {   v   a   r       l   o   o   k   u   p   =   F   S   .   l   o   o   k   u   p   P   a   t   h   (   s   t   r   e   a   m   .   p   a   t   h   ,   {   p   a   r   e   n   t   :   t   r   u   e   }   )   ;   i   d   =   l   o   o   k   u   p   .   n   o   d   e   .   i   d   ;   t   y   p   e   =   4   }   e   l   s   e   {   v   a   r       c   h   i   l   d   ;   t   r   y   {   c   h   i   l   d   =   F   S   .   l   o   o   k   u   p   N   o   d   e   (   s   t   r   e   a   m   .   n   o   d   e   ,   n   a   m   e   )   }   c   a   t   c   h   (   e   )   {   i   f   (   e   ?   .   e   r   r   n   o   =   =   =   2   8   )   {   c   o   n   t   i   n   u   e   }   t   h   r   o   w       e   }   i   d   =   c   h   i   l   d   .   i   d   ;   t   y   p   e   =   F   S   .   i   s   C   h   r   d   e   v   (   c   h   i   l   d   .   m   o   d   e   )   ?   2   :   F   S   .   i   s   D   i   r   (   c   h   i   l   d   .   m   o   d   e   )   ?   4   :   F   S   .   i   s   L   i   n   k   (   c   h   i   l   d   .   m   o   d   e   )   ?   1   0   :   8   }   H   E   A   P   6   4   [   d   i   r   p   +   p   o   s   >   >   >   3   >   >   >   0   ]   =   B   i   g   I   n   t   (   i   d   )   ;   H   E   A   P   6   4   [   d   i   r   p   +   p   o   s   +   8   >   >   >   3   >   >   >   0   ]   =   B   i   g   I   n   t   (   (   i   d   x   +   1   )   *   s   t   r   u   c   t   _   s   i   z   e   )   ;   H   E   A   P   1   6   [   d   i   r   p   +   p   o   s   +   1   6   >   >   >   1   >   >   >   0   ]   =   2   8   0   ;   H   E   A   P   8   [   d   i   r   p   +   p   o   s   +   1   8   >   >   >   0   ]   =   t   y   p   e   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   n   a   m   e   ,   d   i   r   p   +   p   o   s   +   1   9   ,   2   5   6   )   ;   p   o   s   +   =   s   t   r   u   c   t   _   s   i   z   e   }   F   S   .   l   l   s   e   e   k   (   s   t   r   e   a   m   ,   i   d   x   *   s   t   r   u   c   t   _   s   i   z   e   ,   0   )   ;   r   e   t   u   r   n       p   o   s   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n   -   e   .   e   r   r   n   o   }   }   f   u   n   c   t   i   o   n       _   _   _   s   y   s   c   a   l   l   _   i   o   c   t   l   (   f   d   ,   o   p   ,   v   a   r   a   r   g   s   )   {   v   a   r   a   r   g   s   >   >   >   =   0   ;   S   Y   S   C   A   L   L   S   .   v   a   r   a   r   g   s   =   v   a   r   a   r   g   s   ;   t   r   y   {   v   a   r       s   t   r   e   a   m   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   e   a   m   F   r   o   m   F   D   (   f   d   )   ;   s   w   i   t   c   h   (   o   p   )   {   c   a   s   e       2   1   5   0   9   :   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   )   r   e   t   u   r   n   -   5   9   ;   r   e   t   u   r   n       0   }   c   a   s   e       2   1   5   0   5   :   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   )   r   e   t   u   r   n   -   5   9   ;   i   f   (   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   i   o   c   t   l   _   t   c   g   e   t   s   )   {   v   a   r       t   e   r   m   i   o   s   =   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   i   o   c   t   l   _   t   c   g   e   t   s   (   s   t   r   e   a   m   )   ;   v   a   r       a   r   g   p   =   s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   P   (   )   ;   H   E   A   P   3   2   [   a   r   g   p   >   >   >   2   >   >   >   0   ]   =   t   e   r   m   i   o   s   .   c   _   i   f   l   a   g   |   |   0   ;   H   E   A   P   3   2   [   a   r   g   p   +   4   >   >   >   2   >   >   >   0   ]   =   t   e   r   m   i   o   s   .   c   _   o   f   l   a   g   |   |   0   ;   H   E   A   P   3   2   [   a   r   g   p   +   8   >   >   >   2   >   >   >   0   ]   =   t   e   r   m   i   o   s   .   c   _   c   f   l   a   g   |   |   0   ;   H   E   A   P   3   2   [   a   r   g   p   +   1   2   >   >   >   2   >   >   >   0   ]   =   t   e   r   m   i   o   s   .   c   _   l   f   l   a   g   |   |   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   3   2   ;   i   +   +   )   {   H   E   A   P   8   [   a   r   g   p   +   i   +   1   7   >   >   >   0   ]   =   t   e   r   m   i   o   s   .   c   _   c   c   [   i   ]   |   |   0   }   r   e   t   u   r   n       0   }   r   e   t   u   r   n       0   }   c   a   s   e       2   1   5   1   0   :   c   a   s   e       2   1   5   1   1   :   c   a   s   e       2   1   5   1   2   :   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   )   r   e   t   u   r   n   -   5   9   ;   r   e   t   u   r   n       0   }   c   a   s   e       2   1   5   0   6   :   c   a   s   e       2   1   5   0   7   :   c   a   s   e       2   1   5   0   8   :   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   )   r   e   t   u   r   n   -   5   9   ;   i   f   (   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   i   o   c   t   l   _   t   c   s   e   t   s   )   {   v   a   r       a   r   g   p   =   s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   P   (   )   ;   v   a   r       c   _   i   f   l   a   g   =   H   E   A   P   3   2   [   a   r   g   p   >   >   >   2   >   >   >   0   ]   ;   v   a   r       c   _   o   f   l   a   g   =   H   E   A   P   3   2   [   a   r   g   p   +   4   >   >   >   2   >   >   >   0   ]   ;   v   a   r       c   _   c   f   l   a   g   =   H   E   A   P   3   2   [   a   r   g   p   +   8   >   >   >   2   >   >   >   0   ]   ;   v   a   r       c   _   l   f   l   a   g   =   H   E   A   P   3   2   [   a   r   g   p   +   1   2   >   >   >   2   >   >   >   0   ]   ;   v   a   r       c   _   c   c   =   [   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   3   2   ;   i   +   +   )   {   c   _   c   c   .   p   u   s   h   (   H   E   A   P   8   [   a   r   g   p   +   i   +   1   7   >   >   >   0   ]   )   }   r   e   t   u   r   n       s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   i   o   c   t   l   _   t   c   s   e   t   s   (   s   t   r   e   a   m   .   t   t   y   ,   o   p   ,   {   c   _   i   f   l   a   g   ,   c   _   o   f   l   a   g   ,   c   _   c   f   l   a   g   ,   c   _   l   f   l   a   g   ,   c   _   c   c   }   )   }   r   e   t   u   r   n       0   }   c   a   s   e       2   1   5   1   9   :   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   )   r   e   t   u   r   n   -   5   9   ;   v   a   r       a   r   g   p   =   s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   P   (   )   ;   H   E   A   P   3   2   [   a   r   g   p   >   >   >   2   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       0   }   c   a   s   e       2   1   5   2   0   :   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   )   r   e   t   u   r   n   -   5   9   ;   r   e   t   u   r   n   -   2   8   }   c   a   s   e       2   1   5   3   1   :   {   v   a   r       a   r   g   p   =   s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   P   (   )   ;   r   e   t   u   r   n       F   S   .   i   o   c   t   l   (   s   t   r   e   a   m   ,   o   p   ,   a   r   g   p   )   }   c   a   s   e       2   1   5   2   3   :   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   )   r   e   t   u   r   n   -   5   9   ;   i   f   (   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   i   o   c   t   l   _   t   i   o   c   g   w   i   n   s   z   )   {   v   a   r       w   i   n   s   i   z   e   =   s   t   r   e   a   m   .   t   t   y   .   o   p   s   .   i   o   c   t   l   _   t   i   o   c   g   w   i   n   s   z   (   s   t   r   e   a   m   .   t   t   y   )   ;   v   a   r       a   r   g   p   =   s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   P   (   )   ;   H   E   A   P   1   6   [   a   r   g   p   >   >   >   1   >   >   >   0   ]   =   w   i   n   s   i   z   e   [   0   ]   ;   H   E   A   P   1   6   [   a   r   g   p   +   2   >   >   >   1   >   >   >   0   ]   =   w   i   n   s   i   z   e   [   1   ]   }   r   e   t   u   r   n       0   }   c   a   s   e       2   1   5   2   4   :   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   )   r   e   t   u   r   n   -   5   9   ;   r   e   t   u   r   n       0   }   c   a   s   e       2   1   5   1   5   :   {   i   f   (   !   s   t   r   e   a   m   .   t   t   y   )   r   e   t   u   r   n   -   5   9   ;   r   e   t   u   r   n       0   }   d   e   f   a   u   l   t   :   r   e   t   u   r   n   -   2   8   }   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n   -   e   .   e   r   r   n   o   }   }   f   u   n   c   t   i   o   n       _   _   _   s   y   s   c   a   l   l   _   l   s   t   a   t   6   4   (   p   a   t   h   ,   b   u   f   )   {   p   a   t   h   >   >   >   =   0   ;   b   u   f   >   >   >   =   0   ;   t   r   y   {   p   a   t   h   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   (   p   a   t   h   )   ;   r   e   t   u   r   n       S   Y   S   C   A   L   L   S   .   w   r   i   t   e   S   t   a   t   (   b   u   f   ,   F   S   .   l   s   t   a   t   (   p   a   t   h   )   )   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n   -   e   .   e   r   r   n   o   }   }   f   u   n   c   t   i   o   n       _   _   _   s   y   s   c   a   l   l   _   n   e   w   f   s   t   a   t   a   t   (   d   i   r   f   d   ,   p   a   t   h   ,   b   u   f   ,   f   l   a   g   s   )   {   p   a   t   h   >   >   >   =   0   ;   b   u   f   >   >   >   =   0   ;   t   r   y   {   p   a   t   h   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   (   p   a   t   h   )   ;   v   a   r       n   o   f   o   l   l   o   w   =   f   l   a   g   s   &   2   5   6   ;   v   a   r       a   l   l   o   w   E   m   p   t   y   =   f   l   a   g   s   &   4   0   9   6   ;   f   l   a   g   s   =   f   l   a   g   s   &   ~   6   4   0   0   ;   p   a   t   h   =   S   Y   S   C   A   L   L   S   .   c   a   l   c   u   l   a   t   e   A   t   (   d   i   r   f   d   ,   p   a   t   h   ,   a   l   l   o   w   E   m   p   t   y   )   ;   r   e   t   u   r   n       S   Y   S   C   A   L   L   S   .   w   r   i   t   e   S   t   a   t   (   b   u   f   ,   n   o   f   o   l   l   o   w   ?   F   S   .   l   s   t   a   t   (   p   a   t   h   )   :   F   S   .   s   t   a   t   (   p   a   t   h   )   )   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n   -   e   .   e   r   r   n   o   }   }   f   u   n   c   t   i   o   n       _   _   _   s   y   s   c   a   l   l   _   o   p   e   n   a   t   (   d   i   r   f   d   ,   p   a   t   h   ,   f   l   a   g   s   ,   v   a   r   a   r   g   s   )   {   p   a   t   h   >   >   >   =   0   ;   v   a   r   a   r   g   s   >   >   >   =   0   ;   S   Y   S   C   A   L   L   S   .   v   a   r   a   r   g   s   =   v   a   r   a   r   g   s   ;   t   r   y   {   p   a   t   h   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   (   p   a   t   h   )   ;   p   a   t   h   =   S   Y   S   C   A   L   L   S   .   c   a   l   c   u   l   a   t   e   A   t   (   d   i   r   f   d   ,   p   a   t   h   )   ;   v   a   r       m   o   d   e   =   v   a   r   a   r   g   s   ?   s   y   s   c   a   l   l   G   e   t   V   a   r   a   r   g   I   (   )   :   0   ;   r   e   t   u   r   n       F   S   .   o   p   e   n   (   p   a   t   h   ,   f   l   a   g   s   ,   m   o   d   e   )   .   f   d   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n   -   e   .   e   r   r   n   o   }   }   f   u   n   c   t   i   o   n       _   _   _   s   y   s   c   a   l   l   _   r   e   a   d   l   i   n   k   a   t   (   d   i   r   f   d   ,   p   a   t   h   ,   b   u   f   ,   b   u   f   s   i   z   e   )   {   p   a   t   h   >   >   >   =   0   ;   b   u   f   >   >   >   =   0   ;   b   u   f   s   i   z   e   >   >   >   =   0   ;   t   r   y   {   p   a   t   h   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   (   p   a   t   h   )   ;   p   a   t   h   =   S   Y   S   C   A   L   L   S   .   c   a   l   c   u   l   a   t   e   A   t   (   d   i   r   f   d   ,   p   a   t   h   )   ;   i   f   (   b   u   f   s   i   z   e   <   =   0   )   r   e   t   u   r   n   -   2   8   ;   v   a   r       r   e   t   =   F   S   .   r   e   a   d   l   i   n   k   (   p   a   t   h   )   ;   v   a   r       l   e   n   =   M   a   t   h   .   m   i   n   (   b   u   f   s   i   z   e   ,   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   r   e   t   )   )   ;   v   a   r       e   n   d   C   h   a   r   =   H   E   A   P   8   [   b   u   f   +   l   e   n   >   >   >   0   ]   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   r   e   t   ,   b   u   f   ,   b   u   f   s   i   z   e   +   1   )   ;   H   E   A   P   8   [   b   u   f   +   l   e   n   >   >   >   0   ]   =   e   n   d   C   h   a   r   ;   r   e   t   u   r   n       l   e   n   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n   -   e   .   e   r   r   n   o   }   }   f   u   n   c   t   i   o   n       _   _   _   s   y   s   c   a   l   l   _   s   t   a   t   6   4   (   p   a   t   h   ,   b   u   f   )   {   p   a   t   h   >   >   >   =   0   ;   b   u   f   >   >   >   =   0   ;   t   r   y   {   p   a   t   h   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   (   p   a   t   h   )   ;   r   e   t   u   r   n       S   Y   S   C   A   L   L   S   .   w   r   i   t   e   S   t   a   t   (   b   u   f   ,   F   S   .   s   t   a   t   (   p   a   t   h   )   )   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n   -   e   .   e   r   r   n   o   }   }   v   a   r       _   _   a   b   o   r   t   _   j   s   =   (   )   =   >   a   b   o   r   t   (   "   "   )   ;   v   a   r       A   s   c   i   i   T   o   S   t   r   i   n   g   =   p   t   r   =   >   {   p   t   r   >   >   >   =   0   ;   v   a   r       s   t   r   =   "   "   ;   w   h   i   l   e   (   1   )   {   v   a   r       c   h   =   H   E   A   P   U   8   [   p   t   r   +   +   >   >   >   0   ]   ;   i   f   (   !   c   h   )   r   e   t   u   r   n       s   t   r   ;   s   t   r   +   =   S   t   r   i   n   g   .   f   r   o   m   C   h   a   r   C   o   d   e   (   c   h   )   }   }   ;   v   a   r       a   w   a   i   t   i   n   g   D   e   p   e   n   d   e   n   c   i   e   s   =   {   }   ;   v   a   r       r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   =   {   }   ;   v   a   r       t   y   p   e   D   e   p   e   n   d   e   n   c   i   e   s   =   {   }   ;   v   a   r       B   i   n   d   i   n   g   E   r   r   o   r   =   c   l   a   s   s       B   i   n   d   i   n   g   E   r   r   o   r       e   x   t   e   n   d   s       E   r   r   o   r   {   c   o   n   s   t   r   u   c   t   o   r   (   m   e   s   s   a   g   e   )   {   s   u   p   e   r   (   m   e   s   s   a   g   e   )   ;   t   h   i   s   .   n   a   m   e   =   "   B   i   n   d   i   n   g   E   r   r   o   r   "   }   }   ;   v   a   r       t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   =   m   e   s   s   a   g   e   =   >   {   t   h   r   o   w       n   e   w       B   i   n   d   i   n   g   E   r   r   o   r   (   m   e   s   s   a   g   e   )   }   ;   f   u   n   c   t   i   o   n       s   h   a   r   e   d   R   e   g   i   s   t   e   r   T   y   p   e   (   r   a   w   T   y   p   e   ,   r   e   g   i   s   t   e   r   e   d   I   n   s   t   a   n   c   e   ,   o   p   t   i   o   n   s   =   {   }   )   {   v   a   r       n   a   m   e   =   r   e   g   i   s   t   e   r   e   d   I   n   s   t   a   n   c   e   .   n   a   m   e   ;   i   f   (   !   r   a   w   T   y   p   e   )   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   `   t   y   p   e       "   $   {   n   a   m   e   }   "       m   u   s   t       h   a   v   e       a       p   o   s   i   t   i   v   e       i   n   t   e   g   e   r       t   y   p   e   i   d       p   o   i   n   t   e   r   `   )   }   i   f   (   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   .   h   a   s   O   w   n   P   r   o   p   e   r   t   y   (   r   a   w   T   y   p   e   )   )   {   i   f   (   o   p   t   i   o   n   s   .   i   g   n   o   r   e   D   u   p   l   i   c   a   t   e   R   e   g   i   s   t   r   a   t   i   o   n   s   )   {   r   e   t   u   r   n   }   e   l   s   e   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   `   C   a   n   n   o   t       r   e   g   i   s   t   e   r       t   y   p   e       '   $   {   n   a   m   e   }   '       t   w   i   c   e   `   )   }   }   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   [   r   a   w   T   y   p   e   ]   =   r   e   g   i   s   t   e   r   e   d   I   n   s   t   a   n   c   e   ;   d   e   l   e   t   e       t   y   p   e   D   e   p   e   n   d   e   n   c   i   e   s   [   r   a   w   T   y   p   e   ]   ;   i   f   (   a   w   a   i   t   i   n   g   D   e   p   e   n   d   e   n   c   i   e   s   .   h   a   s   O   w   n   P   r   o   p   e   r   t   y   (   r   a   w   T   y   p   e   )   )   {   v   a   r       c   a   l   l   b   a   c   k   s   =   a   w   a   i   t   i   n   g   D   e   p   e   n   d   e   n   c   i   e   s   [   r   a   w   T   y   p   e   ]   ;   d   e   l   e   t   e       a   w   a   i   t   i   n   g   D   e   p   e   n   d   e   n   c   i   e   s   [   r   a   w   T   y   p   e   ]   ;   c   a   l   l   b   a   c   k   s   .   f   o   r   E   a   c   h   (   c   b   =   >   c   b   (   )   )   }   }   f   u   n   c   t   i   o   n       r   e   g   i   s   t   e   r   T   y   p   e   (   r   a   w   T   y   p   e   ,   r   e   g   i   s   t   e   r   e   d   I   n   s   t   a   n   c   e   ,   o   p   t   i   o   n   s   =   {   }   )   {   r   e   t   u   r   n       s   h   a   r   e   d   R   e   g   i   s   t   e   r   T   y   p   e   (   r   a   w   T   y   p   e   ,   r   e   g   i   s   t   e   r   e   d   I   n   s   t   a   n   c   e   ,   o   p   t   i   o   n   s   )   }   v   a   r       i   n   t   e   g   e   r   R   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   =   (   n   a   m   e   ,   w   i   d   t   h   ,   s   i   g   n   e   d   )   =   >   {   s   w   i   t   c   h   (   w   i   d   t   h   )   {   c   a   s   e       1   :   r   e   t   u   r   n       s   i   g   n   e   d   ?   p   o   i   n   t   e   r   =   >   H   E   A   P   8   [   p   o   i   n   t   e   r   >   >   >   0   ]   :   p   o   i   n   t   e   r   =   >   H   E   A   P   U   8   [   p   o   i   n   t   e   r   >   >   >   0   ]   ;   c   a   s   e       2   :   r   e   t   u   r   n       s   i   g   n   e   d   ?   p   o   i   n   t   e   r   =   >   H   E   A   P   1   6   [   p   o   i   n   t   e   r   >   >   >   1   >   >   >   0   ]   :   p   o   i   n   t   e   r   =   >   H   E   A   P   U   1   6   [   p   o   i   n   t   e   r   >   >   >   1   >   >   >   0   ]   ;   c   a   s   e       4   :   r   e   t   u   r   n       s   i   g   n   e   d   ?   p   o   i   n   t   e   r   =   >   H   E   A   P   3   2   [   p   o   i   n   t   e   r   >   >   >   2   >   >   >   0   ]   :   p   o   i   n   t   e   r   =   >   H   E   A   P   U   3   2   [   p   o   i   n   t   e   r   >   >   >   2   >   >   >   0   ]   ;   c   a   s   e       8   :   r   e   t   u   r   n       s   i   g   n   e   d   ?   p   o   i   n   t   e   r   =   >   H   E   A   P   6   4   [   p   o   i   n   t   e   r   >   >   >   3   >   >   >   0   ]   :   p   o   i   n   t   e   r   =   >   H   E   A   P   U   6   4   [   p   o   i   n   t   e   r   >   >   >   3   >   >   >   0   ]   ;   d   e   f   a   u   l   t   :   t   h   r   o   w       n   e   w       T   y   p   e   E   r   r   o   r   (   `   i   n   v   a   l   i   d       i   n   t   e   g   e   r       w   i   d   t   h       (   $   {   w   i   d   t   h   }   )   :       $   {   n   a   m   e   }   `   )   }   }   ;   v   a   r       _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   b   i   g   i   n   t   =   f   u   n   c   t   i   o   n   (   p   r   i   m   i   t   i   v   e   T   y   p   e   ,   n   a   m   e   ,   s   i   z   e   ,   m   i   n   R   a   n   g   e   ,   m   a   x   R   a   n   g   e   )   {   p   r   i   m   i   t   i   v   e   T   y   p   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   s   i   z   e   >   >   >   =   0   ;   n   a   m   e   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   n   a   m   e   )   ;   c   o   n   s   t       i   s   U   n   s   i   g   n   e   d   T   y   p   e   =   m   i   n   R   a   n   g   e   =   =   =   0   n   ;   l   e   t       f   r   o   m   W   i   r   e   T   y   p   e   =   v   a   l   u   e   =   >   v   a   l   u   e   ;   i   f   (   i   s   U   n   s   i   g   n   e   d   T   y   p   e   )   {   c   o   n   s   t       b   i   t   S   i   z   e   =   s   i   z   e   *   8   ;   f   r   o   m   W   i   r   e   T   y   p   e   =   v   a   l   u   e   =   >   B   i   g   I   n   t   .   a   s   U   i   n   t   N   (   b   i   t   S   i   z   e   ,   v   a   l   u   e   )   ;   m   a   x   R   a   n   g   e   =   f   r   o   m   W   i   r   e   T   y   p   e   (   m   a   x   R   a   n   g   e   )   }   r   e   g   i   s   t   e   r   T   y   p   e   (   p   r   i   m   i   t   i   v   e   T   y   p   e   ,   {   n   a   m   e   ,   f   r   o   m   W   i   r   e   T   y   p   e   ,   t   o   W   i   r   e   T   y   p   e   :   (   d   e   s   t   r   u   c   t   o   r   s   ,   v   a   l   u   e   )   =   >   {   i   f   (   t   y   p   e   o   f       v   a   l   u   e   =   =   "   n   u   m   b   e   r   "   )   {   v   a   l   u   e   =   B   i   g   I   n   t   (   v   a   l   u   e   )   }   r   e   t   u   r   n       v   a   l   u   e   }   ,   a   r   g   P   a   c   k   A   d   v   a   n   c   e   :   G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   ,   r   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   :   i   n   t   e   g   e   r   R   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   (   n   a   m   e   ,   s   i   z   e   ,   !   i   s   U   n   s   i   g   n   e   d   T   y   p   e   )   ,   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   :   n   u   l   l   }   )   }   ;   v   a   r       G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   =   8   ;   f   u   n   c   t   i   o   n       _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   b   o   o   l   (   r   a   w   T   y   p   e   ,   n   a   m   e   ,   t   r   u   e   V   a   l   u   e   ,   f   a   l   s   e   V   a   l   u   e   )   {   r   a   w   T   y   p   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   n   a   m   e   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   n   a   m   e   )   ;   r   e   g   i   s   t   e   r   T   y   p   e   (   r   a   w   T   y   p   e   ,   {   n   a   m   e   ,   f   r   o   m   W   i   r   e   T   y   p   e   :   f   u   n   c   t   i   o   n   (   w   t   )   {   r   e   t   u   r   n   !   !   w   t   }   ,   t   o   W   i   r   e   T   y   p   e   :   f   u   n   c   t   i   o   n   (   d   e   s   t   r   u   c   t   o   r   s   ,   o   )   {   r   e   t   u   r   n       o   ?   t   r   u   e   V   a   l   u   e   :   f   a   l   s   e   V   a   l   u   e   }   ,   a   r   g   P   a   c   k   A   d   v   a   n   c   e   :   G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   ,   r   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   :   f   u   n   c   t   i   o   n   (   p   o   i   n   t   e   r   )   {   r   e   t   u   r   n       t   h   i   s   [   "   f   r   o   m   W   i   r   e   T   y   p   e   "   ]   (   H   E   A   P   U   8   [   p   o   i   n   t   e   r   >   >   >   0   ]   )   }   ,   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   :   n   u   l   l   }   )   }   v   a   r       e   m   v   a   l   _   f   r   e   e   l   i   s   t   =   [   ]   ;   v   a   r       e   m   v   a   l   _   h   a   n   d   l   e   s   =   [   0   ,   1   ,   ,   1   ,   n   u   l   l   ,   1   ,   t   r   u   e   ,   1   ,   f   a   l   s   e   ,   1   ]   ;   f   u   n   c   t   i   o   n       _   _   e   m   v   a   l   _   d   e   c   r   e   f   (   h   a   n   d   l   e   )   {   h   a   n   d   l   e   >   >   >   =   0   ;   i   f   (   h   a   n   d   l   e   >   9   &   &   0   =   =   =   -   -   e   m   v   a   l   _   h   a   n   d   l   e   s   [   h   a   n   d   l   e   +   1   ]   )   {   e   m   v   a   l   _   h   a   n   d   l   e   s   [   h   a   n   d   l   e   ]   =   u   n   d   e   f   i   n   e   d   ;   e   m   v   a   l   _   f   r   e   e   l   i   s   t   .   p   u   s   h   (   h   a   n   d   l   e   )   }   }   v   a   r       E   m   v   a   l   =   {   t   o   V   a   l   u   e   :   h   a   n   d   l   e   =   >   {   i   f   (   !   h   a   n   d   l   e   )   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   `   C   a   n   n   o   t       u   s   e       d   e   l   e   t   e   d       v   a   l   .       h   a   n   d   l   e       =       $   {   h   a   n   d   l   e   }   `   )   }   r   e   t   u   r   n       e   m   v   a   l   _   h   a   n   d   l   e   s   [   h   a   n   d   l   e   ]   }   ,   t   o   H   a   n   d   l   e   :   v   a   l   u   e   =   >   {   s   w   i   t   c   h   (   v   a   l   u   e   )   {   c   a   s   e       u   n   d   e   f   i   n   e   d   :   r   e   t   u   r   n       2   ;   c   a   s   e       n   u   l   l   :   r   e   t   u   r   n       4   ;   c   a   s   e       t   r   u   e   :   r   e   t   u   r   n       6   ;   c   a   s   e       f   a   l   s   e   :   r   e   t   u   r   n       8   ;   d   e   f   a   u   l   t   :   {   c   o   n   s   t       h   a   n   d   l   e   =   e   m   v   a   l   _   f   r   e   e   l   i   s   t   .   p   o   p   (   )   |   |   e   m   v   a   l   _   h   a   n   d   l   e   s   .   l   e   n   g   t   h   ;   e   m   v   a   l   _   h   a   n   d   l   e   s   [   h   a   n   d   l   e   ]   =   v   a   l   u   e   ;   e   m   v   a   l   _   h   a   n   d   l   e   s   [   h   a   n   d   l   e   +   1   ]   =   1   ;   r   e   t   u   r   n       h   a   n   d   l   e   }   }   }   }   ;   f   u   n   c   t   i   o   n       r   e   a   d   P   o   i   n   t   e   r   (   p   o   i   n   t   e   r   )   {   r   e   t   u   r   n       t   h   i   s   [   "   f   r   o   m   W   i   r   e   T   y   p   e   "   ]   (   H   E   A   P   U   3   2   [   p   o   i   n   t   e   r   >   >   >   2   >   >   >   0   ]   )   }   v   a   r       E   m   V   a   l   T   y   p   e   =   {   n   a   m   e   :   "   e   m   s   c   r   i   p   t   e   n   :   :   v   a   l   "   ,   f   r   o   m   W   i   r   e   T   y   p   e   :   h   a   n   d   l   e   =   >   {   v   a   r       r   v   =   E   m   v   a   l   .   t   o   V   a   l   u   e   (   h   a   n   d   l   e   )   ;   _   _   e   m   v   a   l   _   d   e   c   r   e   f   (   h   a   n   d   l   e   )   ;   r   e   t   u   r   n       r   v   }   ,   t   o   W   i   r   e   T   y   p   e   :   (   d   e   s   t   r   u   c   t   o   r   s   ,   v   a   l   u   e   )   =   >   E   m   v   a   l   .   t   o   H   a   n   d   l   e   (   v   a   l   u   e   )   ,   a   r   g   P   a   c   k   A   d   v   a   n   c   e   :   G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   ,   r   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   :   r   e   a   d   P   o   i   n   t   e   r   ,   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   :   n   u   l   l   }   ;   f   u   n   c   t   i   o   n       _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   e   m   v   a   l   (   r   a   w   T   y   p   e   )   {   r   a   w   T   y   p   e   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   T   y   p   e   (   r   a   w   T   y   p   e   ,   E   m   V   a   l   T   y   p   e   )   }   v   a   r       f   l   o   a   t   R   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   =   (   n   a   m   e   ,   w   i   d   t   h   )   =   >   {   s   w   i   t   c   h   (   w   i   d   t   h   )   {   c   a   s   e       4   :   r   e   t   u   r   n       f   u   n   c   t   i   o   n   (   p   o   i   n   t   e   r   )   {   r   e   t   u   r   n       t   h   i   s   [   "   f   r   o   m   W   i   r   e   T   y   p   e   "   ]   (   H   E   A   P   F   3   2   [   p   o   i   n   t   e   r   >   >   >   2   >   >   >   0   ]   )   }   ;   c   a   s   e       8   :   r   e   t   u   r   n       f   u   n   c   t   i   o   n   (   p   o   i   n   t   e   r   )   {   r   e   t   u   r   n       t   h   i   s   [   "   f   r   o   m   W   i   r   e   T   y   p   e   "   ]   (   H   E   A   P   F   6   4   [   p   o   i   n   t   e   r   >   >   >   3   >   >   >   0   ]   )   }   ;   d   e   f   a   u   l   t   :   t   h   r   o   w       n   e   w       T   y   p   e   E   r   r   o   r   (   `   i   n   v   a   l   i   d       f   l   o   a   t       w   i   d   t   h       (   $   {   w   i   d   t   h   }   )   :       $   {   n   a   m   e   }   `   )   }   }   ;   v   a   r       _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   f   l   o   a   t   =   f   u   n   c   t   i   o   n   (   r   a   w   T   y   p   e   ,   n   a   m   e   ,   s   i   z   e   )   {   r   a   w   T   y   p   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   s   i   z   e   >   >   >   =   0   ;   n   a   m   e   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   n   a   m   e   )   ;   r   e   g   i   s   t   e   r   T   y   p   e   (   r   a   w   T   y   p   e   ,   {   n   a   m   e   ,   f   r   o   m   W   i   r   e   T   y   p   e   :   v   a   l   u   e   =   >   v   a   l   u   e   ,   t   o   W   i   r   e   T   y   p   e   :   (   d   e   s   t   r   u   c   t   o   r   s   ,   v   a   l   u   e   )   =   >   v   a   l   u   e   ,   a   r   g   P   a   c   k   A   d   v   a   n   c   e   :   G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   ,   r   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   :   f   l   o   a   t   R   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   (   n   a   m   e   ,   s   i   z   e   )   ,   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   :   n   u   l   l   }   )   }   ;   v   a   r       c   r   e   a   t   e   N   a   m   e   d   F   u   n   c   t   i   o   n   =   (   n   a   m   e   ,   f   u   n   c   )   =   >   O   b   j   e   c   t   .   d   e   f   i   n   e   P   r   o   p   e   r   t   y   (   f   u   n   c   ,   "   n   a   m   e   "   ,   {   v   a   l   u   e   :   n   a   m   e   }   )   ;   v   a   r       r   u   n   D   e   s   t   r   u   c   t   o   r   s   =   d   e   s   t   r   u   c   t   o   r   s   =   >   {   w   h   i   l   e   (   d   e   s   t   r   u   c   t   o   r   s   .   l   e   n   g   t   h   )   {   v   a   r       p   t   r   =   d   e   s   t   r   u   c   t   o   r   s   .   p   o   p   (   )   ;   v   a   r       d   e   l   =   d   e   s   t   r   u   c   t   o   r   s   .   p   o   p   (   )   ;   d   e   l   (   p   t   r   )   }   }   ;   f   u   n   c   t   i   o   n       u   s   e   s   D   e   s   t   r   u   c   t   o   r   S   t   a   c   k   (   a   r   g   T   y   p   e   s   )   {   f   o   r   (   v   a   r       i   =   1   ;   i   <   a   r   g   T   y   p   e   s   .   l   e   n   g   t   h   ;   +   +   i   )   {   i   f   (   a   r   g   T   y   p   e   s   [   i   ]   !   =   =   n   u   l   l   &   &   a   r   g   T   y   p   e   s   [   i   ]   .   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   =   =   =   u   n   d   e   f   i   n   e   d   )   {   r   e   t   u   r   n       t   r   u   e   }   }   r   e   t   u   r   n       f   a   l   s   e   }   f   u   n   c   t   i   o   n       c   r   e   a   t   e   J   s   I   n   v   o   k   e   r   (   a   r   g   T   y   p   e   s   ,   i   s   C   l   a   s   s   M   e   t   h   o   d   F   u   n   c   ,   r   e   t   u   r   n   s   ,   i   s   A   s   y   n   c   )   {   v   a   r       n   e   e   d   s   D   e   s   t   r   u   c   t   o   r   S   t   a   c   k   =   u   s   e   s   D   e   s   t   r   u   c   t   o   r   S   t   a   c   k   (   a   r   g   T   y   p   e   s   )   ;   v   a   r       a   r   g   C   o   u   n   t   =   a   r   g   T   y   p   e   s   .   l   e   n   g   t   h   -   2   ;   v   a   r       a   r   g   s   L   i   s   t   =   [   ]   ;   v   a   r       a   r   g   s   L   i   s   t   W   i   r   e   d   =   [   "   f   n   "   ]   ;   i   f   (   i   s   C   l   a   s   s   M   e   t   h   o   d   F   u   n   c   )   {   a   r   g   s   L   i   s   t   W   i   r   e   d   .   p   u   s   h   (   "   t   h   i   s   W   i   r   e   d   "   )   }   f   o   r   (   v   a   r       i   =   0   ;   i   <   a   r   g   C   o   u   n   t   ;   +   +   i   )   {   a   r   g   s   L   i   s   t   .   p   u   s   h   (   `   a   r   g   $   {   i   }   `   )   ;   a   r   g   s   L   i   s   t   W   i   r   e   d   .   p   u   s   h   (   `   a   r   g   $   {   i   }   W   i   r   e   d   `   )   }   a   r   g   s   L   i   s   t   =   a   r   g   s   L   i   s   t   .   j   o   i   n   (   "   ,   "   )   ;   a   r   g   s   L   i   s   t   W   i   r   e   d   =   a   r   g   s   L   i   s   t   W   i   r   e   d   .   j   o   i   n   (   "   ,   "   )   ;   v   a   r       i   n   v   o   k   e   r   F   n   B   o   d   y   =   `   r   e   t   u   r   n       f   u   n   c   t   i   o   n       (   $   {   a   r   g   s   L   i   s   t   }   )       {   \   n   `   ;   i   f   (   n   e   e   d   s   D   e   s   t   r   u   c   t   o   r   S   t   a   c   k   )   {   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   "   v   a   r       d   e   s   t   r   u   c   t   o   r   s       =       [   ]   ;   \   n   "   }   v   a   r       d   t   o   r   S   t   a   c   k   =   n   e   e   d   s   D   e   s   t   r   u   c   t   o   r   S   t   a   c   k   ?   "   d   e   s   t   r   u   c   t   o   r   s   "   :   "   n   u   l   l   "   ;   v   a   r       a   r   g   s   1   =   [   "   h   u   m   a   n   N   a   m   e   "   ,   "   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   "   ,   "   i   n   v   o   k   e   r   "   ,   "   f   n   "   ,   "   r   u   n   D   e   s   t   r   u   c   t   o   r   s   "   ,   "   r   e   t   T   y   p   e   "   ,   "   c   l   a   s   s   P   a   r   a   m   "   ]   ;   i   f   (   i   s   C   l   a   s   s   M   e   t   h   o   d   F   u   n   c   )   {   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   `   v   a   r       t   h   i   s   W   i   r   e   d       =       c   l   a   s   s   P   a   r   a   m   [   '   t   o   W   i   r   e   T   y   p   e   '   ]   (   $   {   d   t   o   r   S   t   a   c   k   }   ,       t   h   i   s   )   ;   \   n   `   }   f   o   r   (   v   a   r       i   =   0   ;   i   <   a   r   g   C   o   u   n   t   ;   +   +   i   )   {   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   `   v   a   r       a   r   g   $   {   i   }   W   i   r   e   d       =       a   r   g   T   y   p   e   $   {   i   }   [   '   t   o   W   i   r   e   T   y   p   e   '   ]   (   $   {   d   t   o   r   S   t   a   c   k   }   ,       a   r   g   $   {   i   }   )   ;   \   n   `   ;   a   r   g   s   1   .   p   u   s   h   (   `   a   r   g   T   y   p   e   $   {   i   }   `   )   }   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   (   r   e   t   u   r   n   s   |   |   i   s   A   s   y   n   c   ?   "   v   a   r       r   v       =       "   :   "   "   )   +   `   i   n   v   o   k   e   r   (   $   {   a   r   g   s   L   i   s   t   W   i   r   e   d   }   )   ;   \   n   `   ;   i   f   (   n   e   e   d   s   D   e   s   t   r   u   c   t   o   r   S   t   a   c   k   )   {   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   "   r   u   n   D   e   s   t   r   u   c   t   o   r   s   (   d   e   s   t   r   u   c   t   o   r   s   )   ;   \   n   "   }   e   l   s   e   {   f   o   r   (   v   a   r       i   =   i   s   C   l   a   s   s   M   e   t   h   o   d   F   u   n   c   ?   1   :   2   ;   i   <   a   r   g   T   y   p   e   s   .   l   e   n   g   t   h   ;   +   +   i   )   {   v   a   r       p   a   r   a   m   N   a   m   e   =   i   =   =   =   1   ?   "   t   h   i   s   W   i   r   e   d   "   :   "   a   r   g   "   +   (   i   -   2   )   +   "   W   i   r   e   d   "   ;   i   f   (   a   r   g   T   y   p   e   s   [   i   ]   .   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   !   =   =   n   u   l   l   )   {   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   `   $   {   p   a   r   a   m   N   a   m   e   }   _   d   t   o   r   (   $   {   p   a   r   a   m   N   a   m   e   }   )   ;   \   n   `   ;   a   r   g   s   1   .   p   u   s   h   (   `   $   {   p   a   r   a   m   N   a   m   e   }   _   d   t   o   r   `   )   }   }   }   i   f   (   r   e   t   u   r   n   s   )   {   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   "   v   a   r       r   e   t       =       r   e   t   T   y   p   e   [   '   f   r   o   m   W   i   r   e   T   y   p   e   '   ]   (   r   v   )   ;   \   n   "   +   "   r   e   t   u   r   n       r   e   t   ;   \   n   "   }   e   l   s   e   {   }   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   "   }   \   n   "   ;   r   e   t   u   r   n   [   a   r   g   s   1   ,   i   n   v   o   k   e   r   F   n   B   o   d   y   ]   }   f   u   n   c   t   i   o   n       c   r   a   f   t   I   n   v   o   k   e   r   F   u   n   c   t   i   o   n   (   h   u   m   a   n   N   a   m   e   ,   a   r   g   T   y   p   e   s   ,   c   l   a   s   s   T   y   p   e   ,   c   p   p   I   n   v   o   k   e   r   F   u   n   c   ,   c   p   p   T   a   r   g   e   t   F   u   n   c   ,   i   s   A   s   y   n   c   )   {   v   a   r       a   r   g   C   o   u   n   t   =   a   r   g   T   y   p   e   s   .   l   e   n   g   t   h   ;   i   f   (   a   r   g   C   o   u   n   t   <   2   )   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   "   a   r   g   T   y   p   e   s       a   r   r   a   y       s   i   z   e       m   i   s   m   a   t   c   h   !       M   u   s   t       a   t       l   e   a   s   t       g   e   t       r   e   t   u   r   n       v   a   l   u   e       a   n   d       '   t   h   i   s   '       t   y   p   e   s   !   "   )   }   v   a   r       i   s   C   l   a   s   s   M   e   t   h   o   d   F   u   n   c   =   a   r   g   T   y   p   e   s   [   1   ]   !   =   =   n   u   l   l   &   &   c   l   a   s   s   T   y   p   e   !   =   =   n   u   l   l   ;   v   a   r       n   e   e   d   s   D   e   s   t   r   u   c   t   o   r   S   t   a   c   k   =   u   s   e   s   D   e   s   t   r   u   c   t   o   r   S   t   a   c   k   (   a   r   g   T   y   p   e   s   )   ;   v   a   r       r   e   t   u   r   n   s   =   a   r   g   T   y   p   e   s   [   0   ]   .   n   a   m   e   !   =   =   "   v   o   i   d   "   ;   v   a   r       c   l   o   s   u   r   e   A   r   g   s   =   [   h   u   m   a   n   N   a   m   e   ,   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   ,   c   p   p   I   n   v   o   k   e   r   F   u   n   c   ,   c   p   p   T   a   r   g   e   t   F   u   n   c   ,   r   u   n   D   e   s   t   r   u   c   t   o   r   s   ,   a   r   g   T   y   p   e   s   [   0   ]   ,   a   r   g   T   y   p   e   s   [   1   ]   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   a   r   g   C   o   u   n   t   -   2   ;   +   +   i   )   {   c   l   o   s   u   r   e   A   r   g   s   .   p   u   s   h   (   a   r   g   T   y   p   e   s   [   i   +   2   ]   )   }   i   f   (   !   n   e   e   d   s   D   e   s   t   r   u   c   t   o   r   S   t   a   c   k   )   {   f   o   r   (   v   a   r       i   =   i   s   C   l   a   s   s   M   e   t   h   o   d   F   u   n   c   ?   1   :   2   ;   i   <   a   r   g   T   y   p   e   s   .   l   e   n   g   t   h   ;   +   +   i   )   {   i   f   (   a   r   g   T   y   p   e   s   [   i   ]   .   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   !   =   =   n   u   l   l   )   {   c   l   o   s   u   r   e   A   r   g   s   .   p   u   s   h   (   a   r   g   T   y   p   e   s   [   i   ]   .   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   )   }   }   }   l   e   t   [   a   r   g   s   ,   i   n   v   o   k   e   r   F   n   B   o   d   y   ]   =   c   r   e   a   t   e   J   s   I   n   v   o   k   e   r   (   a   r   g   T   y   p   e   s   ,   i   s   C   l   a   s   s   M   e   t   h   o   d   F   u   n   c   ,   r   e   t   u   r   n   s   ,   i   s   A   s   y   n   c   )   ;   v   a   r       i   n   v   o   k   e   r   F   n   =   n   e   w       F   u   n   c   t   i   o   n   (   .   .   .   a   r   g   s   ,   i   n   v   o   k   e   r   F   n   B   o   d   y   )   (   .   .   .   c   l   o   s   u   r   e   A   r   g   s   )   ;   r   e   t   u   r   n       c   r   e   a   t   e   N   a   m   e   d   F   u   n   c   t   i   o   n   (   h   u   m   a   n   N   a   m   e   ,   i   n   v   o   k   e   r   F   n   )   }   v   a   r       e   n   s   u   r   e   O   v   e   r   l   o   a   d   T   a   b   l   e   =   (   p   r   o   t   o   ,   m   e   t   h   o   d   N   a   m   e   ,   h   u   m   a   n   N   a   m   e   )   =   >   {   i   f   (   u   n   d   e   f   i   n   e   d   =   =   =   p   r   o   t   o   [   m   e   t   h   o   d   N   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   )   {   v   a   r       p   r   e   v   F   u   n   c   =   p   r   o   t   o   [   m   e   t   h   o   d   N   a   m   e   ]   ;   p   r   o   t   o   [   m   e   t   h   o   d   N   a   m   e   ]   =   f   u   n   c   t   i   o   n   (   .   .   .   a   r   g   s   )   {   i   f   (   !   p   r   o   t   o   [   m   e   t   h   o   d   N   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   .   h   a   s   O   w   n   P   r   o   p   e   r   t   y   (   a   r   g   s   .   l   e   n   g   t   h   )   )   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   `   F   u   n   c   t   i   o   n       '   $   {   h   u   m   a   n   N   a   m   e   }   '       c   a   l   l   e   d       w   i   t   h       a   n       i   n   v   a   l   i   d       n   u   m   b   e   r       o   f       a   r   g   u   m   e   n   t   s       (   $   {   a   r   g   s   .   l   e   n   g   t   h   }   )       -       e   x   p   e   c   t   s       o   n   e       o   f       (   $   {   p   r   o   t   o   [   m   e   t   h   o   d   N   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   }   )   !   `   )   }   r   e   t   u   r   n       p   r   o   t   o   [   m   e   t   h   o   d   N   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   [   a   r   g   s   .   l   e   n   g   t   h   ]   .   a   p   p   l   y   (   t   h   i   s   ,   a   r   g   s   )   }   ;   p   r   o   t   o   [   m   e   t   h   o   d   N   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   =   [   ]   ;   p   r   o   t   o   [   m   e   t   h   o   d   N   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   [   p   r   e   v   F   u   n   c   .   a   r   g   C   o   u   n   t   ]   =   p   r   e   v   F   u   n   c   }   }   ;   v   a   r       e   x   p   o   s   e   P   u   b   l   i   c   S   y   m   b   o   l   =   (   n   a   m   e   ,   v   a   l   u   e   ,   n   u   m   A   r   g   u   m   e   n   t   s   )   =   >   {   i   f   (   M   o   d   u   l   e   .   h   a   s   O   w   n   P   r   o   p   e   r   t   y   (   n   a   m   e   )   )   {   i   f   (   u   n   d   e   f   i   n   e   d   =   =   =   n   u   m   A   r   g   u   m   e   n   t   s   |   |   u   n   d   e   f   i   n   e   d   !   =   =   M   o   d   u   l   e   [   n   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   &   &   u   n   d   e   f   i   n   e   d   !   =   =   M   o   d   u   l   e   [   n   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   [   n   u   m   A   r   g   u   m   e   n   t   s   ]   )   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   `   C   a   n   n   o   t       r   e   g   i   s   t   e   r       p   u   b   l   i   c       n   a   m   e       '   $   {   n   a   m   e   }   '       t   w   i   c   e   `   )   }   e   n   s   u   r   e   O   v   e   r   l   o   a   d   T   a   b   l   e   (   M   o   d   u   l   e   ,   n   a   m   e   ,   n   a   m   e   )   ;   i   f   (   M   o   d   u   l   e   [   n   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   .   h   a   s   O   w   n   P   r   o   p   e   r   t   y   (   n   u   m   A   r   g   u   m   e   n   t   s   )   )   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   `   C   a   n   n   o   t       r   e   g   i   s   t   e   r       m   u   l   t   i   p   l   e       o   v   e   r   l   o   a   d   s       o   f       a       f   u   n   c   t   i   o   n       w   i   t   h       t   h   e       s   a   m   e       n   u   m   b   e   r       o   f       a   r   g   u   m   e   n   t   s       (   $   {   n   u   m   A   r   g   u   m   e   n   t   s   }   )   !   `   )   }   M   o   d   u   l   e   [   n   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   [   n   u   m   A   r   g   u   m   e   n   t   s   ]   =   v   a   l   u   e   }   e   l   s   e   {   M   o   d   u   l   e   [   n   a   m   e   ]   =   v   a   l   u   e   ;   M   o   d   u   l   e   [   n   a   m   e   ]   .   a   r   g   C   o   u   n   t   =   n   u   m   A   r   g   u   m   e   n   t   s   }   }   ;   v   a   r       h   e   a   p   3   2   V   e   c   t   o   r   T   o   A   r   r   a   y   =   (   c   o   u   n   t   ,   f   i   r   s   t   E   l   e   m   e   n   t   )   =   >   {   v   a   r       a   r   r   a   y   =   [   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   +   )   {   a   r   r   a   y   .   p   u   s   h   (   H   E   A   P   U   3   2   [   f   i   r   s   t   E   l   e   m   e   n   t   +   i   *   4   >   >   >   2   >   >   >   0   ]   )   }   r   e   t   u   r   n       a   r   r   a   y   }   ;   v   a   r       I   n   t   e   r   n   a   l   E   r   r   o   r   =   c   l   a   s   s       I   n   t   e   r   n   a   l   E   r   r   o   r       e   x   t   e   n   d   s       E   r   r   o   r   {   c   o   n   s   t   r   u   c   t   o   r   (   m   e   s   s   a   g   e   )   {   s   u   p   e   r   (   m   e   s   s   a   g   e   )   ;   t   h   i   s   .   n   a   m   e   =   "   I   n   t   e   r   n   a   l   E   r   r   o   r   "   }   }   ;   v   a   r       t   h   r   o   w   I   n   t   e   r   n   a   l   E   r   r   o   r   =   m   e   s   s   a   g   e   =   >   {   t   h   r   o   w       n   e   w       I   n   t   e   r   n   a   l   E   r   r   o   r   (   m   e   s   s   a   g   e   )   }   ;   v   a   r       r   e   p   l   a   c   e   P   u   b   l   i   c   S   y   m   b   o   l   =   (   n   a   m   e   ,   v   a   l   u   e   ,   n   u   m   A   r   g   u   m   e   n   t   s   )   =   >   {   i   f   (   !   M   o   d   u   l   e   .   h   a   s   O   w   n   P   r   o   p   e   r   t   y   (   n   a   m   e   )   )   {   t   h   r   o   w   I   n   t   e   r   n   a   l   E   r   r   o   r   (   "   R   e   p   l   a   c   i   n   g       n   o   n   e   x   i   s   t   e   n   t       p   u   b   l   i   c       s   y   m   b   o   l   "   )   }   i   f   (   u   n   d   e   f   i   n   e   d   !   =   =   M   o   d   u   l   e   [   n   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   &   &   u   n   d   e   f   i   n   e   d   !   =   =   n   u   m   A   r   g   u   m   e   n   t   s   )   {   M   o   d   u   l   e   [   n   a   m   e   ]   .   o   v   e   r   l   o   a   d   T   a   b   l   e   [   n   u   m   A   r   g   u   m   e   n   t   s   ]   =   v   a   l   u   e   }   e   l   s   e   {   M   o   d   u   l   e   [   n   a   m   e   ]   =   v   a   l   u   e   ;   M   o   d   u   l   e   [   n   a   m   e   ]   .   a   r   g   C   o   u   n   t   =   n   u   m   A   r   g   u   m   e   n   t   s   }   }   ;   v   a   r       w   a   s   m   T   a   b   l   e   M   i   r   r   o   r   =   [   ]   ;   v   a   r       w   a   s   m   T   a   b   l   e   ;   v   a   r       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   =   f   u   n   c   P   t   r   =   >   {   v   a   r       f   u   n   c   =   w   a   s   m   T   a   b   l   e   M   i   r   r   o   r   [   f   u   n   c   P   t   r   ]   ;   i   f   (   !   f   u   n   c   )   {   w   a   s   m   T   a   b   l   e   M   i   r   r   o   r   [   f   u   n   c   P   t   r   ]   =   f   u   n   c   =   w   a   s   m   T   a   b   l   e   .   g   e   t   (   f   u   n   c   P   t   r   )   }   r   e   t   u   r   n       f   u   n   c   }   ;   v   a   r       d   y   n   C   a   l   l   =   (   s   i   g   ,   p   t   r   ,   a   r   g   s   =   [   ]   ,   p   r   o   m   i   s   i   n   g   =   f   a   l   s   e   )   =   >   {   v   a   r       f   u   n   c   =   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   p   t   r   )   ;   v   a   r       r   t   n   =   f   u   n   c   (   .   .   .   a   r   g   s   )   ;   f   u   n   c   t   i   o   n       c   o   n   v   e   r   t   (   r   t   n   )   {   r   e   t   u   r   n       s   i   g   [   0   ]   =   =   "   p   "   ?   r   t   n   >   >   >   0   :   r   t   n   }   r   e   t   u   r   n       c   o   n   v   e   r   t   (   r   t   n   )   }   ;   v   a   r       g   e   t   D   y   n   C   a   l   l   e   r   =   (   s   i   g   ,   p   t   r   ,   p   r   o   m   i   s   i   n   g   =   f   a   l   s   e   )   =   >   (   .   .   .   a   r   g   s   )   =   >   d   y   n   C   a   l   l   (   s   i   g   ,   p   t   r   ,   a   r   g   s   ,   p   r   o   m   i   s   i   n   g   )   ;   v   a   r       e   m   b   i   n   d   _   _   r   e   q   u   i   r   e   F   u   n   c   t   i   o   n   =   (   s   i   g   n   a   t   u   r   e   ,   r   a   w   F   u   n   c   t   i   o   n   ,   i   s   A   s   y   n   c   =   f   a   l   s   e   )   =   >   {   s   i   g   n   a   t   u   r   e   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   s   i   g   n   a   t   u   r   e   )   ;   f   u   n   c   t   i   o   n       m   a   k   e   D   y   n   C   a   l   l   e   r   (   )   {   i   f   (   s   i   g   n   a   t   u   r   e   .   i   n   c   l   u   d   e   s   (   "   p   "   )   )   {   r   e   t   u   r   n       g   e   t   D   y   n   C   a   l   l   e   r   (   s   i   g   n   a   t   u   r   e   ,   r   a   w   F   u   n   c   t   i   o   n   ,   i   s   A   s   y   n   c   )   }   v   a   r       r   t   n   =   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   r   a   w   F   u   n   c   t   i   o   n   )   ;   r   e   t   u   r   n       r   t   n   }   v   a   r       f   p   =   m   a   k   e   D   y   n   C   a   l   l   e   r   (   )   ;   i   f   (   t   y   p   e   o   f       f   p   !   =   "   f   u   n   c   t   i   o   n   "   )   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   `   u   n   k   n   o   w   n       f   u   n   c   t   i   o   n       p   o   i   n   t   e   r       w   i   t   h       s   i   g   n   a   t   u   r   e       $   {   s   i   g   n   a   t   u   r   e   }   :       $   {   r   a   w   F   u   n   c   t   i   o   n   }   `   )   }   r   e   t   u   r   n       f   p   }   ;   c   l   a   s   s       U   n   b   o   u   n   d   T   y   p   e   E   r   r   o   r       e   x   t   e   n   d   s       E   r   r   o   r   {   }   v   a   r       g   e   t   T   y   p   e   N   a   m   e   =   t   y   p   e   =   >   {   v   a   r       p   t   r   =   _   _   _   g   e   t   T   y   p   e   N   a   m   e   (   t   y   p   e   )   ;   v   a   r       r   v   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   p   t   r   )   ;   _   f   r   e   e   (   p   t   r   )   ;   r   e   t   u   r   n       r   v   }   ;   v   a   r       t   h   r   o   w   U   n   b   o   u   n   d   T   y   p   e   E   r   r   o   r   =   (   m   e   s   s   a   g   e   ,   t   y   p   e   s   )   =   >   {   v   a   r       u   n   b   o   u   n   d   T   y   p   e   s   =   [   ]   ;   v   a   r       s   e   e   n   =   {   }   ;   f   u   n   c   t   i   o   n       v   i   s   i   t   (   t   y   p   e   )   {   i   f   (   s   e   e   n   [   t   y   p   e   ]   )   {   r   e   t   u   r   n   }   i   f   (   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   [   t   y   p   e   ]   )   {   r   e   t   u   r   n   }   i   f   (   t   y   p   e   D   e   p   e   n   d   e   n   c   i   e   s   [   t   y   p   e   ]   )   {   t   y   p   e   D   e   p   e   n   d   e   n   c   i   e   s   [   t   y   p   e   ]   .   f   o   r   E   a   c   h   (   v   i   s   i   t   )   ;   r   e   t   u   r   n   }   u   n   b   o   u   n   d   T   y   p   e   s   .   p   u   s   h   (   t   y   p   e   )   ;   s   e   e   n   [   t   y   p   e   ]   =   t   r   u   e   }   t   y   p   e   s   .   f   o   r   E   a   c   h   (   v   i   s   i   t   )   ;   t   h   r   o   w       n   e   w       U   n   b   o   u   n   d   T   y   p   e   E   r   r   o   r   (   `   $   {   m   e   s   s   a   g   e   }   :       `   +   u   n   b   o   u   n   d   T   y   p   e   s   .   m   a   p   (   g   e   t   T   y   p   e   N   a   m   e   )   .   j   o   i   n   (   [   "   ,       "   ]   )   )   }   ;   v   a   r       w   h   e   n   D   e   p   e   n   d   e   n   t   T   y   p   e   s   A   r   e   R   e   s   o   l   v   e   d   =   (   m   y   T   y   p   e   s   ,   d   e   p   e   n   d   e   n   t   T   y   p   e   s   ,   g   e   t   T   y   p   e   C   o   n   v   e   r   t   e   r   s   )   =   >   {   m   y   T   y   p   e   s   .   f   o   r   E   a   c   h   (   t   y   p   e   =   >   t   y   p   e   D   e   p   e   n   d   e   n   c   i   e   s   [   t   y   p   e   ]   =   d   e   p   e   n   d   e   n   t   T   y   p   e   s   )   ;   f   u   n   c   t   i   o   n       o   n   C   o   m   p   l   e   t   e   (   t   y   p   e   C   o   n   v   e   r   t   e   r   s   )   {   v   a   r       m   y   T   y   p   e   C   o   n   v   e   r   t   e   r   s   =   g   e   t   T   y   p   e   C   o   n   v   e   r   t   e   r   s   (   t   y   p   e   C   o   n   v   e   r   t   e   r   s   )   ;   i   f   (   m   y   T   y   p   e   C   o   n   v   e   r   t   e   r   s   .   l   e   n   g   t   h   !   =   =   m   y   T   y   p   e   s   .   l   e   n   g   t   h   )   {   t   h   r   o   w   I   n   t   e   r   n   a   l   E   r   r   o   r   (   "   M   i   s   m   a   t   c   h   e   d       t   y   p   e       c   o   n   v   e   r   t   e   r       c   o   u   n   t   "   )   }   f   o   r   (   v   a   r       i   =   0   ;   i   <   m   y   T   y   p   e   s   .   l   e   n   g   t   h   ;   +   +   i   )   {   r   e   g   i   s   t   e   r   T   y   p   e   (   m   y   T   y   p   e   s   [   i   ]   ,   m   y   T   y   p   e   C   o   n   v   e   r   t   e   r   s   [   i   ]   )   }   }   v   a   r       t   y   p   e   C   o   n   v   e   r   t   e   r   s   =   n   e   w       A   r   r   a   y   (   d   e   p   e   n   d   e   n   t   T   y   p   e   s   .   l   e   n   g   t   h   )   ;   v   a   r       u   n   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   =   [   ]   ;   v   a   r       r   e   g   i   s   t   e   r   e   d   =   0   ;   d   e   p   e   n   d   e   n   t   T   y   p   e   s   .   f   o   r   E   a   c   h   (   (   d   t   ,   i   )   =   >   {   i   f   (   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   .   h   a   s   O   w   n   P   r   o   p   e   r   t   y   (   d   t   )   )   {   t   y   p   e   C   o   n   v   e   r   t   e   r   s   [   i   ]   =   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   [   d   t   ]   }   e   l   s   e   {   u   n   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   .   p   u   s   h   (   d   t   )   ;   i   f   (   !   a   w   a   i   t   i   n   g   D   e   p   e   n   d   e   n   c   i   e   s   .   h   a   s   O   w   n   P   r   o   p   e   r   t   y   (   d   t   )   )   {   a   w   a   i   t   i   n   g   D   e   p   e   n   d   e   n   c   i   e   s   [   d   t   ]   =   [   ]   }   a   w   a   i   t   i   n   g   D   e   p   e   n   d   e   n   c   i   e   s   [   d   t   ]   .   p   u   s   h   (   (   )   =   >   {   t   y   p   e   C   o   n   v   e   r   t   e   r   s   [   i   ]   =   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   [   d   t   ]   ;   +   +   r   e   g   i   s   t   e   r   e   d   ;   i   f   (   r   e   g   i   s   t   e   r   e   d   =   =   =   u   n   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   .   l   e   n   g   t   h   )   {   o   n   C   o   m   p   l   e   t   e   (   t   y   p   e   C   o   n   v   e   r   t   e   r   s   )   }   }   )   }   }   )   ;   i   f   (   0   =   =   =   u   n   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   .   l   e   n   g   t   h   )   {   o   n   C   o   m   p   l   e   t   e   (   t   y   p   e   C   o   n   v   e   r   t   e   r   s   )   }   }   ;   v   a   r       g   e   t   F   u   n   c   t   i   o   n   N   a   m   e   =   s   i   g   n   a   t   u   r   e   =   >   {   s   i   g   n   a   t   u   r   e   =   s   i   g   n   a   t   u   r   e   .   t   r   i   m   (   )   ;   c   o   n   s   t       a   r   g   s   I   n   d   e   x   =   s   i   g   n   a   t   u   r   e   .   i   n   d   e   x   O   f   (   "   (   "   )   ;   i   f   (   a   r   g   s   I   n   d   e   x   =   =   =   -   1   )   r   e   t   u   r   n       s   i   g   n   a   t   u   r   e   ;   r   e   t   u   r   n       s   i   g   n   a   t   u   r   e   .   s   l   i   c   e   (   0   ,   a   r   g   s   I   n   d   e   x   )   }   ;   f   u   n   c   t   i   o   n       _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   f   u   n   c   t   i   o   n   (   n   a   m   e   ,   a   r   g   C   o   u   n   t   ,   r   a   w   A   r   g   T   y   p   e   s   A   d   d   r   ,   s   i   g   n   a   t   u   r   e   ,   r   a   w   I   n   v   o   k   e   r   ,   f   n   ,   i   s   A   s   y   n   c   ,   i   s   N   o   n   n   u   l   l   R   e   t   u   r   n   )   {   n   a   m   e   >   >   >   =   0   ;   r   a   w   A   r   g   T   y   p   e   s   A   d   d   r   >   >   >   =   0   ;   s   i   g   n   a   t   u   r   e   >   >   >   =   0   ;   r   a   w   I   n   v   o   k   e   r   >   >   >   =   0   ;   f   n   >   >   >   =   0   ;   v   a   r       a   r   g   T   y   p   e   s   =   h   e   a   p   3   2   V   e   c   t   o   r   T   o   A   r   r   a   y   (   a   r   g   C   o   u   n   t   ,   r   a   w   A   r   g   T   y   p   e   s   A   d   d   r   )   ;   n   a   m   e   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   n   a   m   e   )   ;   n   a   m   e   =   g   e   t   F   u   n   c   t   i   o   n   N   a   m   e   (   n   a   m   e   )   ;   r   a   w   I   n   v   o   k   e   r   =   e   m   b   i   n   d   _   _   r   e   q   u   i   r   e   F   u   n   c   t   i   o   n   (   s   i   g   n   a   t   u   r   e   ,   r   a   w   I   n   v   o   k   e   r   ,   i   s   A   s   y   n   c   )   ;   e   x   p   o   s   e   P   u   b   l   i   c   S   y   m   b   o   l   (   n   a   m   e   ,   f   u   n   c   t   i   o   n   (   )   {   t   h   r   o   w   U   n   b   o   u   n   d   T   y   p   e   E   r   r   o   r   (   `   C   a   n   n   o   t       c   a   l   l       $   {   n   a   m   e   }       d   u   e       t   o       u   n   b   o   u   n   d       t   y   p   e   s   `   ,   a   r   g   T   y   p   e   s   )   }   ,   a   r   g   C   o   u   n   t   -   1   )   ;   w   h   e   n   D   e   p   e   n   d   e   n   t   T   y   p   e   s   A   r   e   R   e   s   o   l   v   e   d   (   [   ]   ,   a   r   g   T   y   p   e   s   ,   a   r   g   T   y   p   e   s   =   >   {   v   a   r       i   n   v   o   k   e   r   A   r   g   s   A   r   r   a   y   =   [   a   r   g   T   y   p   e   s   [   0   ]   ,   n   u   l   l   ]   .   c   o   n   c   a   t   (   a   r   g   T   y   p   e   s   .   s   l   i   c   e   (   1   )   )   ;   r   e   p   l   a   c   e   P   u   b   l   i   c   S   y   m   b   o   l   (   n   a   m   e   ,   c   r   a   f   t   I   n   v   o   k   e   r   F   u   n   c   t   i   o   n   (   n   a   m   e   ,   i   n   v   o   k   e   r   A   r   g   s   A   r   r   a   y   ,   n   u   l   l   ,   r   a   w   I   n   v   o   k   e   r   ,   f   n   ,   i   s   A   s   y   n   c   )   ,   a   r   g   C   o   u   n   t   -   1   )   ;   r   e   t   u   r   n   [   ]   }   )   }   v   a   r       _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   i   n   t   e   g   e   r   =   f   u   n   c   t   i   o   n   (   p   r   i   m   i   t   i   v   e   T   y   p   e   ,   n   a   m   e   ,   s   i   z   e   ,   m   i   n   R   a   n   g   e   ,   m   a   x   R   a   n   g   e   )   {   p   r   i   m   i   t   i   v   e   T   y   p   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   s   i   z   e   >   >   >   =   0   ;   n   a   m   e   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   n   a   m   e   )   ;   c   o   n   s   t       i   s   U   n   s   i   g   n   e   d   T   y   p   e   =   m   i   n   R   a   n   g   e   =   =   =   0   ;   l   e   t       f   r   o   m   W   i   r   e   T   y   p   e   =   v   a   l   u   e   =   >   v   a   l   u   e   ;   i   f   (   i   s   U   n   s   i   g   n   e   d   T   y   p   e   )   {   v   a   r       b   i   t   s   h   i   f   t   =   3   2   -   8   *   s   i   z   e   ;   f   r   o   m   W   i   r   e   T   y   p   e   =   v   a   l   u   e   =   >   v   a   l   u   e   <   <   b   i   t   s   h   i   f   t   >   >   >   b   i   t   s   h   i   f   t   ;   m   a   x   R   a   n   g   e   =   f   r   o   m   W   i   r   e   T   y   p   e   (   m   a   x   R   a   n   g   e   )   }   r   e   g   i   s   t   e   r   T   y   p   e   (   p   r   i   m   i   t   i   v   e   T   y   p   e   ,   {   n   a   m   e   ,   f   r   o   m   W   i   r   e   T   y   p   e   ,   t   o   W   i   r   e   T   y   p   e   :   (   d   e   s   t   r   u   c   t   o   r   s   ,   v   a   l   u   e   )   =   >   v   a   l   u   e   ,   a   r   g   P   a   c   k   A   d   v   a   n   c   e   :   G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   ,   r   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   :   i   n   t   e   g   e   r   R   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   (   n   a   m   e   ,   s   i   z   e   ,   m   i   n   R   a   n   g   e   !   =   =   0   )   ,   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   :   n   u   l   l   }   )   }   ;   f   u   n   c   t   i   o   n       _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   m   e   m   o   r   y   _   v   i   e   w   (   r   a   w   T   y   p   e   ,   d   a   t   a   T   y   p   e   I   n   d   e   x   ,   n   a   m   e   )   {   r   a   w   T   y   p   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   v   a   r       t   y   p   e   M   a   p   p   i   n   g   =   [   I   n   t   8   A   r   r   a   y   ,   U   i   n   t   8   A   r   r   a   y   ,   I   n   t   1   6   A   r   r   a   y   ,   U   i   n   t   1   6   A   r   r   a   y   ,   I   n   t   3   2   A   r   r   a   y   ,   U   i   n   t   3   2   A   r   r   a   y   ,   F   l   o   a   t   3   2   A   r   r   a   y   ,   F   l   o   a   t   6   4   A   r   r   a   y   ,   B   i   g   I   n   t   6   4   A   r   r   a   y   ,   B   i   g   U   i   n   t   6   4   A   r   r   a   y   ]   ;   v   a   r       T   A   =   t   y   p   e   M   a   p   p   i   n   g   [   d   a   t   a   T   y   p   e   I   n   d   e   x   ]   ;   f   u   n   c   t   i   o   n       d   e   c   o   d   e   M   e   m   o   r   y   V   i   e   w   (   h   a   n   d   l   e   )   {   v   a   r       s   i   z   e   =   H   E   A   P   U   3   2   [   h   a   n   d   l   e   >   >   >   2   >   >   >   0   ]   ;   v   a   r       d   a   t   a   =   H   E   A   P   U   3   2   [   h   a   n   d   l   e   +   4   >   >   >   2   >   >   >   0   ]   ;   r   e   t   u   r   n       n   e   w       T   A   (   H   E   A   P   8   .   b   u   f   f   e   r   ,   d   a   t   a   ,   s   i   z   e   )   }   n   a   m   e   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   n   a   m   e   )   ;   r   e   g   i   s   t   e   r   T   y   p   e   (   r   a   w   T   y   p   e   ,   {   n   a   m   e   ,   f   r   o   m   W   i   r   e   T   y   p   e   :   d   e   c   o   d   e   M   e   m   o   r   y   V   i   e   w   ,   a   r   g   P   a   c   k   A   d   v   a   n   c   e   :   G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   ,   r   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   :   d   e   c   o   d   e   M   e   m   o   r   y   V   i   e   w   }   ,   {   i   g   n   o   r   e   D   u   p   l   i   c   a   t   e   R   e   g   i   s   t   r   a   t   i   o   n   s   :   t   r   u   e   }   )   }   f   u   n   c   t   i   o   n       _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   s   t   d   _   s   t   r   i   n   g   (   r   a   w   T   y   p   e   ,   n   a   m   e   )   {   r   a   w   T   y   p   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   n   a   m   e   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   n   a   m   e   )   ;   v   a   r       s   t   d   S   t   r   i   n   g   I   s   U   T   F   8   =   t   r   u   e   ;   r   e   g   i   s   t   e   r   T   y   p   e   (   r   a   w   T   y   p   e   ,   {   n   a   m   e   ,   f   r   o   m   W   i   r   e   T   y   p   e   (   v   a   l   u   e   )   {   v   a   r       l   e   n   g   t   h   =   H   E   A   P   U   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   ;   v   a   r       p   a   y   l   o   a   d   =   v   a   l   u   e   +   4   ;   v   a   r       s   t   r   ;   i   f   (   s   t   d   S   t   r   i   n   g   I   s   U   T   F   8   )   {   v   a   r       d   e   c   o   d   e   S   t   a   r   t   P   t   r   =   p   a   y   l   o   a   d   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   =   l   e   n   g   t   h   ;   +   +   i   )   {   v   a   r       c   u   r   r   e   n   t   B   y   t   e   P   t   r   =   p   a   y   l   o   a   d   +   i   ;   i   f   (   i   =   =   l   e   n   g   t   h   |   |   H   E   A   P   U   8   [   c   u   r   r   e   n   t   B   y   t   e   P   t   r   >   >   >   0   ]   =   =   0   )   {   v   a   r       m   a   x   R   e   a   d   =   c   u   r   r   e   n   t   B   y   t   e   P   t   r   -   d   e   c   o   d   e   S   t   a   r   t   P   t   r   ;   v   a   r       s   t   r   i   n   g   S   e   g   m   e   n   t   =   U   T   F   8   T   o   S   t   r   i   n   g   (   d   e   c   o   d   e   S   t   a   r   t   P   t   r   ,   m   a   x   R   e   a   d   )   ;   i   f   (   s   t   r   =   =   =   u   n   d   e   f   i   n   e   d   )   {   s   t   r   =   s   t   r   i   n   g   S   e   g   m   e   n   t   }   e   l   s   e   {   s   t   r   +   =   S   t   r   i   n   g   .   f   r   o   m   C   h   a   r   C   o   d   e   (   0   )   ;   s   t   r   +   =   s   t   r   i   n   g   S   e   g   m   e   n   t   }   d   e   c   o   d   e   S   t   a   r   t   P   t   r   =   c   u   r   r   e   n   t   B   y   t   e   P   t   r   +   1   }   }   }   e   l   s   e   {   v   a   r       a   =   n   e   w       A   r   r   a   y   (   l   e   n   g   t   h   )   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   g   t   h   ;   +   +   i   )   {   a   [   i   ]   =   S   t   r   i   n   g   .   f   r   o   m   C   h   a   r   C   o   d   e   (   H   E   A   P   U   8   [   p   a   y   l   o   a   d   +   i   >   >   >   0   ]   )   }   s   t   r   =   a   .   j   o   i   n   (   "   "   )   }   _   f   r   e   e   (   v   a   l   u   e   )   ;   r   e   t   u   r   n       s   t   r   }   ,   t   o   W   i   r   e   T   y   p   e   (   d   e   s   t   r   u   c   t   o   r   s   ,   v   a   l   u   e   )   {   i   f   (   v   a   l   u   e       i   n   s   t   a   n   c   e   o   f       A   r   r   a   y   B   u   f   f   e   r   )   {   v   a   l   u   e   =   n   e   w       U   i   n   t   8   A   r   r   a   y   (   v   a   l   u   e   )   }   v   a   r       l   e   n   g   t   h   ;   v   a   r       v   a   l   u   e   I   s   O   f   T   y   p   e   S   t   r   i   n   g   =   t   y   p   e   o   f       v   a   l   u   e   =   =   "   s   t   r   i   n   g   "   ;   i   f   (   !   (   v   a   l   u   e   I   s   O   f   T   y   p   e   S   t   r   i   n   g   |   |   A   r   r   a   y   B   u   f   f   e   r   .   i   s   V   i   e   w   (   v   a   l   u   e   )   &   &   v   a   l   u   e   .   B   Y   T   E   S   _   P   E   R   _   E   L   E   M   E   N   T   =   =   1   )   )   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   "   C   a   n   n   o   t       p   a   s   s       n   o   n   -   s   t   r   i   n   g       t   o       s   t   d   :   :   s   t   r   i   n   g   "   )   }   i   f   (   s   t   d   S   t   r   i   n   g   I   s   U   T   F   8   &   &   v   a   l   u   e   I   s   O   f   T   y   p   e   S   t   r   i   n   g   )   {   l   e   n   g   t   h   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   v   a   l   u   e   )   }   e   l   s   e   {   l   e   n   g   t   h   =   v   a   l   u   e   .   l   e   n   g   t   h   }   v   a   r       b   a   s   e   =   _   m   a   l   l   o   c   (   4   +   l   e   n   g   t   h   +   1   )   ;   v   a   r       p   t   r   =   b   a   s   e   +   4   ;   H   E   A   P   U   3   2   [   b   a   s   e   >   >   >   2   >   >   >   0   ]   =   l   e   n   g   t   h   ;   i   f   (   v   a   l   u   e   I   s   O   f   T   y   p   e   S   t   r   i   n   g   )   {   i   f   (   s   t   d   S   t   r   i   n   g   I   s   U   T   F   8   )   {   s   t   r   i   n   g   T   o   U   T   F   8   (   v   a   l   u   e   ,   p   t   r   ,   l   e   n   g   t   h   +   1   )   }   e   l   s   e   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   g   t   h   ;   +   +   i   )   {   v   a   r       c   h   a   r   C   o   d   e   =   v   a   l   u   e   .   c   h   a   r   C   o   d   e   A   t   (   i   )   ;   i   f   (   c   h   a   r   C   o   d   e   >   2   5   5   )   {   _   f   r   e   e   (   b   a   s   e   )   ;   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   "   S   t   r   i   n   g       h   a   s       U   T   F   -   1   6       c   o   d   e       u   n   i   t   s       t   h   a   t       d   o       n   o   t       f   i   t       i   n       8       b   i   t   s   "   )   }   H   E   A   P   U   8   [   p   t   r   +   i   >   >   >   0   ]   =   c   h   a   r   C   o   d   e   }   }   }   e   l   s   e   {   H   E   A   P   U   8   .   s   e   t   (   v   a   l   u   e   ,   p   t   r   >   >   >   0   )   }   i   f   (   d   e   s   t   r   u   c   t   o   r   s   !   =   =   n   u   l   l   )   {   d   e   s   t   r   u   c   t   o   r   s   .   p   u   s   h   (   _   f   r   e   e   ,   b   a   s   e   )   }   r   e   t   u   r   n       b   a   s   e   }   ,   a   r   g   P   a   c   k   A   d   v   a   n   c   e   :   G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   ,   r   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   :   r   e   a   d   P   o   i   n   t   e   r   ,   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   (   p   t   r   )   {   _   f   r   e   e   (   p   t   r   )   }   }   )   }   v   a   r       U   T   F   1   6   D   e   c   o   d   e   r   =   t   y   p   e   o   f       T   e   x   t   D   e   c   o   d   e   r   !   =   "   u   n   d   e   f   i   n   e   d   "   ?   n   e   w       T   e   x   t   D   e   c   o   d   e   r   (   "   u   t   f   -   1   6   l   e   "   )   :   u   n   d   e   f   i   n   e   d   ;   v   a   r       U   T   F   1   6   T   o   S   t   r   i   n   g   =   (   p   t   r   ,   m   a   x   B   y   t   e   s   T   o   R   e   a   d   )   =   >   {   v   a   r       i   d   x   =   p   t   r   >   >   >   1   ;   v   a   r       m   a   x   I   d   x   =   i   d   x   +   m   a   x   B   y   t   e   s   T   o   R   e   a   d   /   2   ;   v   a   r       e   n   d   I   d   x   =   i   d   x   ;   w   h   i   l   e   (   !   (   e   n   d   I   d   x   >   =   m   a   x   I   d   x   )   &   &   H   E   A   P   U   1   6   [   e   n   d   I   d   x   >   >   >   0   ]   )   +   +   e   n   d   I   d   x   ;   i   f   (   e   n   d   I   d   x   -   i   d   x   >   1   6   &   &   U   T   F   1   6   D   e   c   o   d   e   r   )   r   e   t   u   r   n       U   T   F   1   6   D   e   c   o   d   e   r   .   d   e   c   o   d   e   (   H   E   A   P   U   1   6   .   s   u   b   a   r   r   a   y   (   i   d   x   >   >   >   0   ,   e   n   d   I   d   x   >   >   >   0   )   )   ;   v   a   r       s   t   r   =   "   "   ;   f   o   r   (   v   a   r       i   =   i   d   x   ;   !   (   i   >   =   m   a   x   I   d   x   )   ;   +   +   i   )   {   v   a   r       c   o   d   e   U   n   i   t   =   H   E   A   P   U   1   6   [   i   >   >   >   0   ]   ;   i   f   (   c   o   d   e   U   n   i   t   =   =   0   )   b   r   e   a   k   ;   s   t   r   +   =   S   t   r   i   n   g   .   f   r   o   m   C   h   a   r   C   o   d   e   (   c   o   d   e   U   n   i   t   )   }   r   e   t   u   r   n       s   t   r   }   ;   v   a   r       s   t   r   i   n   g   T   o   U   T   F   1   6   =   (   s   t   r   ,   o   u   t   P   t   r   ,   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   )   =   >   {   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   ?   ?   =   2   1   4   7   4   8   3   6   4   7   ;   i   f   (   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   <   2   )   r   e   t   u   r   n       0   ;   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   -   =   2   ;   v   a   r       s   t   a   r   t   P   t   r   =   o   u   t   P   t   r   ;   v   a   r       n   u   m   C   h   a   r   s   T   o   W   r   i   t   e   =   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   <   s   t   r   .   l   e   n   g   t   h   *   2   ?   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   /   2   :   s   t   r   .   l   e   n   g   t   h   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   u   m   C   h   a   r   s   T   o   W   r   i   t   e   ;   +   +   i   )   {   v   a   r       c   o   d   e   U   n   i   t   =   s   t   r   .   c   h   a   r   C   o   d   e   A   t   (   i   )   ;   H   E   A   P   1   6   [   o   u   t   P   t   r   >   >   >   1   >   >   >   0   ]   =   c   o   d   e   U   n   i   t   ;   o   u   t   P   t   r   +   =   2   }   H   E   A   P   1   6   [   o   u   t   P   t   r   >   >   >   1   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       o   u   t   P   t   r   -   s   t   a   r   t   P   t   r   }   ;   v   a   r       l   e   n   g   t   h   B   y   t   e   s   U   T   F   1   6   =   s   t   r   =   >   s   t   r   .   l   e   n   g   t   h   *   2   ;   v   a   r       U   T   F   3   2   T   o   S   t   r   i   n   g   =   (   p   t   r   ,   m   a   x   B   y   t   e   s   T   o   R   e   a   d   )   =   >   {   v   a   r       s   t   r   =   "   "   ;   f   o   r   (   v   a   r       i   =   0   ;   !   (   i   >   =   m   a   x   B   y   t   e   s   T   o   R   e   a   d   /   4   )   ;   i   +   +   )   {   v   a   r       u   t   f   3   2   =   H   E   A   P   3   2   [   p   t   r   +   i   *   4   >   >   >   2   >   >   >   0   ]   ;   i   f   (   !   u   t   f   3   2   )   b   r   e   a   k   ;   s   t   r   +   =   S   t   r   i   n   g   .   f   r   o   m   C   o   d   e   P   o   i   n   t   (   u   t   f   3   2   )   }   r   e   t   u   r   n       s   t   r   }   ;   v   a   r       s   t   r   i   n   g   T   o   U   T   F   3   2   =   (   s   t   r   ,   o   u   t   P   t   r   ,   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   )   =   >   {   o   u   t   P   t   r   >   >   >   =   0   ;   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   ?   ?   =   2   1   4   7   4   8   3   6   4   7   ;   i   f   (   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   <   4   )   r   e   t   u   r   n       0   ;   v   a   r       s   t   a   r   t   P   t   r   =   o   u   t   P   t   r   ;   v   a   r       e   n   d   P   t   r   =   s   t   a   r   t   P   t   r   +   m   a   x   B   y   t   e   s   T   o   W   r   i   t   e   -   4   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   s   t   r   .   l   e   n   g   t   h   ;   +   +   i   )   {   v   a   r       c   o   d   e   P   o   i   n   t   =   s   t   r   .   c   o   d   e   P   o   i   n   t   A   t   (   i   )   ;   i   f   (   c   o   d   e   P   o   i   n   t   >   6   5   5   3   5   )   {   i   +   +   }   H   E   A   P   3   2   [   o   u   t   P   t   r   >   >   >   2   >   >   >   0   ]   =   c   o   d   e   P   o   i   n   t   ;   o   u   t   P   t   r   +   =   4   ;   i   f   (   o   u   t   P   t   r   +   4   >   e   n   d   P   t   r   )   b   r   e   a   k   }   H   E   A   P   3   2   [   o   u   t   P   t   r   >   >   >   2   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       o   u   t   P   t   r   -   s   t   a   r   t   P   t   r   }   ;   v   a   r       l   e   n   g   t   h   B   y   t   e   s   U   T   F   3   2   =   s   t   r   =   >   {   v   a   r       l   e   n   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   s   t   r   .   l   e   n   g   t   h   ;   +   +   i   )   {   v   a   r       c   o   d   e   P   o   i   n   t   =   s   t   r   .   c   o   d   e   P   o   i   n   t   A   t   (   i   )   ;   i   f   (   c   o   d   e   P   o   i   n   t   >   6   5   5   3   5   )   {   i   +   +   }   l   e   n   +   =   4   }   r   e   t   u   r   n       l   e   n   }   ;   v   a   r       _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   s   t   d   _   w   s   t   r   i   n   g   =   f   u   n   c   t   i   o   n   (   r   a   w   T   y   p   e   ,   c   h   a   r   S   i   z   e   ,   n   a   m   e   )   {   r   a   w   T   y   p   e   >   >   >   =   0   ;   c   h   a   r   S   i   z   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   n   a   m   e   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   n   a   m   e   )   ;   v   a   r       d   e   c   o   d   e   S   t   r   i   n   g   ,   e   n   c   o   d   e   S   t   r   i   n   g   ,   r   e   a   d   C   h   a   r   A   t   ,   l   e   n   g   t   h   B   y   t   e   s   U   T   F   ;   i   f   (   c   h   a   r   S   i   z   e   =   =   =   2   )   {   d   e   c   o   d   e   S   t   r   i   n   g   =   U   T   F   1   6   T   o   S   t   r   i   n   g   ;   e   n   c   o   d   e   S   t   r   i   n   g   =   s   t   r   i   n   g   T   o   U   T   F   1   6   ;   l   e   n   g   t   h   B   y   t   e   s   U   T   F   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   1   6   ;   r   e   a   d   C   h   a   r   A   t   =   p   o   i   n   t   e   r   =   >   H   E   A   P   U   1   6   [   p   o   i   n   t   e   r   >   >   >   1   >   >   >   0   ]   }   e   l   s   e       i   f   (   c   h   a   r   S   i   z   e   =   =   =   4   )   {   d   e   c   o   d   e   S   t   r   i   n   g   =   U   T   F   3   2   T   o   S   t   r   i   n   g   ;   e   n   c   o   d   e   S   t   r   i   n   g   =   s   t   r   i   n   g   T   o   U   T   F   3   2   ;   l   e   n   g   t   h   B   y   t   e   s   U   T   F   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   3   2   ;   r   e   a   d   C   h   a   r   A   t   =   p   o   i   n   t   e   r   =   >   H   E   A   P   U   3   2   [   p   o   i   n   t   e   r   >   >   >   2   >   >   >   0   ]   }   r   e   g   i   s   t   e   r   T   y   p   e   (   r   a   w   T   y   p   e   ,   {   n   a   m   e   ,   f   r   o   m   W   i   r   e   T   y   p   e   :   v   a   l   u   e   =   >   {   v   a   r       l   e   n   g   t   h   =   H   E   A   P   U   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   ;   v   a   r       s   t   r   ;   v   a   r       d   e   c   o   d   e   S   t   a   r   t   P   t   r   =   v   a   l   u   e   +   4   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   =   l   e   n   g   t   h   ;   +   +   i   )   {   v   a   r       c   u   r   r   e   n   t   B   y   t   e   P   t   r   =   v   a   l   u   e   +   4   +   i   *   c   h   a   r   S   i   z   e   ;   i   f   (   i   =   =   l   e   n   g   t   h   |   |   r   e   a   d   C   h   a   r   A   t   (   c   u   r   r   e   n   t   B   y   t   e   P   t   r   )   =   =   0   )   {   v   a   r       m   a   x   R   e   a   d   B   y   t   e   s   =   c   u   r   r   e   n   t   B   y   t   e   P   t   r   -   d   e   c   o   d   e   S   t   a   r   t   P   t   r   ;   v   a   r       s   t   r   i   n   g   S   e   g   m   e   n   t   =   d   e   c   o   d   e   S   t   r   i   n   g   (   d   e   c   o   d   e   S   t   a   r   t   P   t   r   ,   m   a   x   R   e   a   d   B   y   t   e   s   )   ;   i   f   (   s   t   r   =   =   =   u   n   d   e   f   i   n   e   d   )   {   s   t   r   =   s   t   r   i   n   g   S   e   g   m   e   n   t   }   e   l   s   e   {   s   t   r   +   =   S   t   r   i   n   g   .   f   r   o   m   C   h   a   r   C   o   d   e   (   0   )   ;   s   t   r   +   =   s   t   r   i   n   g   S   e   g   m   e   n   t   }   d   e   c   o   d   e   S   t   a   r   t   P   t   r   =   c   u   r   r   e   n   t   B   y   t   e   P   t   r   +   c   h   a   r   S   i   z   e   }   }   _   f   r   e   e   (   v   a   l   u   e   )   ;   r   e   t   u   r   n       s   t   r   }   ,   t   o   W   i   r   e   T   y   p   e   :   (   d   e   s   t   r   u   c   t   o   r   s   ,   v   a   l   u   e   )   =   >   {   i   f   (   !   (   t   y   p   e   o   f       v   a   l   u   e   =   =   "   s   t   r   i   n   g   "   )   )   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   `   C   a   n   n   o   t       p   a   s   s       n   o   n   -   s   t   r   i   n   g       t   o       C   +   +       s   t   r   i   n   g       t   y   p   e       $   {   n   a   m   e   }   `   )   }   v   a   r       l   e   n   g   t   h   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   (   v   a   l   u   e   )   ;   v   a   r       p   t   r   =   _   m   a   l   l   o   c   (   4   +   l   e   n   g   t   h   +   c   h   a   r   S   i   z   e   )   ;   H   E   A   P   U   3   2   [   p   t   r   >   >   >   2   >   >   >   0   ]   =   l   e   n   g   t   h   /   c   h   a   r   S   i   z   e   ;   e   n   c   o   d   e   S   t   r   i   n   g   (   v   a   l   u   e   ,   p   t   r   +   4   ,   l   e   n   g   t   h   +   c   h   a   r   S   i   z   e   )   ;   i   f   (   d   e   s   t   r   u   c   t   o   r   s   !   =   =   n   u   l   l   )   {   d   e   s   t   r   u   c   t   o   r   s   .   p   u   s   h   (   _   f   r   e   e   ,   p   t   r   )   }   r   e   t   u   r   n       p   t   r   }   ,   a   r   g   P   a   c   k   A   d   v   a   n   c   e   :   G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   ,   r   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   :   r   e   a   d   P   o   i   n   t   e   r   ,   d   e   s   t   r   u   c   t   o   r   F   u   n   c   t   i   o   n   (   p   t   r   )   {   _   f   r   e   e   (   p   t   r   )   }   }   )   }   ;   v   a   r       _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   v   o   i   d   =   f   u   n   c   t   i   o   n   (   r   a   w   T   y   p   e   ,   n   a   m   e   )   {   r   a   w   T   y   p   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   n   a   m   e   =   A   s   c   i   i   T   o   S   t   r   i   n   g   (   n   a   m   e   )   ;   r   e   g   i   s   t   e   r   T   y   p   e   (   r   a   w   T   y   p   e   ,   {   i   s   V   o   i   d   :   t   r   u   e   ,   n   a   m   e   ,   a   r   g   P   a   c   k   A   d   v   a   n   c   e   :   0   ,   f   r   o   m   W   i   r   e   T   y   p   e   :   (   )   =   >   u   n   d   e   f   i   n   e   d   ,   t   o   W   i   r   e   T   y   p   e   :   (   d   e   s   t   r   u   c   t   o   r   s   ,   o   )   =   >   u   n   d   e   f   i   n   e   d   }   )   }   ;   v   a   r       _   _   t   z   s   e   t   _   j   s   =   f   u   n   c   t   i   o   n   (   t   i   m   e   z   o   n   e   ,   d   a   y   l   i   g   h   t   ,   s   t   d   _   n   a   m   e   ,   d   s   t   _   n   a   m   e   )   {   t   i   m   e   z   o   n   e   >   >   >   =   0   ;   d   a   y   l   i   g   h   t   >   >   >   =   0   ;   s   t   d   _   n   a   m   e   >   >   >   =   0   ;   d   s   t   _   n   a   m   e   >   >   >   =   0   ;   v   a   r       c   u   r   r   e   n   t   Y   e   a   r   =   (   n   e   w       D   a   t   e   )   .   g   e   t   F   u   l   l   Y   e   a   r   (   )   ;   v   a   r       w   i   n   t   e   r   =   n   e   w       D   a   t   e   (   c   u   r   r   e   n   t   Y   e   a   r   ,   0   ,   1   )   ;   v   a   r       s   u   m   m   e   r   =   n   e   w       D   a   t   e   (   c   u   r   r   e   n   t   Y   e   a   r   ,   6   ,   1   )   ;   v   a   r       w   i   n   t   e   r   O   f   f   s   e   t   =   w   i   n   t   e   r   .   g   e   t   T   i   m   e   z   o   n   e   O   f   f   s   e   t   (   )   ;   v   a   r       s   u   m   m   e   r   O   f   f   s   e   t   =   s   u   m   m   e   r   .   g   e   t   T   i   m   e   z   o   n   e   O   f   f   s   e   t   (   )   ;   v   a   r       s   t   d   T   i   m   e   z   o   n   e   O   f   f   s   e   t   =   M   a   t   h   .   m   a   x   (   w   i   n   t   e   r   O   f   f   s   e   t   ,   s   u   m   m   e   r   O   f   f   s   e   t   )   ;   H   E   A   P   U   3   2   [   t   i   m   e   z   o   n   e   >   >   >   2   >   >   >   0   ]   =   s   t   d   T   i   m   e   z   o   n   e   O   f   f   s   e   t   *   6   0   ;   H   E   A   P   3   2   [   d   a   y   l   i   g   h   t   >   >   >   2   >   >   >   0   ]   =   N   u   m   b   e   r   (   w   i   n   t   e   r   O   f   f   s   e   t   !   =   s   u   m   m   e   r   O   f   f   s   e   t   )   ;   v   a   r       e   x   t   r   a   c   t   Z   o   n   e   =   t   i   m   e   z   o   n   e   O   f   f   s   e   t   =   >   {   v   a   r       s   i   g   n   =   t   i   m   e   z   o   n   e   O   f   f   s   e   t   >   =   0   ?   "   -   "   :   "   +   "   ;   v   a   r       a   b   s   O   f   f   s   e   t   =   M   a   t   h   .   a   b   s   (   t   i   m   e   z   o   n   e   O   f   f   s   e   t   )   ;   v   a   r       h   o   u   r   s   =   S   t   r   i   n   g   (   M   a   t   h   .   f   l   o   o   r   (   a   b   s   O   f   f   s   e   t   /   6   0   )   )   .   p   a   d   S   t   a   r   t   (   2   ,   "   0   "   )   ;   v   a   r       m   i   n   u   t   e   s   =   S   t   r   i   n   g   (   a   b   s   O   f   f   s   e   t   %   6   0   )   .   p   a   d   S   t   a   r   t   (   2   ,   "   0   "   )   ;   r   e   t   u   r   n   `   U   T   C   $   {   s   i   g   n   }   $   {   h   o   u   r   s   }   $   {   m   i   n   u   t   e   s   }   `   }   ;   v   a   r       w   i   n   t   e   r   N   a   m   e   =   e   x   t   r   a   c   t   Z   o   n   e   (   w   i   n   t   e   r   O   f   f   s   e   t   )   ;   v   a   r       s   u   m   m   e   r   N   a   m   e   =   e   x   t   r   a   c   t   Z   o   n   e   (   s   u   m   m   e   r   O   f   f   s   e   t   )   ;   i   f   (   s   u   m   m   e   r   O   f   f   s   e   t   <   w   i   n   t   e   r   O   f   f   s   e   t   )   {   s   t   r   i   n   g   T   o   U   T   F   8   (   w   i   n   t   e   r   N   a   m   e   ,   s   t   d   _   n   a   m   e   ,   1   7   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   s   u   m   m   e   r   N   a   m   e   ,   d   s   t   _   n   a   m   e   ,   1   7   )   }   e   l   s   e   {   s   t   r   i   n   g   T   o   U   T   F   8   (   w   i   n   t   e   r   N   a   m   e   ,   d   s   t   _   n   a   m   e   ,   1   7   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   s   u   m   m   e   r   N   a   m   e   ,   s   t   d   _   n   a   m   e   ,   1   7   )   }   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   n   o   w   =   (   )   =   >   p   e   r   f   o   r   m   a   n   c   e   .   n   o   w   (   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   d   a   t   e   _   n   o   w   =   (   )   =   >   D   a   t   e   .   n   o   w   (   )   ;   v   a   r       n   o   w   I   s   M   o   n   o   t   o   n   i   c   =   1   ;   v   a   r       c   h   e   c   k   W   a   s   i   C   l   o   c   k   =   c   l   o   c   k   _   i   d   =   >   c   l   o   c   k   _   i   d   >   =   0   &   &   c   l   o   c   k   _   i   d   <   =   3   ;   f   u   n   c   t   i   o   n       _   c   l   o   c   k   _   t   i   m   e   _   g   e   t   (   c   l   k   _   i   d   ,   i   g   n   o   r   e   d   _   p   r   e   c   i   s   i   o   n   ,   p   t   i   m   e   )   {   i   g   n   o   r   e   d   _   p   r   e   c   i   s   i   o   n   =   b   i   g   i   n   t   T   o   I   5   3   C   h   e   c   k   e   d   (   i   g   n   o   r   e   d   _   p   r   e   c   i   s   i   o   n   )   ;   p   t   i   m   e   >   >   >   =   0   ;   i   f   (   !   c   h   e   c   k   W   a   s   i   C   l   o   c   k   (   c   l   k   _   i   d   )   )   {   r   e   t   u   r   n       2   8   }   v   a   r       n   o   w   ;   i   f   (   c   l   k   _   i   d   =   =   =   0   )   {   n   o   w   =   _   e   m   s   c   r   i   p   t   e   n   _   d   a   t   e   _   n   o   w   (   )   }   e   l   s   e       i   f   (   n   o   w   I   s   M   o   n   o   t   o   n   i   c   )   {   n   o   w   =   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   n   o   w   (   )   }   e   l   s   e   {   r   e   t   u   r   n       5   2   }   v   a   r       n   s   e   c   =   M   a   t   h   .   r   o   u   n   d   (   n   o   w   *   1   e   3   *   1   e   3   )   ;   H   E   A   P   6   4   [   p   t   i   m   e   >   >   >   3   >   >   >   0   ]   =   B   i   g   I   n   t   (   n   s   e   c   )   ;   r   e   t   u   r   n       0   }   v   a   r       h   a   n   d   l   e   E   x   c   e   p   t   i   o   n   =   e   =   >   {   i   f   (   e       i   n   s   t   a   n   c   e   o   f       E   x   i   t   S   t   a   t   u   s   |   |   e   =   =   "   u   n   w   i   n   d   "   )   {   r   e   t   u   r   n       E   X   I   T   S   T   A   T   U   S   }   q   u   i   t   _   (   1   ,   e   )   }   ;   v   a   r       r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   C   o   u   n   t   e   r   =   0   ;   v   a   r       k   e   e   p   R   u   n   t   i   m   e   A   l   i   v   e   =   (   )   =   >   n   o   E   x   i   t   R   u   n   t   i   m   e   |   |   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   C   o   u   n   t   e   r   >   0   ;   v   a   r       _   p   r   o   c   _   e   x   i   t   =   c   o   d   e   =   >   {   E   X   I   T   S   T   A   T   U   S   =   c   o   d   e   ;   i   f   (   !   k   e   e   p   R   u   n   t   i   m   e   A   l   i   v   e   (   )   )   {   M   o   d   u   l   e   [   "   o   n   E   x   i   t   "   ]   ?   .   (   c   o   d   e   )   ;   A   B   O   R   T   =   t   r   u   e   }   q   u   i   t   _   (   c   o   d   e   ,   n   e   w       E   x   i   t   S   t   a   t   u   s   (   c   o   d   e   )   )   }   ;   v   a   r       e   x   i   t   J   S   =   (   s   t   a   t   u   s   ,   i   m   p   l   i   c   i   t   )   =   >   {   E   X   I   T   S   T   A   T   U   S   =   s   t   a   t   u   s   ;   _   p   r   o   c   _   e   x   i   t   (   s   t   a   t   u   s   )   }   ;   v   a   r       _   e   x   i   t   =   e   x   i   t   J   S   ;   v   a   r       m   a   y   b   e   E   x   i   t   =   (   )   =   >   {   i   f   (   !   k   e   e   p   R   u   n   t   i   m   e   A   l   i   v   e   (   )   )   {   t   r   y   {   _   e   x   i   t   (   E   X   I   T   S   T   A   T   U   S   )   }   c   a   t   c   h   (   e   )   {   h   a   n   d   l   e   E   x   c   e   p   t   i   o   n   (   e   )   }   }   }   ;   v   a   r       c   a   l   l   U   s   e   r   C   a   l   l   b   a   c   k   =   f   u   n   c   =   >   {   i   f   (   A   B   O   R   T   )   {   r   e   t   u   r   n   }   t   r   y   {   f   u   n   c   (   )   ;   m   a   y   b   e   E   x   i   t   (   )   }   c   a   t   c   h   (   e   )   {   h   a   n   d   l   e   E   x   c   e   p   t   i   o   n   (   e   )   }   }   ;   v   a   r       s   a   f   e   S   e   t   T   i   m   e   o   u   t   =   (   f   u   n   c   ,   t   i   m   e   o   u   t   )   =   >   s   e   t   T   i   m   e   o   u   t   (   (   )   =   >   {   c   a   l   l   U   s   e   r   C   a   l   l   b   a   c   k   (   f   u   n   c   )   }   ,   t   i   m   e   o   u   t   )   ;   v   a   r       w   a   r   n   O   n   c   e   =   t   e   x   t   =   >   {   w   a   r   n   O   n   c   e   .   s   h   o   w   n   |   |   =   {   }   ;   i   f   (   !   w   a   r   n   O   n   c   e   .   s   h   o   w   n   [   t   e   x   t   ]   )   {   w   a   r   n   O   n   c   e   .   s   h   o   w   n   [   t   e   x   t   ]   =   1   ;   e   r   r   (   t   e   x   t   )   }   }   ;   v   a   r       B   r   o   w   s   e   r   =   {   u   s   e   W   e   b   G   L   :   f   a   l   s   e   ,   i   s   F   u   l   l   s   c   r   e   e   n   :   f   a   l   s   e   ,   p   o   i   n   t   e   r   L   o   c   k   :   f   a   l   s   e   ,   m   o   d   u   l   e   C   o   n   t   e   x   t   C   r   e   a   t   e   d   C   a   l   l   b   a   c   k   s   :   [   ]   ,   w   o   r   k   e   r   s   :   [   ]   ,   p   r   e   l   o   a   d   e   d   I   m   a   g   e   s   :   {   }   ,   p   r   e   l   o   a   d   e   d   A   u   d   i   o   s   :   {   }   ,   g   e   t   C   a   n   v   a   s   :   (   )   =   >   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   ,   i   n   i   t   (   )   {   i   f   (   B   r   o   w   s   e   r   .   i   n   i   t   t   e   d   )   r   e   t   u   r   n   ;   B   r   o   w   s   e   r   .   i   n   i   t   t   e   d   =   t   r   u   e   ;   v   a   r       i   m   a   g   e   P   l   u   g   i   n   =   {   }   ;   i   m   a   g   e   P   l   u   g   i   n   [   "   c   a   n   H   a   n   d   l   e   "   ]   =   f   u   n   c   t   i   o   n       i   m   a   g   e   P   l   u   g   i   n   _   c   a   n   H   a   n   d   l   e   (   n   a   m   e   )   {   r   e   t   u   r   n   !   M   o   d   u   l   e   [   "   n   o   I   m   a   g   e   D   e   c   o   d   i   n   g   "   ]   &   &   /   \   .   (   j   p   g   |   j   p   e   g   |   p   n   g   |   b   m   p   |   w   e   b   p   )   $   /   i   .   t   e   s   t   (   n   a   m   e   )   }   ;   i   m   a   g   e   P   l   u   g   i   n   [   "   h   a   n   d   l   e   "   ]   =   f   u   n   c   t   i   o   n       i   m   a   g   e   P   l   u   g   i   n   _   h   a   n   d   l   e   (   b   y   t   e   A   r   r   a   y   ,   n   a   m   e   ,   o   n   l   o   a   d   ,   o   n   e   r   r   o   r   )   {   v   a   r       b   =   n   e   w       B   l   o   b   (   [   b   y   t   e   A   r   r   a   y   ]   ,   {   t   y   p   e   :   B   r   o   w   s   e   r   .   g   e   t   M   i   m   e   t   y   p   e   (   n   a   m   e   )   }   )   ;   i   f   (   b   .   s   i   z   e   !   =   =   b   y   t   e   A   r   r   a   y   .   l   e   n   g   t   h   )   {   b   =   n   e   w       B   l   o   b   (   [   n   e   w       U   i   n   t   8   A   r   r   a   y   (   b   y   t   e   A   r   r   a   y   )   .   b   u   f   f   e   r   ]   ,   {   t   y   p   e   :   B   r   o   w   s   e   r   .   g   e   t   M   i   m   e   t   y   p   e   (   n   a   m   e   )   }   )   }   v   a   r       u   r   l   =   U   R   L   .   c   r   e   a   t   e   O   b   j   e   c   t   U   R   L   (   b   )   ;   v   a   r       i   m   g   =   n   e   w       I   m   a   g   e   ;   i   m   g   .   o   n   l   o   a   d   =   (   )   =   >   {   v   a   r       c   a   n   v   a   s   =   d   o   c   u   m   e   n   t   .   c   r   e   a   t   e   E   l   e   m   e   n   t   (   "   c   a   n   v   a   s   "   )   ;   c   a   n   v   a   s   .   w   i   d   t   h   =   i   m   g   .   w   i   d   t   h   ;   c   a   n   v   a   s   .   h   e   i   g   h   t   =   i   m   g   .   h   e   i   g   h   t   ;   v   a   r       c   t   x   =   c   a   n   v   a   s   .   g   e   t   C   o   n   t   e   x   t   (   "   2   d   "   )   ;   c   t   x   .   d   r   a   w   I   m   a   g   e   (   i   m   g   ,   0   ,   0   )   ;   B   r   o   w   s   e   r   .   p   r   e   l   o   a   d   e   d   I   m   a   g   e   s   [   n   a   m   e   ]   =   c   a   n   v   a   s   ;   U   R   L   .   r   e   v   o   k   e   O   b   j   e   c   t   U   R   L   (   u   r   l   )   ;   o   n   l   o   a   d   ?   .   (   b   y   t   e   A   r   r   a   y   )   }   ;   i   m   g   .   o   n   e   r   r   o   r   =   e   v   e   n   t   =   >   {   e   r   r   (   `   I   m   a   g   e       $   {   u   r   l   }       c   o   u   l   d       n   o   t       b   e       d   e   c   o   d   e   d   `   )   ;   o   n   e   r   r   o   r   ?   .   (   )   }   ;   i   m   g   .   s   r   c   =   u   r   l   }   ;   p   r   e   l   o   a   d   P   l   u   g   i   n   s   .   p   u   s   h   (   i   m   a   g   e   P   l   u   g   i   n   )   ;   v   a   r       a   u   d   i   o   P   l   u   g   i   n   =   {   }   ;   a   u   d   i   o   P   l   u   g   i   n   [   "   c   a   n   H   a   n   d   l   e   "   ]   =   f   u   n   c   t   i   o   n       a   u   d   i   o   P   l   u   g   i   n   _   c   a   n   H   a   n   d   l   e   (   n   a   m   e   )   {   r   e   t   u   r   n   !   M   o   d   u   l   e   [   "   n   o   A   u   d   i   o   D   e   c   o   d   i   n   g   "   ]   &   &   n   a   m   e   .   s   l   i   c   e   (   -   4   )   i   n   {   "   .   o   g   g   "   :   1   ,   "   .   w   a   v   "   :   1   ,   "   .   m   p   3   "   :   1   }   }   ;   a   u   d   i   o   P   l   u   g   i   n   [   "   h   a   n   d   l   e   "   ]   =   f   u   n   c   t   i   o   n       a   u   d   i   o   P   l   u   g   i   n   _   h   a   n   d   l   e   (   b   y   t   e   A   r   r   a   y   ,   n   a   m   e   ,   o   n   l   o   a   d   ,   o   n   e   r   r   o   r   )   {   v   a   r       d   o   n   e   =   f   a   l   s   e   ;   f   u   n   c   t   i   o   n       f   i   n   i   s   h   (   a   u   d   i   o   )   {   i   f   (   d   o   n   e   )   r   e   t   u   r   n   ;   d   o   n   e   =   t   r   u   e   ;   B   r   o   w   s   e   r   .   p   r   e   l   o   a   d   e   d   A   u   d   i   o   s   [   n   a   m   e   ]   =   a   u   d   i   o   ;   o   n   l   o   a   d   ?   .   (   b   y   t   e   A   r   r   a   y   )   }   v   a   r       b   =   n   e   w       B   l   o   b   (   [   b   y   t   e   A   r   r   a   y   ]   ,   {   t   y   p   e   :   B   r   o   w   s   e   r   .   g   e   t   M   i   m   e   t   y   p   e   (   n   a   m   e   )   }   )   ;   v   a   r       u   r   l   =   U   R   L   .   c   r   e   a   t   e   O   b   j   e   c   t   U   R   L   (   b   )   ;   v   a   r       a   u   d   i   o   =   n   e   w       A   u   d   i   o   ;   a   u   d   i   o   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   c   a   n   p   l   a   y   t   h   r   o   u   g   h   "   ,   (   )   =   >   f   i   n   i   s   h   (   a   u   d   i   o   )   ,   f   a   l   s   e   )   ;   a   u   d   i   o   .   o   n   e   r   r   o   r   =   f   u   n   c   t   i   o   n       a   u   d   i   o   _   o   n   e   r   r   o   r   (   e   v   e   n   t   )   {   i   f   (   d   o   n   e   )   r   e   t   u   r   n   ;   e   r   r   (   `   w   a   r   n   i   n   g   :       b   r   o   w   s   e   r       c   o   u   l   d       n   o   t       f   u   l   l   y       d   e   c   o   d   e       a   u   d   i   o       $   {   n   a   m   e   }   ,       t   r   y   i   n   g       s   l   o   w   e   r       b   a   s   e   6   4       a   p   p   r   o   a   c   h   `   )   ;   f   u   n   c   t   i   o   n       e   n   c   o   d   e   6   4   (   d   a   t   a   )   {   v   a   r       B   A   S   E   =   "   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o   p   q   r   s   t   u   v   w   x   y   z   0   1   2   3   4   5   6   7   8   9   +   /   "   ;   v   a   r       P   A   D   =   "   =   "   ;   v   a   r       r   e   t   =   "   "   ;   v   a   r       l   e   f   t   c   h   a   r   =   0   ;   v   a   r       l   e   f   t   b   i   t   s   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   d   a   t   a   .   l   e   n   g   t   h   ;   i   +   +   )   {   l   e   f   t   c   h   a   r   =   l   e   f   t   c   h   a   r   <   <   8   |   d   a   t   a   [   i   ]   ;   l   e   f   t   b   i   t   s   +   =   8   ;   w   h   i   l   e   (   l   e   f   t   b   i   t   s   >   =   6   )   {   v   a   r       c   u   r   r   =   l   e   f   t   c   h   a   r   >   >   l   e   f   t   b   i   t   s   -   6   &   6   3   ;   l   e   f   t   b   i   t   s   -   =   6   ;   r   e   t   +   =   B   A   S   E   [   c   u   r   r   ]   }   }   i   f   (   l   e   f   t   b   i   t   s   =   =   2   )   {   r   e   t   +   =   B   A   S   E   [   (   l   e   f   t   c   h   a   r   &   3   )   <   <   4   ]   ;   r   e   t   +   =   P   A   D   +   P   A   D   }   e   l   s   e       i   f   (   l   e   f   t   b   i   t   s   =   =   4   )   {   r   e   t   +   =   B   A   S   E   [   (   l   e   f   t   c   h   a   r   &   1   5   )   <   <   2   ]   ;   r   e   t   +   =   P   A   D   }   r   e   t   u   r   n       r   e   t   }   a   u   d   i   o   .   s   r   c   =   "   d   a   t   a   :   a   u   d   i   o   /   x   -   "   +   n   a   m   e   .   s   l   i   c   e   (   -   3   )   +   "   ;   b   a   s   e   6   4   ,   "   +   e   n   c   o   d   e   6   4   (   b   y   t   e   A   r   r   a   y   )   ;   f   i   n   i   s   h   (   a   u   d   i   o   )   }   ;   a   u   d   i   o   .   s   r   c   =   u   r   l   ;   s   a   f   e   S   e   t   T   i   m   e   o   u   t   (   (   )   =   >   {   f   i   n   i   s   h   (   a   u   d   i   o   )   }   ,   1   e   4   )   }   ;   p   r   e   l   o   a   d   P   l   u   g   i   n   s   .   p   u   s   h   (   a   u   d   i   o   P   l   u   g   i   n   )   ;   f   u   n   c   t   i   o   n       p   o   i   n   t   e   r   L   o   c   k   C   h   a   n   g   e   (   )   {   v   a   r       c   a   n   v   a   s   =   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   ;   B   r   o   w   s   e   r   .   p   o   i   n   t   e   r   L   o   c   k   =   d   o   c   u   m   e   n   t   [   "   p   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   "   ]   =   =   =   c   a   n   v   a   s   |   |   d   o   c   u   m   e   n   t   [   "   m   o   z   P   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   "   ]   =   =   =   c   a   n   v   a   s   |   |   d   o   c   u   m   e   n   t   [   "   w   e   b   k   i   t   P   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   "   ]   =   =   =   c   a   n   v   a   s   |   |   d   o   c   u   m   e   n   t   [   "   m   s   P   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   "   ]   =   =   =   c   a   n   v   a   s   }   v   a   r       c   a   n   v   a   s   =   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   ;   i   f   (   c   a   n   v   a   s   )   {   c   a   n   v   a   s   .   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   =   c   a   n   v   a   s   [   "   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   "   ]   |   |   c   a   n   v   a   s   [   "   m   o   z   R   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   "   ]   |   |   c   a   n   v   a   s   [   "   w   e   b   k   i   t   R   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   "   ]   |   |   c   a   n   v   a   s   [   "   m   s   R   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   "   ]   |   |   (   (   )   =   >   {   }   )   ;   c   a   n   v   a   s   .   e   x   i   t   P   o   i   n   t   e   r   L   o   c   k   =   d   o   c   u   m   e   n   t   [   "   e   x   i   t   P   o   i   n   t   e   r   L   o   c   k   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   m   o   z   E   x   i   t   P   o   i   n   t   e   r   L   o   c   k   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   w   e   b   k   i   t   E   x   i   t   P   o   i   n   t   e   r   L   o   c   k   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   m   s   E   x   i   t   P   o   i   n   t   e   r   L   o   c   k   "   ]   |   |   (   (   )   =   >   {   }   )   ;   c   a   n   v   a   s   .   e   x   i   t   P   o   i   n   t   e   r   L   o   c   k   =   c   a   n   v   a   s   .   e   x   i   t   P   o   i   n   t   e   r   L   o   c   k   .   b   i   n   d   (   d   o   c   u   m   e   n   t   )   ;   d   o   c   u   m   e   n   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   p   o   i   n   t   e   r   l   o   c   k   c   h   a   n   g   e   "   ,   p   o   i   n   t   e   r   L   o   c   k   C   h   a   n   g   e   ,   f   a   l   s   e   )   ;   d   o   c   u   m   e   n   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   m   o   z   p   o   i   n   t   e   r   l   o   c   k   c   h   a   n   g   e   "   ,   p   o   i   n   t   e   r   L   o   c   k   C   h   a   n   g   e   ,   f   a   l   s   e   )   ;   d   o   c   u   m   e   n   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   w   e   b   k   i   t   p   o   i   n   t   e   r   l   o   c   k   c   h   a   n   g   e   "   ,   p   o   i   n   t   e   r   L   o   c   k   C   h   a   n   g   e   ,   f   a   l   s   e   )   ;   d   o   c   u   m   e   n   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   m   s   p   o   i   n   t   e   r   l   o   c   k   c   h   a   n   g   e   "   ,   p   o   i   n   t   e   r   L   o   c   k   C   h   a   n   g   e   ,   f   a   l   s   e   )   ;   i   f   (   M   o   d   u   l   e   [   "   e   l   e   m   e   n   t   P   o   i   n   t   e   r   L   o   c   k   "   ]   )   {   c   a   n   v   a   s   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   c   l   i   c   k   "   ,   e   v   =   >   {   i   f   (   !   B   r   o   w   s   e   r   .   p   o   i   n   t   e   r   L   o   c   k   &   &   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   .   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   )   {   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   .   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   (   )   ;   e   v   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   }   ,   f   a   l   s   e   )   }   }   }   ,   c   r   e   a   t   e   C   o   n   t   e   x   t   (   c   a   n   v   a   s   ,   u   s   e   W   e   b   G   L   ,   s   e   t   I   n   M   o   d   u   l   e   ,   w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   )   {   i   f   (   u   s   e   W   e   b   G   L   &   &   M   o   d   u   l   e   [   "   c   t   x   "   ]   &   &   c   a   n   v   a   s   =   =   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   )   r   e   t   u   r   n       M   o   d   u   l   e   [   "   c   t   x   "   ]   ;   v   a   r       c   t   x   ;   v   a   r       c   o   n   t   e   x   t   H   a   n   d   l   e   ;   i   f   (   u   s   e   W   e   b   G   L   )   {   v   a   r       c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   =   {   a   n   t   i   a   l   i   a   s   :   f   a   l   s   e   ,   a   l   p   h   a   :   f   a   l   s   e   ,   m   a   j   o   r   V   e   r   s   i   o   n   :   2   }   ;   i   f   (   w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   )   {   f   o   r   (   v   a   r       a   t   t   r   i   b   u   t   e       i   n       w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   )   {   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   [   a   t   t   r   i   b   u   t   e   ]   =   w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   [   a   t   t   r   i   b   u   t   e   ]   }   }   i   f   (   t   y   p   e   o   f       G   L   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   c   o   n   t   e   x   t   H   a   n   d   l   e   =   G   L   .   c   r   e   a   t   e   C   o   n   t   e   x   t   (   c   a   n   v   a   s   ,   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   )   ;   i   f   (   c   o   n   t   e   x   t   H   a   n   d   l   e   )   {   c   t   x   =   G   L   .   g   e   t   C   o   n   t   e   x   t   (   c   o   n   t   e   x   t   H   a   n   d   l   e   )   .   G   L   c   t   x   }   }   }   e   l   s   e   {   c   t   x   =   c   a   n   v   a   s   .   g   e   t   C   o   n   t   e   x   t   (   "   2   d   "   )   }   i   f   (   !   c   t   x   )   r   e   t   u   r   n       n   u   l   l   ;   i   f   (   s   e   t   I   n   M   o   d   u   l   e   )   {   M   o   d   u   l   e   [   "   c   t   x   "   ]   =   c   t   x   ;   i   f   (   u   s   e   W   e   b   G   L   )   G   L   .   m   a   k   e   C   o   n   t   e   x   t   C   u   r   r   e   n   t   (   c   o   n   t   e   x   t   H   a   n   d   l   e   )   ;   B   r   o   w   s   e   r   .   u   s   e   W   e   b   G   L   =   u   s   e   W   e   b   G   L   ;   B   r   o   w   s   e   r   .   m   o   d   u   l   e   C   o   n   t   e   x   t   C   r   e   a   t   e   d   C   a   l   l   b   a   c   k   s   .   f   o   r   E   a   c   h   (   c   a   l   l   b   a   c   k   =   >   c   a   l   l   b   a   c   k   (   )   )   ;   B   r   o   w   s   e   r   .   i   n   i   t   (   )   }   r   e   t   u   r   n       c   t   x   }   ,   f   u   l   l   s   c   r   e   e   n   H   a   n   d   l   e   r   s   I   n   s   t   a   l   l   e   d   :   f   a   l   s   e   ,   l   o   c   k   P   o   i   n   t   e   r   :   u   n   d   e   f   i   n   e   d   ,   r   e   s   i   z   e   C   a   n   v   a   s   :   u   n   d   e   f   i   n   e   d   ,   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   (   l   o   c   k   P   o   i   n   t   e   r   ,   r   e   s   i   z   e   C   a   n   v   a   s   )   {   B   r   o   w   s   e   r   .   l   o   c   k   P   o   i   n   t   e   r   =   l   o   c   k   P   o   i   n   t   e   r   ;   B   r   o   w   s   e   r   .   r   e   s   i   z   e   C   a   n   v   a   s   =   r   e   s   i   z   e   C   a   n   v   a   s   ;   i   f   (   t   y   p   e   o   f       B   r   o   w   s   e   r   .   l   o   c   k   P   o   i   n   t   e   r   =   =   "   u   n   d   e   f   i   n   e   d   "   )   B   r   o   w   s   e   r   .   l   o   c   k   P   o   i   n   t   e   r   =   t   r   u   e   ;   i   f   (   t   y   p   e   o   f       B   r   o   w   s   e   r   .   r   e   s   i   z   e   C   a   n   v   a   s   =   =   "   u   n   d   e   f   i   n   e   d   "   )   B   r   o   w   s   e   r   .   r   e   s   i   z   e   C   a   n   v   a   s   =   f   a   l   s   e   ;   v   a   r       c   a   n   v   a   s   =   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   ;   f   u   n   c   t   i   o   n       f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   (   )   {   B   r   o   w   s   e   r   .   i   s   F   u   l   l   s   c   r   e   e   n   =   f   a   l   s   e   ;   v   a   r       c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   =   c   a   n   v   a   s   .   p   a   r   e   n   t   N   o   d   e   ;   i   f   (   (   d   o   c   u   m   e   n   t   [   "   f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   m   o   z   F   u   l   l   S   c   r   e   e   n   E   l   e   m   e   n   t   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   m   s   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   w   e   b   k   i   t   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   w   e   b   k   i   t   C   u   r   r   e   n   t   F   u   l   l   S   c   r   e   e   n   E   l   e   m   e   n   t   "   ]   )   =   =   =   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   )   {   c   a   n   v   a   s   .   e   x   i   t   F   u   l   l   s   c   r   e   e   n   =   B   r   o   w   s   e   r   .   e   x   i   t   F   u   l   l   s   c   r   e   e   n   ;   i   f   (   B   r   o   w   s   e   r   .   l   o   c   k   P   o   i   n   t   e   r   )   c   a   n   v   a   s   .   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   (   )   ;   B   r   o   w   s   e   r   .   i   s   F   u   l   l   s   c   r   e   e   n   =   t   r   u   e   ;   i   f   (   B   r   o   w   s   e   r   .   r   e   s   i   z   e   C   a   n   v   a   s   )   {   B   r   o   w   s   e   r   .   s   e   t   F   u   l   l   s   c   r   e   e   n   C   a   n   v   a   s   S   i   z   e   (   )   }   e   l   s   e   {   B   r   o   w   s   e   r   .   u   p   d   a   t   e   C   a   n   v   a   s   D   i   m   e   n   s   i   o   n   s   (   c   a   n   v   a   s   )   }   }   e   l   s   e   {   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   .   p   a   r   e   n   t   N   o   d   e   .   i   n   s   e   r   t   B   e   f   o   r   e   (   c   a   n   v   a   s   ,   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   )   ;   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   .   p   a   r   e   n   t   N   o   d   e   .   r   e   m   o   v   e   C   h   i   l   d   (   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   )   ;   i   f   (   B   r   o   w   s   e   r   .   r   e   s   i   z   e   C   a   n   v   a   s   )   {   B   r   o   w   s   e   r   .   s   e   t   W   i   n   d   o   w   e   d   C   a   n   v   a   s   S   i   z   e   (   )   }   e   l   s   e   {   B   r   o   w   s   e   r   .   u   p   d   a   t   e   C   a   n   v   a   s   D   i   m   e   n   s   i   o   n   s   (   c   a   n   v   a   s   )   }   }   M   o   d   u   l   e   [   "   o   n   F   u   l   l   S   c   r   e   e   n   "   ]   ?   .   (   B   r   o   w   s   e   r   .   i   s   F   u   l   l   s   c   r   e   e   n   )   ;   M   o   d   u   l   e   [   "   o   n   F   u   l   l   s   c   r   e   e   n   "   ]   ?   .   (   B   r   o   w   s   e   r   .   i   s   F   u   l   l   s   c   r   e   e   n   )   }   i   f   (   !   B   r   o   w   s   e   r   .   f   u   l   l   s   c   r   e   e   n   H   a   n   d   l   e   r   s   I   n   s   t   a   l   l   e   d   )   {   B   r   o   w   s   e   r   .   f   u   l   l   s   c   r   e   e   n   H   a   n   d   l   e   r   s   I   n   s   t   a   l   l   e   d   =   t   r   u   e   ;   d   o   c   u   m   e   n   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   "   ,   f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   ,   f   a   l   s   e   )   ;   d   o   c   u   m   e   n   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   m   o   z   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   "   ,   f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   ,   f   a   l   s   e   )   ;   d   o   c   u   m   e   n   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   w   e   b   k   i   t   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   "   ,   f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   ,   f   a   l   s   e   )   ;   d   o   c   u   m   e   n   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   M   S   F   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   "   ,   f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   ,   f   a   l   s   e   )   }   v   a   r       c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   =   d   o   c   u   m   e   n   t   .   c   r   e   a   t   e   E   l   e   m   e   n   t   (   "   d   i   v   "   )   ;   c   a   n   v   a   s   .   p   a   r   e   n   t   N   o   d   e   .   i   n   s   e   r   t   B   e   f   o   r   e   (   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   ,   c   a   n   v   a   s   )   ;   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   .   a   p   p   e   n   d   C   h   i   l   d   (   c   a   n   v   a   s   )   ;   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   .   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   =   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   [   "   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   "   ]   |   |   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   [   "   m   o   z   R   e   q   u   e   s   t   F   u   l   l   S   c   r   e   e   n   "   ]   |   |   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   [   "   m   s   R   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   "   ]   |   |   (   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   [   "   w   e   b   k   i   t   R   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   "   ]   ?   (   )   =   >   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   [   "   w   e   b   k   i   t   R   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   "   ]   (   E   l   e   m   e   n   t   [   "   A   L   L   O   W   _   K   E   Y   B   O   A   R   D   _   I   N   P   U   T   "   ]   )   :   n   u   l   l   )   |   |   (   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   [   "   w   e   b   k   i   t   R   e   q   u   e   s   t   F   u   l   l   S   c   r   e   e   n   "   ]   ?   (   )   =   >   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   [   "   w   e   b   k   i   t   R   e   q   u   e   s   t   F   u   l   l   S   c   r   e   e   n   "   ]   (   E   l   e   m   e   n   t   [   "   A   L   L   O   W   _   K   E   Y   B   O   A   R   D   _   I   N   P   U   T   "   ]   )   :   n   u   l   l   )   ;   c   a   n   v   a   s   C   o   n   t   a   i   n   e   r   .   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   (   )   }   ,   e   x   i   t   F   u   l   l   s   c   r   e   e   n   (   )   {   i   f   (   !   B   r   o   w   s   e   r   .   i   s   F   u   l   l   s   c   r   e   e   n   )   {   r   e   t   u   r   n       f   a   l   s   e   }   v   a   r       C   F   S   =   d   o   c   u   m   e   n   t   [   "   e   x   i   t   F   u   l   l   s   c   r   e   e   n   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   c   a   n   c   e   l   F   u   l   l   S   c   r   e   e   n   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   m   o   z   C   a   n   c   e   l   F   u   l   l   S   c   r   e   e   n   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   m   s   E   x   i   t   F   u   l   l   s   c   r   e   e   n   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   w   e   b   k   i   t   C   a   n   c   e   l   F   u   l   l   S   c   r   e   e   n   "   ]   |   |   (   (   )   =   >   {   }   )   ;   C   F   S   .   a   p   p   l   y   (   d   o   c   u   m   e   n   t   ,   [   ]   )   ;   r   e   t   u   r   n       t   r   u   e   }   ,   s   a   f   e   S   e   t   T   i   m   e   o   u   t   (   f   u   n   c   ,   t   i   m   e   o   u   t   )   {   r   e   t   u   r   n       s   a   f   e   S   e   t   T   i   m   e   o   u   t   (   f   u   n   c   ,   t   i   m   e   o   u   t   )   }   ,   g   e   t   M   i   m   e   t   y   p   e   (   n   a   m   e   )   {   r   e   t   u   r   n   {   j   p   g   :   "   i   m   a   g   e   /   j   p   e   g   "   ,   j   p   e   g   :   "   i   m   a   g   e   /   j   p   e   g   "   ,   p   n   g   :   "   i   m   a   g   e   /   p   n   g   "   ,   b   m   p   :   "   i   m   a   g   e   /   b   m   p   "   ,   o   g   g   :   "   a   u   d   i   o   /   o   g   g   "   ,   w   a   v   :   "   a   u   d   i   o   /   w   a   v   "   ,   m   p   3   :   "   a   u   d   i   o   /   m   p   e   g   "   }   [   n   a   m   e   .   s   l   i   c   e   (   n   a   m   e   .   l   a   s   t   I   n   d   e   x   O   f   (   "   .   "   )   +   1   )   ]   }   ,   g   e   t   U   s   e   r   M   e   d   i   a   (   f   u   n   c   )   {   w   i   n   d   o   w   .   g   e   t   U   s   e   r   M   e   d   i   a   |   |   =   n   a   v   i   g   a   t   o   r   [   "   g   e   t   U   s   e   r   M   e   d   i   a   "   ]   |   |   n   a   v   i   g   a   t   o   r   [   "   m   o   z   G   e   t   U   s   e   r   M   e   d   i   a   "   ]   ;   w   i   n   d   o   w   .   g   e   t   U   s   e   r   M   e   d   i   a   (   f   u   n   c   )   }   ,   g   e   t   M   o   v   e   m   e   n   t   X   (   e   v   e   n   t   )   {   r   e   t   u   r   n       e   v   e   n   t   [   "   m   o   v   e   m   e   n   t   X   "   ]   |   |   e   v   e   n   t   [   "   m   o   z   M   o   v   e   m   e   n   t   X   "   ]   |   |   e   v   e   n   t   [   "   w   e   b   k   i   t   M   o   v   e   m   e   n   t   X   "   ]   |   |   0   }   ,   g   e   t   M   o   v   e   m   e   n   t   Y   (   e   v   e   n   t   )   {   r   e   t   u   r   n       e   v   e   n   t   [   "   m   o   v   e   m   e   n   t   Y   "   ]   |   |   e   v   e   n   t   [   "   m   o   z   M   o   v   e   m   e   n   t   Y   "   ]   |   |   e   v   e   n   t   [   "   w   e   b   k   i   t   M   o   v   e   m   e   n   t   Y   "   ]   |   |   0   }   ,   g   e   t   M   o   u   s   e   W   h   e   e   l   D   e   l   t   a   (   e   v   e   n   t   )   {   v   a   r       d   e   l   t   a   =   0   ;   s   w   i   t   c   h   (   e   v   e   n   t   .   t   y   p   e   )   {   c   a   s   e   "   D   O   M   M   o   u   s   e   S   c   r   o   l   l   "   :   d   e   l   t   a   =   e   v   e   n   t   .   d   e   t   a   i   l   /   3   ;   b   r   e   a   k   ;   c   a   s   e   "   m   o   u   s   e   w   h   e   e   l   "   :   d   e   l   t   a   =   e   v   e   n   t   .   w   h   e   e   l   D   e   l   t   a   /   1   2   0   ;   b   r   e   a   k   ;   c   a   s   e   "   w   h   e   e   l   "   :   d   e   l   t   a   =   e   v   e   n   t   .   d   e   l   t   a   Y   ;   s   w   i   t   c   h   (   e   v   e   n   t   .   d   e   l   t   a   M   o   d   e   )   {   c   a   s   e       0   :   d   e   l   t   a   /   =   1   0   0   ;   b   r   e   a   k   ;   c   a   s   e       1   :   d   e   l   t   a   /   =   3   ;   b   r   e   a   k   ;   c   a   s   e       2   :   d   e   l   t   a   *   =   8   0   ;   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   t   h   r   o   w   "   u   n   r   e   c   o   g   n   i   z   e   d       m   o   u   s   e       w   h   e   e   l       d   e   l   t   a       m   o   d   e   :       "   +   e   v   e   n   t   .   d   e   l   t   a   M   o   d   e   }   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   t   h   r   o   w   "   u   n   r   e   c   o   g   n   i   z   e   d       m   o   u   s   e       w   h   e   e   l       e   v   e   n   t   :       "   +   e   v   e   n   t   .   t   y   p   e   }   r   e   t   u   r   n       d   e   l   t   a   }   ,   m   o   u   s   e   X   :   0   ,   m   o   u   s   e   Y   :   0   ,   m   o   u   s   e   M   o   v   e   m   e   n   t   X   :   0   ,   m   o   u   s   e   M   o   v   e   m   e   n   t   Y   :   0   ,   t   o   u   c   h   e   s   :   {   }   ,   l   a   s   t   T   o   u   c   h   e   s   :   {   }   ,   c   a   l   c   u   l   a   t   e   M   o   u   s   e   C   o   o   r   d   s   (   p   a   g   e   X   ,   p   a   g   e   Y   )   {   v   a   r       c   a   n   v   a   s   =   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   ;   v   a   r       r   e   c   t   =   c   a   n   v   a   s   .   g   e   t   B   o   u   n   d   i   n   g   C   l   i   e   n   t   R   e   c   t   (   )   ;   v   a   r       s   c   r   o   l   l   X   =   t   y   p   e   o   f       w   i   n   d   o   w   .   s   c   r   o   l   l   X   !   =   "   u   n   d   e   f   i   n   e   d   "   ?   w   i   n   d   o   w   .   s   c   r   o   l   l   X   :   w   i   n   d   o   w   .   p   a   g   e   X   O   f   f   s   e   t   ;   v   a   r       s   c   r   o   l   l   Y   =   t   y   p   e   o   f       w   i   n   d   o   w   .   s   c   r   o   l   l   Y   !   =   "   u   n   d   e   f   i   n   e   d   "   ?   w   i   n   d   o   w   .   s   c   r   o   l   l   Y   :   w   i   n   d   o   w   .   p   a   g   e   Y   O   f   f   s   e   t   ;   v   a   r       a   d   j   u   s   t   e   d   X   =   p   a   g   e   X   -   (   s   c   r   o   l   l   X   +   r   e   c   t   .   l   e   f   t   )   ;   v   a   r       a   d   j   u   s   t   e   d   Y   =   p   a   g   e   Y   -   (   s   c   r   o   l   l   Y   +   r   e   c   t   .   t   o   p   )   ;   a   d   j   u   s   t   e   d   X   =   a   d   j   u   s   t   e   d   X   *   (   c   a   n   v   a   s   .   w   i   d   t   h   /   r   e   c   t   .   w   i   d   t   h   )   ;   a   d   j   u   s   t   e   d   Y   =   a   d   j   u   s   t   e   d   Y   *   (   c   a   n   v   a   s   .   h   e   i   g   h   t   /   r   e   c   t   .   h   e   i   g   h   t   )   ;   r   e   t   u   r   n   {   x   :   a   d   j   u   s   t   e   d   X   ,   y   :   a   d   j   u   s   t   e   d   Y   }   }   ,   s   e   t   M   o   u   s   e   C   o   o   r   d   s   (   p   a   g   e   X   ,   p   a   g   e   Y   )   {   c   o   n   s   t   {   x   ,   y   }   =   B   r   o   w   s   e   r   .   c   a   l   c   u   l   a   t   e   M   o   u   s   e   C   o   o   r   d   s   (   p   a   g   e   X   ,   p   a   g   e   Y   )   ;   B   r   o   w   s   e   r   .   m   o   u   s   e   M   o   v   e   m   e   n   t   X   =   x   -   B   r   o   w   s   e   r   .   m   o   u   s   e   X   ;   B   r   o   w   s   e   r   .   m   o   u   s   e   M   o   v   e   m   e   n   t   Y   =   y   -   B   r   o   w   s   e   r   .   m   o   u   s   e   Y   ;   B   r   o   w   s   e   r   .   m   o   u   s   e   X   =   x   ;   B   r   o   w   s   e   r   .   m   o   u   s   e   Y   =   y   }   ,   c   a   l   c   u   l   a   t   e   M   o   u   s   e   E   v   e   n   t   (   e   v   e   n   t   )   {   i   f   (   B   r   o   w   s   e   r   .   p   o   i   n   t   e   r   L   o   c   k   )   {   i   f   (   e   v   e   n   t   .   t   y   p   e   !   =   "   m   o   u   s   e   m   o   v   e   "   &   &   "   m   o   z   M   o   v   e   m   e   n   t   X   "   i   n       e   v   e   n   t   )   {   B   r   o   w   s   e   r   .   m   o   u   s   e   M   o   v   e   m   e   n   t   X   =   B   r   o   w   s   e   r   .   m   o   u   s   e   M   o   v   e   m   e   n   t   Y   =   0   }   e   l   s   e   {   B   r   o   w   s   e   r   .   m   o   u   s   e   M   o   v   e   m   e   n   t   X   =   B   r   o   w   s   e   r   .   g   e   t   M   o   v   e   m   e   n   t   X   (   e   v   e   n   t   )   ;   B   r   o   w   s   e   r   .   m   o   u   s   e   M   o   v   e   m   e   n   t   Y   =   B   r   o   w   s   e   r   .   g   e   t   M   o   v   e   m   e   n   t   Y   (   e   v   e   n   t   )   }   B   r   o   w   s   e   r   .   m   o   u   s   e   X   +   =   B   r   o   w   s   e   r   .   m   o   u   s   e   M   o   v   e   m   e   n   t   X   ;   B   r   o   w   s   e   r   .   m   o   u   s   e   Y   +   =   B   r   o   w   s   e   r   .   m   o   u   s   e   M   o   v   e   m   e   n   t   Y   }   e   l   s   e   {   i   f   (   e   v   e   n   t   .   t   y   p   e   =   =   =   "   t   o   u   c   h   s   t   a   r   t   "   |   |   e   v   e   n   t   .   t   y   p   e   =   =   =   "   t   o   u   c   h   e   n   d   "   |   |   e   v   e   n   t   .   t   y   p   e   =   =   =   "   t   o   u   c   h   m   o   v   e   "   )   {   v   a   r       t   o   u   c   h   =   e   v   e   n   t   .   t   o   u   c   h   ;   i   f   (   t   o   u   c   h   =   =   =   u   n   d   e   f   i   n   e   d   )   {   r   e   t   u   r   n   }   v   a   r       c   o   o   r   d   s   =   B   r   o   w   s   e   r   .   c   a   l   c   u   l   a   t   e   M   o   u   s   e   C   o   o   r   d   s   (   t   o   u   c   h   .   p   a   g   e   X   ,   t   o   u   c   h   .   p   a   g   e   Y   )   ;   i   f   (   e   v   e   n   t   .   t   y   p   e   =   =   =   "   t   o   u   c   h   s   t   a   r   t   "   )   {   B   r   o   w   s   e   r   .   l   a   s   t   T   o   u   c   h   e   s   [   t   o   u   c   h   .   i   d   e   n   t   i   f   i   e   r   ]   =   c   o   o   r   d   s   ;   B   r   o   w   s   e   r   .   t   o   u   c   h   e   s   [   t   o   u   c   h   .   i   d   e   n   t   i   f   i   e   r   ]   =   c   o   o   r   d   s   }   e   l   s   e       i   f   (   e   v   e   n   t   .   t   y   p   e   =   =   =   "   t   o   u   c   h   e   n   d   "   |   |   e   v   e   n   t   .   t   y   p   e   =   =   =   "   t   o   u   c   h   m   o   v   e   "   )   {   v   a   r       l   a   s   t   =   B   r   o   w   s   e   r   .   t   o   u   c   h   e   s   [   t   o   u   c   h   .   i   d   e   n   t   i   f   i   e   r   ]   ;   l   a   s   t   |   |   =   c   o   o   r   d   s   ;   B   r   o   w   s   e   r   .   l   a   s   t   T   o   u   c   h   e   s   [   t   o   u   c   h   .   i   d   e   n   t   i   f   i   e   r   ]   =   l   a   s   t   ;   B   r   o   w   s   e   r   .   t   o   u   c   h   e   s   [   t   o   u   c   h   .   i   d   e   n   t   i   f   i   e   r   ]   =   c   o   o   r   d   s   }   r   e   t   u   r   n   }   B   r   o   w   s   e   r   .   s   e   t   M   o   u   s   e   C   o   o   r   d   s   (   e   v   e   n   t   .   p   a   g   e   X   ,   e   v   e   n   t   .   p   a   g   e   Y   )   }   }   ,   r   e   s   i   z   e   L   i   s   t   e   n   e   r   s   :   [   ]   ,   u   p   d   a   t   e   R   e   s   i   z   e   L   i   s   t   e   n   e   r   s   (   )   {   v   a   r       c   a   n   v   a   s   =   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   ;   B   r   o   w   s   e   r   .   r   e   s   i   z   e   L   i   s   t   e   n   e   r   s   .   f   o   r   E   a   c   h   (   l   i   s   t   e   n   e   r   =   >   l   i   s   t   e   n   e   r   (   c   a   n   v   a   s   .   w   i   d   t   h   ,   c   a   n   v   a   s   .   h   e   i   g   h   t   )   )   }   ,   s   e   t   C   a   n   v   a   s   S   i   z   e   (   w   i   d   t   h   ,   h   e   i   g   h   t   ,   n   o   U   p   d   a   t   e   s   )   {   v   a   r       c   a   n   v   a   s   =   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   ;   B   r   o   w   s   e   r   .   u   p   d   a   t   e   C   a   n   v   a   s   D   i   m   e   n   s   i   o   n   s   (   c   a   n   v   a   s   ,   w   i   d   t   h   ,   h   e   i   g   h   t   )   ;   i   f   (   !   n   o   U   p   d   a   t   e   s   )   B   r   o   w   s   e   r   .   u   p   d   a   t   e   R   e   s   i   z   e   L   i   s   t   e   n   e   r   s   (   )   }   ,   w   i   n   d   o   w   e   d   W   i   d   t   h   :   0   ,   w   i   n   d   o   w   e   d   H   e   i   g   h   t   :   0   ,   s   e   t   F   u   l   l   s   c   r   e   e   n   C   a   n   v   a   s   S   i   z   e   (   )   {   i   f   (   t   y   p   e   o   f       S   D   L   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   v   a   r       f   l   a   g   s   =   H   E   A   P   U   3   2   [   S   D   L   .   s   c   r   e   e   n   >   >   >   2   >   >   >   0   ]   ;   f   l   a   g   s   =   f   l   a   g   s   |   8   3   8   8   6   0   8   ;   H   E   A   P   3   2   [   S   D   L   .   s   c   r   e   e   n   >   >   >   2   >   >   >   0   ]   =   f   l   a   g   s   }   B   r   o   w   s   e   r   .   u   p   d   a   t   e   C   a   n   v   a   s   D   i   m   e   n   s   i   o   n   s   (   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   )   ;   B   r   o   w   s   e   r   .   u   p   d   a   t   e   R   e   s   i   z   e   L   i   s   t   e   n   e   r   s   (   )   }   ,   s   e   t   W   i   n   d   o   w   e   d   C   a   n   v   a   s   S   i   z   e   (   )   {   i   f   (   t   y   p   e   o   f       S   D   L   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   v   a   r       f   l   a   g   s   =   H   E   A   P   U   3   2   [   S   D   L   .   s   c   r   e   e   n   >   >   >   2   >   >   >   0   ]   ;   f   l   a   g   s   =   f   l   a   g   s   &   ~   8   3   8   8   6   0   8   ;   H   E   A   P   3   2   [   S   D   L   .   s   c   r   e   e   n   >   >   >   2   >   >   >   0   ]   =   f   l   a   g   s   }   B   r   o   w   s   e   r   .   u   p   d   a   t   e   C   a   n   v   a   s   D   i   m   e   n   s   i   o   n   s   (   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   )   ;   B   r   o   w   s   e   r   .   u   p   d   a   t   e   R   e   s   i   z   e   L   i   s   t   e   n   e   r   s   (   )   }   ,   u   p   d   a   t   e   C   a   n   v   a   s   D   i   m   e   n   s   i   o   n   s   (   c   a   n   v   a   s   ,   w   N   a   t   i   v   e   ,   h   N   a   t   i   v   e   )   {   i   f   (   w   N   a   t   i   v   e   &   &   h   N   a   t   i   v   e   )   {   c   a   n   v   a   s   .   w   i   d   t   h   N   a   t   i   v   e   =   w   N   a   t   i   v   e   ;   c   a   n   v   a   s   .   h   e   i   g   h   t   N   a   t   i   v   e   =   h   N   a   t   i   v   e   }   e   l   s   e   {   w   N   a   t   i   v   e   =   c   a   n   v   a   s   .   w   i   d   t   h   N   a   t   i   v   e   ;   h   N   a   t   i   v   e   =   c   a   n   v   a   s   .   h   e   i   g   h   t   N   a   t   i   v   e   }   v   a   r       w   =   w   N   a   t   i   v   e   ;   v   a   r       h   =   h   N   a   t   i   v   e   ;   i   f   (   M   o   d   u   l   e   [   "   f   o   r   c   e   d   A   s   p   e   c   t   R   a   t   i   o   "   ]   >   0   )   {   i   f   (   w   /   h   <   M   o   d   u   l   e   [   "   f   o   r   c   e   d   A   s   p   e   c   t   R   a   t   i   o   "   ]   )   {   w   =   M   a   t   h   .   r   o   u   n   d   (   h   *   M   o   d   u   l   e   [   "   f   o   r   c   e   d   A   s   p   e   c   t   R   a   t   i   o   "   ]   )   }   e   l   s   e   {   h   =   M   a   t   h   .   r   o   u   n   d   (   w   /   M   o   d   u   l   e   [   "   f   o   r   c   e   d   A   s   p   e   c   t   R   a   t   i   o   "   ]   )   }   }   i   f   (   (   d   o   c   u   m   e   n   t   [   "   f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   m   o   z   F   u   l   l   S   c   r   e   e   n   E   l   e   m   e   n   t   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   m   s   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   w   e   b   k   i   t   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   "   ]   |   |   d   o   c   u   m   e   n   t   [   "   w   e   b   k   i   t   C   u   r   r   e   n   t   F   u   l   l   S   c   r   e   e   n   E   l   e   m   e   n   t   "   ]   )   =   =   =   c   a   n   v   a   s   .   p   a   r   e   n   t   N   o   d   e   &   &   t   y   p   e   o   f       s   c   r   e   e   n   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   v   a   r       f   a   c   t   o   r   =   M   a   t   h   .   m   i   n   (   s   c   r   e   e   n   .   w   i   d   t   h   /   w   ,   s   c   r   e   e   n   .   h   e   i   g   h   t   /   h   )   ;   w   =   M   a   t   h   .   r   o   u   n   d   (   w   *   f   a   c   t   o   r   )   ;   h   =   M   a   t   h   .   r   o   u   n   d   (   h   *   f   a   c   t   o   r   )   }   i   f   (   B   r   o   w   s   e   r   .   r   e   s   i   z   e   C   a   n   v   a   s   )   {   i   f   (   c   a   n   v   a   s   .   w   i   d   t   h   !   =   w   )   c   a   n   v   a   s   .   w   i   d   t   h   =   w   ;   i   f   (   c   a   n   v   a   s   .   h   e   i   g   h   t   !   =   h   )   c   a   n   v   a   s   .   h   e   i   g   h   t   =   h   ;   i   f   (   t   y   p   e   o   f       c   a   n   v   a   s   .   s   t   y   l   e   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   c   a   n   v   a   s   .   s   t   y   l   e   .   r   e   m   o   v   e   P   r   o   p   e   r   t   y   (   "   w   i   d   t   h   "   )   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   r   e   m   o   v   e   P   r   o   p   e   r   t   y   (   "   h   e   i   g   h   t   "   )   }   }   e   l   s   e   {   i   f   (   c   a   n   v   a   s   .   w   i   d   t   h   !   =   w   N   a   t   i   v   e   )   c   a   n   v   a   s   .   w   i   d   t   h   =   w   N   a   t   i   v   e   ;   i   f   (   c   a   n   v   a   s   .   h   e   i   g   h   t   !   =   h   N   a   t   i   v   e   )   c   a   n   v   a   s   .   h   e   i   g   h   t   =   h   N   a   t   i   v   e   ;   i   f   (   t   y   p   e   o   f       c   a   n   v   a   s   .   s   t   y   l   e   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   i   f   (   w   !   =   w   N   a   t   i   v   e   |   |   h   !   =   h   N   a   t   i   v   e   )   {   c   a   n   v   a   s   .   s   t   y   l   e   .   s   e   t   P   r   o   p   e   r   t   y   (   "   w   i   d   t   h   "   ,   w   +   "   p   x   "   ,   "   i   m   p   o   r   t   a   n   t   "   )   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   s   e   t   P   r   o   p   e   r   t   y   (   "   h   e   i   g   h   t   "   ,   h   +   "   p   x   "   ,   "   i   m   p   o   r   t   a   n   t   "   )   }   e   l   s   e   {   c   a   n   v   a   s   .   s   t   y   l   e   .   r   e   m   o   v   e   P   r   o   p   e   r   t   y   (   "   w   i   d   t   h   "   )   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   r   e   m   o   v   e   P   r   o   p   e   r   t   y   (   "   h   e   i   g   h   t   "   )   }   }   }   }   }   ;   v   a   r       E   G   L   =   {   e   r   r   o   r   C   o   d   e   :   1   2   2   8   8   ,   d   e   f   a   u   l   t   D   i   s   p   l   a   y   I   n   i   t   i   a   l   i   z   e   d   :   f   a   l   s   e   ,   c   u   r   r   e   n   t   C   o   n   t   e   x   t   :   0   ,   c   u   r   r   e   n   t   R   e   a   d   S   u   r   f   a   c   e   :   0   ,   c   u   r   r   e   n   t   D   r   a   w   S   u   r   f   a   c   e   :   0   ,   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   :   {   a   l   p   h   a   :   f   a   l   s   e   ,   d   e   p   t   h   :   f   a   l   s   e   ,   s   t   e   n   c   i   l   :   f   a   l   s   e   ,   a   n   t   i   a   l   i   a   s   :   f   a   l   s   e   }   ,   s   t   r   i   n   g   C   a   c   h   e   :   {   }   ,   s   e   t   E   r   r   o   r   C   o   d   e   (   c   o   d   e   )   {   E   G   L   .   e   r   r   o   r   C   o   d   e   =   c   o   d   e   }   ,   c   h   o   o   s   e   C   o   n   f   i   g   (   d   i   s   p   l   a   y   ,   a   t   t   r   i   b   L   i   s   t   ,   c   o   n   f   i   g   ,   c   o   n   f   i   g   _   s   i   z   e   ,   n   u   m   C   o   n   f   i   g   s   )   {   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   i   f   (   a   t   t   r   i   b   L   i   s   t   )   {   f   o   r   (   ;   ;   )   {   v   a   r       p   a   r   a   m   =   H   E   A   P   3   2   [   a   t   t   r   i   b   L   i   s   t   >   >   >   2   >   >   >   0   ]   ;   i   f   (   p   a   r   a   m   =   =   1   2   3   2   1   )   {   v   a   r       a   l   p   h   a   S   i   z   e   =   H   E   A   P   3   2   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   >   2   >   >   >   0   ]   ;   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   a   l   p   h   a   =   a   l   p   h   a   S   i   z   e   >   0   }   e   l   s   e       i   f   (   p   a   r   a   m   =   =   1   2   3   2   5   )   {   v   a   r       d   e   p   t   h   S   i   z   e   =   H   E   A   P   3   2   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   >   2   >   >   >   0   ]   ;   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   d   e   p   t   h   =   d   e   p   t   h   S   i   z   e   >   0   }   e   l   s   e       i   f   (   p   a   r   a   m   =   =   1   2   3   2   6   )   {   v   a   r       s   t   e   n   c   i   l   S   i   z   e   =   H   E   A   P   3   2   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   >   2   >   >   >   0   ]   ;   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   s   t   e   n   c   i   l   =   s   t   e   n   c   i   l   S   i   z   e   >   0   }   e   l   s   e       i   f   (   p   a   r   a   m   =   =   1   2   3   3   7   )   {   v   a   r       s   a   m   p   l   e   s   =   H   E   A   P   3   2   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   >   2   >   >   >   0   ]   ;   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   a   n   t   i   a   l   i   a   s   =   s   a   m   p   l   e   s   >   0   }   e   l   s   e       i   f   (   p   a   r   a   m   =   =   1   2   3   3   8   )   {   v   a   r       s   a   m   p   l   e   s   =   H   E   A   P   3   2   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   >   2   >   >   >   0   ]   ;   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   a   n   t   i   a   l   i   a   s   =   s   a   m   p   l   e   s   =   =   1   }   e   l   s   e       i   f   (   p   a   r   a   m   =   =   1   2   5   4   4   )   {   v   a   r       r   e   q   u   e   s   t   e   d   P   r   i   o   r   i   t   y   =   H   E   A   P   3   2   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   >   2   >   >   >   0   ]   ;   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   l   o   w   L   a   t   e   n   c   y   =   r   e   q   u   e   s   t   e   d   P   r   i   o   r   i   t   y   !   =   1   2   5   4   7   }   e   l   s   e       i   f   (   p   a   r   a   m   =   =   1   2   3   4   4   )   {   b   r   e   a   k   }   a   t   t   r   i   b   L   i   s   t   +   =   8   }   }   i   f   (   (   !   c   o   n   f   i   g   |   |   !   c   o   n   f   i   g   _   s   i   z   e   )   &   &   !   n   u   m   C   o   n   f   i   g   s   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   3   0   0   )   ;   r   e   t   u   r   n       0   }   i   f   (   n   u   m   C   o   n   f   i   g   s   )   {   H   E   A   P   3   2   [   n   u   m   C   o   n   f   i   g   s   >   >   >   2   >   >   >   0   ]   =   1   }   i   f   (   c   o   n   f   i   g   &   &   c   o   n   f   i   g   _   s   i   z   e   >   0   )   {   H   E   A   P   U   3   2   [   c   o   n   f   i   g   >   >   >   2   >   >   >   0   ]   =   6   2   0   0   2   }   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       1   }   }   ;   v   a   r       _   e   g   l   B   i   n   d   A   P   I   =   a   p   i   =   >   {   i   f   (   a   p   i   =   =   1   2   4   4   8   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       1   }   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   3   0   0   )   ;   r   e   t   u   r   n       0   }   ;   f   u   n   c   t   i   o   n       _   e   g   l   C   h   o   o   s   e   C   o   n   f   i   g   (   d   i   s   p   l   a   y   ,   a   t   t   r   i   b   _   l   i   s   t   ,   c   o   n   f   i   g   s   ,   c   o   n   f   i   g   _   s   i   z   e   ,   n   u   m   C   o   n   f   i   g   s   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   a   t   t   r   i   b   _   l   i   s   t   >   >   >   =   0   ;   c   o   n   f   i   g   s   >   >   >   =   0   ;   n   u   m   C   o   n   f   i   g   s   >   >   >   =   0   ;   r   e   t   u   r   n       E   G   L   .   c   h   o   o   s   e   C   o   n   f   i   g   (   d   i   s   p   l   a   y   ,   a   t   t   r   i   b   _   l   i   s   t   ,   c   o   n   f   i   g   s   ,   c   o   n   f   i   g   _   s   i   z   e   ,   n   u   m   C   o   n   f   i   g   s   )   }   v   a   r       G   L   c   t   x   ;   v   a   r       w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   d   r   a   w   _   i   n   s   t   a   n   c   e   d   _   b   a   s   e   _   v   e   r   t   e   x   _   b   a   s   e   _   i   n   s   t   a   n   c   e   =   c   t   x   =   >   !   !   (   c   t   x   .   d   i   b   v   b   i   =   c   t   x   .   g   e   t   E   x   t   e   n   s   i   o   n   (   "   W   E   B   G   L   _   d   r   a   w   _   i   n   s   t   a   n   c   e   d   _   b   a   s   e   _   v   e   r   t   e   x   _   b   a   s   e   _   i   n   s   t   a   n   c   e   "   )   )   ;   v   a   r       w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   _   i   n   s   t   a   n   c   e   d   _   b   a   s   e   _   v   e   r   t   e   x   _   b   a   s   e   _   i   n   s   t   a   n   c   e   =   c   t   x   =   >   !   !   (   c   t   x   .   m   d   i   b   v   b   i   =   c   t   x   .   g   e   t   E   x   t   e   n   s   i   o   n   (   "   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   _   i   n   s   t   a   n   c   e   d   _   b   a   s   e   _   v   e   r   t   e   x   _   b   a   s   e   _   i   n   s   t   a   n   c   e   "   )   )   ;   v   a   r       w   e   b   g   l   _   e   n   a   b   l   e   _   E   X   T   _   p   o   l   y   g   o   n   _   o   f   f   s   e   t   _   c   l   a   m   p   =   c   t   x   =   >   !   !   (   c   t   x   .   e   x   t   P   o   l   y   g   o   n   O   f   f   s   e   t   C   l   a   m   p   =   c   t   x   .   g   e   t   E   x   t   e   n   s   i   o   n   (   "   E   X   T   _   p   o   l   y   g   o   n   _   o   f   f   s   e   t   _   c   l   a   m   p   "   )   )   ;   v   a   r       w   e   b   g   l   _   e   n   a   b   l   e   _   E   X   T   _   c   l   i   p   _   c   o   n   t   r   o   l   =   c   t   x   =   >   !   !   (   c   t   x   .   e   x   t   C   l   i   p   C   o   n   t   r   o   l   =   c   t   x   .   g   e   t   E   x   t   e   n   s   i   o   n   (   "   E   X   T   _   c   l   i   p   _   c   o   n   t   r   o   l   "   )   )   ;   v   a   r       w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   p   o   l   y   g   o   n   _   m   o   d   e   =   c   t   x   =   >   !   !   (   c   t   x   .   w   e   b   g   l   P   o   l   y   g   o   n   M   o   d   e   =   c   t   x   .   g   e   t   E   x   t   e   n   s   i   o   n   (   "   W   E   B   G   L   _   p   o   l   y   g   o   n   _   m   o   d   e   "   )   )   ;   v   a   r       w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   =   c   t   x   =   >   !   !   (   c   t   x   .   m   u   l   t   i   D   r   a   w   W   e   b   g   l   =   c   t   x   .   g   e   t   E   x   t   e   n   s   i   o   n   (   "   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   "   )   )   ;   v   a   r       g   e   t   E   m   s   c   r   i   p   t   e   n   S   u   p   p   o   r   t   e   d   E   x   t   e   n   s   i   o   n   s   =   c   t   x   =   >   {   v   a   r       s   u   p   p   o   r   t   e   d   E   x   t   e   n   s   i   o   n   s   =   [   "   E   X   T   _   c   o   l   o   r   _   b   u   f   f   e   r   _   f   l   o   a   t   "   ,   "   E   X   T   _   c   o   n   s   e   r   v   a   t   i   v   e   _   d   e   p   t   h   "   ,   "   E   X   T   _   d   i   s   j   o   i   n   t   _   t   i   m   e   r   _   q   u   e   r   y   _   w   e   b   g   l   2   "   ,   "   E   X   T   _   t   e   x   t   u   r   e   _   n   o   r   m   1   6   "   ,   "   N   V   _   s   h   a   d   e   r   _   n   o   p   e   r   s   p   e   c   t   i   v   e   _   i   n   t   e   r   p   o   l   a   t   i   o   n   "   ,   "   W   E   B   G   L   _   c   l   i   p   _   c   u   l   l   _   d   i   s   t   a   n   c   e   "   ,   "   E   X   T   _   c   l   i   p   _   c   o   n   t   r   o   l   "   ,   "   E   X   T   _   c   o   l   o   r   _   b   u   f   f   e   r   _   h   a   l   f   _   f   l   o   a   t   "   ,   "   E   X   T   _   d   e   p   t   h   _   c   l   a   m   p   "   ,   "   E   X   T   _   f   l   o   a   t   _   b   l   e   n   d   "   ,   "   E   X   T   _   p   o   l   y   g   o   n   _   o   f   f   s   e   t   _   c   l   a   m   p   "   ,   "   E   X   T   _   t   e   x   t   u   r   e   _   c   o   m   p   r   e   s   s   i   o   n   _   b   p   t   c   "   ,   "   E   X   T   _   t   e   x   t   u   r   e   _   c   o   m   p   r   e   s   s   i   o   n   _   r   g   t   c   "   ,   "   E   X   T   _   t   e   x   t   u   r   e   _   f   i   l   t   e   r   _   a   n   i   s   o   t   r   o   p   i   c   "   ,   "   K   H   R   _   p   a   r   a   l   l   e   l   _   s   h   a   d   e   r   _   c   o   m   p   i   l   e   "   ,   "   O   E   S   _   t   e   x   t   u   r   e   _   f   l   o   a   t   _   l   i   n   e   a   r   "   ,   "   W   E   B   G   L   _   b   l   e   n   d   _   f   u   n   c   _   e   x   t   e   n   d   e   d   "   ,   "   W   E   B   G   L   _   c   o   m   p   r   e   s   s   e   d   _   t   e   x   t   u   r   e   _   a   s   t   c   "   ,   "   W   E   B   G   L   _   c   o   m   p   r   e   s   s   e   d   _   t   e   x   t   u   r   e   _   e   t   c   "   ,   "   W   E   B   G   L   _   c   o   m   p   r   e   s   s   e   d   _   t   e   x   t   u   r   e   _   e   t   c   1   "   ,   "   W   E   B   G   L   _   c   o   m   p   r   e   s   s   e   d   _   t   e   x   t   u   r   e   _   s   3   t   c   "   ,   "   W   E   B   G   L   _   c   o   m   p   r   e   s   s   e   d   _   t   e   x   t   u   r   e   _   s   3   t   c   _   s   r   g   b   "   ,   "   W   E   B   G   L   _   d   e   b   u   g   _   r   e   n   d   e   r   e   r   _   i   n   f   o   "   ,   "   W   E   B   G   L   _   d   e   b   u   g   _   s   h   a   d   e   r   s   "   ,   "   W   E   B   G   L   _   l   o   s   e   _   c   o   n   t   e   x   t   "   ,   "   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   "   ,   "   W   E   B   G   L   _   p   o   l   y   g   o   n   _   m   o   d   e   "   ]   ;   r   e   t   u   r   n   (   c   t   x   .   g   e   t   S   u   p   p   o   r   t   e   d   E   x   t   e   n   s   i   o   n   s   (   )   |   |   [   ]   )   .   f   i   l   t   e   r   (   e   x   t   =   >   s   u   p   p   o   r   t   e   d   E   x   t   e   n   s   i   o   n   s   .   i   n   c   l   u   d   e   s   (   e   x   t   )   )   }   ;   v   a   r       r   e   g   i   s   t   e   r   P   r   e   M   a   i   n   L   o   o   p   =   f   =   >   {   t   y   p   e   o   f       M   a   i   n   L   o   o   p   !   =   "   u   n   d   e   f   i   n   e   d   "   &   &   M   a   i   n   L   o   o   p   .   p   r   e   M   a   i   n   L   o   o   p   .   p   u   s   h   (   f   )   }   ;   v   a   r       G   L   =   {   c   o   u   n   t   e   r   :   1   ,   b   u   f   f   e   r   s   :   [   ]   ,   m   a   p   p   e   d   B   u   f   f   e   r   s   :   {   }   ,   p   r   o   g   r   a   m   s   :   [   ]   ,   f   r   a   m   e   b   u   f   f   e   r   s   :   [   ]   ,   r   e   n   d   e   r   b   u   f   f   e   r   s   :   [   ]   ,   t   e   x   t   u   r   e   s   :   [   ]   ,   s   h   a   d   e   r   s   :   [   ]   ,   v   a   o   s   :   [   ]   ,   c   o   n   t   e   x   t   s   :   [   ]   ,   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   :   {   }   ,   q   u   e   r   i   e   s   :   [   ]   ,   s   a   m   p   l   e   r   s   :   [   ]   ,   t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   :   [   ]   ,   s   y   n   c   s   :   [   ]   ,   b   y   t   e   S   i   z   e   B   y   T   y   p   e   R   o   o   t   :   5   1   2   0   ,   b   y   t   e   S   i   z   e   B   y   T   y   p   e   :   [   1   ,   1   ,   2   ,   2   ,   4   ,   4   ,   4   ,   2   ,   3   ,   4   ,   8   ]   ,   s   t   r   i   n   g   C   a   c   h   e   :   {   }   ,   s   t   r   i   n   g   i   C   a   c   h   e   :   {   }   ,   u   n   p   a   c   k   A   l   i   g   n   m   e   n   t   :   4   ,   u   n   p   a   c   k   R   o   w   L   e   n   g   t   h   :   0   ,   r   e   c   o   r   d   E   r   r   o   r   :   e   r   r   o   r   C   o   d   e   =   >   {   i   f   (   !   G   L   .   l   a   s   t   E   r   r   o   r   )   {   G   L   .   l   a   s   t   E   r   r   o   r   =   e   r   r   o   r   C   o   d   e   }   }   ,   g   e   t   N   e   w   I   d   :   t   a   b   l   e   =   >   {   v   a   r       r   e   t   =   G   L   .   c   o   u   n   t   e   r   +   +   ;   f   o   r   (   v   a   r       i   =   t   a   b   l   e   .   l   e   n   g   t   h   ;   i   <   r   e   t   ;   i   +   +   )   {   t   a   b   l   e   [   i   ]   =   n   u   l   l   }   w   h   i   l   e   (   t   a   b   l   e   [   r   e   t   ]   )   {   r   e   t   =   G   L   .   c   o   u   n   t   e   r   +   +   }   r   e   t   u   r   n       r   e   t   }   ,   g   e   n   O   b   j   e   c   t   :   (   n   ,   b   u   f   f   e   r   s   ,   c   r   e   a   t   e   F   u   n   c   t   i   o   n   ,   o   b   j   e   c   t   T   a   b   l   e   )   =   >   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       b   u   f   f   e   r   =   G   L   c   t   x   [   c   r   e   a   t   e   F   u   n   c   t   i   o   n   ]   (   )   ;   v   a   r       i   d   =   b   u   f   f   e   r   &   &   G   L   .   g   e   t   N   e   w   I   d   (   o   b   j   e   c   t   T   a   b   l   e   )   ;   i   f   (   b   u   f   f   e   r   )   {   b   u   f   f   e   r   .   n   a   m   e   =   i   d   ;   o   b   j   e   c   t   T   a   b   l   e   [   i   d   ]   =   b   u   f   f   e   r   }   e   l   s   e   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   2   )   }   H   E   A   P   3   2   [   b   u   f   f   e   r   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   i   d   }   }   ,   M   A   X   _   T   E   M   P   _   B   U   F   F   E   R   _   S   I   Z   E   :   2   0   9   7   1   5   2   ,   n   u   m   T   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   P   e   r   S   i   z   e   :   6   4   ,   l   o   g   2   c   e   i   l   L   o   o   k   u   p   :   i   =   >   3   2   -   M   a   t   h   .   c   l   z   3   2   (   i   =   =   =   0   ?   0   :   i   -   1   )   ,   g   e   n   e   r   a   t   e   T   e   m   p   B   u   f   f   e   r   s   :   (   q   u   a   d   s   ,   c   o   n   t   e   x   t   )   =   >   {   v   a   r       l   a   r   g   e   s   t   I   n   d   e   x   =   G   L   .   l   o   g   2   c   e   i   l   L   o   o   k   u   p   (   G   L   .   M   A   X   _   T   E   M   P   _   B   U   F   F   E   R   _   S   I   Z   E   )   ;   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   1   =   [   ]   ;   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   2   =   [   ]   ;   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   1   .   l   e   n   g   t   h   =   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   2   .   l   e   n   g   t   h   =   l   a   r   g   e   s   t   I   n   d   e   x   +   1   ;   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   1   =   [   ]   ;   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   2   =   [   ]   ;   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   1   .   l   e   n   g   t   h   =   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   2   .   l   e   n   g   t   h   =   l   a   r   g   e   s   t   I   n   d   e   x   +   1   ;   c   o   n   t   e   x   t   .   t   e   m   p   I   n   d   e   x   B   u   f   f   e   r   s   =   [   ]   ;   c   o   n   t   e   x   t   .   t   e   m   p   I   n   d   e   x   B   u   f   f   e   r   s   .   l   e   n   g   t   h   =   l   a   r   g   e   s   t   I   n   d   e   x   +   1   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   =   l   a   r   g   e   s   t   I   n   d   e   x   ;   +   +   i   )   {   c   o   n   t   e   x   t   .   t   e   m   p   I   n   d   e   x   B   u   f   f   e   r   s   [   i   ]   =   n   u   l   l   ;   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   1   [   i   ]   =   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   2   [   i   ]   =   0   ;   v   a   r       r   i   n   g   b   u   f   f   e   r   L   e   n   g   t   h   =   G   L   .   n   u   m   T   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   P   e   r   S   i   z   e   ;   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   1   [   i   ]   =   [   ]   ;   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   2   [   i   ]   =   [   ]   ;   v   a   r       r   i   n   g   b   u   f   f   e   r   1   =   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   1   [   i   ]   ;   v   a   r       r   i   n   g   b   u   f   f   e   r   2   =   c   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   2   [   i   ]   ;   r   i   n   g   b   u   f   f   e   r   1   .   l   e   n   g   t   h   =   r   i   n   g   b   u   f   f   e   r   2   .   l   e   n   g   t   h   =   r   i   n   g   b   u   f   f   e   r   L   e   n   g   t   h   ;   f   o   r   (   v   a   r       j   =   0   ;   j   <   r   i   n   g   b   u   f   f   e   r   L   e   n   g   t   h   ;   +   +   j   )   {   r   i   n   g   b   u   f   f   e   r   1   [   j   ]   =   r   i   n   g   b   u   f   f   e   r   2   [   j   ]   =   n   u   l   l   }   }   i   f   (   q   u   a   d   s   )   {   c   o   n   t   e   x   t   .   t   e   m   p   Q   u   a   d   I   n   d   e   x   B   u   f   f   e   r   =   G   L   c   t   x   .   c   r   e   a   t   e   B   u   f   f   e   r   (   )   ;   c   o   n   t   e   x   t   .   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   3   4   9   6   3   ,   c   o   n   t   e   x   t   .   t   e   m   p   Q   u   a   d   I   n   d   e   x   B   u   f   f   e   r   )   ;   v   a   r       n   u   m   I   n   d   e   x   e   s   =   G   L   .   M   A   X   _   T   E   M   P   _   B   U   F   F   E   R   _   S   I   Z   E   >   >   1   ;   v   a   r       q   u   a   d   I   n   d   e   x   e   s   =   n   e   w       U   i   n   t   1   6   A   r   r   a   y   (   n   u   m   I   n   d   e   x   e   s   )   ;   v   a   r       i   =   0   ,   v   =   0   ;   w   h   i   l   e   (   1   )   {   q   u   a   d   I   n   d   e   x   e   s   [   i   +   +   ]   =   v   ;   i   f   (   i   >   =   n   u   m   I   n   d   e   x   e   s   )   b   r   e   a   k   ;   q   u   a   d   I   n   d   e   x   e   s   [   i   +   +   ]   =   v   +   1   ;   i   f   (   i   >   =   n   u   m   I   n   d   e   x   e   s   )   b   r   e   a   k   ;   q   u   a   d   I   n   d   e   x   e   s   [   i   +   +   ]   =   v   +   2   ;   i   f   (   i   >   =   n   u   m   I   n   d   e   x   e   s   )   b   r   e   a   k   ;   q   u   a   d   I   n   d   e   x   e   s   [   i   +   +   ]   =   v   ;   i   f   (   i   >   =   n   u   m   I   n   d   e   x   e   s   )   b   r   e   a   k   ;   q   u   a   d   I   n   d   e   x   e   s   [   i   +   +   ]   =   v   +   2   ;   i   f   (   i   >   =   n   u   m   I   n   d   e   x   e   s   )   b   r   e   a   k   ;   q   u   a   d   I   n   d   e   x   e   s   [   i   +   +   ]   =   v   +   3   ;   i   f   (   i   >   =   n   u   m   I   n   d   e   x   e   s   )   b   r   e   a   k   ;   v   +   =   4   }   c   o   n   t   e   x   t   .   G   L   c   t   x   .   b   u   f   f   e   r   D   a   t   a   (   3   4   9   6   3   ,   q   u   a   d   I   n   d   e   x   e   s   ,   3   5   0   4   4   )   ;   c   o   n   t   e   x   t   .   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   3   4   9   6   3   ,   n   u   l   l   )   }   }   ,   g   e   t   T   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   :   s   i   z   e   B   y   t   e   s   =   >   {   v   a   r       i   d   x   =   G   L   .   l   o   g   2   c   e   i   l   L   o   o   k   u   p   (   s   i   z   e   B   y   t   e   s   )   ;   v   a   r       r   i   n   g   b   u   f   f   e   r   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   1   [   i   d   x   ]   ;   v   a   r       n   e   x   t   F   r   e   e   B   u   f   f   e   r   I   n   d   e   x   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   1   [   i   d   x   ]   ;   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   1   [   i   d   x   ]   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   1   [   i   d   x   ]   +   1   &   G   L   .   n   u   m   T   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   P   e   r   S   i   z   e   -   1   ;   v   a   r       v   b   o   =   r   i   n   g   b   u   f   f   e   r   [   n   e   x   t   F   r   e   e   B   u   f   f   e   r   I   n   d   e   x   ]   ;   i   f   (   v   b   o   )   {   r   e   t   u   r   n       v   b   o   }   v   a   r       p   r   e   v   V   B   O   =   G   L   c   t   x   .   g   e   t   P   a   r   a   m   e   t   e   r   (   3   4   9   6   4   )   ;   r   i   n   g   b   u   f   f   e   r   [   n   e   x   t   F   r   e   e   B   u   f   f   e   r   I   n   d   e   x   ]   =   G   L   c   t   x   .   c   r   e   a   t   e   B   u   f   f   e   r   (   )   ;   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   3   4   9   6   2   ,   r   i   n   g   b   u   f   f   e   r   [   n   e   x   t   F   r   e   e   B   u   f   f   e   r   I   n   d   e   x   ]   )   ;   G   L   c   t   x   .   b   u   f   f   e   r   D   a   t   a   (   3   4   9   6   2   ,   1   <   <   i   d   x   ,   3   5   0   4   8   )   ;   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   3   4   9   6   2   ,   p   r   e   v   V   B   O   )   ;   r   e   t   u   r   n       r   i   n   g   b   u   f   f   e   r   [   n   e   x   t   F   r   e   e   B   u   f   f   e   r   I   n   d   e   x   ]   }   ,   g   e   t   T   e   m   p   I   n   d   e   x   B   u   f   f   e   r   :   s   i   z   e   B   y   t   e   s   =   >   {   v   a   r       i   d   x   =   G   L   .   l   o   g   2   c   e   i   l   L   o   o   k   u   p   (   s   i   z   e   B   y   t   e   s   )   ;   v   a   r       i   b   o   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   I   n   d   e   x   B   u   f   f   e   r   s   [   i   d   x   ]   ;   i   f   (   i   b   o   )   {   r   e   t   u   r   n       i   b   o   }   v   a   r       p   r   e   v   I   B   O   =   G   L   c   t   x   .   g   e   t   P   a   r   a   m   e   t   e   r   (   3   4   9   6   5   )   ;   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   I   n   d   e   x   B   u   f   f   e   r   s   [   i   d   x   ]   =   G   L   c   t   x   .   c   r   e   a   t   e   B   u   f   f   e   r   (   )   ;   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   3   4   9   6   3   ,   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   I   n   d   e   x   B   u   f   f   e   r   s   [   i   d   x   ]   )   ;   G   L   c   t   x   .   b   u   f   f   e   r   D   a   t   a   (   3   4   9   6   3   ,   1   <   <   i   d   x   ,   3   5   0   4   8   )   ;   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   3   4   9   6   3   ,   p   r   e   v   I   B   O   )   ;   r   e   t   u   r   n       G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   I   n   d   e   x   B   u   f   f   e   r   s   [   i   d   x   ]   }   ,   n   e   w   R   e   n   d   e   r   i   n   g   F   r   a   m   e   S   t   a   r   t   e   d   :   (   )   =   >   {   i   f   (   !   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   )   {   r   e   t   u   r   n   }   v   a   r       v   b   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   1   ;   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   1   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   2   ;   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   s   2   =   v   b   ;   v   b   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   1   ;   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   1   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   2   ;   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   2   =   v   b   ;   v   a   r       l   a   r   g   e   s   t   I   n   d   e   x   =   G   L   .   l   o   g   2   c   e   i   l   L   o   o   k   u   p   (   G   L   .   M   A   X   _   T   E   M   P   _   B   U   F   F   E   R   _   S   I   Z   E   )   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   =   l   a   r   g   e   s   t   I   n   d   e   x   ;   +   +   i   )   {   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   t   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   C   o   u   n   t   e   r   s   1   [   i   ]   =   0   }   }   ,   g   e   t   S   o   u   r   c   e   :   (   s   h   a   d   e   r   ,   c   o   u   n   t   ,   s   t   r   i   n   g   ,   l   e   n   g   t   h   )   =   >   {   v   a   r       s   o   u   r   c   e   =   "   "   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   +   +   i   )   {   v   a   r       l   e   n   =   l   e   n   g   t   h   ?   H   E   A   P   U   3   2   [   l   e   n   g   t   h   +   i   *   4   >   >   >   2   >   >   >   0   ]   :   u   n   d   e   f   i   n   e   d   ;   s   o   u   r   c   e   +   =   U   T   F   8   T   o   S   t   r   i   n   g   (   H   E   A   P   U   3   2   [   s   t   r   i   n   g   +   i   *   4   >   >   >   2   >   >   >   0   ]   ,   l   e   n   )   }   r   e   t   u   r   n       s   o   u   r   c   e   }   ,   c   a   l   c   B   u   f   L   e   n   g   t   h   :   (   s   i   z   e   ,   t   y   p   e   ,   s   t   r   i   d   e   ,   c   o   u   n   t   )   =   >   {   i   f   (   s   t   r   i   d   e   >   0   )   {   r   e   t   u   r   n       c   o   u   n   t   *   s   t   r   i   d   e   }   v   a   r       t   y   p   e   S   i   z   e   =   G   L   .   b   y   t   e   S   i   z   e   B   y   T   y   p   e   [   t   y   p   e   -   G   L   .   b   y   t   e   S   i   z   e   B   y   T   y   p   e   R   o   o   t   ]   ;   r   e   t   u   r   n       s   i   z   e   *   t   y   p   e   S   i   z   e   *   c   o   u   n   t   }   ,   u   s   e   d   T   e   m   p   B   u   f   f   e   r   s   :   [   ]   ,   p   r   e   D   r   a   w   H   a   n   d   l   e   C   l   i   e   n   t   V   e   r   t   e   x   A   t   t   r   i   b   B   i   n   d   i   n   g   s   :   c   o   u   n   t   =   >   {   G   L   .   r   e   s   e   t   B   u   f   f   e   r   B   i   n   d   i   n   g   =   f   a   l   s   e   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   m   a   x   V   e   r   t   e   x   A   t   t   r   i   b   s   ;   +   +   i   )   {   v   a   r       c   b   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   c   l   i   e   n   t   B   u   f   f   e   r   s   [   i   ]   ;   i   f   (   !   c   b   .   c   l   i   e   n   t   s   i   d   e   |   |   !   c   b   .   e   n   a   b   l   e   d   )   c   o   n   t   i   n   u   e   ;   G   L   .   r   e   s   e   t   B   u   f   f   e   r   B   i   n   d   i   n   g   =   t   r   u   e   ;   v   a   r       s   i   z   e   =   G   L   .   c   a   l   c   B   u   f   L   e   n   g   t   h   (   c   b   .   s   i   z   e   ,   c   b   .   t   y   p   e   ,   c   b   .   s   t   r   i   d   e   ,   c   o   u   n   t   )   ;   v   a   r       b   u   f   =   G   L   .   g   e   t   T   e   m   p   V   e   r   t   e   x   B   u   f   f   e   r   (   s   i   z   e   )   ;   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   3   4   9   6   2   ,   b   u   f   )   ;   G   L   c   t   x   .   b   u   f   f   e   r   S   u   b   D   a   t   a   (   3   4   9   6   2   ,   0   ,   H   E   A   P   U   8   .   s   u   b   a   r   r   a   y   (   c   b   .   p   t   r   >   >   >   0   ,   c   b   .   p   t   r   +   s   i   z   e   >   >   >   0   )   )   ;   c   b   .   v   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   A   d   a   p   t   o   r   .   c   a   l   l   (   G   L   c   t   x   ,   i   ,   c   b   .   s   i   z   e   ,   c   b   .   t   y   p   e   ,   c   b   .   n   o   r   m   a   l   i   z   e   d   ,   c   b   .   s   t   r   i   d   e   ,   0   )   }   }   ,   p   o   s   t   D   r   a   w   H   a   n   d   l   e   C   l   i   e   n   t   V   e   r   t   e   x   A   t   t   r   i   b   B   i   n   d   i   n   g   s   :   (   )   =   >   {   i   f   (   G   L   .   r   e   s   e   t   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   3   4   9   6   2   ,   G   L   .   b   u   f   f   e   r   s   [   G   L   c   t   x   .   c   u   r   r   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   ]   )   }   }   ,   c   r   e   a   t   e   C   o   n   t   e   x   t   :   (   c   a   n   v   a   s   ,   w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   )   =   >   {   i   f   (   !   c   a   n   v   a   s   .   g   e   t   C   o   n   t   e   x   t   S   a   f   a   r   i   W   e   b   G   L   2   F   i   x   e   d   )   {   c   a   n   v   a   s   .   g   e   t   C   o   n   t   e   x   t   S   a   f   a   r   i   W   e   b   G   L   2   F   i   x   e   d   =   c   a   n   v   a   s   .   g   e   t   C   o   n   t   e   x   t   ;   f   u   n   c   t   i   o   n       f   i   x   e   d   G   e   t   C   o   n   t   e   x   t   (   v   e   r   ,   a   t   t   r   s   )   {   v   a   r       g   l   =   c   a   n   v   a   s   .   g   e   t   C   o   n   t   e   x   t   S   a   f   a   r   i   W   e   b   G   L   2   F   i   x   e   d   (   v   e   r   ,   a   t   t   r   s   )   ;   r   e   t   u   r   n       v   e   r   =   =   "   w   e   b   g   l   "   =   =   g   l       i   n   s   t   a   n   c   e   o   f       W   e   b   G   L   R   e   n   d   e   r   i   n   g   C   o   n   t   e   x   t   ?   g   l   :   n   u   l   l   }   c   a   n   v   a   s   .   g   e   t   C   o   n   t   e   x   t   =   f   i   x   e   d   G   e   t   C   o   n   t   e   x   t   }   v   a   r       c   t   x   =   c   a   n   v   a   s   .   g   e   t   C   o   n   t   e   x   t   (   "   w   e   b   g   l   2   "   ,   w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   )   ;   i   f   (   !   c   t   x   )   r   e   t   u   r   n       0   ;   v   a   r       h   a   n   d   l   e   =   G   L   .   r   e   g   i   s   t   e   r   C   o   n   t   e   x   t   (   c   t   x   ,   w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   )   ;   r   e   t   u   r   n       h   a   n   d   l   e   }   ,   r   e   g   i   s   t   e   r   C   o   n   t   e   x   t   :   (   c   t   x   ,   w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   )   =   >   {   v   a   r       h   a   n   d   l   e   =   G   L   .   g   e   t   N   e   w   I   d   (   G   L   .   c   o   n   t   e   x   t   s   )   ;   v   a   r       c   o   n   t   e   x   t   =   {   h   a   n   d   l   e   ,   a   t   t   r   i   b   u   t   e   s   :   w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   ,   v   e   r   s   i   o   n   :   w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   m   a   j   o   r   V   e   r   s   i   o   n   ,   G   L   c   t   x   :   c   t   x   }   ;   i   f   (   c   t   x   .   c   a   n   v   a   s   )   c   t   x   .   c   a   n   v   a   s   .   G   L   c   t   x   O   b   j   e   c   t   =   c   o   n   t   e   x   t   ;   G   L   .   c   o   n   t   e   x   t   s   [   h   a   n   d   l   e   ]   =   c   o   n   t   e   x   t   ;   i   f   (   t   y   p   e   o   f       w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   e   n   a   b   l   e   E   x   t   e   n   s   i   o   n   s   B   y   D   e   f   a   u   l   t   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   w   e   b   G   L   C   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   e   n   a   b   l   e   E   x   t   e   n   s   i   o   n   s   B   y   D   e   f   a   u   l   t   )   {   G   L   .   i   n   i   t   E   x   t   e   n   s   i   o   n   s   (   c   o   n   t   e   x   t   )   }   c   o   n   t   e   x   t   .   m   a   x   V   e   r   t   e   x   A   t   t   r   i   b   s   =   c   o   n   t   e   x   t   .   G   L   c   t   x   .   g   e   t   P   a   r   a   m   e   t   e   r   (   3   4   9   2   1   )   ;   c   o   n   t   e   x   t   .   c   l   i   e   n   t   B   u   f   f   e   r   s   =   [   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   n   t   e   x   t   .   m   a   x   V   e   r   t   e   x   A   t   t   r   i   b   s   ;   i   +   +   )   {   c   o   n   t   e   x   t   .   c   l   i   e   n   t   B   u   f   f   e   r   s   [   i   ]   =   {   e   n   a   b   l   e   d   :   f   a   l   s   e   ,   c   l   i   e   n   t   s   i   d   e   :   f   a   l   s   e   ,   s   i   z   e   :   0   ,   t   y   p   e   :   0   ,   n   o   r   m   a   l   i   z   e   d   :   0   ,   s   t   r   i   d   e   :   0   ,   p   t   r   :   0   ,   v   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   A   d   a   p   t   o   r   :   n   u   l   l   }   }   G   L   .   g   e   n   e   r   a   t   e   T   e   m   p   B   u   f   f   e   r   s   (   f   a   l   s   e   ,   c   o   n   t   e   x   t   )   ;   r   e   t   u   r   n       h   a   n   d   l   e   }   ,   m   a   k   e   C   o   n   t   e   x   t   C   u   r   r   e   n   t   :   c   o   n   t   e   x   t   H   a   n   d   l   e   =   >   {   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   =   G   L   .   c   o   n   t   e   x   t   s   [   c   o   n   t   e   x   t   H   a   n   d   l   e   ]   ;   M   o   d   u   l   e   [   "   c   t   x   "   ]   =   G   L   c   t   x   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   ?   .   G   L   c   t   x   ;   r   e   t   u   r   n   !   (   c   o   n   t   e   x   t   H   a   n   d   l   e   &   &   !   G   L   c   t   x   )   }   ,   g   e   t   C   o   n   t   e   x   t   :   c   o   n   t   e   x   t   H   a   n   d   l   e   =   >   G   L   .   c   o   n   t   e   x   t   s   [   c   o   n   t   e   x   t   H   a   n   d   l   e   ]   ,   d   e   l   e   t   e   C   o   n   t   e   x   t   :   c   o   n   t   e   x   t   H   a   n   d   l   e   =   >   {   i   f   (   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   =   =   =   G   L   .   c   o   n   t   e   x   t   s   [   c   o   n   t   e   x   t   H   a   n   d   l   e   ]   )   {   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   =   n   u   l   l   }   i   f   (   t   y   p   e   o   f       J   S   E   v   e   n   t   s   =   =   "   o   b   j   e   c   t   "   )   {   J   S   E   v   e   n   t   s   .   r   e   m   o   v   e   A   l   l   H   a   n   d   l   e   r   s   O   n   T   a   r   g   e   t   (   G   L   .   c   o   n   t   e   x   t   s   [   c   o   n   t   e   x   t   H   a   n   d   l   e   ]   .   G   L   c   t   x   .   c   a   n   v   a   s   )   }   i   f   (   G   L   .   c   o   n   t   e   x   t   s   [   c   o   n   t   e   x   t   H   a   n   d   l   e   ]   ?   .   G   L   c   t   x   .   c   a   n   v   a   s   )   {   G   L   .   c   o   n   t   e   x   t   s   [   c   o   n   t   e   x   t   H   a   n   d   l   e   ]   .   G   L   c   t   x   .   c   a   n   v   a   s   .   G   L   c   t   x   O   b   j   e   c   t   =   u   n   d   e   f   i   n   e   d   }   G   L   .   c   o   n   t   e   x   t   s   [   c   o   n   t   e   x   t   H   a   n   d   l   e   ]   =   n   u   l   l   }   ,   i   n   i   t   E   x   t   e   n   s   i   o   n   s   :   c   o   n   t   e   x   t   =   >   {   c   o   n   t   e   x   t   |   |   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   ;   i   f   (   c   o   n   t   e   x   t   .   i   n   i   t   E   x   t   e   n   s   i   o   n   s   D   o   n   e   )   r   e   t   u   r   n   ;   c   o   n   t   e   x   t   .   i   n   i   t   E   x   t   e   n   s   i   o   n   s   D   o   n   e   =   t   r   u   e   ;   v   a   r       G   L   c   t   x   =   c   o   n   t   e   x   t   .   G   L   c   t   x   ;   w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   (   G   L   c   t   x   )   ;   w   e   b   g   l   _   e   n   a   b   l   e   _   E   X   T   _   p   o   l   y   g   o   n   _   o   f   f   s   e   t   _   c   l   a   m   p   (   G   L   c   t   x   )   ;   w   e   b   g   l   _   e   n   a   b   l   e   _   E   X   T   _   c   l   i   p   _   c   o   n   t   r   o   l   (   G   L   c   t   x   )   ;   w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   p   o   l   y   g   o   n   _   m   o   d   e   (   G   L   c   t   x   )   ;   w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   d   r   a   w   _   i   n   s   t   a   n   c   e   d   _   b   a   s   e   _   v   e   r   t   e   x   _   b   a   s   e   _   i   n   s   t   a   n   c   e   (   G   L   c   t   x   )   ;   w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   _   i   n   s   t   a   n   c   e   d   _   b   a   s   e   _   v   e   r   t   e   x   _   b   a   s   e   _   i   n   s   t   a   n   c   e   (   G   L   c   t   x   )   ;   i   f   (   c   o   n   t   e   x   t   .   v   e   r   s   i   o   n   >   =   2   )   {   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   =   G   L   c   t   x   .   g   e   t   E   x   t   e   n   s   i   o   n   (   "   E   X   T   _   d   i   s   j   o   i   n   t   _   t   i   m   e   r   _   q   u   e   r   y   _   w   e   b   g   l   2   "   )   }   i   f   (   c   o   n   t   e   x   t   .   v   e   r   s   i   o   n   <   2   |   |   !   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   )   {   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   =   G   L   c   t   x   .   g   e   t   E   x   t   e   n   s   i   o   n   (   "   E   X   T   _   d   i   s   j   o   i   n   t   _   t   i   m   e   r   _   q   u   e   r   y   "   )   }   g   e   t   E   m   s   c   r   i   p   t   e   n   S   u   p   p   o   r   t   e   d   E   x   t   e   n   s   i   o   n   s   (   G   L   c   t   x   )   .   f   o   r   E   a   c   h   (   e   x   t   =   >   {   i   f   (   !   e   x   t   .   i   n   c   l   u   d   e   s   (   "   l   o   s   e   _   c   o   n   t   e   x   t   "   )   &   &   !   e   x   t   .   i   n   c   l   u   d   e   s   (   "   d   e   b   u   g   "   )   )   {   G   L   c   t   x   .   g   e   t   E   x   t   e   n   s   i   o   n   (   e   x   t   )   }   }   )   }   }   ;   f   u   n   c   t   i   o   n       _   e   g   l   C   r   e   a   t   e   C   o   n   t   e   x   t   (   d   i   s   p   l   a   y   ,   c   o   n   f   i   g   ,   h   m   m   ,   c   o   n   t   e   x   t   A   t   t   r   i   b   s   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   c   o   n   f   i   g   >   >   >   =   0   ;   h   m   m   >   >   >   =   0   ;   c   o   n   t   e   x   t   A   t   t   r   i   b   s   >   >   >   =   0   ;   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   v   a   r       g   l   e   s   C   o   n   t   e   x   t   V   e   r   s   i   o   n   =   1   ;   f   o   r   (   ;   ;   )   {   v   a   r       p   a   r   a   m   =   H   E   A   P   3   2   [   c   o   n   t   e   x   t   A   t   t   r   i   b   s   >   >   >   2   >   >   >   0   ]   ;   i   f   (   p   a   r   a   m   =   =   1   2   4   4   0   )   {   g   l   e   s   C   o   n   t   e   x   t   V   e   r   s   i   o   n   =   H   E   A   P   3   2   [   c   o   n   t   e   x   t   A   t   t   r   i   b   s   +   4   >   >   >   2   >   >   >   0   ]   }   e   l   s   e       i   f   (   p   a   r   a   m   =   =   1   2   3   4   4   )   {   b   r   e   a   k   }   e   l   s   e   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   2   )   ;   r   e   t   u   r   n       0   }   c   o   n   t   e   x   t   A   t   t   r   i   b   s   +   =   8   }   i   f   (   g   l   e   s   C   o   n   t   e   x   t   V   e   r   s   i   o   n   <   2   |   |   g   l   e   s   C   o   n   t   e   x   t   V   e   r   s   i   o   n   >   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   3   )   ;   r   e   t   u   r   n       0   }   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   m   a   j   o   r   V   e   r   s   i   o   n   =   g   l   e   s   C   o   n   t   e   x   t   V   e   r   s   i   o   n   -   1   ;   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   m   i   n   o   r   V   e   r   s   i   o   n   =   0   ;   E   G   L   .   c   o   n   t   e   x   t   =   G   L   .   c   r   e   a   t   e   C   o   n   t   e   x   t   (   B   r   o   w   s   e   r   .   g   e   t   C   a   n   v   a   s   (   )   ,   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   )   ;   i   f   (   E   G   L   .   c   o   n   t   e   x   t   !   =   0   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   G   L   .   m   a   k   e   C   o   n   t   e   x   t   C   u   r   r   e   n   t   (   E   G   L   .   c   o   n   t   e   x   t   )   ;   B   r   o   w   s   e   r   .   u   s   e   W   e   b   G   L   =   t   r   u   e   ;   B   r   o   w   s   e   r   .   m   o   d   u   l   e   C   o   n   t   e   x   t   C   r   e   a   t   e   d   C   a   l   l   b   a   c   k   s   .   f   o   r   E   a   c   h   (   c   a   l   l   b   a   c   k   =   >   c   a   l   l   b   a   c   k   (   )   )   ;   G   L   .   m   a   k   e   C   o   n   t   e   x   t   C   u   r   r   e   n   t   (   n   u   l   l   )   ;   r   e   t   u   r   n       6   2   0   0   4   }   e   l   s   e   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   7   )   ;   r   e   t   u   r   n       0   }   }   f   u   n   c   t   i   o   n       _   e   g   l   C   r   e   a   t   e   W   i   n   d   o   w   S   u   r   f   a   c   e   (   d   i   s   p   l   a   y   ,   c   o   n   f   i   g   ,   w   i   n   ,   a   t   t   r   i   b   _   l   i   s   t   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   c   o   n   f   i   g   >   >   >   =   0   ;   a   t   t   r   i   b   _   l   i   s   t   >   >   >   =   0   ;   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   i   f   (   c   o   n   f   i   g   !   =   6   2   0   0   2   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   3   )   ;   r   e   t   u   r   n       0   }   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       6   2   0   0   6   }   f   u   n   c   t   i   o   n       _   e   g   l   D   e   s   t   r   o   y   C   o   n   t   e   x   t   (   d   i   s   p   l   a   y   ,   c   o   n   t   e   x   t   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   c   o   n   t   e   x   t   >   >   >   =   0   ;   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   i   f   (   c   o   n   t   e   x   t   !   =   6   2   0   0   4   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   4   )   ;   r   e   t   u   r   n       0   }   G   L   .   d   e   l   e   t   e   C   o   n   t   e   x   t   (   E   G   L   .   c   o   n   t   e   x   t   )   ;   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   i   f   (   E   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   =   =   c   o   n   t   e   x   t   )   {   E   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   =   0   }   r   e   t   u   r   n       1   }   f   u   n   c   t   i   o   n       _   e   g   l   D   e   s   t   r   o   y   S   u   r   f   a   c   e   (   d   i   s   p   l   a   y   ,   s   u   r   f   a   c   e   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   s   u   r   f   a   c   e   >   >   >   =   0   ;   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   i   f   (   s   u   r   f   a   c   e   !   =   6   2   0   0   6   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   3   0   1   )   ;   r   e   t   u   r   n       1   }   i   f   (   E   G   L   .   c   u   r   r   e   n   t   R   e   a   d   S   u   r   f   a   c   e   =   =   s   u   r   f   a   c   e   )   {   E   G   L   .   c   u   r   r   e   n   t   R   e   a   d   S   u   r   f   a   c   e   =   0   }   i   f   (   E   G   L   .   c   u   r   r   e   n   t   D   r   a   w   S   u   r   f   a   c   e   =   =   s   u   r   f   a   c   e   )   {   E   G   L   .   c   u   r   r   e   n   t   D   r   a   w   S   u   r   f   a   c   e   =   0   }   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       1   }   f   u   n   c   t   i   o   n       _   e   g   l   G   e   t   C   o   n   f   i   g   A   t   t   r   i   b   (   d   i   s   p   l   a   y   ,   c   o   n   f   i   g   ,   a   t   t   r   i   b   u   t   e   ,   v   a   l   u   e   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   c   o   n   f   i   g   >   >   >   =   0   ;   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   i   f   (   c   o   n   f   i   g   !   =   6   2   0   0   2   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   3   )   ;   r   e   t   u   r   n       0   }   i   f   (   !   v   a   l   u   e   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   3   0   0   )   ;   r   e   t   u   r   n       0   }   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   s   w   i   t   c   h   (   a   t   t   r   i   b   u   t   e   )   {   c   a   s   e       1   2   3   2   0   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   a   l   p   h   a   ?   3   2   :   2   4   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   1   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   a   l   p   h   a   ?   8   :   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   2   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   8   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   3   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   8   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   4   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   8   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   5   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   d   e   p   t   h   ?   2   4   :   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   6   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   s   t   e   n   c   i   l   ?   8   :   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   7   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   1   2   3   4   4   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   8   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   6   2   0   0   2   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   9   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   0   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   4   0   9   6   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   1   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   1   6   7   7   7   2   1   6   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   2   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   4   0   9   6   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   3   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   4   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   5   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   1   2   3   4   4   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   7   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   a   n   t   i   a   l   i   a   s   ?   4   :   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   8   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   E   G   L   .   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   a   n   t   i   a   l   i   a   s   ?   1   :   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   9   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   4   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   4   0   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   1   2   3   4   4   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   4   1   :   c   a   s   e       1   2   3   4   2   :   c   a   s   e       1   2   3   4   3   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   -   1   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   4   5   :   c   a   s   e       1   2   3   4   6   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   4   7   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   4   8   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   1   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   4   9   :   c   a   s   e       1   2   3   5   0   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   5   1   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   1   2   4   3   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   5   2   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   4   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   5   4   :   H   E   A   P   3   2   [   v   a   l   u   e   >   >   >   2   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n       1   ;   d   e   f   a   u   l   t   :   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   2   )   ;   r   e   t   u   r   n       0   }   }   f   u   n   c   t   i   o   n       _   e   g   l   G   e   t   D   i   s   p   l   a   y   (   n   a   t   i   v   e   D   i   s   p   l   a   y   T   y   p   e   )   {   n   a   t   i   v   e   D   i   s   p   l   a   y   T   y   p   e   >   >   >   =   0   ;   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   i   f   (   n   a   t   i   v   e   D   i   s   p   l   a   y   T   y   p   e   !   =   0   &   &   n   a   t   i   v   e   D   i   s   p   l   a   y   T   y   p   e   !   =   1   )   {   r   e   t   u   r   n       0   }   r   e   t   u   r   n       6   2   e   3   }   v   a   r       _   e   g   l   G   e   t   E   r   r   o   r   =   (   )   =   >   E   G   L   .   e   r   r   o   r   C   o   d   e   ;   f   u   n   c   t   i   o   n       _   e   g   l   I   n   i   t   i   a   l   i   z   e   (   d   i   s   p   l   a   y   ,   m   a   j   o   r   V   e   r   s   i   o   n   ,   m   i   n   o   r   V   e   r   s   i   o   n   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   m   a   j   o   r   V   e   r   s   i   o   n   >   >   >   =   0   ;   m   i   n   o   r   V   e   r   s   i   o   n   >   >   >   =   0   ;   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   i   f   (   m   a   j   o   r   V   e   r   s   i   o   n   )   {   H   E   A   P   3   2   [   m   a   j   o   r   V   e   r   s   i   o   n   >   >   >   2   >   >   >   0   ]   =   1   }   i   f   (   m   i   n   o   r   V   e   r   s   i   o   n   )   {   H   E   A   P   3   2   [   m   i   n   o   r   V   e   r   s   i   o   n   >   >   >   2   >   >   >   0   ]   =   4   }   E   G   L   .   d   e   f   a   u   l   t   D   i   s   p   l   a   y   I   n   i   t   i   a   l   i   z   e   d   =   t   r   u   e   ;   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       1   }   f   u   n   c   t   i   o   n       _   e   g   l   M   a   k   e   C   u   r   r   e   n   t   (   d   i   s   p   l   a   y   ,   d   r   a   w   ,   r   e   a   d   ,   c   o   n   t   e   x   t   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   d   r   a   w   >   >   >   =   0   ;   r   e   a   d   >   >   >   =   0   ;   c   o   n   t   e   x   t   >   >   >   =   0   ;   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   i   f   (   c   o   n   t   e   x   t   !   =   0   &   &   c   o   n   t   e   x   t   !   =   6   2   0   0   4   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   4   )   ;   r   e   t   u   r   n       0   }   i   f   (   r   e   a   d   !   =   0   &   &   r   e   a   d   !   =   6   2   0   0   6   |   |   d   r   a   w   !   =   0   &   &   d   r   a   w   !   =   6   2   0   0   6   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   3   0   1   )   ;   r   e   t   u   r   n       0   }   G   L   .   m   a   k   e   C   o   n   t   e   x   t   C   u   r   r   e   n   t   (   c   o   n   t   e   x   t   ?   E   G   L   .   c   o   n   t   e   x   t   :   n   u   l   l   )   ;   E   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   =   c   o   n   t   e   x   t   ;   E   G   L   .   c   u   r   r   e   n   t   D   r   a   w   S   u   r   f   a   c   e   =   d   r   a   w   ;   E   G   L   .   c   u   r   r   e   n   t   R   e   a   d   S   u   r   f   a   c   e   =   r   e   a   d   ;   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       1   }   v   a   r       s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   =   s   t   r   =   >   {   v   a   r       s   i   z   e   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   s   t   r   )   +   1   ;   v   a   r       r   e   t   =   _   m   a   l   l   o   c   (   s   i   z   e   )   ;   i   f   (   r   e   t   )   s   t   r   i   n   g   T   o   U   T   F   8   (   s   t   r   ,   r   e   t   ,   s   i   z   e   )   ;   r   e   t   u   r   n       r   e   t   }   ;   f   u   n   c   t   i   o   n       _   e   g   l   Q   u   e   r   y   S   t   r   i   n   g   (   d   i   s   p   l   a   y   ,   n   a   m   e   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   i   f   (   E   G   L   .   s   t   r   i   n   g   C   a   c   h   e   [   n   a   m   e   ]   )   r   e   t   u   r   n       E   G   L   .   s   t   r   i   n   g   C   a   c   h   e   [   n   a   m   e   ]   ;   v   a   r       r   e   t   ;   s   w   i   t   c   h   (   n   a   m   e   )   {   c   a   s   e       1   2   3   7   1   :   r   e   t   =   s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   (   "   E   m   s   c   r   i   p   t   e   n   "   )   ;   b   r   e   a   k   ;   c   a   s   e       1   2   3   7   2   :   r   e   t   =   s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   (   "   1   .   4       E   m   s   c   r   i   p   t   e   n       E   G   L   "   )   ;   b   r   e   a   k   ;   c   a   s   e       1   2   3   7   3   :   r   e   t   =   s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   (   "   "   )   ;   b   r   e   a   k   ;   c   a   s   e       1   2   4   2   9   :   r   e   t   =   s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   (   "   O   p   e   n   G   L   _   E   S   "   )   ;   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   3   0   0   )   ;   r   e   t   u   r   n       0   }   E   G   L   .   s   t   r   i   n   g   C   a   c   h   e   [   n   a   m   e   ]   =   r   e   t   ;   r   e   t   u   r   n       r   e   t   }   f   u   n   c   t   i   o   n       _   e   g   l   S   w   a   p   B   u   f   f   e   r   s   (   d   p   y   ,   s   u   r   f   a   c   e   )   {   d   p   y   >   >   >   =   0   ;   s   u   r   f   a   c   e   >   >   >   =   0   ;   i   f   (   !   E   G   L   .   d   e   f   a   u   l   t   D   i   s   p   l   a   y   I   n   i   t   i   a   l   i   z   e   d   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   9   )   }   e   l   s   e       i   f   (   !   G   L   c   t   x   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   0   )   }   e   l   s   e       i   f   (   G   L   c   t   x   .   i   s   C   o   n   t   e   x   t   L   o   s   t   (   )   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   3   0   2   )   }   e   l   s   e   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       1   }   r   e   t   u   r   n       0   }   v   a   r       s   e   t   M   a   i   n   L   o   o   p   =   (   i   t   e   r   F   u   n   c   ,   f   p   s   ,   s   i   m   u   l   a   t   e   I   n   f   i   n   i   t   e   L   o   o   p   ,   a   r   g   ,   n   o   S   e   t   T   i   m   i   n   g   )   =   >   {   M   a   i   n   L   o   o   p   .   f   u   n   c   =   i   t   e   r   F   u   n   c   ;   M   a   i   n   L   o   o   p   .   a   r   g   =   a   r   g   ;   v   a   r       t   h   i   s   M   a   i   n   L   o   o   p   I   d   =   M   a   i   n   L   o   o   p   .   c   u   r   r   e   n   t   l   y   R   u   n   n   i   n   g   M   a   i   n   l   o   o   p   ;   f   u   n   c   t   i   o   n       c   h   e   c   k   I   s   R   u   n   n   i   n   g   (   )   {   i   f   (   t   h   i   s   M   a   i   n   L   o   o   p   I   d   <   M   a   i   n   L   o   o   p   .   c   u   r   r   e   n   t   l   y   R   u   n   n   i   n   g   M   a   i   n   l   o   o   p   )   {   m   a   y   b   e   E   x   i   t   (   )   ;   r   e   t   u   r   n       f   a   l   s   e   }   r   e   t   u   r   n       t   r   u   e   }   M   a   i   n   L   o   o   p   .   r   u   n   n   i   n   g   =   f   a   l   s   e   ;   M   a   i   n   L   o   o   p   .   r   u   n   n   e   r   =   f   u   n   c   t   i   o   n       M   a   i   n   L   o   o   p   _   r   u   n   n   e   r   (   )   {   i   f   (   A   B   O   R   T   )   r   e   t   u   r   n   ;   i   f   (   M   a   i   n   L   o   o   p   .   q   u   e   u   e   .   l   e   n   g   t   h   >   0   )   {   v   a   r       s   t   a   r   t   =   D   a   t   e   .   n   o   w   (   )   ;   v   a   r       b   l   o   c   k   e   r   =   M   a   i   n   L   o   o   p   .   q   u   e   u   e   .   s   h   i   f   t   (   )   ;   b   l   o   c   k   e   r   .   f   u   n   c   (   b   l   o   c   k   e   r   .   a   r   g   )   ;   i   f   (   M   a   i   n   L   o   o   p   .   r   e   m   a   i   n   i   n   g   B   l   o   c   k   e   r   s   )   {   v   a   r       r   e   m   a   i   n   i   n   g   =   M   a   i   n   L   o   o   p   .   r   e   m   a   i   n   i   n   g   B   l   o   c   k   e   r   s   ;   v   a   r       n   e   x   t   =   r   e   m   a   i   n   i   n   g   %   1   =   =   0   ?   r   e   m   a   i   n   i   n   g   -   1   :   M   a   t   h   .   f   l   o   o   r   (   r   e   m   a   i   n   i   n   g   )   ;   i   f   (   b   l   o   c   k   e   r   .   c   o   u   n   t   e   d   )   {   M   a   i   n   L   o   o   p   .   r   e   m   a   i   n   i   n   g   B   l   o   c   k   e   r   s   =   n   e   x   t   }   e   l   s   e   {   n   e   x   t   =   n   e   x   t   +   .   5   ;   M   a   i   n   L   o   o   p   .   r   e   m   a   i   n   i   n   g   B   l   o   c   k   e   r   s   =   (   8   *   r   e   m   a   i   n   i   n   g   +   n   e   x   t   )   /   9   }   }   M   a   i   n   L   o   o   p   .   u   p   d   a   t   e   S   t   a   t   u   s   (   )   ;   i   f   (   !   c   h   e   c   k   I   s   R   u   n   n   i   n   g   (   )   )   r   e   t   u   r   n   ;   s   e   t   T   i   m   e   o   u   t   (   M   a   i   n   L   o   o   p   .   r   u   n   n   e   r   ,   0   )   ;   r   e   t   u   r   n   }   i   f   (   !   c   h   e   c   k   I   s   R   u   n   n   i   n   g   (   )   )   r   e   t   u   r   n   ;   M   a   i   n   L   o   o   p   .   c   u   r   r   e   n   t   F   r   a   m   e   N   u   m   b   e   r   =   M   a   i   n   L   o   o   p   .   c   u   r   r   e   n   t   F   r   a   m   e   N   u   m   b   e   r   +   1   |   0   ;   i   f   (   M   a   i   n   L   o   o   p   .   t   i   m   i   n   g   M   o   d   e   =   =   1   &   &   M   a   i   n   L   o   o   p   .   t   i   m   i   n   g   V   a   l   u   e   >   1   &   &   M   a   i   n   L   o   o   p   .   c   u   r   r   e   n   t   F   r   a   m   e   N   u   m   b   e   r   %   M   a   i   n   L   o   o   p   .   t   i   m   i   n   g   V   a   l   u   e   !   =   0   )   {   M   a   i   n   L   o   o   p   .   s   c   h   e   d   u   l   e   r   (   )   ;   r   e   t   u   r   n   }   e   l   s   e       i   f   (   M   a   i   n   L   o   o   p   .   t   i   m   i   n   g   M   o   d   e   =   =   0   )   {   M   a   i   n   L   o   o   p   .   t   i   c   k   S   t   a   r   t   T   i   m   e   =   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   n   o   w   (   )   }   M   a   i   n   L   o   o   p   .   r   u   n   I   t   e   r   (   i   t   e   r   F   u   n   c   )   ;   i   f   (   !   c   h   e   c   k   I   s   R   u   n   n   i   n   g   (   )   )   r   e   t   u   r   n   ;   M   a   i   n   L   o   o   p   .   s   c   h   e   d   u   l   e   r   (   )   }   ;   i   f   (   !   n   o   S   e   t   T   i   m   i   n   g   )   {   i   f   (   f   p   s   >   0   )   {   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   a   i   n   _   l   o   o   p   _   t   i   m   i   n   g   (   0   ,   1   e   3   /   f   p   s   )   }   e   l   s   e   {   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   a   i   n   _   l   o   o   p   _   t   i   m   i   n   g   (   1   ,   1   )   }   M   a   i   n   L   o   o   p   .   s   c   h   e   d   u   l   e   r   (   )   }   i   f   (   s   i   m   u   l   a   t   e   I   n   f   i   n   i   t   e   L   o   o   p   )   {   t   h   r   o   w   "   u   n   w   i   n   d   "   }   }   ;   v   a   r       M   a   i   n   L   o   o   p   =   {   r   u   n   n   i   n   g   :   f   a   l   s   e   ,   s   c   h   e   d   u   l   e   r   :   n   u   l   l   ,   m   e   t   h   o   d   :   "   "   ,   c   u   r   r   e   n   t   l   y   R   u   n   n   i   n   g   M   a   i   n   l   o   o   p   :   0   ,   f   u   n   c   :   n   u   l   l   ,   a   r   g   :   0   ,   t   i   m   i   n   g   M   o   d   e   :   0   ,   t   i   m   i   n   g   V   a   l   u   e   :   0   ,   c   u   r   r   e   n   t   F   r   a   m   e   N   u   m   b   e   r   :   0   ,   q   u   e   u   e   :   [   ]   ,   p   r   e   M   a   i   n   L   o   o   p   :   [   ]   ,   p   o   s   t   M   a   i   n   L   o   o   p   :   [   ]   ,   p   a   u   s   e   (   )   {   M   a   i   n   L   o   o   p   .   s   c   h   e   d   u   l   e   r   =   n   u   l   l   ;   M   a   i   n   L   o   o   p   .   c   u   r   r   e   n   t   l   y   R   u   n   n   i   n   g   M   a   i   n   l   o   o   p   +   +   }   ,   r   e   s   u   m   e   (   )   {   M   a   i   n   L   o   o   p   .   c   u   r   r   e   n   t   l   y   R   u   n   n   i   n   g   M   a   i   n   l   o   o   p   +   +   ;   v   a   r       t   i   m   i   n   g   M   o   d   e   =   M   a   i   n   L   o   o   p   .   t   i   m   i   n   g   M   o   d   e   ;   v   a   r       t   i   m   i   n   g   V   a   l   u   e   =   M   a   i   n   L   o   o   p   .   t   i   m   i   n   g   V   a   l   u   e   ;   v   a   r       f   u   n   c   =   M   a   i   n   L   o   o   p   .   f   u   n   c   ;   M   a   i   n   L   o   o   p   .   f   u   n   c   =   n   u   l   l   ;   s   e   t   M   a   i   n   L   o   o   p   (   f   u   n   c   ,   0   ,   f   a   l   s   e   ,   M   a   i   n   L   o   o   p   .   a   r   g   ,   t   r   u   e   )   ;   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   a   i   n   _   l   o   o   p   _   t   i   m   i   n   g   (   t   i   m   i   n   g   M   o   d   e   ,   t   i   m   i   n   g   V   a   l   u   e   )   ;   M   a   i   n   L   o   o   p   .   s   c   h   e   d   u   l   e   r   (   )   }   ,   u   p   d   a   t   e   S   t   a   t   u   s   (   )   {   i   f   (   M   o   d   u   l   e   [   "   s   e   t   S   t   a   t   u   s   "   ]   )   {   v   a   r       m   e   s   s   a   g   e   =   M   o   d   u   l   e   [   "   s   t   a   t   u   s   M   e   s   s   a   g   e   "   ]   |   |   "   P   l   e   a   s   e       w   a   i   t   .   .   .   "   ;   v   a   r       r   e   m   a   i   n   i   n   g   =   M   a   i   n   L   o   o   p   .   r   e   m   a   i   n   i   n   g   B   l   o   c   k   e   r   s   ?   ?   0   ;   v   a   r       e   x   p   e   c   t   e   d   =   M   a   i   n   L   o   o   p   .   e   x   p   e   c   t   e   d   B   l   o   c   k   e   r   s   ?   ?   0   ;   i   f   (   r   e   m   a   i   n   i   n   g   )   {   i   f   (   r   e   m   a   i   n   i   n   g   <   e   x   p   e   c   t   e   d   )   {   M   o   d   u   l   e   [   "   s   e   t   S   t   a   t   u   s   "   ]   (   `   {   m   e   s   s   a   g   e   }       (   {   e   x   p   e   c   t   e   d       -       r   e   m   a   i   n   i   n   g   }   /   {   e   x   p   e   c   t   e   d   }   )   `   )   }   e   l   s   e   {   M   o   d   u   l   e   [   "   s   e   t   S   t   a   t   u   s   "   ]   (   m   e   s   s   a   g   e   )   }   }   e   l   s   e   {   M   o   d   u   l   e   [   "   s   e   t   S   t   a   t   u   s   "   ]   (   "   "   )   }   }   }   ,   i   n   i   t   (   )   {   M   o   d   u   l   e   [   "   p   r   e   M   a   i   n   L   o   o   p   "   ]   &   &   M   a   i   n   L   o   o   p   .   p   r   e   M   a   i   n   L   o   o   p   .   p   u   s   h   (   M   o   d   u   l   e   [   "   p   r   e   M   a   i   n   L   o   o   p   "   ]   )   ;   M   o   d   u   l   e   [   "   p   o   s   t   M   a   i   n   L   o   o   p   "   ]   &   &   M   a   i   n   L   o   o   p   .   p   o   s   t   M   a   i   n   L   o   o   p   .   p   u   s   h   (   M   o   d   u   l   e   [   "   p   o   s   t   M   a   i   n   L   o   o   p   "   ]   )   }   ,   r   u   n   I   t   e   r   (   f   u   n   c   )   {   i   f   (   A   B   O   R   T   )   r   e   t   u   r   n   ;   f   o   r   (   v   a   r       p   r   e       o   f       M   a   i   n   L   o   o   p   .   p   r   e   M   a   i   n   L   o   o   p   )   {   i   f   (   p   r   e   (   )   =   =   =   f   a   l   s   e   )   {   r   e   t   u   r   n   }   }   c   a   l   l   U   s   e   r   C   a   l   l   b   a   c   k   (   f   u   n   c   )   ;   f   o   r   (   v   a   r       p   o   s   t       o   f       M   a   i   n   L   o   o   p   .   p   o   s   t   M   a   i   n   L   o   o   p   )   {   p   o   s   t   (   )   }   }   ,   n   e   x   t   R   A   F   :   0   ,   f   a   k   e   R   e   q   u   e   s   t   A   n   i   m   a   t   i   o   n   F   r   a   m   e   (   f   u   n   c   )   {   v   a   r       n   o   w   =   D   a   t   e   .   n   o   w   (   )   ;   i   f   (   M   a   i   n   L   o   o   p   .   n   e   x   t   R   A   F   =   =   =   0   )   {   M   a   i   n   L   o   o   p   .   n   e   x   t   R   A   F   =   n   o   w   +   1   e   3   /   6   0   }   e   l   s   e   {   w   h   i   l   e   (   n   o   w   +   2   >   =   M   a   i   n   L   o   o   p   .   n   e   x   t   R   A   F   )   {   M   a   i   n   L   o   o   p   .   n   e   x   t   R   A   F   +   =   1   e   3   /   6   0   }   }   v   a   r       d   e   l   a   y   =   M   a   t   h   .   m   a   x   (   M   a   i   n   L   o   o   p   .   n   e   x   t   R   A   F   -   n   o   w   ,   0   )   ;   s   e   t   T   i   m   e   o   u   t   (   f   u   n   c   ,   d   e   l   a   y   )   }   ,   r   e   q   u   e   s   t   A   n   i   m   a   t   i   o   n   F   r   a   m   e   (   f   u   n   c   )   {   i   f   (   t   y   p   e   o   f       r   e   q   u   e   s   t   A   n   i   m   a   t   i   o   n   F   r   a   m   e   =   =   "   f   u   n   c   t   i   o   n   "   )   {   r   e   q   u   e   s   t   A   n   i   m   a   t   i   o   n   F   r   a   m   e   (   f   u   n   c   )   ;   r   e   t   u   r   n   }   v   a   r       R   A   F   =   M   a   i   n   L   o   o   p   .   f   a   k   e   R   e   q   u   e   s   t   A   n   i   m   a   t   i   o   n   F   r   a   m   e   ;   R   A   F   (   f   u   n   c   )   }   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   a   i   n   _   l   o   o   p   _   t   i   m   i   n   g   =   (   m   o   d   e   ,   v   a   l   u   e   )   =   >   {   M   a   i   n   L   o   o   p   .   t   i   m   i   n   g   M   o   d   e   =   m   o   d   e   ;   M   a   i   n   L   o   o   p   .   t   i   m   i   n   g   V   a   l   u   e   =   v   a   l   u   e   ;   i   f   (   !   M   a   i   n   L   o   o   p   .   f   u   n   c   )   {   r   e   t   u   r   n       1   }   i   f   (   !   M   a   i   n   L   o   o   p   .   r   u   n   n   i   n   g   )   {   M   a   i   n   L   o   o   p   .   r   u   n   n   i   n   g   =   t   r   u   e   }   i   f   (   m   o   d   e   =   =   0   )   {   M   a   i   n   L   o   o   p   .   s   c   h   e   d   u   l   e   r   =   f   u   n   c   t   i   o   n       M   a   i   n   L   o   o   p   _   s   c   h   e   d   u   l   e   r   _   s   e   t   T   i   m   e   o   u   t   (   )   {   v   a   r       t   i   m   e   U   n   t   i   l   N   e   x   t   T   i   c   k   =   M   a   t   h   .   m   a   x   (   0   ,   M   a   i   n   L   o   o   p   .   t   i   c   k   S   t   a   r   t   T   i   m   e   +   v   a   l   u   e   -   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   n   o   w   (   )   )   |   0   ;   s   e   t   T   i   m   e   o   u   t   (   M   a   i   n   L   o   o   p   .   r   u   n   n   e   r   ,   t   i   m   e   U   n   t   i   l   N   e   x   t   T   i   c   k   )   }   ;   M   a   i   n   L   o   o   p   .   m   e   t   h   o   d   =   "   t   i   m   e   o   u   t   "   }   e   l   s   e       i   f   (   m   o   d   e   =   =   1   )   {   M   a   i   n   L   o   o   p   .   s   c   h   e   d   u   l   e   r   =   f   u   n   c   t   i   o   n       M   a   i   n   L   o   o   p   _   s   c   h   e   d   u   l   e   r   _   r   A   F   (   )   {   M   a   i   n   L   o   o   p   .   r   e   q   u   e   s   t   A   n   i   m   a   t   i   o   n   F   r   a   m   e   (   M   a   i   n   L   o   o   p   .   r   u   n   n   e   r   )   }   ;   M   a   i   n   L   o   o   p   .   m   e   t   h   o   d   =   "   r   A   F   "   }   e   l   s   e       i   f   (   m   o   d   e   =   =   2   )   {   i   f   (   t   y   p   e   o   f       M   a   i   n   L   o   o   p   .   s   e   t   I   m   m   e   d   i   a   t   e   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   i   f   (   t   y   p   e   o   f       s   e   t   I   m   m   e   d   i   a   t   e   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   v   a   r       s   e   t   I   m   m   e   d   i   a   t   e   s   =   [   ]   ;   v   a   r       e   m   s   c   r   i   p   t   e   n   M   a   i   n   L   o   o   p   M   e   s   s   a   g   e   I   d   =   "   s   e   t   i   m   m   e   d   i   a   t   e   "   ;   v   a   r       M   a   i   n   L   o   o   p   _   s   e   t   I   m   m   e   d   i   a   t   e   _   m   e   s   s   a   g   e   H   a   n   d   l   e   r   =   e   v   e   n   t   =   >   {   i   f   (   e   v   e   n   t   .   d   a   t   a   =   =   =   e   m   s   c   r   i   p   t   e   n   M   a   i   n   L   o   o   p   M   e   s   s   a   g   e   I   d   |   |   e   v   e   n   t   .   d   a   t   a   .   t   a   r   g   e   t   =   =   =   e   m   s   c   r   i   p   t   e   n   M   a   i   n   L   o   o   p   M   e   s   s   a   g   e   I   d   )   {   e   v   e   n   t   .   s   t   o   p   P   r   o   p   a   g   a   t   i   o   n   (   )   ;   s   e   t   I   m   m   e   d   i   a   t   e   s   .   s   h   i   f   t   (   )   (   )   }   }   ;   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   m   e   s   s   a   g   e   "   ,   M   a   i   n   L   o   o   p   _   s   e   t   I   m   m   e   d   i   a   t   e   _   m   e   s   s   a   g   e   H   a   n   d   l   e   r   ,   t   r   u   e   )   ;   M   a   i   n   L   o   o   p   .   s   e   t   I   m   m   e   d   i   a   t   e   =   f   u   n   c   =   >   {   s   e   t   I   m   m   e   d   i   a   t   e   s   .   p   u   s   h   (   f   u   n   c   )   ;   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   O   R   K   E   R   )   {   M   o   d   u   l   e   [   "   s   e   t   I   m   m   e   d   i   a   t   e   s   "   ]   ?   ?   =   [   ]   ;   M   o   d   u   l   e   [   "   s   e   t   I   m   m   e   d   i   a   t   e   s   "   ]   .   p   u   s   h   (   f   u   n   c   )   ;   p   o   s   t   M   e   s   s   a   g   e   (   {   t   a   r   g   e   t   :   e   m   s   c   r   i   p   t   e   n   M   a   i   n   L   o   o   p   M   e   s   s   a   g   e   I   d   }   )   }   e   l   s   e       p   o   s   t   M   e   s   s   a   g   e   (   e   m   s   c   r   i   p   t   e   n   M   a   i   n   L   o   o   p   M   e   s   s   a   g   e   I   d   ,   "   *   "   )   }   }   e   l   s   e   {   M   a   i   n   L   o   o   p   .   s   e   t   I   m   m   e   d   i   a   t   e   =   s   e   t   I   m   m   e   d   i   a   t   e   }   }   M   a   i   n   L   o   o   p   .   s   c   h   e   d   u   l   e   r   =   f   u   n   c   t   i   o   n       M   a   i   n   L   o   o   p   _   s   c   h   e   d   u   l   e   r   _   s   e   t   I   m   m   e   d   i   a   t   e   (   )   {   M   a   i   n   L   o   o   p   .   s   e   t   I   m   m   e   d   i   a   t   e   (   M   a   i   n   L   o   o   p   .   r   u   n   n   e   r   )   }   ;   M   a   i   n   L   o   o   p   .   m   e   t   h   o   d   =   "   i   m   m   e   d   i   a   t   e   "   }   r   e   t   u   r   n       0   }   ;   f   u   n   c   t   i   o   n       _   e   g   l   S   w   a   p   I   n   t   e   r   v   a   l   (   d   i   s   p   l   a   y   ,   i   n   t   e   r   v   a   l   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   i   f   (   i   n   t   e   r   v   a   l   =   =   0   )   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   a   i   n   _   l   o   o   p   _   t   i   m   i   n   g   (   0   ,   0   )   ;   e   l   s   e       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   a   i   n   _   l   o   o   p   _   t   i   m   i   n   g   (   1   ,   i   n   t   e   r   v   a   l   )   ;   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       1   }   f   u   n   c   t   i   o   n       _   e   g   l   T   e   r   m   i   n   a   t   e   (   d   i   s   p   l   a   y   )   {   d   i   s   p   l   a   y   >   >   >   =   0   ;   i   f   (   d   i   s   p   l   a   y   !   =   6   2   e   3   )   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   9   6   )   ;   r   e   t   u   r   n       0   }   E   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   =   0   ;   E   G   L   .   c   u   r   r   e   n   t   R   e   a   d   S   u   r   f   a   c   e   =   0   ;   E   G   L   .   c   u   r   r   e   n   t   D   r   a   w   S   u   r   f   a   c   e   =   0   ;   E   G   L   .   d   e   f   a   u   l   t   D   i   s   p   l   a   y   I   n   i   t   i   a   l   i   z   e   d   =   f   a   l   s   e   ;   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       1   }   v   a   r       _   e   g   l   W   a   i   t   C   l   i   e   n   t   =   (   )   =   >   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       1   }   ;   v   a   r       _   e   g   l   W   a   i   t   G   L   =   _   e   g   l   W   a   i   t   C   l   i   e   n   t   ;   v   a   r       _   e   g   l   W   a   i   t   N   a   t   i   v   e   =   n   a   t   i   v   e   E   n   g   i   n   e   I   d   =   >   {   E   G   L   .   s   e   t   E   r   r   o   r   C   o   d   e   (   1   2   2   8   8   )   ;   r   e   t   u   r   n       1   }   ;   v   a   r       r   e   a   d   E   m   A   s   m   A   r   g   s   A   r   r   a   y   =   [   ]   ;   v   a   r       r   e   a   d   E   m   A   s   m   A   r   g   s   =   (   s   i   g   P   t   r   ,   b   u   f   )   =   >   {   r   e   a   d   E   m   A   s   m   A   r   g   s   A   r   r   a   y   .   l   e   n   g   t   h   =   0   ;   v   a   r       c   h   ;   w   h   i   l   e   (   c   h   =   H   E   A   P   U   8   [   s   i   g   P   t   r   +   +   >   >   >   0   ]   )   {   v   a   r       w   i   d   e   =   c   h   !   =   1   0   5   ;   w   i   d   e   &   =   c   h   !   =   1   1   2   ;   b   u   f   +   =   w   i   d   e   &   &   b   u   f   %   8   ?   4   :   0   ;   r   e   a   d   E   m   A   s   m   A   r   g   s   A   r   r   a   y   .   p   u   s   h   (   c   h   =   =   1   1   2   ?   H   E   A   P   U   3   2   [   b   u   f   >   >   >   2   >   >   >   0   ]   :   c   h   =   =   1   0   6   ?   H   E   A   P   6   4   [   b   u   f   >   >   >   3   >   >   >   0   ]   :   c   h   =   =   1   0   5   ?   H   E   A   P   3   2   [   b   u   f   >   >   >   2   >   >   >   0   ]   :   H   E   A   P   F   6   4   [   b   u   f   >   >   >   3   >   >   >   0   ]   )   ;   b   u   f   +   =   w   i   d   e   ?   8   :   4   }   r   e   t   u   r   n       r   e   a   d   E   m   A   s   m   A   r   g   s   A   r   r   a   y   }   ;   v   a   r       r   u   n   E   m   A   s   m   F   u   n   c   t   i   o   n   =   (   c   o   d   e   ,   s   i   g   P   t   r   ,   a   r   g   b   u   f   )   =   >   {   v   a   r       a   r   g   s   =   r   e   a   d   E   m   A   s   m   A   r   g   s   (   s   i   g   P   t   r   ,   a   r   g   b   u   f   )   ;   r   e   t   u   r   n       A   S   M   _   C   O   N   S   T   S   [   c   o   d   e   ]   (   .   .   .   a   r   g   s   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   a   s   m   _   c   o   n   s   t   _   i   n   t   (   c   o   d   e   ,   s   i   g   P   t   r   ,   a   r   g   b   u   f   )   {   c   o   d   e   >   >   >   =   0   ;   s   i   g   P   t   r   >   >   >   =   0   ;   a   r   g   b   u   f   >   >   >   =   0   ;   r   e   t   u   r   n       r   u   n   E   m   A   s   m   F   u   n   c   t   i   o   n   (   c   o   d   e   ,   s   i   g   P   t   r   ,   a   r   g   b   u   f   )   }   v   a   r       r   u   n   M   a   i   n   T   h   r   e   a   d   E   m   A   s   m   =   (   e   m   A   s   m   A   d   d   r   ,   s   i   g   P   t   r   ,   a   r   g   b   u   f   ,   s   y   n   c   )   =   >   {   v   a   r       a   r   g   s   =   r   e   a   d   E   m   A   s   m   A   r   g   s   (   s   i   g   P   t   r   ,   a   r   g   b   u   f   )   ;   r   e   t   u   r   n       A   S   M   _   C   O   N   S   T   S   [   e   m   A   s   m   A   d   d   r   ]   (   .   .   .   a   r   g   s   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   a   s   m   _   c   o   n   s   t   _   i   n   t   _   s   y   n   c   _   o   n   _   m   a   i   n   _   t   h   r   e   a   d   (   e   m   A   s   m   A   d   d   r   ,   s   i   g   P   t   r   ,   a   r   g   b   u   f   )   {   e   m   A   s   m   A   d   d   r   >   >   >   =   0   ;   s   i   g   P   t   r   >   >   >   =   0   ;   a   r   g   b   u   f   >   >   >   =   0   ;   r   e   t   u   r   n       r   u   n   M   a   i   n   T   h   r   e   a   d   E   m   A   s   m   (   e   m   A   s   m   A   d   d   r   ,   s   i   g   P   t   r   ,   a   r   g   b   u   f   ,   1   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   a   s   m   _   c   o   n   s   t   _   p   t   r   _   s   y   n   c   _   o   n   _   m   a   i   n   _   t   h   r   e   a   d   (   e   m   A   s   m   A   d   d   r   ,   s   i   g   P   t   r   ,   a   r   g   b   u   f   )   {   e   m   A   s   m   A   d   d   r   >   >   >   =   0   ;   s   i   g   P   t   r   >   >   >   =   0   ;   a   r   g   b   u   f   >   >   >   =   0   ;   r   e   t   u   r   n       r   u   n   M   a   i   n   T   h   r   e   a   d   E   m   A   s   m   (   e   m   A   s   m   A   d   d   r   ,   s   i   g   P   t   r   ,   a   r   g   b   u   f   ,   1   )   }   v   a   r       J   S   E   v   e   n   t   s   =   {   m   e   m   c   p   y   (   t   a   r   g   e   t   ,   s   r   c   ,   s   i   z   e   )   {   H   E   A   P   8   .   s   e   t   (   H   E   A   P   8   .   s   u   b   a   r   r   a   y   (   s   r   c   >   >   >   0   ,   s   r   c   +   s   i   z   e   >   >   >   0   )   ,   t   a   r   g   e   t   >   >   >   0   )   }   ,   r   e   m   o   v   e   A   l   l   E   v   e   n   t   L   i   s   t   e   n   e   r   s   (   )   {   w   h   i   l   e   (   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   .   l   e   n   g   t   h   )   {   J   S   E   v   e   n   t   s   .   _   r   e   m   o   v   e   H   a   n   d   l   e   r   (   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   .   l   e   n   g   t   h   -   1   )   }   J   S   E   v   e   n   t   s   .   d   e   f   e   r   r   e   d   C   a   l   l   s   =   [   ]   }   ,   i   n   E   v   e   n   t   H   a   n   d   l   e   r   :   0   ,   d   e   f   e   r   r   e   d   C   a   l   l   s   :   [   ]   ,   d   e   f   e   r   C   a   l   l   (   t   a   r   g   e   t   F   u   n   c   t   i   o   n   ,   p   r   e   c   e   d   e   n   c   e   ,   a   r   g   s   L   i   s   t   )   {   f   u   n   c   t   i   o   n       a   r   r   a   y   s   H   a   v   e   E   q   u   a   l   C   o   n   t   e   n   t   (   a   r   r   A   ,   a   r   r   B   )   {   i   f   (   a   r   r   A   .   l   e   n   g   t   h   !   =   a   r   r   B   .   l   e   n   g   t   h   )   r   e   t   u   r   n       f   a   l   s   e   ;   f   o   r   (   v   a   r       i       i   n       a   r   r   A   )   {   i   f   (   a   r   r   A   [   i   ]   !   =   a   r   r   B   [   i   ]   )   r   e   t   u   r   n       f   a   l   s   e   }   r   e   t   u   r   n       t   r   u   e   }   f   o   r   (   v   a   r       c   a   l   l       o   f       J   S   E   v   e   n   t   s   .   d   e   f   e   r   r   e   d   C   a   l   l   s   )   {   i   f   (   c   a   l   l   .   t   a   r   g   e   t   F   u   n   c   t   i   o   n   =   =   t   a   r   g   e   t   F   u   n   c   t   i   o   n   &   &   a   r   r   a   y   s   H   a   v   e   E   q   u   a   l   C   o   n   t   e   n   t   (   c   a   l   l   .   a   r   g   s   L   i   s   t   ,   a   r   g   s   L   i   s   t   )   )   {   r   e   t   u   r   n   }   }   J   S   E   v   e   n   t   s   .   d   e   f   e   r   r   e   d   C   a   l   l   s   .   p   u   s   h   (   {   t   a   r   g   e   t   F   u   n   c   t   i   o   n   ,   p   r   e   c   e   d   e   n   c   e   ,   a   r   g   s   L   i   s   t   }   )   ;   J   S   E   v   e   n   t   s   .   d   e   f   e   r   r   e   d   C   a   l   l   s   .   s   o   r   t   (   (   x   ,   y   )   =   >   x   .   p   r   e   c   e   d   e   n   c   e   <   y   .   p   r   e   c   e   d   e   n   c   e   )   }   ,   r   e   m   o   v   e   D   e   f   e   r   r   e   d   C   a   l   l   s   (   t   a   r   g   e   t   F   u   n   c   t   i   o   n   )   {   J   S   E   v   e   n   t   s   .   d   e   f   e   r   r   e   d   C   a   l   l   s   =   J   S   E   v   e   n   t   s   .   d   e   f   e   r   r   e   d   C   a   l   l   s   .   f   i   l   t   e   r   (   c   a   l   l   =   >   c   a   l   l   .   t   a   r   g   e   t   F   u   n   c   t   i   o   n   !   =   t   a   r   g   e   t   F   u   n   c   t   i   o   n   )   }   ,   c   a   n   P   e   r   f   o   r   m   E   v   e   n   t   H   a   n   d   l   e   r   R   e   q   u   e   s   t   s   (   )   {   i   f   (   n   a   v   i   g   a   t   o   r   .   u   s   e   r   A   c   t   i   v   a   t   i   o   n   )   {   r   e   t   u   r   n       n   a   v   i   g   a   t   o   r   .   u   s   e   r   A   c   t   i   v   a   t   i   o   n   .   i   s   A   c   t   i   v   e   }   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   i   n   E   v   e   n   t   H   a   n   d   l   e   r   &   &   J   S   E   v   e   n   t   s   .   c   u   r   r   e   n   t   E   v   e   n   t   H   a   n   d   l   e   r   .   a   l   l   o   w   s   D   e   f   e   r   r   e   d   C   a   l   l   s   }   ,   r   u   n   D   e   f   e   r   r   e   d   C   a   l   l   s   (   )   {   i   f   (   !   J   S   E   v   e   n   t   s   .   c   a   n   P   e   r   f   o   r   m   E   v   e   n   t   H   a   n   d   l   e   r   R   e   q   u   e   s   t   s   (   )   )   {   r   e   t   u   r   n   }   v   a   r       d   e   f   e   r   r   e   d   C   a   l   l   s   =   J   S   E   v   e   n   t   s   .   d   e   f   e   r   r   e   d   C   a   l   l   s   ;   J   S   E   v   e   n   t   s   .   d   e   f   e   r   r   e   d   C   a   l   l   s   =   [   ]   ;   f   o   r   (   v   a   r       c   a   l   l       o   f       d   e   f   e   r   r   e   d   C   a   l   l   s   )   {   c   a   l   l   .   t   a   r   g   e   t   F   u   n   c   t   i   o   n   (   .   .   .   c   a   l   l   .   a   r   g   s   L   i   s   t   )   }   }   ,   e   v   e   n   t   H   a   n   d   l   e   r   s   :   [   ]   ,   r   e   m   o   v   e   A   l   l   H   a   n   d   l   e   r   s   O   n   T   a   r   g   e   t   :   (   t   a   r   g   e   t   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   )   =   >   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   .   l   e   n   g   t   h   ;   +   +   i   )   {   i   f   (   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   [   i   ]   .   t   a   r   g   e   t   =   =   t   a   r   g   e   t   &   &   (   !   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   |   |   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   =   =   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   [   i   ]   .   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   )   )   {   J   S   E   v   e   n   t   s   .   _   r   e   m   o   v   e   H   a   n   d   l   e   r   (   i   -   -   )   }   }   }   ,   _   r   e   m   o   v   e   H   a   n   d   l   e   r   (   i   )   {   v   a   r       h   =   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   [   i   ]   ;   h   .   t   a   r   g   e   t   .   r   e   m   o   v   e   E   v   e   n   t   L   i   s   t   e   n   e   r   (   h   .   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   h   .   e   v   e   n   t   L   i   s   t   e   n   e   r   F   u   n   c   ,   h   .   u   s   e   C   a   p   t   u   r   e   )   ;   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   .   s   p   l   i   c   e   (   i   ,   1   )   }   ,   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   {   i   f   (   !   e   v   e   n   t   H   a   n   d   l   e   r   .   t   a   r   g   e   t   )   {   r   e   t   u   r   n   -   4   }   i   f   (   e   v   e   n   t   H   a   n   d   l   e   r   .   c   a   l   l   b   a   c   k   f   u   n   c   )   {   e   v   e   n   t   H   a   n   d   l   e   r   .   e   v   e   n   t   L   i   s   t   e   n   e   r   F   u   n   c   =   f   u   n   c   t   i   o   n   (   e   v   e   n   t   )   {   +   +   J   S   E   v   e   n   t   s   .   i   n   E   v   e   n   t   H   a   n   d   l   e   r   ;   J   S   E   v   e   n   t   s   .   c   u   r   r   e   n   t   E   v   e   n   t   H   a   n   d   l   e   r   =   e   v   e   n   t   H   a   n   d   l   e   r   ;   J   S   E   v   e   n   t   s   .   r   u   n   D   e   f   e   r   r   e   d   C   a   l   l   s   (   )   ;   e   v   e   n   t   H   a   n   d   l   e   r   .   h   a   n   d   l   e   r   F   u   n   c   (   e   v   e   n   t   )   ;   J   S   E   v   e   n   t   s   .   r   u   n   D   e   f   e   r   r   e   d   C   a   l   l   s   (   )   ;   -   -   J   S   E   v   e   n   t   s   .   i   n   E   v   e   n   t   H   a   n   d   l   e   r   }   ;   e   v   e   n   t   H   a   n   d   l   e   r   .   t   a   r   g   e   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   .   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   e   v   e   n   t   H   a   n   d   l   e   r   .   e   v   e   n   t   L   i   s   t   e   n   e   r   F   u   n   c   ,   e   v   e   n   t   H   a   n   d   l   e   r   .   u   s   e   C   a   p   t   u   r   e   )   ;   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   .   p   u   s   h   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   e   l   s   e   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   .   l   e   n   g   t   h   ;   +   +   i   )   {   i   f   (   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   [   i   ]   .   t   a   r   g   e   t   =   =   e   v   e   n   t   H   a   n   d   l   e   r   .   t   a   r   g   e   t   &   &   J   S   E   v   e   n   t   s   .   e   v   e   n   t   H   a   n   d   l   e   r   s   [   i   ]   .   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   =   =   e   v   e   n   t   H   a   n   d   l   e   r   .   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   )   {   J   S   E   v   e   n   t   s   .   _   r   e   m   o   v   e   H   a   n   d   l   e   r   (   i   -   -   )   }   }   }   r   e   t   u   r   n       0   }   ,   g   e   t   N   o   d   e   N   a   m   e   F   o   r   T   a   r   g   e   t   (   t   a   r   g   e   t   )   {   i   f   (   !   t   a   r   g   e   t   )   r   e   t   u   r   n   "   "   ;   i   f   (   t   a   r   g   e   t   =   =   w   i   n   d   o   w   )   r   e   t   u   r   n   "   #   w   i   n   d   o   w   "   ;   i   f   (   t   a   r   g   e   t   =   =   s   c   r   e   e   n   )   r   e   t   u   r   n   "   #   s   c   r   e   e   n   "   ;   r   e   t   u   r   n       t   a   r   g   e   t   ?   .   n   o   d   e   N   a   m   e   |   |   "   "   }   ,   f   u   l   l   s   c   r   e   e   n   E   n   a   b   l   e   d   (   )   {   r   e   t   u   r   n       d   o   c   u   m   e   n   t   .   f   u   l   l   s   c   r   e   e   n   E   n   a   b   l   e   d   |   |   d   o   c   u   m   e   n   t   .   w   e   b   k   i   t   F   u   l   l   s   c   r   e   e   n   E   n   a   b   l   e   d   }   }   ;   v   a   r       s   p   e   c   i   a   l   H   T   M   L   T   a   r   g   e   t   s   =   [   0   ,   d   o   c   u   m   e   n   t   ,   w   i   n   d   o   w   ]   ;   v   a   r       m   a   y   b   e   C   S   t   r   i   n   g   T   o   J   s   S   t   r   i   n   g   =   c   S   t   r   i   n   g   =   >   c   S   t   r   i   n   g   >   2   ?   U   T   F   8   T   o   S   t   r   i   n   g   (   c   S   t   r   i   n   g   )   :   c   S   t   r   i   n   g   ;   v   a   r       f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   =   t   a   r   g   e   t   =   >   {   t   a   r   g   e   t   =   m   a   y   b   e   C   S   t   r   i   n   g   T   o   J   s   S   t   r   i   n   g   (   t   a   r   g   e   t   )   ;   v   a   r       d   o   m   E   l   e   m   e   n   t   =   s   p   e   c   i   a   l   H   T   M   L   T   a   r   g   e   t   s   [   t   a   r   g   e   t   ]   |   |   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   t   a   r   g   e   t   )   ;   r   e   t   u   r   n       d   o   m   E   l   e   m   e   n   t   }   ;   v   a   r       f   i   n   d   C   a   n   v   a   s   E   v   e   n   t   T   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   c   a   n   v   a   s   _   e   l   e   m   e   n   t   _   s   i   z   e   (   t   a   r   g   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   w   i   d   t   h   >   >   >   =   0   ;   h   e   i   g   h   t   >   >   >   =   0   ;   v   a   r       c   a   n   v   a   s   =   f   i   n   d   C   a   n   v   a   s   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   i   f   (   !   c   a   n   v   a   s   )   r   e   t   u   r   n   -   4   ;   H   E   A   P   3   2   [   w   i   d   t   h   >   >   >   2   >   >   >   0   ]   =   c   a   n   v   a   s   .   w   i   d   t   h   ;   H   E   A   P   3   2   [   h   e   i   g   h   t   >   >   >   2   >   >   >   0   ]   =   c   a   n   v   a   s   .   h   e   i   g   h   t   }   v   a   r       s   t   a   c   k   A   l   l   o   c   =   s   z   =   >   _   _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   a   l   l   o   c   (   s   z   )   ;   v   a   r       s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   =   s   t   r   =   >   {   v   a   r       s   i   z   e   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   s   t   r   )   +   1   ;   v   a   r       r   e   t   =   s   t   a   c   k   A   l   l   o   c   (   s   i   z   e   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   s   t   r   ,   r   e   t   ,   s   i   z   e   )   ;   r   e   t   u   r   n       r   e   t   }   ;   v   a   r       g   e   t   C   a   n   v   a   s   E   l   e   m   e   n   t   S   i   z   e   =   t   a   r   g   e   t   =   >   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   v   a   r       w   =   s   t   a   c   k   A   l   l   o   c   (   8   )   ;   v   a   r       h   =   w   +   4   ;   v   a   r       t   a   r   g   e   t   I   n   t   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   t   a   r   g   e   t   .   i   d   )   ;   v   a   r       r   e   t   =   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   c   a   n   v   a   s   _   e   l   e   m   e   n   t   _   s   i   z   e   (   t   a   r   g   e   t   I   n   t   ,   w   ,   h   )   ;   v   a   r       s   i   z   e   =   [   H   E   A   P   3   2   [   w   >   >   >   2   >   >   >   0   ]   ,   H   E   A   P   3   2   [   h   >   >   >   2   >   >   >   0   ]   ]   ;   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   r   e   t   u   r   n       s   i   z   e   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   c   a   n   v   a   s   _   e   l   e   m   e   n   t   _   s   i   z   e   (   t   a   r   g   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   v   a   r       c   a   n   v   a   s   =   f   i   n   d   C   a   n   v   a   s   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   i   f   (   !   c   a   n   v   a   s   )   r   e   t   u   r   n   -   4   ;   c   a   n   v   a   s   .   w   i   d   t   h   =   w   i   d   t   h   ;   c   a   n   v   a   s   .   h   e   i   g   h   t   =   h   e   i   g   h   t   ;   r   e   t   u   r   n       0   }   v   a   r       s   e   t   C   a   n   v   a   s   E   l   e   m   e   n   t   S   i   z   e   =   (   t   a   r   g   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   )   =   >   {   i   f   (   !   t   a   r   g   e   t   .   c   o   n   t   r   o   l   T   r   a   n   s   f   e   r   r   e   d   O   f   f   s   c   r   e   e   n   )   {   t   a   r   g   e   t   .   w   i   d   t   h   =   w   i   d   t   h   ;   t   a   r   g   e   t   .   h   e   i   g   h   t   =   h   e   i   g   h   t   }   e   l   s   e   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   v   a   r       t   a   r   g   e   t   I   n   t   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   t   a   r   g   e   t   .   i   d   )   ;   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   c   a   n   v   a   s   _   e   l   e   m   e   n   t   _   s   i   z   e   (   t   a   r   g   e   t   I   n   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   )   ;   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   }   }   ;   v   a   r       c   u   r   r   e   n   t   F   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   =   {   }   ;   v   a   r       r   e   g   i   s   t   e   r   R   e   s   t   o   r   e   O   l   d   S   t   y   l   e   =   c   a   n   v   a   s   =   >   {   v   a   r       c   a   n   v   a   s   S   i   z   e   =   g   e   t   C   a   n   v   a   s   E   l   e   m   e   n   t   S   i   z   e   (   c   a   n   v   a   s   )   ;   v   a   r       o   l   d   W   i   d   t   h   =   c   a   n   v   a   s   S   i   z   e   [   0   ]   ;   v   a   r       o   l   d   H   e   i   g   h   t   =   c   a   n   v   a   s   S   i   z   e   [   1   ]   ;   v   a   r       o   l   d   C   s   s   W   i   d   t   h   =   c   a   n   v   a   s   .   s   t   y   l   e   .   w   i   d   t   h   ;   v   a   r       o   l   d   C   s   s   H   e   i   g   h   t   =   c   a   n   v   a   s   .   s   t   y   l   e   .   h   e   i   g   h   t   ;   v   a   r       o   l   d   B   a   c   k   g   r   o   u   n   d   C   o   l   o   r   =   c   a   n   v   a   s   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   ;   v   a   r       o   l   d   D   o   c   u   m   e   n   t   B   a   c   k   g   r   o   u   n   d   C   o   l   o   r   =   d   o   c   u   m   e   n   t   .   b   o   d   y   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   ;   v   a   r       o   l   d   P   a   d   d   i   n   g   L   e   f   t   =   c   a   n   v   a   s   .   s   t   y   l   e   .   p   a   d   d   i   n   g   L   e   f   t   ;   v   a   r       o   l   d   P   a   d   d   i   n   g   R   i   g   h   t   =   c   a   n   v   a   s   .   s   t   y   l   e   .   p   a   d   d   i   n   g   R   i   g   h   t   ;   v   a   r       o   l   d   P   a   d   d   i   n   g   T   o   p   =   c   a   n   v   a   s   .   s   t   y   l   e   .   p   a   d   d   i   n   g   T   o   p   ;   v   a   r       o   l   d   P   a   d   d   i   n   g   B   o   t   t   o   m   =   c   a   n   v   a   s   .   s   t   y   l   e   .   p   a   d   d   i   n   g   B   o   t   t   o   m   ;   v   a   r       o   l   d   M   a   r   g   i   n   L   e   f   t   =   c   a   n   v   a   s   .   s   t   y   l   e   .   m   a   r   g   i   n   L   e   f   t   ;   v   a   r       o   l   d   M   a   r   g   i   n   R   i   g   h   t   =   c   a   n   v   a   s   .   s   t   y   l   e   .   m   a   r   g   i   n   R   i   g   h   t   ;   v   a   r       o   l   d   M   a   r   g   i   n   T   o   p   =   c   a   n   v   a   s   .   s   t   y   l   e   .   m   a   r   g   i   n   T   o   p   ;   v   a   r       o   l   d   M   a   r   g   i   n   B   o   t   t   o   m   =   c   a   n   v   a   s   .   s   t   y   l   e   .   m   a   r   g   i   n   B   o   t   t   o   m   ;   v   a   r       o   l   d   D   o   c   u   m   e   n   t   B   o   d   y   M   a   r   g   i   n   =   d   o   c   u   m   e   n   t   .   b   o   d   y   .   s   t   y   l   e   .   m   a   r   g   i   n   ;   v   a   r       o   l   d   D   o   c   u   m   e   n   t   O   v   e   r   f   l   o   w   =   d   o   c   u   m   e   n   t   .   d   o   c   u   m   e   n   t   E   l   e   m   e   n   t   .   s   t   y   l   e   .   o   v   e   r   f   l   o   w   ;   v   a   r       o   l   d   D   o   c   u   m   e   n   t   S   c   r   o   l   l   =   d   o   c   u   m   e   n   t   .   b   o   d   y   .   s   c   r   o   l   l   ;   v   a   r       o   l   d   I   m   a   g   e   R   e   n   d   e   r   i   n   g   =   c   a   n   v   a   s   .   s   t   y   l   e   .   i   m   a   g   e   R   e   n   d   e   r   i   n   g   ;   f   u   n   c   t   i   o   n       r   e   s   t   o   r   e   O   l   d   S   t   y   l   e   (   )   {   v   a   r       f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   =   d   o   c   u   m   e   n   t   .   f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   |   |   d   o   c   u   m   e   n   t   .   w   e   b   k   i   t   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   ;   i   f   (   !   f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   )   {   d   o   c   u   m   e   n   t   .   r   e   m   o   v   e   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   "   ,   r   e   s   t   o   r   e   O   l   d   S   t   y   l   e   )   ;   d   o   c   u   m   e   n   t   .   r   e   m   o   v   e   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   w   e   b   k   i   t   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   "   ,   r   e   s   t   o   r   e   O   l   d   S   t   y   l   e   )   ;   s   e   t   C   a   n   v   a   s   E   l   e   m   e   n   t   S   i   z   e   (   c   a   n   v   a   s   ,   o   l   d   W   i   d   t   h   ,   o   l   d   H   e   i   g   h   t   )   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   w   i   d   t   h   =   o   l   d   C   s   s   W   i   d   t   h   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   h   e   i   g   h   t   =   o   l   d   C   s   s   H   e   i   g   h   t   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   =   o   l   d   B   a   c   k   g   r   o   u   n   d   C   o   l   o   r   ;   i   f   (   !   o   l   d   D   o   c   u   m   e   n   t   B   a   c   k   g   r   o   u   n   d   C   o   l   o   r   )   d   o   c   u   m   e   n   t   .   b   o   d   y   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   =   "   w   h   i   t   e   "   ;   d   o   c   u   m   e   n   t   .   b   o   d   y   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   =   o   l   d   D   o   c   u   m   e   n   t   B   a   c   k   g   r   o   u   n   d   C   o   l   o   r   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   p   a   d   d   i   n   g   L   e   f   t   =   o   l   d   P   a   d   d   i   n   g   L   e   f   t   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   p   a   d   d   i   n   g   R   i   g   h   t   =   o   l   d   P   a   d   d   i   n   g   R   i   g   h   t   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   p   a   d   d   i   n   g   T   o   p   =   o   l   d   P   a   d   d   i   n   g   T   o   p   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   p   a   d   d   i   n   g   B   o   t   t   o   m   =   o   l   d   P   a   d   d   i   n   g   B   o   t   t   o   m   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   m   a   r   g   i   n   L   e   f   t   =   o   l   d   M   a   r   g   i   n   L   e   f   t   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   m   a   r   g   i   n   R   i   g   h   t   =   o   l   d   M   a   r   g   i   n   R   i   g   h   t   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   m   a   r   g   i   n   T   o   p   =   o   l   d   M   a   r   g   i   n   T   o   p   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   m   a   r   g   i   n   B   o   t   t   o   m   =   o   l   d   M   a   r   g   i   n   B   o   t   t   o   m   ;   d   o   c   u   m   e   n   t   .   b   o   d   y   .   s   t   y   l   e   .   m   a   r   g   i   n   =   o   l   d   D   o   c   u   m   e   n   t   B   o   d   y   M   a   r   g   i   n   ;   d   o   c   u   m   e   n   t   .   d   o   c   u   m   e   n   t   E   l   e   m   e   n   t   .   s   t   y   l   e   .   o   v   e   r   f   l   o   w   =   o   l   d   D   o   c   u   m   e   n   t   O   v   e   r   f   l   o   w   ;   d   o   c   u   m   e   n   t   .   b   o   d   y   .   s   c   r   o   l   l   =   o   l   d   D   o   c   u   m   e   n   t   S   c   r   o   l   l   ;   c   a   n   v   a   s   .   s   t   y   l   e   .   i   m   a   g   e   R   e   n   d   e   r   i   n   g   =   o   l   d   I   m   a   g   e   R   e   n   d   e   r   i   n   g   ;   i   f   (   c   a   n   v   a   s   .   G   L   c   t   x   O   b   j   e   c   t   )   c   a   n   v   a   s   .   G   L   c   t   x   O   b   j   e   c   t   .   G   L   c   t   x   .   v   i   e   w   p   o   r   t   (   0   ,   0   ,   o   l   d   W   i   d   t   h   ,   o   l   d   H   e   i   g   h   t   )   ;   i   f   (   c   u   r   r   e   n   t   F   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   .   c   a   n   v   a   s   R   e   s   i   z   e   d   C   a   l   l   b   a   c   k   )   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   u   r   r   e   n   t   F   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   .   c   a   n   v   a   s   R   e   s   i   z   e   d   C   a   l   l   b   a   c   k   )   (   3   7   ,   0   ,   c   u   r   r   e   n   t   F   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   .   c   a   n   v   a   s   R   e   s   i   z   e   d   C   a   l   l   b   a   c   k   U   s   e   r   D   a   t   a   )   }   }   }   d   o   c   u   m   e   n   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   "   ,   r   e   s   t   o   r   e   O   l   d   S   t   y   l   e   )   ;   d   o   c   u   m   e   n   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   w   e   b   k   i   t   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   "   ,   r   e   s   t   o   r   e   O   l   d   S   t   y   l   e   )   ;   r   e   t   u   r   n       r   e   s   t   o   r   e   O   l   d   S   t   y   l   e   }   ;   v   a   r       s   e   t   L   e   t   t   e   r   b   o   x   =   (   e   l   e   m   e   n   t   ,   t   o   p   B   o   t   t   o   m   ,   l   e   f   t   R   i   g   h   t   )   =   >   {   e   l   e   m   e   n   t   .   s   t   y   l   e   .   p   a   d   d   i   n   g   L   e   f   t   =   e   l   e   m   e   n   t   .   s   t   y   l   e   .   p   a   d   d   i   n   g   R   i   g   h   t   =   l   e   f   t   R   i   g   h   t   +   "   p   x   "   ;   e   l   e   m   e   n   t   .   s   t   y   l   e   .   p   a   d   d   i   n   g   T   o   p   =   e   l   e   m   e   n   t   .   s   t   y   l   e   .   p   a   d   d   i   n   g   B   o   t   t   o   m   =   t   o   p   B   o   t   t   o   m   +   "   p   x   "   }   ;   v   a   r       g   e   t   B   o   u   n   d   i   n   g   C   l   i   e   n   t   R   e   c   t   =   e   =   >   s   p   e   c   i   a   l   H   T   M   L   T   a   r   g   e   t   s   .   i   n   d   e   x   O   f   (   e   )   <   0   ?   e   .   g   e   t   B   o   u   n   d   i   n   g   C   l   i   e   n   t   R   e   c   t   (   )   :   {   l   e   f   t   :   0   ,   t   o   p   :   0   }   ;   v   a   r       J   S   E   v   e   n   t   s   _   r   e   s   i   z   e   C   a   n   v   a   s   F   o   r   F   u   l   l   s   c   r   e   e   n   =   (   t   a   r   g   e   t   ,   s   t   r   a   t   e   g   y   )   =   >   {   v   a   r       r   e   s   t   o   r   e   O   l   d   S   t   y   l   e   =   r   e   g   i   s   t   e   r   R   e   s   t   o   r   e   O   l   d   S   t   y   l   e   (   t   a   r   g   e   t   )   ;   v   a   r       c   s   s   W   i   d   t   h   =   s   t   r   a   t   e   g   y   .   s   o   f   t   F   u   l   l   s   c   r   e   e   n   ?   i   n   n   e   r   W   i   d   t   h   :   s   c   r   e   e   n   .   w   i   d   t   h   ;   v   a   r       c   s   s   H   e   i   g   h   t   =   s   t   r   a   t   e   g   y   .   s   o   f   t   F   u   l   l   s   c   r   e   e   n   ?   i   n   n   e   r   H   e   i   g   h   t   :   s   c   r   e   e   n   .   h   e   i   g   h   t   ;   v   a   r       r   e   c   t   =   g   e   t   B   o   u   n   d   i   n   g   C   l   i   e   n   t   R   e   c   t   (   t   a   r   g   e   t   )   ;   v   a   r       w   i   n   d   o   w   e   d   C   s   s   W   i   d   t   h   =   r   e   c   t   .   w   i   d   t   h   ;   v   a   r       w   i   n   d   o   w   e   d   C   s   s   H   e   i   g   h   t   =   r   e   c   t   .   h   e   i   g   h   t   ;   v   a   r       c   a   n   v   a   s   S   i   z   e   =   g   e   t   C   a   n   v   a   s   E   l   e   m   e   n   t   S   i   z   e   (   t   a   r   g   e   t   )   ;   v   a   r       w   i   n   d   o   w   e   d   R   t   t   W   i   d   t   h   =   c   a   n   v   a   s   S   i   z   e   [   0   ]   ;   v   a   r       w   i   n   d   o   w   e   d   R   t   t   H   e   i   g   h   t   =   c   a   n   v   a   s   S   i   z   e   [   1   ]   ;   i   f   (   s   t   r   a   t   e   g   y   .   s   c   a   l   e   M   o   d   e   =   =   3   )   {   s   e   t   L   e   t   t   e   r   b   o   x   (   t   a   r   g   e   t   ,   (   c   s   s   H   e   i   g   h   t   -   w   i   n   d   o   w   e   d   C   s   s   H   e   i   g   h   t   )   /   2   ,   (   c   s   s   W   i   d   t   h   -   w   i   n   d   o   w   e   d   C   s   s   W   i   d   t   h   )   /   2   )   ;   c   s   s   W   i   d   t   h   =   w   i   n   d   o   w   e   d   C   s   s   W   i   d   t   h   ;   c   s   s   H   e   i   g   h   t   =   w   i   n   d   o   w   e   d   C   s   s   H   e   i   g   h   t   }   e   l   s   e       i   f   (   s   t   r   a   t   e   g   y   .   s   c   a   l   e   M   o   d   e   =   =   2   )   {   i   f   (   c   s   s   W   i   d   t   h   *   w   i   n   d   o   w   e   d   R   t   t   H   e   i   g   h   t   <   w   i   n   d   o   w   e   d   R   t   t   W   i   d   t   h   *   c   s   s   H   e   i   g   h   t   )   {   v   a   r       d   e   s   i   r   e   d   C   s   s   H   e   i   g   h   t   =   w   i   n   d   o   w   e   d   R   t   t   H   e   i   g   h   t   *   c   s   s   W   i   d   t   h   /   w   i   n   d   o   w   e   d   R   t   t   W   i   d   t   h   ;   s   e   t   L   e   t   t   e   r   b   o   x   (   t   a   r   g   e   t   ,   (   c   s   s   H   e   i   g   h   t   -   d   e   s   i   r   e   d   C   s   s   H   e   i   g   h   t   )   /   2   ,   0   )   ;   c   s   s   H   e   i   g   h   t   =   d   e   s   i   r   e   d   C   s   s   H   e   i   g   h   t   }   e   l   s   e   {   v   a   r       d   e   s   i   r   e   d   C   s   s   W   i   d   t   h   =   w   i   n   d   o   w   e   d   R   t   t   W   i   d   t   h   *   c   s   s   H   e   i   g   h   t   /   w   i   n   d   o   w   e   d   R   t   t   H   e   i   g   h   t   ;   s   e   t   L   e   t   t   e   r   b   o   x   (   t   a   r   g   e   t   ,   0   ,   (   c   s   s   W   i   d   t   h   -   d   e   s   i   r   e   d   C   s   s   W   i   d   t   h   )   /   2   )   ;   c   s   s   W   i   d   t   h   =   d   e   s   i   r   e   d   C   s   s   W   i   d   t   h   }   }   t   a   r   g   e   t   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   |   |   =   "   b   l   a   c   k   "   ;   d   o   c   u   m   e   n   t   .   b   o   d   y   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   |   |   =   "   b   l   a   c   k   "   ;   t   a   r   g   e   t   .   s   t   y   l   e   .   w   i   d   t   h   =   c   s   s   W   i   d   t   h   +   "   p   x   "   ;   t   a   r   g   e   t   .   s   t   y   l   e   .   h   e   i   g   h   t   =   c   s   s   H   e   i   g   h   t   +   "   p   x   "   ;   i   f   (   s   t   r   a   t   e   g   y   .   f   i   l   t   e   r   i   n   g   M   o   d   e   =   =   1   )   {   t   a   r   g   e   t   .   s   t   y   l   e   .   i   m   a   g   e   R   e   n   d   e   r   i   n   g   =   "   o   p   t   i   m   i   z   e   S   p   e   e   d   "   ;   t   a   r   g   e   t   .   s   t   y   l   e   .   i   m   a   g   e   R   e   n   d   e   r   i   n   g   =   "   -   m   o   z   -   c   r   i   s   p   -   e   d   g   e   s   "   ;   t   a   r   g   e   t   .   s   t   y   l   e   .   i   m   a   g   e   R   e   n   d   e   r   i   n   g   =   "   -   o   -   c   r   i   s   p   -   e   d   g   e   s   "   ;   t   a   r   g   e   t   .   s   t   y   l   e   .   i   m   a   g   e   R   e   n   d   e   r   i   n   g   =   "   -   w   e   b   k   i   t   -   o   p   t   i   m   i   z   e   -   c   o   n   t   r   a   s   t   "   ;   t   a   r   g   e   t   .   s   t   y   l   e   .   i   m   a   g   e   R   e   n   d   e   r   i   n   g   =   "   o   p   t   i   m   i   z   e   -   c   o   n   t   r   a   s   t   "   ;   t   a   r   g   e   t   .   s   t   y   l   e   .   i   m   a   g   e   R   e   n   d   e   r   i   n   g   =   "   c   r   i   s   p   -   e   d   g   e   s   "   ;   t   a   r   g   e   t   .   s   t   y   l   e   .   i   m   a   g   e   R   e   n   d   e   r   i   n   g   =   "   p   i   x   e   l   a   t   e   d   "   }   v   a   r       d   p   i   S   c   a   l   e   =   s   t   r   a   t   e   g   y   .   c   a   n   v   a   s   R   e   s   o   l   u   t   i   o   n   S   c   a   l   e   M   o   d   e   =   =   2   ?   d   e   v   i   c   e   P   i   x   e   l   R   a   t   i   o   :   1   ;   i   f   (   s   t   r   a   t   e   g   y   .   c   a   n   v   a   s   R   e   s   o   l   u   t   i   o   n   S   c   a   l   e   M   o   d   e   !   =   0   )   {   v   a   r       n   e   w   W   i   d   t   h   =   c   s   s   W   i   d   t   h   *   d   p   i   S   c   a   l   e   |   0   ;   v   a   r       n   e   w   H   e   i   g   h   t   =   c   s   s   H   e   i   g   h   t   *   d   p   i   S   c   a   l   e   |   0   ;   s   e   t   C   a   n   v   a   s   E   l   e   m   e   n   t   S   i   z   e   (   t   a   r   g   e   t   ,   n   e   w   W   i   d   t   h   ,   n   e   w   H   e   i   g   h   t   )   ;   i   f   (   t   a   r   g   e   t   .   G   L   c   t   x   O   b   j   e   c   t   )   t   a   r   g   e   t   .   G   L   c   t   x   O   b   j   e   c   t   .   G   L   c   t   x   .   v   i   e   w   p   o   r   t   (   0   ,   0   ,   n   e   w   W   i   d   t   h   ,   n   e   w   H   e   i   g   h   t   )   }   r   e   t   u   r   n       r   e   s   t   o   r   e   O   l   d   S   t   y   l   e   }   ;   v   a   r       J   S   E   v   e   n   t   s   _   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   =   (   t   a   r   g   e   t   ,   s   t   r   a   t   e   g   y   )   =   >   {   i   f   (   s   t   r   a   t   e   g   y   .   s   c   a   l   e   M   o   d   e   !   =   0   |   |   s   t   r   a   t   e   g   y   .   c   a   n   v   a   s   R   e   s   o   l   u   t   i   o   n   S   c   a   l   e   M   o   d   e   !   =   0   )   {   J   S   E   v   e   n   t   s   _   r   e   s   i   z   e   C   a   n   v   a   s   F   o   r   F   u   l   l   s   c   r   e   e   n   (   t   a   r   g   e   t   ,   s   t   r   a   t   e   g   y   )   }   i   f   (   t   a   r   g   e   t   .   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   )   {   t   a   r   g   e   t   .   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   (   )   }   e   l   s   e       i   f   (   t   a   r   g   e   t   .   w   e   b   k   i   t   R   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   )   {   t   a   r   g   e   t   .   w   e   b   k   i   t   R   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   (   E   l   e   m   e   n   t   .   A   L   L   O   W   _   K   E   Y   B   O   A   R   D   _   I   N   P   U   T   )   }   e   l   s   e   {   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   f   u   l   l   s   c   r   e   e   n   E   n   a   b   l   e   d   (   )   ?   -   3   :   -   1   }   c   u   r   r   e   n   t   F   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   =   s   t   r   a   t   e   g   y   ;   i   f   (   s   t   r   a   t   e   g   y   .   c   a   n   v   a   s   R   e   s   i   z   e   d   C   a   l   l   b   a   c   k   )   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   s   t   r   a   t   e   g   y   .   c   a   n   v   a   s   R   e   s   i   z   e   d   C   a   l   l   b   a   c   k   )   (   3   7   ,   0   ,   s   t   r   a   t   e   g   y   .   c   a   n   v   a   s   R   e   s   i   z   e   d   C   a   l   l   b   a   c   k   U   s   e   r   D   a   t   a   )   }   r   e   t   u   r   n       0   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   e   x   i   t   _   f   u   l   l   s   c   r   e   e   n   =   (   )   =   >   {   i   f   (   !   J   S   E   v   e   n   t   s   .   f   u   l   l   s   c   r   e   e   n   E   n   a   b   l   e   d   (   )   )   r   e   t   u   r   n   -   1   ;   J   S   E   v   e   n   t   s   .   r   e   m   o   v   e   D   e   f   e   r   r   e   d   C   a   l   l   s   (   J   S   E   v   e   n   t   s   _   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   )   ;   v   a   r       d   =   s   p   e   c   i   a   l   H   T   M   L   T   a   r   g   e   t   s   [   1   ]   ;   i   f   (   d   .   e   x   i   t   F   u   l   l   s   c   r   e   e   n   )   {   d   .   f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   &   &   d   .   e   x   i   t   F   u   l   l   s   c   r   e   e   n   (   )   }   e   l   s   e       i   f   (   d   .   w   e   b   k   i   t   E   x   i   t   F   u   l   l   s   c   r   e   e   n   )   {   d   .   w   e   b   k   i   t   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   &   &   d   .   w   e   b   k   i   t   E   x   i   t   F   u   l   l   s   c   r   e   e   n   (   )   }   e   l   s   e   {   r   e   t   u   r   n   -   1   }   r   e   t   u   r   n       0   }   ;   v   a   r       r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   =   t   a   r   g   e   t   =   >   {   i   f   (   t   a   r   g   e   t   .   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   )   {   t   a   r   g   e   t   .   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   (   )   }   e   l   s   e   {   i   f   (   d   o   c   u   m   e   n   t   .   b   o   d   y   .   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   )   {   r   e   t   u   r   n   -   3   }   r   e   t   u   r   n   -   1   }   r   e   t   u   r   n       0   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   e   x   i   t   _   p   o   i   n   t   e   r   l   o   c   k   =   (   )   =   >   {   J   S   E   v   e   n   t   s   .   r   e   m   o   v   e   D   e   f   e   r   r   e   d   C   a   l   l   s   (   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   )   ;   i   f   (   d   o   c   u   m   e   n   t   .   e   x   i   t   P   o   i   n   t   e   r   L   o   c   k   )   {   d   o   c   u   m   e   n   t   .   e   x   i   t   P   o   i   n   t   e   r   L   o   c   k   (   )   }   e   l   s   e   {   r   e   t   u   r   n   -   1   }   r   e   t   u   r   n       0   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   d   e   v   i   c   e   _   p   i   x   e   l   _   r   a   t   i   o   =   (   )   =   >   d   e   v   i   c   e   P   i   x   e   l   R   a   t   i   o   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   e   l   e   m   e   n   t   _   c   s   s   _   s   i   z   e   (   t   a   r   g   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   w   i   d   t   h   >   >   >   =   0   ;   h   e   i   g   h   t   >   >   >   =   0   ;   t   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   i   f   (   !   t   a   r   g   e   t   )   r   e   t   u   r   n   -   4   ;   v   a   r       r   e   c   t   =   g   e   t   B   o   u   n   d   i   n   g   C   l   i   e   n   t   R   e   c   t   (   t   a   r   g   e   t   )   ;   H   E   A   P   F   6   4   [   w   i   d   t   h   >   >   >   3   >   >   >   0   ]   =   r   e   c   t   .   w   i   d   t   h   ;   H   E   A   P   F   6   4   [   h   e   i   g   h   t   >   >   >   3   >   >   >   0   ]   =   r   e   c   t   .   h   e   i   g   h   t   ;   r   e   t   u   r   n       0   }   v   a   r       f   i   l   l   G   a   m   e   p   a   d   E   v   e   n   t   D   a   t   a   =   (   e   v   e   n   t   S   t   r   u   c   t   ,   e   )   =   >   {   H   E   A   P   F   6   4   [   e   v   e   n   t   S   t   r   u   c   t   >   >   >   3   >   >   >   0   ]   =   e   .   t   i   m   e   s   t   a   m   p   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   e   .   a   x   e   s   .   l   e   n   g   t   h   ;   +   +   i   )   {   H   E   A   P   F   6   4   [   e   v   e   n   t   S   t   r   u   c   t   +   i   *   8   +   1   6   >   >   >   3   >   >   >   0   ]   =   e   .   a   x   e   s   [   i   ]   }   f   o   r   (   v   a   r       i   =   0   ;   i   <   e   .   b   u   t   t   o   n   s   .   l   e   n   g   t   h   ;   +   +   i   )   {   i   f   (   t   y   p   e   o   f       e   .   b   u   t   t   o   n   s   [   i   ]   =   =   "   o   b   j   e   c   t   "   )   {   H   E   A   P   F   6   4   [   e   v   e   n   t   S   t   r   u   c   t   +   i   *   8   +   5   2   8   >   >   >   3   >   >   >   0   ]   =   e   .   b   u   t   t   o   n   s   [   i   ]   .   v   a   l   u   e   }   e   l   s   e   {   H   E   A   P   F   6   4   [   e   v   e   n   t   S   t   r   u   c   t   +   i   *   8   +   5   2   8   >   >   >   3   >   >   >   0   ]   =   e   .   b   u   t   t   o   n   s   [   i   ]   }   }   f   o   r   (   v   a   r       i   =   0   ;   i   <   e   .   b   u   t   t   o   n   s   .   l   e   n   g   t   h   ;   +   +   i   )   {   i   f   (   t   y   p   e   o   f       e   .   b   u   t   t   o   n   s   [   i   ]   =   =   "   o   b   j   e   c   t   "   )   {   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   +   i   +   1   0   4   0   >   >   >   0   ]   =   e   .   b   u   t   t   o   n   s   [   i   ]   .   p   r   e   s   s   e   d   }   e   l   s   e   {   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   +   i   +   1   0   4   0   >   >   >   0   ]   =   e   .   b   u   t   t   o   n   s   [   i   ]   =   =   1   }   }   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   +   1   1   0   4   >   >   >   0   ]   =   e   .   c   o   n   n   e   c   t   e   d   ;   H   E   A   P   3   2   [   e   v   e   n   t   S   t   r   u   c   t   +   1   1   0   8   >   >   >   2   >   >   >   0   ]   =   e   .   i   n   d   e   x   ;   H   E   A   P   3   2   [   e   v   e   n   t   S   t   r   u   c   t   +   8   >   >   >   2   >   >   >   0   ]   =   e   .   a   x   e   s   .   l   e   n   g   t   h   ;   H   E   A   P   3   2   [   e   v   e   n   t   S   t   r   u   c   t   +   1   2   >   >   >   2   >   >   >   0   ]   =   e   .   b   u   t   t   o   n   s   .   l   e   n   g   t   h   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   e   .   i   d   ,   e   v   e   n   t   S   t   r   u   c   t   +   1   1   1   2   ,   6   4   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   e   .   m   a   p   p   i   n   g   ,   e   v   e   n   t   S   t   r   u   c   t   +   1   1   7   6   ,   6   4   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   g   a   m   e   p   a   d   _   s   t   a   t   u   s   (   i   n   d   e   x   ,   g   a   m   e   p   a   d   S   t   a   t   e   )   {   g   a   m   e   p   a   d   S   t   a   t   e   >   >   >   =   0   ;   i   f   (   i   n   d   e   x   <   0   |   |   i   n   d   e   x   >   =   J   S   E   v   e   n   t   s   .   l   a   s   t   G   a   m   e   p   a   d   S   t   a   t   e   .   l   e   n   g   t   h   )   r   e   t   u   r   n   -   5   ;   i   f   (   !   J   S   E   v   e   n   t   s   .   l   a   s   t   G   a   m   e   p   a   d   S   t   a   t   e   [   i   n   d   e   x   ]   )   r   e   t   u   r   n   -   7   ;   f   i   l   l   G   a   m   e   p   a   d   E   v   e   n   t   D   a   t   a   (   g   a   m   e   p   a   d   S   t   a   t   e   ,   J   S   E   v   e   n   t   s   .   l   a   s   t   G   a   m   e   p   a   d   S   t   a   t   e   [   i   n   d   e   x   ]   )   ;   r   e   t   u   r   n       0   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   n   u   m   _   g   a   m   e   p   a   d   s   =   (   )   =   >   J   S   E   v   e   n   t   s   .   l   a   s   t   G   a   m   e   p   a   d   S   t   a   t   e   .   l   e   n   g   t   h   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   s   c   r   e   e   n   _   s   i   z   e   (   w   i   d   t   h   ,   h   e   i   g   h   t   )   {   w   i   d   t   h   >   >   >   =   0   ;   h   e   i   g   h   t   >   >   >   =   0   ;   H   E   A   P   3   2   [   w   i   d   t   h   >   >   >   2   >   >   >   0   ]   =   s   c   r   e   e   n   .   w   i   d   t   h   ;   H   E   A   P   3   2   [   h   e   i   g   h   t   >   >   >   2   >   >   >   0   ]   =   s   c   r   e   e   n   .   h   e   i   g   h   t   }   v   a   r       _   g   l   A   c   t   i   v   e   T   e   x   t   u   r   e   =   x   0   =   >   G   L   c   t   x   .   a   c   t   i   v   e   T   e   x   t   u   r   e   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   A   c   t   i   v   e   T   e   x   t   u   r   e   =   _   g   l   A   c   t   i   v   e   T   e   x   t   u   r   e   ;   v   a   r       _   g   l   A   t   t   a   c   h   S   h   a   d   e   r   =   (   p   r   o   g   r   a   m   ,   s   h   a   d   e   r   )   =   >   {   G   L   c   t   x   .   a   t   t   a   c   h   S   h   a   d   e   r   (   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ,   G   L   .   s   h   a   d   e   r   s   [   s   h   a   d   e   r   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   A   t   t   a   c   h   S   h   a   d   e   r   =   _   g   l   A   t   t   a   c   h   S   h   a   d   e   r   ;   v   a   r       _   g   l   B   e   g   i   n   Q   u   e   r   y   =   (   t   a   r   g   e   t   ,   i   d   )   =   >   {   G   L   c   t   x   .   b   e   g   i   n   Q   u   e   r   y   (   t   a   r   g   e   t   ,   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   e   g   i   n   Q   u   e   r   y   =   _   g   l   B   e   g   i   n   Q   u   e   r   y   ;   v   a   r       _   g   l   B   e   g   i   n   Q   u   e   r   y   E   X   T   =   (   t   a   r   g   e   t   ,   i   d   )   =   >   {   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   [   "   b   e   g   i   n   Q   u   e   r   y   E   X   T   "   ]   (   t   a   r   g   e   t   ,   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   e   g   i   n   Q   u   e   r   y   E   X   T   =   _   g   l   B   e   g   i   n   Q   u   e   r   y   E   X   T   ;   v   a   r       _   g   l   B   e   g   i   n   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   x   0   =   >   G   L   c   t   x   .   b   e   g   i   n   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   e   g   i   n   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   _   g   l   B   e   g   i   n   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ;   f   u   n   c   t   i   o   n       _   g   l   B   i   n   d   A   t   t   r   i   b   L   o   c   a   t   i   o   n   (   p   r   o   g   r   a   m   ,   i   n   d   e   x   ,   n   a   m   e   )   {   n   a   m   e   >   >   >   =   0   ;   G   L   c   t   x   .   b   i   n   d   A   t   t   r   i   b   L   o   c   a   t   i   o   n   (   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ,   i   n   d   e   x   ,   U   T   F   8   T   o   S   t   r   i   n   g   (   n   a   m   e   )   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   A   t   t   r   i   b   L   o   c   a   t   i   o   n   =   _   g   l   B   i   n   d   A   t   t   r   i   b   L   o   c   a   t   i   o   n   ;   v   a   r       _   g   l   B   i   n   d   B   u   f   f   e   r   =   (   t   a   r   g   e   t   ,   b   u   f   f   e   r   )   =   >   {   i   f   (   b   u   f   f   e   r   &   &   !   G   L   .   b   u   f   f   e   r   s   [   b   u   f   f   e   r   ]   )   {   v   a   r       b   =   G   L   c   t   x   .   c   r   e   a   t   e   B   u   f   f   e   r   (   )   ;   b   .   n   a   m   e   =   b   u   f   f   e   r   ;   G   L   .   b   u   f   f   e   r   s   [   b   u   f   f   e   r   ]   =   b   }   i   f   (   t   a   r   g   e   t   =   =   3   4   9   6   2   )   {   G   L   c   t   x   .   c   u   r   r   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   =   b   u   f   f   e   r   }   e   l   s   e       i   f   (   t   a   r   g   e   t   =   =   3   4   9   6   3   )   {   G   L   c   t   x   .   c   u   r   r   e   n   t   E   l   e   m   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   =   b   u   f   f   e   r   }   i   f   (   t   a   r   g   e   t   =   =   3   5   0   5   1   )   {   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   P   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   =   b   u   f   f   e   r   }   e   l   s   e       i   f   (   t   a   r   g   e   t   =   =   3   5   0   5   2   )   {   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   =   b   u   f   f   e   r   }   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   t   a   r   g   e   t   ,   G   L   .   b   u   f   f   e   r   s   [   b   u   f   f   e   r   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   B   u   f   f   e   r   =   _   g   l   B   i   n   d   B   u   f   f   e   r   ;   v   a   r       _   g   l   B   i   n   d   B   u   f   f   e   r   B   a   s   e   =   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   b   u   f   f   e   r   )   =   >   {   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   B   a   s   e   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   G   L   .   b   u   f   f   e   r   s   [   b   u   f   f   e   r   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   B   u   f   f   e   r   B   a   s   e   =   _   g   l   B   i   n   d   B   u   f   f   e   r   B   a   s   e   ;   f   u   n   c   t   i   o   n       _   g   l   B   i   n   d   B   u   f   f   e   r   R   a   n   g   e   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   b   u   f   f   e   r   ,   o   f   f   s   e   t   ,   p   t   r   s   i   z   e   )   {   o   f   f   s   e   t   >   >   >   =   0   ;   p   t   r   s   i   z   e   >   >   >   =   0   ;   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   R   a   n   g   e   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   G   L   .   b   u   f   f   e   r   s   [   b   u   f   f   e   r   ]   ,   o   f   f   s   e   t   ,   p   t   r   s   i   z   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   B   u   f   f   e   r   R   a   n   g   e   =   _   g   l   B   i   n   d   B   u   f   f   e   r   R   a   n   g   e   ;   v   a   r       _   g   l   B   i   n   d   F   r   a   m   e   b   u   f   f   e   r   =   (   t   a   r   g   e   t   ,   f   r   a   m   e   b   u   f   f   e   r   )   =   >   {   G   L   c   t   x   .   b   i   n   d   F   r   a   m   e   b   u   f   f   e   r   (   t   a   r   g   e   t   ,   G   L   .   f   r   a   m   e   b   u   f   f   e   r   s   [   f   r   a   m   e   b   u   f   f   e   r   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   F   r   a   m   e   b   u   f   f   e   r   =   _   g   l   B   i   n   d   F   r   a   m   e   b   u   f   f   e   r   ;   v   a   r       _   g   l   B   i   n   d   R   e   n   d   e   r   b   u   f   f   e   r   =   (   t   a   r   g   e   t   ,   r   e   n   d   e   r   b   u   f   f   e   r   )   =   >   {   G   L   c   t   x   .   b   i   n   d   R   e   n   d   e   r   b   u   f   f   e   r   (   t   a   r   g   e   t   ,   G   L   .   r   e   n   d   e   r   b   u   f   f   e   r   s   [   r   e   n   d   e   r   b   u   f   f   e   r   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   R   e   n   d   e   r   b   u   f   f   e   r   =   _   g   l   B   i   n   d   R   e   n   d   e   r   b   u   f   f   e   r   ;   v   a   r       _   g   l   B   i   n   d   S   a   m   p   l   e   r   =   (   u   n   i   t   ,   s   a   m   p   l   e   r   )   =   >   {   G   L   c   t   x   .   b   i   n   d   S   a   m   p   l   e   r   (   u   n   i   t   ,   G   L   .   s   a   m   p   l   e   r   s   [   s   a   m   p   l   e   r   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   S   a   m   p   l   e   r   =   _   g   l   B   i   n   d   S   a   m   p   l   e   r   ;   v   a   r       _   g   l   B   i   n   d   T   e   x   t   u   r   e   =   (   t   a   r   g   e   t   ,   t   e   x   t   u   r   e   )   =   >   {   G   L   c   t   x   .   b   i   n   d   T   e   x   t   u   r   e   (   t   a   r   g   e   t   ,   G   L   .   t   e   x   t   u   r   e   s   [   t   e   x   t   u   r   e   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   T   e   x   t   u   r   e   =   _   g   l   B   i   n   d   T   e   x   t   u   r   e   ;   v   a   r       _   g   l   B   i   n   d   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   (   t   a   r   g   e   t   ,   i   d   )   =   >   {   G   L   c   t   x   .   b   i   n   d   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   (   t   a   r   g   e   t   ,   G   L   .   t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   [   i   d   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   _   g   l   B   i   n   d   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ;   v   a   r       _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   =   v   a   o   =   >   {   G   L   c   t   x   .   b   i   n   d   V   e   r   t   e   x   A   r   r   a   y   (   G   L   .   v   a   o   s   [   v   a   o   ]   )   ;   v   a   r       i   b   o   =   G   L   c   t   x   .   g   e   t   P   a   r   a   m   e   t   e   r   (   3   4   9   6   5   )   ;   G   L   c   t   x   .   c   u   r   r   e   n   t   E   l   e   m   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   =   i   b   o   ?   i   b   o   .   n   a   m   e   |   0   :   0   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   =   _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   ;   v   a   r       _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   O   E   S   =   _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   O   E   S   =   _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   O   E   S   ;   v   a   r       _   g   l   B   l   e   n   d   C   o   l   o   r   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   =   >   G   L   c   t   x   .   b   l   e   n   d   C   o   l   o   r   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   C   o   l   o   r   =   _   g   l   B   l   e   n   d   C   o   l   o   r   ;   v   a   r       _   g   l   B   l   e   n   d   E   q   u   a   t   i   o   n   =   x   0   =   >   G   L   c   t   x   .   b   l   e   n   d   E   q   u   a   t   i   o   n   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   E   q   u   a   t   i   o   n   =   _   g   l   B   l   e   n   d   E   q   u   a   t   i   o   n   ;   v   a   r       _   g   l   B   l   e   n   d   E   q   u   a   t   i   o   n   S   e   p   a   r   a   t   e   =   (   x   0   ,   x   1   )   =   >   G   L   c   t   x   .   b   l   e   n   d   E   q   u   a   t   i   o   n   S   e   p   a   r   a   t   e   (   x   0   ,   x   1   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   E   q   u   a   t   i   o   n   S   e   p   a   r   a   t   e   =   _   g   l   B   l   e   n   d   E   q   u   a   t   i   o   n   S   e   p   a   r   a   t   e   ;   v   a   r       _   g   l   B   l   e   n   d   F   u   n   c   =   (   x   0   ,   x   1   )   =   >   G   L   c   t   x   .   b   l   e   n   d   F   u   n   c   (   x   0   ,   x   1   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   F   u   n   c   =   _   g   l   B   l   e   n   d   F   u   n   c   ;   v   a   r       _   g   l   B   l   e   n   d   F   u   n   c   S   e   p   a   r   a   t   e   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   =   >   G   L   c   t   x   .   b   l   e   n   d   F   u   n   c   S   e   p   a   r   a   t   e   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   F   u   n   c   S   e   p   a   r   a   t   e   =   _   g   l   B   l   e   n   d   F   u   n   c   S   e   p   a   r   a   t   e   ;   v   a   r       _   g   l   B   l   i   t   F   r   a   m   e   b   u   f   f   e   r   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   ,   x   5   ,   x   6   ,   x   7   ,   x   8   ,   x   9   )   =   >   G   L   c   t   x   .   b   l   i   t   F   r   a   m   e   b   u   f   f   e   r   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   ,   x   5   ,   x   6   ,   x   7   ,   x   8   ,   x   9   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   i   t   F   r   a   m   e   b   u   f   f   e   r   =   _   g   l   B   l   i   t   F   r   a   m   e   b   u   f   f   e   r   ;   f   u   n   c   t   i   o   n       _   g   l   B   u   f   f   e   r   D   a   t   a   (   t   a   r   g   e   t   ,   s   i   z   e   ,   d   a   t   a   ,   u   s   a   g   e   )   {   s   i   z   e   >   >   >   =   0   ;   d   a   t   a   >   >   >   =   0   ;   G   L   c   t   x   .   b   u   f   f   e   r   D   a   t   a   (   t   a   r   g   e   t   ,   d   a   t   a   ?   H   E   A   P   U   8   .   s   u   b   a   r   r   a   y   (   d   a   t   a   >   >   >   0   ,   d   a   t   a   +   s   i   z   e   >   >   >   0   )   :   s   i   z   e   ,   u   s   a   g   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   u   f   f   e   r   D   a   t   a   =   _   g   l   B   u   f   f   e   r   D   a   t   a   ;   f   u   n   c   t   i   o   n       _   g   l   B   u   f   f   e   r   S   u   b   D   a   t   a   (   t   a   r   g   e   t   ,   o   f   f   s   e   t   ,   s   i   z   e   ,   d   a   t   a   )   {   o   f   f   s   e   t   >   >   >   =   0   ;   s   i   z   e   >   >   >   =   0   ;   d   a   t   a   >   >   >   =   0   ;   G   L   c   t   x   .   b   u   f   f   e   r   S   u   b   D   a   t   a   (   t   a   r   g   e   t   ,   o   f   f   s   e   t   ,   H   E   A   P   U   8   .   s   u   b   a   r   r   a   y   (   d   a   t   a   >   >   >   0   ,   d   a   t   a   +   s   i   z   e   >   >   >   0   )   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   u   f   f   e   r   S   u   b   D   a   t   a   =   _   g   l   B   u   f   f   e   r   S   u   b   D   a   t   a   ;   v   a   r       _   g   l   C   h   e   c   k   F   r   a   m   e   b   u   f   f   e   r   S   t   a   t   u   s   =   x   0   =   >   G   L   c   t   x   .   c   h   e   c   k   F   r   a   m   e   b   u   f   f   e   r   S   t   a   t   u   s   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   h   e   c   k   F   r   a   m   e   b   u   f   f   e   r   S   t   a   t   u   s   =   _   g   l   C   h   e   c   k   F   r   a   m   e   b   u   f   f   e   r   S   t   a   t   u   s   ;   v   a   r       _   g   l   C   l   e   a   r   =   x   0   =   >   G   L   c   t   x   .   c   l   e   a   r   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   =   _   g   l   C   l   e   a   r   ;   v   a   r       _   g   l   C   l   e   a   r   B   u   f   f   e   r   f   i   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   =   >   G   L   c   t   x   .   c   l   e   a   r   B   u   f   f   e   r   f   i   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   B   u   f   f   e   r   f   i   =   _   g   l   C   l   e   a   r   B   u   f   f   e   r   f   i   ;   f   u   n   c   t   i   o   n       _   g   l   C   l   e   a   r   B   u   f   f   e   r   f   v   (   b   u   f   f   e   r   ,   d   r   a   w   b   u   f   f   e   r   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   G   L   c   t   x   .   c   l   e   a   r   B   u   f   f   e   r   f   v   (   b   u   f   f   e   r   ,   d   r   a   w   b   u   f   f   e   r   ,   H   E   A   P   F   3   2   ,   v   a   l   u   e   >   >   >   2   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   B   u   f   f   e   r   f   v   =   _   g   l   C   l   e   a   r   B   u   f   f   e   r   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   C   l   e   a   r   B   u   f   f   e   r   i   v   (   b   u   f   f   e   r   ,   d   r   a   w   b   u   f   f   e   r   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   G   L   c   t   x   .   c   l   e   a   r   B   u   f   f   e   r   i   v   (   b   u   f   f   e   r   ,   d   r   a   w   b   u   f   f   e   r   ,   H   E   A   P   3   2   ,   v   a   l   u   e   >   >   >   2   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   B   u   f   f   e   r   i   v   =   _   g   l   C   l   e   a   r   B   u   f   f   e   r   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   C   l   e   a   r   B   u   f   f   e   r   u   i   v   (   b   u   f   f   e   r   ,   d   r   a   w   b   u   f   f   e   r   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   G   L   c   t   x   .   c   l   e   a   r   B   u   f   f   e   r   u   i   v   (   b   u   f   f   e   r   ,   d   r   a   w   b   u   f   f   e   r   ,   H   E   A   P   U   3   2   ,   v   a   l   u   e   >   >   >   2   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   B   u   f   f   e   r   u   i   v   =   _   g   l   C   l   e   a   r   B   u   f   f   e   r   u   i   v   ;   v   a   r       _   g   l   C   l   e   a   r   C   o   l   o   r   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   =   >   G   L   c   t   x   .   c   l   e   a   r   C   o   l   o   r   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   C   o   l   o   r   =   _   g   l   C   l   e   a   r   C   o   l   o   r   ;   v   a   r       _   g   l   C   l   e   a   r   D   e   p   t   h   f   =   x   0   =   >   G   L   c   t   x   .   c   l   e   a   r   D   e   p   t   h   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   D   e   p   t   h   f   =   _   g   l   C   l   e   a   r   D   e   p   t   h   f   ;   v   a   r       _   g   l   C   l   e   a   r   S   t   e   n   c   i   l   =   x   0   =   >   G   L   c   t   x   .   c   l   e   a   r   S   t   e   n   c   i   l   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   S   t   e   n   c   i   l   =   _   g   l   C   l   e   a   r   S   t   e   n   c   i   l   ;   f   u   n   c   t   i   o   n       _   g   l   C   l   i   e   n   t   W   a   i   t   S   y   n   c   (   s   y   n   c   ,   f   l   a   g   s   ,   t   i   m   e   o   u   t   )   {   s   y   n   c   >   >   >   =   0   ;   t   i   m   e   o   u   t   =   N   u   m   b   e   r   (   t   i   m   e   o   u   t   )   ;   r   e   t   u   r   n       G   L   c   t   x   .   c   l   i   e   n   t   W   a   i   t   S   y   n   c   (   G   L   .   s   y   n   c   s   [   s   y   n   c   ]   ,   f   l   a   g   s   ,   t   i   m   e   o   u   t   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   i   e   n   t   W   a   i   t   S   y   n   c   =   _   g   l   C   l   i   e   n   t   W   a   i   t   S   y   n   c   ;   v   a   r       _   g   l   C   l   i   p   C   o   n   t   r   o   l   E   X   T   =   (   o   r   i   g   i   n   ,   d   e   p   t   h   )   =   >   {   G   L   c   t   x   .   e   x   t   C   l   i   p   C   o   n   t   r   o   l   [   "   c   l   i   p   C   o   n   t   r   o   l   E   X   T   "   ]   (   o   r   i   g   i   n   ,   d   e   p   t   h   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   i   p   C   o   n   t   r   o   l   E   X   T   =   _   g   l   C   l   i   p   C   o   n   t   r   o   l   E   X   T   ;   v   a   r       _   g   l   C   o   l   o   r   M   a   s   k   =   (   r   e   d   ,   g   r   e   e   n   ,   b   l   u   e   ,   a   l   p   h   a   )   =   >   {   G   L   c   t   x   .   c   o   l   o   r   M   a   s   k   (   !   !   r   e   d   ,   !   !   g   r   e   e   n   ,   !   !   b   l   u   e   ,   !   !   a   l   p   h   a   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   l   o   r   M   a   s   k   =   _   g   l   C   o   l   o   r   M   a   s   k   ;   v   a   r       _   g   l   C   o   m   p   i   l   e   S   h   a   d   e   r   =   s   h   a   d   e   r   =   >   {   G   L   c   t   x   .   c   o   m   p   i   l   e   S   h   a   d   e   r   (   G   L   .   s   h   a   d   e   r   s   [   s   h   a   d   e   r   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   m   p   i   l   e   S   h   a   d   e   r   =   _   g   l   C   o   m   p   i   l   e   S   h   a   d   e   r   ;   f   u   n   c   t   i   o   n       _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   b   o   r   d   e   r   ,   i   m   a   g   e   S   i   z   e   ,   d   a   t   a   )   {   d   a   t   a   >   >   >   =   0   ;   i   f   (   t   r   u   e   )   {   i   f   (   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   |   |   !   i   m   a   g   e   S   i   z   e   )   {   G   L   c   t   x   .   c   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   b   o   r   d   e   r   ,   i   m   a   g   e   S   i   z   e   ,   d   a   t   a   )   ;   r   e   t   u   r   n   }   }   G   L   c   t   x   .   c   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   b   o   r   d   e   r   ,   H   E   A   P   U   8   .   s   u   b   a   r   r   a   y   (   d   a   t   a   >   >   >   0   ,   d   a   t   a   +   i   m   a   g   e   S   i   z   e   >   >   >   0   )   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   2   D   =   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   2   D   ;   f   u   n   c   t   i   o   n       _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   b   o   r   d   e   r   ,   i   m   a   g   e   S   i   z   e   ,   d   a   t   a   )   {   d   a   t   a   >   >   >   =   0   ;   i   f   (   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   G   L   c   t   x   .   c   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   b   o   r   d   e   r   ,   i   m   a   g   e   S   i   z   e   ,   d   a   t   a   )   }   e   l   s   e   {   G   L   c   t   x   .   c   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   b   o   r   d   e   r   ,   H   E   A   P   U   8   ,   d   a   t   a   ,   i   m   a   g   e   S   i   z   e   )   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   3   D   =   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   3   D   ;   f   u   n   c   t   i   o   n       _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   f   o   r   m   a   t   ,   i   m   a   g   e   S   i   z   e   ,   d   a   t   a   )   {   d   a   t   a   >   >   >   =   0   ;   i   f   (   t   r   u   e   )   {   i   f   (   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   |   |   !   i   m   a   g   e   S   i   z   e   )   {   G   L   c   t   x   .   c   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   f   o   r   m   a   t   ,   i   m   a   g   e   S   i   z   e   ,   d   a   t   a   )   ;   r   e   t   u   r   n   }   }   G   L   c   t   x   .   c   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   f   o   r   m   a   t   ,   H   E   A   P   U   8   .   s   u   b   a   r   r   a   y   (   d   a   t   a   >   >   >   0   ,   d   a   t   a   +   i   m   a   g   e   S   i   z   e   >   >   >   0   )   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   2   D   =   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   2   D   ;   f   u   n   c   t   i   o   n       _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   z   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   f   o   r   m   a   t   ,   i   m   a   g   e   S   i   z   e   ,   d   a   t   a   )   {   d   a   t   a   >   >   >   =   0   ;   i   f   (   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   G   L   c   t   x   .   c   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   z   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   f   o   r   m   a   t   ,   i   m   a   g   e   S   i   z   e   ,   d   a   t   a   )   }   e   l   s   e   {   G   L   c   t   x   .   c   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   z   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   f   o   r   m   a   t   ,   H   E   A   P   U   8   ,   d   a   t   a   ,   i   m   a   g   e   S   i   z   e   )   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   3   D   =   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   3   D   ;   f   u   n   c   t   i   o   n       _   g   l   C   o   p   y   B   u   f   f   e   r   S   u   b   D   a   t   a   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   {   x   2   >   >   >   =   0   ;   x   3   >   >   >   =   0   ;   x   4   >   >   >   =   0   ;   r   e   t   u   r   n       G   L   c   t   x   .   c   o   p   y   B   u   f   f   e   r   S   u   b   D   a   t   a   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   p   y   B   u   f   f   e   r   S   u   b   D   a   t   a   =   _   g   l   C   o   p   y   B   u   f   f   e   r   S   u   b   D   a   t   a   ;   v   a   r       _   g   l   C   o   p   y   T   e   x   I   m   a   g   e   2   D   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   ,   x   5   ,   x   6   ,   x   7   )   =   >   G   L   c   t   x   .   c   o   p   y   T   e   x   I   m   a   g   e   2   D   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   ,   x   5   ,   x   6   ,   x   7   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   p   y   T   e   x   I   m   a   g   e   2   D   =   _   g   l   C   o   p   y   T   e   x   I   m   a   g   e   2   D   ;   v   a   r       _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   2   D   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   ,   x   5   ,   x   6   ,   x   7   )   =   >   G   L   c   t   x   .   c   o   p   y   T   e   x   S   u   b   I   m   a   g   e   2   D   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   ,   x   5   ,   x   6   ,   x   7   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   2   D   =   _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   2   D   ;   v   a   r       _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   3   D   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   ,   x   5   ,   x   6   ,   x   7   ,   x   8   )   =   >   G   L   c   t   x   .   c   o   p   y   T   e   x   S   u   b   I   m   a   g   e   3   D   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   ,   x   5   ,   x   6   ,   x   7   ,   x   8   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   3   D   =   _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   3   D   ;   v   a   r       _   g   l   C   r   e   a   t   e   P   r   o   g   r   a   m   =   (   )   =   >   {   v   a   r       i   d   =   G   L   .   g   e   t   N   e   w   I   d   (   G   L   .   p   r   o   g   r   a   m   s   )   ;   v   a   r       p   r   o   g   r   a   m   =   G   L   c   t   x   .   c   r   e   a   t   e   P   r   o   g   r   a   m   (   )   ;   p   r   o   g   r   a   m   .   n   a   m   e   =   i   d   ;   p   r   o   g   r   a   m   .   m   a   x   U   n   i   f   o   r   m   L   e   n   g   t   h   =   p   r   o   g   r   a   m   .   m   a   x   A   t   t   r   i   b   u   t   e   L   e   n   g   t   h   =   p   r   o   g   r   a   m   .   m   a   x   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   L   e   n   g   t   h   =   0   ;   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   I   d   C   o   u   n   t   e   r   =   1   ;   G   L   .   p   r   o   g   r   a   m   s   [   i   d   ]   =   p   r   o   g   r   a   m   ;   r   e   t   u   r   n       i   d   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   r   e   a   t   e   P   r   o   g   r   a   m   =   _   g   l   C   r   e   a   t   e   P   r   o   g   r   a   m   ;   v   a   r       _   g   l   C   r   e   a   t   e   S   h   a   d   e   r   =   s   h   a   d   e   r   T   y   p   e   =   >   {   v   a   r       i   d   =   G   L   .   g   e   t   N   e   w   I   d   (   G   L   .   s   h   a   d   e   r   s   )   ;   G   L   .   s   h   a   d   e   r   s   [   i   d   ]   =   G   L   c   t   x   .   c   r   e   a   t   e   S   h   a   d   e   r   (   s   h   a   d   e   r   T   y   p   e   )   ;   r   e   t   u   r   n       i   d   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   r   e   a   t   e   S   h   a   d   e   r   =   _   g   l   C   r   e   a   t   e   S   h   a   d   e   r   ;   v   a   r       _   g   l   C   u   l   l   F   a   c   e   =   x   0   =   >   G   L   c   t   x   .   c   u   l   l   F   a   c   e   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   u   l   l   F   a   c   e   =   _   g   l   C   u   l   l   F   a   c   e   ;   f   u   n   c   t   i   o   n       _   g   l   D   e   l   e   t   e   B   u   f   f   e   r   s   (   n   ,   b   u   f   f   e   r   s   )   {   b   u   f   f   e   r   s   >   >   >   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   H   E   A   P   3   2   [   b   u   f   f   e   r   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   ;   v   a   r       b   u   f   f   e   r   =   G   L   .   b   u   f   f   e   r   s   [   i   d   ]   ;   i   f   (   !   b   u   f   f   e   r   )   c   o   n   t   i   n   u   e   ;   G   L   c   t   x   .   d   e   l   e   t   e   B   u   f   f   e   r   (   b   u   f   f   e   r   )   ;   b   u   f   f   e   r   .   n   a   m   e   =   0   ;   G   L   .   b   u   f   f   e   r   s   [   i   d   ]   =   n   u   l   l   ;   i   f   (   i   d   =   =   G   L   c   t   x   .   c   u   r   r   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   )   G   L   c   t   x   .   c   u   r   r   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   =   0   ;   i   f   (   i   d   =   =   G   L   c   t   x   .   c   u   r   r   e   n   t   E   l   e   m   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   )   G   L   c   t   x   .   c   u   r   r   e   n   t   E   l   e   m   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   =   0   ;   i   f   (   i   d   =   =   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   P   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   )   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   P   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   =   0   ;   i   f   (   i   d   =   =   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   )   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   =   0   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   B   u   f   f   e   r   s   =   _   g   l   D   e   l   e   t   e   B   u   f   f   e   r   s   ;   f   u   n   c   t   i   o   n       _   g   l   D   e   l   e   t   e   F   r   a   m   e   b   u   f   f   e   r   s   (   n   ,   f   r   a   m   e   b   u   f   f   e   r   s   )   {   f   r   a   m   e   b   u   f   f   e   r   s   >   >   >   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   +   +   i   )   {   v   a   r       i   d   =   H   E   A   P   3   2   [   f   r   a   m   e   b   u   f   f   e   r   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   ;   v   a   r       f   r   a   m   e   b   u   f   f   e   r   =   G   L   .   f   r   a   m   e   b   u   f   f   e   r   s   [   i   d   ]   ;   i   f   (   !   f   r   a   m   e   b   u   f   f   e   r   )   c   o   n   t   i   n   u   e   ;   G   L   c   t   x   .   d   e   l   e   t   e   F   r   a   m   e   b   u   f   f   e   r   (   f   r   a   m   e   b   u   f   f   e   r   )   ;   f   r   a   m   e   b   u   f   f   e   r   .   n   a   m   e   =   0   ;   G   L   .   f   r   a   m   e   b   u   f   f   e   r   s   [   i   d   ]   =   n   u   l   l   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   F   r   a   m   e   b   u   f   f   e   r   s   =   _   g   l   D   e   l   e   t   e   F   r   a   m   e   b   u   f   f   e   r   s   ;   v   a   r       _   g   l   D   e   l   e   t   e   P   r   o   g   r   a   m   =   i   d   =   >   {   i   f   (   !   i   d   )   r   e   t   u   r   n   ;   v   a   r       p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   i   d   ]   ;   i   f   (   !   p   r   o   g   r   a   m   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   G   L   c   t   x   .   d   e   l   e   t   e   P   r   o   g   r   a   m   (   p   r   o   g   r   a   m   )   ;   p   r   o   g   r   a   m   .   n   a   m   e   =   0   ;   G   L   .   p   r   o   g   r   a   m   s   [   i   d   ]   =   n   u   l   l   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   P   r   o   g   r   a   m   =   _   g   l   D   e   l   e   t   e   P   r   o   g   r   a   m   ;   f   u   n   c   t   i   o   n       _   g   l   D   e   l   e   t   e   Q   u   e   r   i   e   s   (   n   ,   i   d   s   )   {   i   d   s   >   >   >   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   H   E   A   P   3   2   [   i   d   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   ;   v   a   r       q   u   e   r   y   =   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   ;   i   f   (   !   q   u   e   r   y   )   c   o   n   t   i   n   u   e   ;   G   L   c   t   x   .   d   e   l   e   t   e   Q   u   e   r   y   (   q   u   e   r   y   )   ;   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   =   n   u   l   l   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   Q   u   e   r   i   e   s   =   _   g   l   D   e   l   e   t   e   Q   u   e   r   i   e   s   ;   f   u   n   c   t   i   o   n       _   g   l   D   e   l   e   t   e   Q   u   e   r   i   e   s   E   X   T   (   n   ,   i   d   s   )   {   i   d   s   >   >   >   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   H   E   A   P   3   2   [   i   d   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   ;   v   a   r       q   u   e   r   y   =   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   ;   i   f   (   !   q   u   e   r   y   )   c   o   n   t   i   n   u   e   ;   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   [   "   d   e   l   e   t   e   Q   u   e   r   y   E   X   T   "   ]   (   q   u   e   r   y   )   ;   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   =   n   u   l   l   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   Q   u   e   r   i   e   s   E   X   T   =   _   g   l   D   e   l   e   t   e   Q   u   e   r   i   e   s   E   X   T   ;   f   u   n   c   t   i   o   n       _   g   l   D   e   l   e   t   e   R   e   n   d   e   r   b   u   f   f   e   r   s   (   n   ,   r   e   n   d   e   r   b   u   f   f   e   r   s   )   {   r   e   n   d   e   r   b   u   f   f   e   r   s   >   >   >   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   H   E   A   P   3   2   [   r   e   n   d   e   r   b   u   f   f   e   r   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   ;   v   a   r       r   e   n   d   e   r   b   u   f   f   e   r   =   G   L   .   r   e   n   d   e   r   b   u   f   f   e   r   s   [   i   d   ]   ;   i   f   (   !   r   e   n   d   e   r   b   u   f   f   e   r   )   c   o   n   t   i   n   u   e   ;   G   L   c   t   x   .   d   e   l   e   t   e   R   e   n   d   e   r   b   u   f   f   e   r   (   r   e   n   d   e   r   b   u   f   f   e   r   )   ;   r   e   n   d   e   r   b   u   f   f   e   r   .   n   a   m   e   =   0   ;   G   L   .   r   e   n   d   e   r   b   u   f   f   e   r   s   [   i   d   ]   =   n   u   l   l   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   R   e   n   d   e   r   b   u   f   f   e   r   s   =   _   g   l   D   e   l   e   t   e   R   e   n   d   e   r   b   u   f   f   e   r   s   ;   f   u   n   c   t   i   o   n       _   g   l   D   e   l   e   t   e   S   a   m   p   l   e   r   s   (   n   ,   s   a   m   p   l   e   r   s   )   {   s   a   m   p   l   e   r   s   >   >   >   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   H   E   A   P   3   2   [   s   a   m   p   l   e   r   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   ;   v   a   r       s   a   m   p   l   e   r   =   G   L   .   s   a   m   p   l   e   r   s   [   i   d   ]   ;   i   f   (   !   s   a   m   p   l   e   r   )   c   o   n   t   i   n   u   e   ;   G   L   c   t   x   .   d   e   l   e   t   e   S   a   m   p   l   e   r   (   s   a   m   p   l   e   r   )   ;   s   a   m   p   l   e   r   .   n   a   m   e   =   0   ;   G   L   .   s   a   m   p   l   e   r   s   [   i   d   ]   =   n   u   l   l   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   S   a   m   p   l   e   r   s   =   _   g   l   D   e   l   e   t   e   S   a   m   p   l   e   r   s   ;   v   a   r       _   g   l   D   e   l   e   t   e   S   h   a   d   e   r   =   i   d   =   >   {   i   f   (   !   i   d   )   r   e   t   u   r   n   ;   v   a   r       s   h   a   d   e   r   =   G   L   .   s   h   a   d   e   r   s   [   i   d   ]   ;   i   f   (   !   s   h   a   d   e   r   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   G   L   c   t   x   .   d   e   l   e   t   e   S   h   a   d   e   r   (   s   h   a   d   e   r   )   ;   G   L   .   s   h   a   d   e   r   s   [   i   d   ]   =   n   u   l   l   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   S   h   a   d   e   r   =   _   g   l   D   e   l   e   t   e   S   h   a   d   e   r   ;   f   u   n   c   t   i   o   n       _   g   l   D   e   l   e   t   e   S   y   n   c   (   i   d   )   {   i   d   >   >   >   =   0   ;   i   f   (   !   i   d   )   r   e   t   u   r   n   ;   v   a   r       s   y   n   c   =   G   L   .   s   y   n   c   s   [   i   d   ]   ;   i   f   (   !   s   y   n   c   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   G   L   c   t   x   .   d   e   l   e   t   e   S   y   n   c   (   s   y   n   c   )   ;   s   y   n   c   .   n   a   m   e   =   0   ;   G   L   .   s   y   n   c   s   [   i   d   ]   =   n   u   l   l   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   S   y   n   c   =   _   g   l   D   e   l   e   t   e   S   y   n   c   ;   f   u   n   c   t   i   o   n       _   g   l   D   e   l   e   t   e   T   e   x   t   u   r   e   s   (   n   ,   t   e   x   t   u   r   e   s   )   {   t   e   x   t   u   r   e   s   >   >   >   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   H   E   A   P   3   2   [   t   e   x   t   u   r   e   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   ;   v   a   r       t   e   x   t   u   r   e   =   G   L   .   t   e   x   t   u   r   e   s   [   i   d   ]   ;   i   f   (   !   t   e   x   t   u   r   e   )   c   o   n   t   i   n   u   e   ;   G   L   c   t   x   .   d   e   l   e   t   e   T   e   x   t   u   r   e   (   t   e   x   t   u   r   e   )   ;   t   e   x   t   u   r   e   .   n   a   m   e   =   0   ;   G   L   .   t   e   x   t   u   r   e   s   [   i   d   ]   =   n   u   l   l   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   T   e   x   t   u   r   e   s   =   _   g   l   D   e   l   e   t   e   T   e   x   t   u   r   e   s   ;   f   u   n   c   t   i   o   n       _   g   l   D   e   l   e   t   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   (   n   ,   i   d   s   )   {   i   d   s   >   >   >   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   H   E   A   P   3   2   [   i   d   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   ;   v   a   r       t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   G   L   .   t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   [   i   d   ]   ;   i   f   (   !   t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   )   c   o   n   t   i   n   u   e   ;   G   L   c   t   x   .   d   e   l   e   t   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   (   t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   )   ;   t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   .   n   a   m   e   =   0   ;   G   L   .   t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   [   i   d   ]   =   n   u   l   l   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   =   _   g   l   D   e   l   e   t   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   ;   f   u   n   c   t   i   o   n       _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   (   n   ,   v   a   o   s   )   {   v   a   o   s   >   >   >   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   H   E   A   P   3   2   [   v   a   o   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   ;   G   L   c   t   x   .   d   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   (   G   L   .   v   a   o   s   [   i   d   ]   )   ;   G   L   .   v   a   o   s   [   i   d   ]   =   n   u   l   l   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   =   _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   ;   v   a   r       _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   O   E   S   =   _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   O   E   S   =   _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   O   E   S   ;   v   a   r       _   g   l   D   e   p   t   h   F   u   n   c   =   x   0   =   >   G   L   c   t   x   .   d   e   p   t   h   F   u   n   c   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   p   t   h   F   u   n   c   =   _   g   l   D   e   p   t   h   F   u   n   c   ;   v   a   r       _   g   l   D   e   p   t   h   M   a   s   k   =   f   l   a   g   =   >   {   G   L   c   t   x   .   d   e   p   t   h   M   a   s   k   (   !   !   f   l   a   g   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   p   t   h   M   a   s   k   =   _   g   l   D   e   p   t   h   M   a   s   k   ;   v   a   r       _   g   l   D   e   p   t   h   R   a   n   g   e   f   =   (   x   0   ,   x   1   )   =   >   G   L   c   t   x   .   d   e   p   t   h   R   a   n   g   e   (   x   0   ,   x   1   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   p   t   h   R   a   n   g   e   f   =   _   g   l   D   e   p   t   h   R   a   n   g   e   f   ;   v   a   r       _   g   l   D   e   t   a   c   h   S   h   a   d   e   r   =   (   p   r   o   g   r   a   m   ,   s   h   a   d   e   r   )   =   >   {   G   L   c   t   x   .   d   e   t   a   c   h   S   h   a   d   e   r   (   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ,   G   L   .   s   h   a   d   e   r   s   [   s   h   a   d   e   r   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   t   a   c   h   S   h   a   d   e   r   =   _   g   l   D   e   t   a   c   h   S   h   a   d   e   r   ;   v   a   r       _   g   l   D   i   s   a   b   l   e   =   x   0   =   >   G   L   c   t   x   .   d   i   s   a   b   l   e   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   i   s   a   b   l   e   =   _   g   l   D   i   s   a   b   l   e   ;   v   a   r       _   g   l   D   i   s   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   =   i   n   d   e   x   =   >   {   v   a   r       c   b   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   c   l   i   e   n   t   B   u   f   f   e   r   s   [   i   n   d   e   x   ]   ;   c   b   .   e   n   a   b   l   e   d   =   f   a   l   s   e   ;   G   L   c   t   x   .   d   i   s   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   (   i   n   d   e   x   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   i   s   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   =   _   g   l   D   i   s   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   ;   v   a   r       _   g   l   D   r   a   w   A   r   r   a   y   s   =   (   m   o   d   e   ,   f   i   r   s   t   ,   c   o   u   n   t   )   =   >   {   G   L   .   p   r   e   D   r   a   w   H   a   n   d   l   e   C   l   i   e   n   t   V   e   r   t   e   x   A   t   t   r   i   b   B   i   n   d   i   n   g   s   (   f   i   r   s   t   +   c   o   u   n   t   )   ;   G   L   c   t   x   .   d   r   a   w   A   r   r   a   y   s   (   m   o   d   e   ,   f   i   r   s   t   ,   c   o   u   n   t   )   ;   G   L   .   p   o   s   t   D   r   a   w   H   a   n   d   l   e   C   l   i   e   n   t   V   e   r   t   e   x   A   t   t   r   i   b   B   i   n   d   i   n   g   s   (   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   =   _   g   l   D   r   a   w   A   r   r   a   y   s   ;   v   a   r       _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   =   (   m   o   d   e   ,   f   i   r   s   t   ,   c   o   u   n   t   ,   p   r   i   m   c   o   u   n   t   )   =   >   {   G   L   c   t   x   .   d   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   (   m   o   d   e   ,   f   i   r   s   t   ,   c   o   u   n   t   ,   p   r   i   m   c   o   u   n   t   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   =   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   ;   v   a   r       _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   A   N   G   L   E   =   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   A   N   G   L   E   =   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   A   N   G   L   E   ;   v   a   r       _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   A   R   B   =   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   A   R   B   =   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   A   R   B   ;   v   a   r       _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   E   X   T   =   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   E   X   T   =   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   E   X   T   ;   v   a   r       _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   N   V   =   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   N   V   =   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   N   V   ;   v   a   r       t   e   m   p   F   i   x   e   d   L   e   n   g   t   h   A   r   r   a   y   =   [   ]   ;   f   u   n   c   t   i   o   n       _   g   l   D   r   a   w   B   u   f   f   e   r   s   (   n   ,   b   u   f   s   )   {   b   u   f   s   >   >   >   =   0   ;   v   a   r       b   u   f   A   r   r   a   y   =   t   e   m   p   F   i   x   e   d   L   e   n   g   t   h   A   r   r   a   y   [   n   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   b   u   f   A   r   r   a   y   [   i   ]   =   H   E   A   P   3   2   [   b   u   f   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   }   G   L   c   t   x   .   d   r   a   w   B   u   f   f   e   r   s   (   b   u   f   A   r   r   a   y   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   B   u   f   f   e   r   s   =   _   g   l   D   r   a   w   B   u   f   f   e   r   s   ;   v   a   r       _   g   l   D   r   a   w   B   u   f   f   e   r   s   E   X   T   =   _   g   l   D   r   a   w   B   u   f   f   e   r   s   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   B   u   f   f   e   r   s   E   X   T   =   _   g   l   D   r   a   w   B   u   f   f   e   r   s   E   X   T   ;   v   a   r       _   g   l   D   r   a   w   B   u   f   f   e   r   s   W   E   B   G   L   =   _   g   l   D   r   a   w   B   u   f   f   e   r   s   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   B   u   f   f   e   r   s   W   E   B   G   L   =   _   g   l   D   r   a   w   B   u   f   f   e   r   s   W   E   B   G   L   ;   f   u   n   c   t   i   o   n       _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   (   m   o   d   e   ,   c   o   u   n   t   ,   t   y   p   e   ,   i   n   d   i   c   e   s   )   {   i   n   d   i   c   e   s   >   >   >   =   0   ;   v   a   r       b   u   f   ;   v   a   r       v   e   r   t   e   x   e   s   =   0   ;   i   f   (   !   G   L   c   t   x   .   c   u   r   r   e   n   t   E   l   e   m   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   v   a   r       s   i   z   e   =   G   L   .   c   a   l   c   B   u   f   L   e   n   g   t   h   (   1   ,   t   y   p   e   ,   0   ,   c   o   u   n   t   )   ;   b   u   f   =   G   L   .   g   e   t   T   e   m   p   I   n   d   e   x   B   u   f   f   e   r   (   s   i   z   e   )   ;   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   3   4   9   6   3   ,   b   u   f   )   ;   G   L   c   t   x   .   b   u   f   f   e   r   S   u   b   D   a   t   a   (   3   4   9   6   3   ,   0   ,   H   E   A   P   U   8   .   s   u   b   a   r   r   a   y   (   i   n   d   i   c   e   s   >   >   >   0   ,   i   n   d   i   c   e   s   +   s   i   z   e   >   >   >   0   )   )   ;   i   f   (   c   o   u   n   t   >   0   )   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   m   a   x   V   e   r   t   e   x   A   t   t   r   i   b   s   ;   +   +   i   )   {   v   a   r       c   b   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   c   l   i   e   n   t   B   u   f   f   e   r   s   [   i   ]   ;   i   f   (   c   b   .   c   l   i   e   n   t   s   i   d   e   &   &   c   b   .   e   n   a   b   l   e   d   )   {   l   e   t       a   r   r   a   y   C   l   a   s   s   ;   s   w   i   t   c   h   (   t   y   p   e   )   {   c   a   s   e       5   1   2   1   :   a   r   r   a   y   C   l   a   s   s   =   U   i   n   t   8   A   r   r   a   y   ;   b   r   e   a   k   ;   c   a   s   e       5   1   2   3   :   a   r   r   a   y   C   l   a   s   s   =   U   i   n   t   1   6   A   r   r   a   y   ;   b   r   e   a   k   ;   c   a   s   e       5   1   2   5   :   a   r   r   a   y   C   l   a   s   s   =   U   i   n   t   3   2   A   r   r   a   y   ;   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   2   )   ;   r   e   t   u   r   n   }   v   e   r   t   e   x   e   s   =   n   e   w       a   r   r   a   y   C   l   a   s   s   (   H   E   A   P   U   8   .   b   u   f   f   e   r   ,   i   n   d   i   c   e   s   ,   c   o   u   n   t   )   .   r   e   d   u   c   e   (   (   m   a   x   ,   c   u   r   r   e   n   t   )   =   >   M   a   t   h   .   m   a   x   (   m   a   x   ,   c   u   r   r   e   n   t   )   )   +   1   ;   b   r   e   a   k   }   }   }   i   n   d   i   c   e   s   =   0   }   G   L   .   p   r   e   D   r   a   w   H   a   n   d   l   e   C   l   i   e   n   t   V   e   r   t   e   x   A   t   t   r   i   b   B   i   n   d   i   n   g   s   (   v   e   r   t   e   x   e   s   )   ;   G   L   c   t   x   .   d   r   a   w   E   l   e   m   e   n   t   s   (   m   o   d   e   ,   c   o   u   n   t   ,   t   y   p   e   ,   i   n   d   i   c   e   s   )   ;   G   L   .   p   o   s   t   D   r   a   w   H   a   n   d   l   e   C   l   i   e   n   t   V   e   r   t   e   x   A   t   t   r   i   b   B   i   n   d   i   n   g   s   (   c   o   u   n   t   )   ;   i   f   (   !   G   L   c   t   x   .   c   u   r   r   e   n   t   E   l   e   m   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   G   L   c   t   x   .   b   i   n   d   B   u   f   f   e   r   (   3   4   9   6   3   ,   n   u   l   l   )   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   =   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   ;   f   u   n   c   t   i   o   n       _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   (   m   o   d   e   ,   c   o   u   n   t   ,   t   y   p   e   ,   i   n   d   i   c   e   s   ,   p   r   i   m   c   o   u   n   t   )   {   i   n   d   i   c   e   s   >   >   >   =   0   ;   G   L   c   t   x   .   d   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   (   m   o   d   e   ,   c   o   u   n   t   ,   t   y   p   e   ,   i   n   d   i   c   e   s   ,   p   r   i   m   c   o   u   n   t   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   =   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   ;   v   a   r       _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   A   N   G   L   E   =   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   A   N   G   L   E   =   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   A   N   G   L   E   ;   v   a   r       _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   A   R   B   =   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   A   R   B   =   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   A   R   B   ;   v   a   r       _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   E   X   T   =   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   E   X   T   =   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   E   X   T   ;   v   a   r       _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   N   V   =   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   N   V   =   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   N   V   ;   f   u   n   c   t   i   o   n       _   g   l   D   r   a   w   R   a   n   g   e   E   l   e   m   e   n   t   s   (   m   o   d   e   ,   s   t   a   r   t   ,   e   n   d   ,   c   o   u   n   t   ,   t   y   p   e   ,   i   n   d   i   c   e   s   )   {   i   n   d   i   c   e   s   >   >   >   =   0   ;   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   (   m   o   d   e   ,   c   o   u   n   t   ,   t   y   p   e   ,   i   n   d   i   c   e   s   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   R   a   n   g   e   E   l   e   m   e   n   t   s   =   _   g   l   D   r   a   w   R   a   n   g   e   E   l   e   m   e   n   t   s   ;   v   a   r       _   g   l   E   n   a   b   l   e   =   x   0   =   >   G   L   c   t   x   .   e   n   a   b   l   e   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   a   b   l   e   =   _   g   l   E   n   a   b   l   e   ;   v   a   r       _   g   l   E   n   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   =   i   n   d   e   x   =   >   {   v   a   r       c   b   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   c   l   i   e   n   t   B   u   f   f   e   r   s   [   i   n   d   e   x   ]   ;   c   b   .   e   n   a   b   l   e   d   =   t   r   u   e   ;   G   L   c   t   x   .   e   n   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   (   i   n   d   e   x   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   =   _   g   l   E   n   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   ;   v   a   r       _   g   l   E   n   d   Q   u   e   r   y   =   x   0   =   >   G   L   c   t   x   .   e   n   d   Q   u   e   r   y   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   d   Q   u   e   r   y   =   _   g   l   E   n   d   Q   u   e   r   y   ;   v   a   r       _   g   l   E   n   d   Q   u   e   r   y   E   X   T   =   t   a   r   g   e   t   =   >   {   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   [   "   e   n   d   Q   u   e   r   y   E   X   T   "   ]   (   t   a   r   g   e   t   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   d   Q   u   e   r   y   E   X   T   =   _   g   l   E   n   d   Q   u   e   r   y   E   X   T   ;   v   a   r       _   g   l   E   n   d   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   (   )   =   >   G   L   c   t   x   .   e   n   d   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   (   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   d   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   _   g   l   E   n   d   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ;   f   u   n   c   t   i   o   n       _   g   l   F   e   n   c   e   S   y   n   c   (   c   o   n   d   i   t   i   o   n   ,   f   l   a   g   s   )   {   v   a   r       s   y   n   c   =   G   L   c   t   x   .   f   e   n   c   e   S   y   n   c   (   c   o   n   d   i   t   i   o   n   ,   f   l   a   g   s   )   ;   i   f   (   s   y   n   c   )   {   v   a   r       i   d   =   G   L   .   g   e   t   N   e   w   I   d   (   G   L   .   s   y   n   c   s   )   ;   s   y   n   c   .   n   a   m   e   =   i   d   ;   G   L   .   s   y   n   c   s   [   i   d   ]   =   s   y   n   c   ;   r   e   t   u   r   n       i   d   }   r   e   t   u   r   n       0   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   e   n   c   e   S   y   n   c   =   _   g   l   F   e   n   c   e   S   y   n   c   ;   v   a   r       _   g   l   F   i   n   i   s   h   =   (   )   =   >   G   L   c   t   x   .   f   i   n   i   s   h   (   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   i   n   i   s   h   =   _   g   l   F   i   n   i   s   h   ;   v   a   r       _   g   l   F   l   u   s   h   =   (   )   =   >   G   L   c   t   x   .   f   l   u   s   h   (   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   l   u   s   h   =   _   g   l   F   l   u   s   h   ;   v   a   r       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   B   u   f   f   e   r   B   i   n   d   i   n   g   =   t   a   r   g   e   t   =   >   {   s   w   i   t   c   h   (   t   a   r   g   e   t   )   {   c   a   s   e       3   4   9   6   2   :   t   a   r   g   e   t   =   3   4   9   6   4   ;   b   r   e   a   k   ;   c   a   s   e       3   4   9   6   3   :   t   a   r   g   e   t   =   3   4   9   6   5   ;   b   r   e   a   k   ;   c   a   s   e       3   5   0   5   1   :   t   a   r   g   e   t   =   3   5   0   5   3   ;   b   r   e   a   k   ;   c   a   s   e       3   5   0   5   2   :   t   a   r   g   e   t   =   3   5   0   5   5   ;   b   r   e   a   k   ;   c   a   s   e       3   5   9   8   2   :   t   a   r   g   e   t   =   3   5   9   8   3   ;   b   r   e   a   k   ;   c   a   s   e       3   6   6   6   2   :   t   a   r   g   e   t   =   3   6   6   6   2   ;   b   r   e   a   k   ;   c   a   s   e       3   6   6   6   3   :   t   a   r   g   e   t   =   3   6   6   6   3   ;   b   r   e   a   k   ;   c   a   s   e       3   5   3   4   5   :   t   a   r   g   e   t   =   3   5   3   6   8   ;   b   r   e   a   k   }   v   a   r       b   u   f   f   e   r   =   G   L   c   t   x   .   g   e   t   P   a   r   a   m   e   t   e   r   (   t   a   r   g   e   t   )   ;   i   f   (   b   u   f   f   e   r   )   r   e   t   u   r   n       b   u   f   f   e   r   .   n   a   m   e   |   0   ;   e   l   s   e       r   e   t   u   r   n       0   }   ;   v   a   r       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   V   a   l   i   d   a   t   e   M   a   p   B   u   f   f   e   r   T   a   r   g   e   t   =   t   a   r   g   e   t   =   >   {   s   w   i   t   c   h   (   t   a   r   g   e   t   )   {   c   a   s   e       3   4   9   6   2   :   c   a   s   e       3   4   9   6   3   :   c   a   s   e       3   6   6   6   2   :   c   a   s   e       3   6   6   6   3   :   c   a   s   e       3   5   0   5   1   :   c   a   s   e       3   5   0   5   2   :   c   a   s   e       3   5   8   8   2   :   c   a   s   e       3   5   9   8   2   :   c   a   s   e       3   5   3   4   5   :   r   e   t   u   r   n       t   r   u   e   ;   d   e   f   a   u   l   t   :   r   e   t   u   r   n       f   a   l   s   e   }   }   ;   f   u   n   c   t   i   o   n       _   g   l   F   l   u   s   h   M   a   p   p   e   d   B   u   f   f   e   r   R   a   n   g   e   (   t   a   r   g   e   t   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   )   {   o   f   f   s   e   t   >   >   >   =   0   ;   l   e   n   g   t   h   >   >   >   =   0   ;   i   f   (   !   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   V   a   l   i   d   a   t   e   M   a   p   B   u   f   f   e   r   T   a   r   g   e   t   (   t   a   r   g   e   t   )   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   e   r   r   (   "   G   L   _   I   N   V   A   L   I   D   _   E   N   U   M       i   n       g   l   F   l   u   s   h   M   a   p   p   e   d   B   u   f   f   e   r   R   a   n   g   e   "   )   ;   r   e   t   u   r   n   }   v   a   r       m   a   p   p   i   n   g   =   G   L   .   m   a   p   p   e   d   B   u   f   f   e   r   s   [   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   B   u   f   f   e   r   B   i   n   d   i   n   g   (   t   a   r   g   e   t   )   ]   ;   i   f   (   !   m   a   p   p   i   n   g   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   2   )   ;   e   r   r   (   "   b   u   f   f   e   r       w   a   s       n   e   v   e   r       m   a   p   p   e   d       i   n       g   l   F   l   u   s   h   M   a   p   p   e   d   B   u   f   f   e   r   R   a   n   g   e   "   )   ;   r   e   t   u   r   n   }   i   f   (   !   (   m   a   p   p   i   n   g   .   a   c   c   e   s   s   &   1   6   )   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   2   )   ;   e   r   r   (   "   b   u   f   f   e   r       w   a   s       n   o   t       m   a   p   p   e   d       w   i   t   h       G   L   _   M   A   P   _   F   L   U   S   H   _   E   X   P   L   I   C   I   T   _   B   I   T       i   n       g   l   F   l   u   s   h   M   a   p   p   e   d   B   u   f   f   e   r   R   a   n   g   e   "   )   ;   r   e   t   u   r   n   }   i   f   (   o   f   f   s   e   t   <   0   |   |   l   e   n   g   t   h   <   0   |   |   o   f   f   s   e   t   +   l   e   n   g   t   h   >   m   a   p   p   i   n   g   .   l   e   n   g   t   h   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   e   r   r   (   "   i   n   v   a   l   i   d       r   a   n   g   e       i   n       g   l   F   l   u   s   h   M   a   p   p   e   d   B   u   f   f   e   r   R   a   n   g   e   "   )   ;   r   e   t   u   r   n   }   G   L   c   t   x   .   b   u   f   f   e   r   S   u   b   D   a   t   a   (   t   a   r   g   e   t   ,   m   a   p   p   i   n   g   .   o   f   f   s   e   t   ,   H   E   A   P   U   8   .   s   u   b   a   r   r   a   y   (   m   a   p   p   i   n   g   .   m   e   m   +   o   f   f   s   e   t   >   >   >   0   ,   m   a   p   p   i   n   g   .   m   e   m   +   o   f   f   s   e   t   +   l   e   n   g   t   h   >   >   >   0   )   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   l   u   s   h   M   a   p   p   e   d   B   u   f   f   e   r   R   a   n   g   e   =   _   g   l   F   l   u   s   h   M   a   p   p   e   d   B   u   f   f   e   r   R   a   n   g   e   ;   v   a   r       _   g   l   F   r   a   m   e   b   u   f   f   e   r   R   e   n   d   e   r   b   u   f   f   e   r   =   (   t   a   r   g   e   t   ,   a   t   t   a   c   h   m   e   n   t   ,   r   e   n   d   e   r   b   u   f   f   e   r   t   a   r   g   e   t   ,   r   e   n   d   e   r   b   u   f   f   e   r   )   =   >   {   G   L   c   t   x   .   f   r   a   m   e   b   u   f   f   e   r   R   e   n   d   e   r   b   u   f   f   e   r   (   t   a   r   g   e   t   ,   a   t   t   a   c   h   m   e   n   t   ,   r   e   n   d   e   r   b   u   f   f   e   r   t   a   r   g   e   t   ,   G   L   .   r   e   n   d   e   r   b   u   f   f   e   r   s   [   r   e   n   d   e   r   b   u   f   f   e   r   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   r   a   m   e   b   u   f   f   e   r   R   e   n   d   e   r   b   u   f   f   e   r   =   _   g   l   F   r   a   m   e   b   u   f   f   e   r   R   e   n   d   e   r   b   u   f   f   e   r   ;   v   a   r       _   g   l   F   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   2   D   =   (   t   a   r   g   e   t   ,   a   t   t   a   c   h   m   e   n   t   ,   t   e   x   t   a   r   g   e   t   ,   t   e   x   t   u   r   e   ,   l   e   v   e   l   )   =   >   {   G   L   c   t   x   .   f   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   2   D   (   t   a   r   g   e   t   ,   a   t   t   a   c   h   m   e   n   t   ,   t   e   x   t   a   r   g   e   t   ,   G   L   .   t   e   x   t   u   r   e   s   [   t   e   x   t   u   r   e   ]   ,   l   e   v   e   l   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   2   D   =   _   g   l   F   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   2   D   ;   v   a   r       _   g   l   F   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   L   a   y   e   r   =   (   t   a   r   g   e   t   ,   a   t   t   a   c   h   m   e   n   t   ,   t   e   x   t   u   r   e   ,   l   e   v   e   l   ,   l   a   y   e   r   )   =   >   {   G   L   c   t   x   .   f   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   L   a   y   e   r   (   t   a   r   g   e   t   ,   a   t   t   a   c   h   m   e   n   t   ,   G   L   .   t   e   x   t   u   r   e   s   [   t   e   x   t   u   r   e   ]   ,   l   e   v   e   l   ,   l   a   y   e   r   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   L   a   y   e   r   =   _   g   l   F   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   L   a   y   e   r   ;   v   a   r       _   g   l   F   r   o   n   t   F   a   c   e   =   x   0   =   >   G   L   c   t   x   .   f   r   o   n   t   F   a   c   e   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   r   o   n   t   F   a   c   e   =   _   g   l   F   r   o   n   t   F   a   c   e   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   n   B   u   f   f   e   r   s   (   n   ,   b   u   f   f   e   r   s   )   {   b   u   f   f   e   r   s   >   >   >   =   0   ;   G   L   .   g   e   n   O   b   j   e   c   t   (   n   ,   b   u   f   f   e   r   s   ,   "   c   r   e   a   t   e   B   u   f   f   e   r   "   ,   G   L   .   b   u   f   f   e   r   s   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   B   u   f   f   e   r   s   =   _   g   l   G   e   n   B   u   f   f   e   r   s   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   n   F   r   a   m   e   b   u   f   f   e   r   s   (   n   ,   i   d   s   )   {   i   d   s   >   >   >   =   0   ;   G   L   .   g   e   n   O   b   j   e   c   t   (   n   ,   i   d   s   ,   "   c   r   e   a   t   e   F   r   a   m   e   b   u   f   f   e   r   "   ,   G   L   .   f   r   a   m   e   b   u   f   f   e   r   s   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   F   r   a   m   e   b   u   f   f   e   r   s   =   _   g   l   G   e   n   F   r   a   m   e   b   u   f   f   e   r   s   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   n   Q   u   e   r   i   e   s   (   n   ,   i   d   s   )   {   i   d   s   >   >   >   =   0   ;   G   L   .   g   e   n   O   b   j   e   c   t   (   n   ,   i   d   s   ,   "   c   r   e   a   t   e   Q   u   e   r   y   "   ,   G   L   .   q   u   e   r   i   e   s   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   Q   u   e   r   i   e   s   =   _   g   l   G   e   n   Q   u   e   r   i   e   s   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   n   Q   u   e   r   i   e   s   E   X   T   (   n   ,   i   d   s   )   {   i   d   s   >   >   >   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       q   u   e   r   y   =   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   [   "   c   r   e   a   t   e   Q   u   e   r   y   E   X   T   "   ]   (   )   ;   i   f   (   !   q   u   e   r   y   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   2   )   ;   w   h   i   l   e   (   i   <   n   )   H   E   A   P   3   2   [   i   d   s   +   i   +   +   *   4   >   >   >   2   >   >   >   0   ]   =   0   ;   r   e   t   u   r   n   }   v   a   r       i   d   =   G   L   .   g   e   t   N   e   w   I   d   (   G   L   .   q   u   e   r   i   e   s   )   ;   q   u   e   r   y   .   n   a   m   e   =   i   d   ;   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   =   q   u   e   r   y   ;   H   E   A   P   3   2   [   i   d   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   i   d   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   Q   u   e   r   i   e   s   E   X   T   =   _   g   l   G   e   n   Q   u   e   r   i   e   s   E   X   T   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   n   R   e   n   d   e   r   b   u   f   f   e   r   s   (   n   ,   r   e   n   d   e   r   b   u   f   f   e   r   s   )   {   r   e   n   d   e   r   b   u   f   f   e   r   s   >   >   >   =   0   ;   G   L   .   g   e   n   O   b   j   e   c   t   (   n   ,   r   e   n   d   e   r   b   u   f   f   e   r   s   ,   "   c   r   e   a   t   e   R   e   n   d   e   r   b   u   f   f   e   r   "   ,   G   L   .   r   e   n   d   e   r   b   u   f   f   e   r   s   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   R   e   n   d   e   r   b   u   f   f   e   r   s   =   _   g   l   G   e   n   R   e   n   d   e   r   b   u   f   f   e   r   s   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   n   S   a   m   p   l   e   r   s   (   n   ,   s   a   m   p   l   e   r   s   )   {   s   a   m   p   l   e   r   s   >   >   >   =   0   ;   G   L   .   g   e   n   O   b   j   e   c   t   (   n   ,   s   a   m   p   l   e   r   s   ,   "   c   r   e   a   t   e   S   a   m   p   l   e   r   "   ,   G   L   .   s   a   m   p   l   e   r   s   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   S   a   m   p   l   e   r   s   =   _   g   l   G   e   n   S   a   m   p   l   e   r   s   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   n   T   e   x   t   u   r   e   s   (   n   ,   t   e   x   t   u   r   e   s   )   {   t   e   x   t   u   r   e   s   >   >   >   =   0   ;   G   L   .   g   e   n   O   b   j   e   c   t   (   n   ,   t   e   x   t   u   r   e   s   ,   "   c   r   e   a   t   e   T   e   x   t   u   r   e   "   ,   G   L   .   t   e   x   t   u   r   e   s   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   T   e   x   t   u   r   e   s   =   _   g   l   G   e   n   T   e   x   t   u   r   e   s   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   n   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   (   n   ,   i   d   s   )   {   i   d   s   >   >   >   =   0   ;   G   L   .   g   e   n   O   b   j   e   c   t   (   n   ,   i   d   s   ,   "   c   r   e   a   t   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   "   ,   G   L   .   t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   =   _   g   l   G   e   n   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   (   n   ,   a   r   r   a   y   s   )   {   a   r   r   a   y   s   >   >   >   =   0   ;   G   L   .   g   e   n   O   b   j   e   c   t   (   n   ,   a   r   r   a   y   s   ,   "   c   r   e   a   t   e   V   e   r   t   e   x   A   r   r   a   y   "   ,   G   L   .   v   a   o   s   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   =   _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   ;   v   a   r       _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   O   E   S   =   _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   O   E   S   =   _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   O   E   S   ;   v   a   r       _   g   l   G   e   n   e   r   a   t   e   M   i   p   m   a   p   =   x   0   =   >   G   L   c   t   x   .   g   e   n   e   r   a   t   e   M   i   p   m   a   p   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   e   r   a   t   e   M   i   p   m   a   p   =   _   g   l   G   e   n   e   r   a   t   e   M   i   p   m   a   p   ;   v   a   r       _   _   g   l   G   e   t   A   c   t   i   v   e   A   t   t   r   i   b   O   r   U   n   i   f   o   r   m   =   (   f   u   n   c   N   a   m   e   ,   p   r   o   g   r   a   m   ,   i   n   d   e   x   ,   b   u   f   S   i   z   e   ,   l   e   n   g   t   h   ,   s   i   z   e   ,   t   y   p   e   ,   n   a   m   e   )   =   >   {   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   v   a   r       i   n   f   o   =   G   L   c   t   x   [   f   u   n   c   N   a   m   e   ]   (   p   r   o   g   r   a   m   ,   i   n   d   e   x   )   ;   i   f   (   i   n   f   o   )   {   v   a   r       n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   =   n   a   m   e   &   &   s   t   r   i   n   g   T   o   U   T   F   8   (   i   n   f   o   .   n   a   m   e   ,   n   a   m   e   ,   b   u   f   S   i   z   e   )   ;   i   f   (   l   e   n   g   t   h   )   H   E   A   P   3   2   [   l   e   n   g   t   h   >   >   >   2   >   >   >   0   ]   =   n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   ;   i   f   (   s   i   z   e   )   H   E   A   P   3   2   [   s   i   z   e   >   >   >   2   >   >   >   0   ]   =   i   n   f   o   .   s   i   z   e   ;   i   f   (   t   y   p   e   )   H   E   A   P   3   2   [   t   y   p   e   >   >   >   2   >   >   >   0   ]   =   i   n   f   o   .   t   y   p   e   }   }   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   A   c   t   i   v   e   A   t   t   r   i   b   (   p   r   o   g   r   a   m   ,   i   n   d   e   x   ,   b   u   f   S   i   z   e   ,   l   e   n   g   t   h   ,   s   i   z   e   ,   t   y   p   e   ,   n   a   m   e   )   {   l   e   n   g   t   h   >   >   >   =   0   ;   s   i   z   e   >   >   >   =   0   ;   t   y   p   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   r   e   t   u   r   n       _   _   g   l   G   e   t   A   c   t   i   v   e   A   t   t   r   i   b   O   r   U   n   i   f   o   r   m   (   "   g   e   t   A   c   t   i   v   e   A   t   t   r   i   b   "   ,   p   r   o   g   r   a   m   ,   i   n   d   e   x   ,   b   u   f   S   i   z   e   ,   l   e   n   g   t   h   ,   s   i   z   e   ,   t   y   p   e   ,   n   a   m   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   c   t   i   v   e   A   t   t   r   i   b   =   _   g   l   G   e   t   A   c   t   i   v   e   A   t   t   r   i   b   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   (   p   r   o   g   r   a   m   ,   i   n   d   e   x   ,   b   u   f   S   i   z   e   ,   l   e   n   g   t   h   ,   s   i   z   e   ,   t   y   p   e   ,   n   a   m   e   )   {   l   e   n   g   t   h   >   >   >   =   0   ;   s   i   z   e   >   >   >   =   0   ;   t   y   p   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   r   e   t   u   r   n       _   _   g   l   G   e   t   A   c   t   i   v   e   A   t   t   r   i   b   O   r   U   n   i   f   o   r   m   (   "   g   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   "   ,   p   r   o   g   r   a   m   ,   i   n   d   e   x   ,   b   u   f   S   i   z   e   ,   l   e   n   g   t   h   ,   s   i   z   e   ,   t   y   p   e   ,   n   a   m   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   =   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   (   p   r   o   g   r   a   m   ,   u   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   ,   b   u   f   S   i   z   e   ,   l   e   n   g   t   h   ,   u   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   )   {   l   e   n   g   t   h   >   >   >   =   0   ;   u   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   >   >   >   =   0   ;   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   v   a   r       r   e   s   u   l   t   =   G   L   c   t   x   .   g   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   (   p   r   o   g   r   a   m   ,   u   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   )   ;   i   f   (   !   r   e   s   u   l   t   )   r   e   t   u   r   n   ;   i   f   (   u   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   &   &   b   u   f   S   i   z   e   >   0   )   {   v   a   r       n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   =   s   t   r   i   n   g   T   o   U   T   F   8   (   r   e   s   u   l   t   ,   u   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   ,   b   u   f   S   i   z   e   )   ;   i   f   (   l   e   n   g   t   h   )   H   E   A   P   3   2   [   l   e   n   g   t   h   >   >   >   2   >   >   >   0   ]   =   n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   }   e   l   s   e   {   i   f   (   l   e   n   g   t   h   )   H   E   A   P   3   2   [   l   e   n   g   t   h   >   >   >   2   >   >   >   0   ]   =   0   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   =   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   i   v   (   p   r   o   g   r   a   m   ,   u   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   i   f   (   p   n   a   m   e   =   =   3   5   3   9   3   )   {   v   a   r       n   a   m   e   =   G   L   c   t   x   .   g   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   (   p   r   o   g   r   a   m   ,   u   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   )   ;   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   n   a   m   e   .   l   e   n   g   t   h   +   1   ;   r   e   t   u   r   n   }   v   a   r       r   e   s   u   l   t   =   G   L   c   t   x   .   g   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   P   a   r   a   m   e   t   e   r   (   p   r   o   g   r   a   m   ,   u   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   ,   p   n   a   m   e   )   ;   i   f   (   r   e   s   u   l   t   =   =   =   n   u   l   l   )   r   e   t   u   r   n   ;   i   f   (   p   n   a   m   e   =   =   3   5   3   9   5   )   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   r   e   s   u   l   t   .   l   e   n   g   t   h   ;   i   +   +   )   {   H   E   A   P   3   2   [   p   a   r   a   m   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   r   e   s   u   l   t   [   i   ]   }   }   e   l   s   e   {   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   r   e   s   u   l   t   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   i   v   =   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   s   i   v   (   p   r   o   g   r   a   m   ,   u   n   i   f   o   r   m   C   o   u   n   t   ,   u   n   i   f   o   r   m   I   n   d   i   c   e   s   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   u   n   i   f   o   r   m   I   n   d   i   c   e   s   >   >   >   =   0   ;   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   i   f   (   u   n   i   f   o   r   m   C   o   u   n   t   >   0   &   &   u   n   i   f   o   r   m   I   n   d   i   c   e   s   =   =   0   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   v   a   r       i   d   s   =   [   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   u   n   i   f   o   r   m   C   o   u   n   t   ;   i   +   +   )   {   i   d   s   .   p   u   s   h   (   H   E   A   P   3   2   [   u   n   i   f   o   r   m   I   n   d   i   c   e   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   )   }   v   a   r       r   e   s   u   l   t   =   G   L   c   t   x   .   g   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   s   (   p   r   o   g   r   a   m   ,   i   d   s   ,   p   n   a   m   e   )   ;   i   f   (   !   r   e   s   u   l   t   )   r   e   t   u   r   n   ;   v   a   r       l   e   n   =   r   e   s   u   l   t   .   l   e   n   g   t   h   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   ;   i   +   +   )   {   H   E   A   P   3   2   [   p   a   r   a   m   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   r   e   s   u   l   t   [   i   ]   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   s   i   v   =   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   s   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   A   t   t   a   c   h   e   d   S   h   a   d   e   r   s   (   p   r   o   g   r   a   m   ,   m   a   x   C   o   u   n   t   ,   c   o   u   n   t   ,   s   h   a   d   e   r   s   )   {   c   o   u   n   t   >   >   >   =   0   ;   s   h   a   d   e   r   s   >   >   >   =   0   ;   v   a   r       r   e   s   u   l   t   =   G   L   c   t   x   .   g   e   t   A   t   t   a   c   h   e   d   S   h   a   d   e   r   s   (   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   )   ;   v   a   r       l   e   n   =   r   e   s   u   l   t   .   l   e   n   g   t   h   ;   i   f   (   l   e   n   >   m   a   x   C   o   u   n   t   )   {   l   e   n   =   m   a   x   C   o   u   n   t   }   H   E   A   P   3   2   [   c   o   u   n   t   >   >   >   2   >   >   >   0   ]   =   l   e   n   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   ;   +   +   i   )   {   v   a   r       i   d   =   G   L   .   s   h   a   d   e   r   s   .   i   n   d   e   x   O   f   (   r   e   s   u   l   t   [   i   ]   )   ;   H   E   A   P   3   2   [   s   h   a   d   e   r   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   i   d   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   t   t   a   c   h   e   d   S   h   a   d   e   r   s   =   _   g   l   G   e   t   A   t   t   a   c   h   e   d   S   h   a   d   e   r   s   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   A   t   t   r   i   b   L   o   c   a   t   i   o   n   (   p   r   o   g   r   a   m   ,   n   a   m   e   )   {   n   a   m   e   >   >   >   =   0   ;   r   e   t   u   r   n       G   L   c   t   x   .   g   e   t   A   t   t   r   i   b   L   o   c   a   t   i   o   n   (   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ,   U   T   F   8   T   o   S   t   r   i   n   g   (   n   a   m   e   )   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   t   t   r   i   b   L   o   c   a   t   i   o   n   =   _   g   l   G   e   t   A   t   t   r   i   b   L   o   c   a   t   i   o   n   ;   v   a   r       w   r   i   t   e   I   5   3   T   o   I   6   4   =   (   p   t   r   ,   n   u   m   )   =   >   {   H   E   A   P   U   3   2   [   p   t   r   >   >   >   2   >   >   >   0   ]   =   n   u   m   ;   v   a   r       l   o   w   e   r   =   H   E   A   P   U   3   2   [   p   t   r   >   >   >   2   >   >   >   0   ]   ;   H   E   A   P   U   3   2   [   p   t   r   +   4   >   >   >   2   >   >   >   0   ]   =   (   n   u   m   -   l   o   w   e   r   )   /   4   2   9   4   9   6   7   2   9   6   }   ;   v   a   r       w   e   b   g   l   G   e   t   E   x   t   e   n   s   i   o   n   s   =   (   )   =   >   {   v   a   r       e   x   t   s   =   g   e   t   E   m   s   c   r   i   p   t   e   n   S   u   p   p   o   r   t   e   d   E   x   t   e   n   s   i   o   n   s   (   G   L   c   t   x   )   ;   e   x   t   s   =   e   x   t   s   .   c   o   n   c   a   t   (   e   x   t   s   .   m   a   p   (   e   =   >   "   G   L   _   "   +   e   )   )   ;   r   e   t   u   r   n       e   x   t   s   }   ;   v   a   r       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   =   (   n   a   m   e   _   ,   p   ,   t   y   p   e   )   =   >   {   i   f   (   !   p   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   v   a   r       r   e   t   =   u   n   d   e   f   i   n   e   d   ;   s   w   i   t   c   h   (   n   a   m   e   _   )   {   c   a   s   e       3   6   3   4   6   :   r   e   t   =   1   ;   b   r   e   a   k   ;   c   a   s   e       3   6   3   4   4   :   i   f   (   t   y   p   e   !   =   0   &   &   t   y   p   e   !   =   1   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   }   r   e   t   u   r   n   ;   c   a   s   e       3   4   8   1   4   :   c   a   s   e       3   6   3   4   5   :   r   e   t   =   0   ;   b   r   e   a   k   ;   c   a   s   e       3   4   4   6   6   :   v   a   r       f   o   r   m   a   t   s   =   G   L   c   t   x   .   g   e   t   P   a   r   a   m   e   t   e   r   (   3   4   4   6   7   )   ;   r   e   t   =   f   o   r   m   a   t   s   ?   f   o   r   m   a   t   s   .   l   e   n   g   t   h   :   0   ;   b   r   e   a   k   ;   c   a   s   e       3   3   3   0   9   :   i   f   (   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   v   e   r   s   i   o   n   <   2   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   2   )   ;   r   e   t   u   r   n   }   r   e   t   =   w   e   b   g   l   G   e   t   E   x   t   e   n   s   i   o   n   s   (   )   .   l   e   n   g   t   h   ;   b   r   e   a   k   ;   c   a   s   e       3   3   3   0   7   :   c   a   s   e       3   3   3   0   8   :   i   f   (   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   v   e   r   s   i   o   n   <   2   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   r   e   t   u   r   n   }   r   e   t   =   n   a   m   e   _   =   =   3   3   3   0   7   ?   3   :   0   ;   b   r   e   a   k   }   i   f   (   r   e   t   =   =   =   u   n   d   e   f   i   n   e   d   )   {   v   a   r       r   e   s   u   l   t   =   G   L   c   t   x   .   g   e   t   P   a   r   a   m   e   t   e   r   (   n   a   m   e   _   )   ;   s   w   i   t   c   h   (   t   y   p   e   o   f       r   e   s   u   l   t   )   {   c   a   s   e   "   n   u   m   b   e   r   "   :   r   e   t   =   r   e   s   u   l   t   ;   b   r   e   a   k   ;   c   a   s   e   "   b   o   o   l   e   a   n   "   :   r   e   t   =   r   e   s   u   l   t   ?   1   :   0   ;   b   r   e   a   k   ;   c   a   s   e   "   s   t   r   i   n   g   "   :   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   r   e   t   u   r   n   ;   c   a   s   e   "   o   b   j   e   c   t   "   :   i   f   (   r   e   s   u   l   t   =   =   =   n   u   l   l   )   {   s   w   i   t   c   h   (   n   a   m   e   _   )   {   c   a   s   e       3   4   9   6   4   :   c   a   s   e       3   5   7   2   5   :   c   a   s   e       3   4   9   6   5   :   c   a   s   e       3   6   0   0   6   :   c   a   s   e       3   6   0   0   7   :   c   a   s   e       3   2   8   7   3   :   c   a   s   e       3   4   2   2   9   :   c   a   s   e       3   6   6   6   2   :   c   a   s   e       3   6   6   6   3   :   c   a   s   e       3   5   0   5   3   :   c   a   s   e       3   5   0   5   5   :   c   a   s   e       3   6   0   1   0   :   c   a   s   e       3   5   0   9   7   :   c   a   s   e       3   5   8   6   9   :   c   a   s   e       3   2   8   7   4   :   c   a   s   e       3   6   3   8   9   :   c   a   s   e       3   5   9   8   3   :   c   a   s   e       3   5   3   6   8   :   c   a   s   e       3   4   0   6   8   :   {   r   e   t   =   0   ;   b   r   e   a   k   }   d   e   f   a   u   l   t   :   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   r   e   t   u   r   n   }   }   }   e   l   s   e       i   f   (   r   e   s   u   l   t       i   n   s   t   a   n   c   e   o   f       F   l   o   a   t   3   2   A   r   r   a   y   |   |   r   e   s   u   l   t       i   n   s   t   a   n   c   e   o   f       U   i   n   t   3   2   A   r   r   a   y   |   |   r   e   s   u   l   t       i   n   s   t   a   n   c   e   o   f       I   n   t   3   2   A   r   r   a   y   |   |   r   e   s   u   l   t       i   n   s   t   a   n   c   e   o   f       A   r   r   a   y   )   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   r   e   s   u   l   t   .   l   e   n   g   t   h   ;   +   +   i   )   {   s   w   i   t   c   h   (   t   y   p   e   )   {   c   a   s   e       0   :   H   E   A   P   3   2   [   p   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   r   e   s   u   l   t   [   i   ]   ;   b   r   e   a   k   ;   c   a   s   e       2   :   H   E   A   P   F   3   2   [   p   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   r   e   s   u   l   t   [   i   ]   ;   b   r   e   a   k   ;   c   a   s   e       4   :   H   E   A   P   8   [   p   +   i   >   >   >   0   ]   =   r   e   s   u   l   t   [   i   ]   ?   1   :   0   ;   b   r   e   a   k   }   }   r   e   t   u   r   n   }   e   l   s   e   {   t   r   y   {   r   e   t   =   r   e   s   u   l   t   .   n   a   m   e   |   0   }   c   a   t   c   h   (   e   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   e   r   r   (   `   G   L   _   I   N   V   A   L   I   D   _   E   N   U   M       i   n       g   l   G   e   t   $   {   t   y   p   e   }   v   :       U   n   k   n   o   w   n       o   b   j   e   c   t       r   e   t   u   r   n   e   d       f   r   o   m       W   e   b   G   L       g   e   t   P   a   r   a   m   e   t   e   r   (   $   {   n   a   m   e   _   }   )   !       (   e   r   r   o   r   :       $   {   e   }   )   `   )   ;   r   e   t   u   r   n   }   }   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   e   r   r   (   `   G   L   _   I   N   V   A   L   I   D   _   E   N   U   M       i   n       g   l   G   e   t   $   {   t   y   p   e   }   v   :       N   a   t   i   v   e       c   o   d   e       c   a   l   l   i   n   g       g   l   G   e   t   $   {   t   y   p   e   }   v   (   $   {   n   a   m   e   _   }   )       a   n   d       i   t       r   e   t   u   r   n   s       $   {   r   e   s   u   l   t   }       o   f       t   y   p   e       $   {   t   y   p   e   o   f       r   e   s   u   l   t   }   !   `   )   ;   r   e   t   u   r   n   }   }   s   w   i   t   c   h   (   t   y   p   e   )   {   c   a   s   e       1   :   w   r   i   t   e   I   5   3   T   o   I   6   4   (   p   ,   r   e   t   )   ;   b   r   e   a   k   ;   c   a   s   e       0   :   H   E   A   P   3   2   [   p   >   >   >   2   >   >   >   0   ]   =   r   e   t   ;   b   r   e   a   k   ;   c   a   s   e       2   :   H   E   A   P   F   3   2   [   p   >   >   >   2   >   >   >   0   ]   =   r   e   t   ;   b   r   e   a   k   ;   c   a   s   e       4   :   H   E   A   P   8   [   p   >   >   >   0   ]   =   r   e   t   ?   1   :   0   ;   b   r   e   a   k   }   }   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   B   o   o   l   e   a   n   v   (   n   a   m   e   _   ,   p   )   {   p   >   >   >   =   0   ;   r   e   t   u   r   n       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   (   n   a   m   e   _   ,   p   ,   4   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   B   o   o   l   e   a   n   v   =   _   g   l   G   e   t   B   o   o   l   e   a   n   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   B   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   6   4   v   (   t   a   r   g   e   t   ,   v   a   l   u   e   ,   d   a   t   a   )   {   d   a   t   a   >   >   >   =   0   ;   i   f   (   !   d   a   t   a   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   w   r   i   t   e   I   5   3   T   o   I   6   4   (   d   a   t   a   ,   G   L   c   t   x   .   g   e   t   B   u   f   f   e   r   P   a   r   a   m   e   t   e   r   (   t   a   r   g   e   t   ,   v   a   l   u   e   )   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   B   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   6   4   v   =   _   g   l   G   e   t   B   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   6   4   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   B   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   v   (   t   a   r   g   e   t   ,   v   a   l   u   e   ,   d   a   t   a   )   {   d   a   t   a   >   >   >   =   0   ;   i   f   (   !   d   a   t   a   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   H   E   A   P   3   2   [   d   a   t   a   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   g   e   t   B   u   f   f   e   r   P   a   r   a   m   e   t   e   r   (   t   a   r   g   e   t   ,   v   a   l   u   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   B   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   v   =   _   g   l   G   e   t   B   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   B   u   f   f   e   r   P   o   i   n   t   e   r   v   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   p   n   a   m   e   =   =   3   5   0   0   5   )   {   v   a   r       p   t   r   =   0   ;   v   a   r       m   a   p   p   e   d   B   u   f   f   e   r   =   G   L   .   m   a   p   p   e   d   B   u   f   f   e   r   s   [   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   B   u   f   f   e   r   B   i   n   d   i   n   g   (   t   a   r   g   e   t   )   ]   ;   i   f   (   m   a   p   p   e   d   B   u   f   f   e   r   )   {   p   t   r   =   m   a   p   p   e   d   B   u   f   f   e   r   .   m   e   m   }   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   p   t   r   }   e   l   s   e   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   e   r   r   (   "   G   L   _   I   N   V   A   L   I   D   _   E   N   U   M       i   n       g   l   G   e   t   B   u   f   f   e   r   P   o   i   n   t   e   r   v   "   )   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   B   u   f   f   e   r   P   o   i   n   t   e   r   v   =   _   g   l   G   e   t   B   u   f   f   e   r   P   o   i   n   t   e   r   v   ;   v   a   r       _   g   l   G   e   t   E   r   r   o   r   =   (   )   =   >   {   v   a   r       e   r   r   o   r   =   G   L   c   t   x   .   g   e   t   E   r   r   o   r   (   )   |   |   G   L   .   l   a   s   t   E   r   r   o   r   ;   G   L   .   l   a   s   t   E   r   r   o   r   =   0   ;   r   e   t   u   r   n       e   r   r   o   r   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   E   r   r   o   r   =   _   g   l   G   e   t   E   r   r   o   r   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   F   l   o   a   t   v   (   n   a   m   e   _   ,   p   )   {   p   >   >   >   =   0   ;   r   e   t   u   r   n       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   (   n   a   m   e   _   ,   p   ,   2   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   F   l   o   a   t   v   =   _   g   l   G   e   t   F   l   o   a   t   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   F   r   a   g   D   a   t   a   L   o   c   a   t   i   o   n   (   p   r   o   g   r   a   m   ,   n   a   m   e   )   {   n   a   m   e   >   >   >   =   0   ;   r   e   t   u   r   n       G   L   c   t   x   .   g   e   t   F   r   a   g   D   a   t   a   L   o   c   a   t   i   o   n   (   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ,   U   T   F   8   T   o   S   t   r   i   n   g   (   n   a   m   e   )   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   F   r   a   g   D   a   t   a   L   o   c   a   t   i   o   n   =   _   g   l   G   e   t   F   r   a   g   D   a   t   a   L   o   c   a   t   i   o   n   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   F   r   a   m   e   b   u   f   f   e   r   A   t   t   a   c   h   m   e   n   t   P   a   r   a   m   e   t   e   r   i   v   (   t   a   r   g   e   t   ,   a   t   t   a   c   h   m   e   n   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   v   a   r       r   e   s   u   l   t   =   G   L   c   t   x   .   g   e   t   F   r   a   m   e   b   u   f   f   e   r   A   t   t   a   c   h   m   e   n   t   P   a   r   a   m   e   t   e   r   (   t   a   r   g   e   t   ,   a   t   t   a   c   h   m   e   n   t   ,   p   n   a   m   e   )   ;   i   f   (   r   e   s   u   l   t       i   n   s   t   a   n   c   e   o   f       W   e   b   G   L   R   e   n   d   e   r   b   u   f   f   e   r   |   |   r   e   s   u   l   t       i   n   s   t   a   n   c   e   o   f       W   e   b   G   L   T   e   x   t   u   r   e   )   {   r   e   s   u   l   t   =   r   e   s   u   l   t   .   n   a   m   e   |   0   }   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   r   e   s   u   l   t   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   F   r   a   m   e   b   u   f   f   e   r   A   t   t   a   c   h   m   e   n   t   P   a   r   a   m   e   t   e   r   i   v   =   _   g   l   G   e   t   F   r   a   m   e   b   u   f   f   e   r   A   t   t   a   c   h   m   e   n   t   P   a   r   a   m   e   t   e   r   i   v   ;   v   a   r       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   I   n   d   e   x   e   d   =   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   d   a   t   a   ,   t   y   p   e   )   =   >   {   i   f   (   !   d   a   t   a   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   v   a   r       r   e   s   u   l   t   =   G   L   c   t   x   .   g   e   t   I   n   d   e   x   e   d   P   a   r   a   m   e   t   e   r   (   t   a   r   g   e   t   ,   i   n   d   e   x   )   ;   v   a   r       r   e   t   ;   s   w   i   t   c   h   (   t   y   p   e   o   f       r   e   s   u   l   t   )   {   c   a   s   e   "   b   o   o   l   e   a   n   "   :   r   e   t   =   r   e   s   u   l   t   ?   1   :   0   ;   b   r   e   a   k   ;   c   a   s   e   "   n   u   m   b   e   r   "   :   r   e   t   =   r   e   s   u   l   t   ;   b   r   e   a   k   ;   c   a   s   e   "   o   b   j   e   c   t   "   :   i   f   (   r   e   s   u   l   t   =   =   =   n   u   l   l   )   {   s   w   i   t   c   h   (   t   a   r   g   e   t   )   {   c   a   s   e       3   5   9   8   3   :   c   a   s   e       3   5   3   6   8   :   r   e   t   =   0   ;   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   r   e   t   u   r   n   }   }   }   e   l   s   e       i   f   (   r   e   s   u   l   t       i   n   s   t   a   n   c   e   o   f       W   e   b   G   L   B   u   f   f   e   r   )   {   r   e   t   =   r   e   s   u   l   t   .   n   a   m   e   |   0   }   e   l   s   e   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   r   e   t   u   r   n   }   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   r   e   t   u   r   n   }   s   w   i   t   c   h   (   t   y   p   e   )   {   c   a   s   e       1   :   w   r   i   t   e   I   5   3   T   o   I   6   4   (   d   a   t   a   ,   r   e   t   )   ;   b   r   e   a   k   ;   c   a   s   e       0   :   H   E   A   P   3   2   [   d   a   t   a   >   >   >   2   >   >   >   0   ]   =   r   e   t   ;   b   r   e   a   k   ;   c   a   s   e       2   :   H   E   A   P   F   3   2   [   d   a   t   a   >   >   >   2   >   >   >   0   ]   =   r   e   t   ;   b   r   e   a   k   ;   c   a   s   e       4   :   H   E   A   P   8   [   d   a   t   a   >   >   >   0   ]   =   r   e   t   ?   1   :   0   ;   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   t   h   r   o   w   "   i   n   t   e   r   n   a   l       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   I   n   d   e   x   e   d   (   )       e   r   r   o   r   ,       b   a   d       t   y   p   e   :       "   +   t   y   p   e   }   }   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   I   n   t   e   g   e   r   6   4   i   _   v   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   d   a   t   a   )   {   d   a   t   a   >   >   >   =   0   ;   r   e   t   u   r   n       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   I   n   d   e   x   e   d   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   d   a   t   a   ,   1   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   g   e   r   6   4   i   _   v   =   _   g   l   G   e   t   I   n   t   e   g   e   r   6   4   i   _   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   I   n   t   e   g   e   r   6   4   v   (   n   a   m   e   _   ,   p   )   {   p   >   >   >   =   0   ;   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   (   n   a   m   e   _   ,   p   ,   1   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   g   e   r   6   4   v   =   _   g   l   G   e   t   I   n   t   e   g   e   r   6   4   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   I   n   t   e   g   e   r   i   _   v   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   d   a   t   a   )   {   d   a   t   a   >   >   >   =   0   ;   r   e   t   u   r   n       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   I   n   d   e   x   e   d   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   d   a   t   a   ,   0   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   g   e   r   i   _   v   =   _   g   l   G   e   t   I   n   t   e   g   e   r   i   _   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   I   n   t   e   g   e   r   v   (   n   a   m   e   _   ,   p   )   {   p   >   >   >   =   0   ;   r   e   t   u   r   n       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   (   n   a   m   e   _   ,   p   ,   0   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   g   e   r   v   =   _   g   l   G   e   t   I   n   t   e   g   e   r   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   I   n   t   e   r   n   a   l   f   o   r   m   a   t   i   v   (   t   a   r   g   e   t   ,   i   n   t   e   r   n   a   l   f   o   r   m   a   t   ,   p   n   a   m   e   ,   b   u   f   S   i   z   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   b   u   f   S   i   z   e   <   0   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   v   a   r       r   e   t   =   G   L   c   t   x   .   g   e   t   I   n   t   e   r   n   a   l   f   o   r   m   a   t   P   a   r   a   m   e   t   e   r   (   t   a   r   g   e   t   ,   i   n   t   e   r   n   a   l   f   o   r   m   a   t   ,   p   n   a   m   e   )   ;   i   f   (   r   e   t   =   =   =   n   u   l   l   )   r   e   t   u   r   n   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   r   e   t   .   l   e   n   g   t   h   &   &   i   <   b   u   f   S   i   z   e   ;   +   +   i   )   {   H   E   A   P   3   2   [   p   a   r   a   m   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   r   e   t   [   i   ]   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   r   n   a   l   f   o   r   m   a   t   i   v   =   _   g   l   G   e   t   I   n   t   e   r   n   a   l   f   o   r   m   a   t   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   P   r   o   g   r   a   m   B   i   n   a   r   y   (   p   r   o   g   r   a   m   ,   b   u   f   S   i   z   e   ,   l   e   n   g   t   h   ,   b   i   n   a   r   y   F   o   r   m   a   t   ,   b   i   n   a   r   y   )   {   l   e   n   g   t   h   >   >   >   =   0   ;   b   i   n   a   r   y   F   o   r   m   a   t   >   >   >   =   0   ;   b   i   n   a   r   y   >   >   >   =   0   ;   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   2   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   P   r   o   g   r   a   m   B   i   n   a   r   y   =   _   g   l   G   e   t   P   r   o   g   r   a   m   B   i   n   a   r   y   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   P   r   o   g   r   a   m   I   n   f   o   L   o   g   (   p   r   o   g   r   a   m   ,   m   a   x   L   e   n   g   t   h   ,   l   e   n   g   t   h   ,   i   n   f   o   L   o   g   )   {   l   e   n   g   t   h   >   >   >   =   0   ;   i   n   f   o   L   o   g   >   >   >   =   0   ;   v   a   r       l   o   g   =   G   L   c   t   x   .   g   e   t   P   r   o   g   r   a   m   I   n   f   o   L   o   g   (   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   )   ;   i   f   (   l   o   g   =   =   =   n   u   l   l   )   l   o   g   =   "   (   u   n   k   n   o   w   n       e   r   r   o   r   )   "   ;   v   a   r       n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   =   m   a   x   L   e   n   g   t   h   >   0   &   &   i   n   f   o   L   o   g   ?   s   t   r   i   n   g   T   o   U   T   F   8   (   l   o   g   ,   i   n   f   o   L   o   g   ,   m   a   x   L   e   n   g   t   h   )   :   0   ;   i   f   (   l   e   n   g   t   h   )   H   E   A   P   3   2   [   l   e   n   g   t   h   >   >   >   2   >   >   >   0   ]   =   n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   P   r   o   g   r   a   m   I   n   f   o   L   o   g   =   _   g   l   G   e   t   P   r   o   g   r   a   m   I   n   f   o   L   o   g   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   P   r   o   g   r   a   m   i   v   (   p   r   o   g   r   a   m   ,   p   n   a   m   e   ,   p   )   {   p   >   >   >   =   0   ;   i   f   (   !   p   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   i   f   (   p   r   o   g   r   a   m   >   =   G   L   .   c   o   u   n   t   e   r   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   i   f   (   p   n   a   m   e   =   =   3   5   7   1   6   )   {   v   a   r       l   o   g   =   G   L   c   t   x   .   g   e   t   P   r   o   g   r   a   m   I   n   f   o   L   o   g   (   p   r   o   g   r   a   m   )   ;   i   f   (   l   o   g   =   =   =   n   u   l   l   )   l   o   g   =   "   (   u   n   k   n   o   w   n       e   r   r   o   r   )   "   ;   H   E   A   P   3   2   [   p   >   >   >   2   >   >   >   0   ]   =   l   o   g   .   l   e   n   g   t   h   +   1   }   e   l   s   e       i   f   (   p   n   a   m   e   =   =   3   5   7   1   9   )   {   i   f   (   !   p   r   o   g   r   a   m   .   m   a   x   U   n   i   f   o   r   m   L   e   n   g   t   h   )   {   v   a   r       n   u   m   A   c   t   i   v   e   U   n   i   f   o   r   m   s   =   G   L   c   t   x   .   g   e   t   P   r   o   g   r   a   m   P   a   r   a   m   e   t   e   r   (   p   r   o   g   r   a   m   ,   3   5   7   1   8   )   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   u   m   A   c   t   i   v   e   U   n   i   f   o   r   m   s   ;   +   +   i   )   {   p   r   o   g   r   a   m   .   m   a   x   U   n   i   f   o   r   m   L   e   n   g   t   h   =   M   a   t   h   .   m   a   x   (   p   r   o   g   r   a   m   .   m   a   x   U   n   i   f   o   r   m   L   e   n   g   t   h   ,   G   L   c   t   x   .   g   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   (   p   r   o   g   r   a   m   ,   i   )   .   n   a   m   e   .   l   e   n   g   t   h   +   1   )   }   }   H   E   A   P   3   2   [   p   >   >   >   2   >   >   >   0   ]   =   p   r   o   g   r   a   m   .   m   a   x   U   n   i   f   o   r   m   L   e   n   g   t   h   }   e   l   s   e       i   f   (   p   n   a   m   e   =   =   3   5   7   2   2   )   {   i   f   (   !   p   r   o   g   r   a   m   .   m   a   x   A   t   t   r   i   b   u   t   e   L   e   n   g   t   h   )   {   v   a   r       n   u   m   A   c   t   i   v   e   A   t   t   r   i   b   u   t   e   s   =   G   L   c   t   x   .   g   e   t   P   r   o   g   r   a   m   P   a   r   a   m   e   t   e   r   (   p   r   o   g   r   a   m   ,   3   5   7   2   1   )   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   u   m   A   c   t   i   v   e   A   t   t   r   i   b   u   t   e   s   ;   +   +   i   )   {   p   r   o   g   r   a   m   .   m   a   x   A   t   t   r   i   b   u   t   e   L   e   n   g   t   h   =   M   a   t   h   .   m   a   x   (   p   r   o   g   r   a   m   .   m   a   x   A   t   t   r   i   b   u   t   e   L   e   n   g   t   h   ,   G   L   c   t   x   .   g   e   t   A   c   t   i   v   e   A   t   t   r   i   b   (   p   r   o   g   r   a   m   ,   i   )   .   n   a   m   e   .   l   e   n   g   t   h   +   1   )   }   }   H   E   A   P   3   2   [   p   >   >   >   2   >   >   >   0   ]   =   p   r   o   g   r   a   m   .   m   a   x   A   t   t   r   i   b   u   t   e   L   e   n   g   t   h   }   e   l   s   e       i   f   (   p   n   a   m   e   =   =   3   5   3   8   1   )   {   i   f   (   !   p   r   o   g   r   a   m   .   m   a   x   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   L   e   n   g   t   h   )   {   v   a   r       n   u   m   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   s   =   G   L   c   t   x   .   g   e   t   P   r   o   g   r   a   m   P   a   r   a   m   e   t   e   r   (   p   r   o   g   r   a   m   ,   3   5   3   8   2   )   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   u   m   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   s   ;   +   +   i   )   {   p   r   o   g   r   a   m   .   m   a   x   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   L   e   n   g   t   h   =   M   a   t   h   .   m   a   x   (   p   r   o   g   r   a   m   .   m   a   x   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   L   e   n   g   t   h   ,   G   L   c   t   x   .   g   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   (   p   r   o   g   r   a   m   ,   i   )   .   l   e   n   g   t   h   +   1   )   }   }   H   E   A   P   3   2   [   p   >   >   >   2   >   >   >   0   ]   =   p   r   o   g   r   a   m   .   m   a   x   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   L   e   n   g   t   h   }   e   l   s   e   {   H   E   A   P   3   2   [   p   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   g   e   t   P   r   o   g   r   a   m   P   a   r   a   m   e   t   e   r   (   p   r   o   g   r   a   m   ,   p   n   a   m   e   )   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   P   r   o   g   r   a   m   i   v   =   _   g   l   G   e   t   P   r   o   g   r   a   m   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   i   6   4   v   E   X   T   (   i   d   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   v   a   r       q   u   e   r   y   =   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   ;   v   a   r       p   a   r   a   m   ;   i   f   (   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   v   e   r   s   i   o   n   <   2   )   {   p   a   r   a   m   =   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   [   "   g   e   t   Q   u   e   r   y   O   b   j   e   c   t   E   X   T   "   ]   (   q   u   e   r   y   ,   p   n   a   m   e   )   }   e   l   s   e   {   p   a   r   a   m   =   G   L   c   t   x   .   g   e   t   Q   u   e   r   y   P   a   r   a   m   e   t   e   r   (   q   u   e   r   y   ,   p   n   a   m   e   )   }   v   a   r       r   e   t   ;   i   f   (   t   y   p   e   o   f       p   a   r   a   m   =   =   "   b   o   o   l   e   a   n   "   )   {   r   e   t   =   p   a   r   a   m   ?   1   :   0   }   e   l   s   e   {   r   e   t   =   p   a   r   a   m   }   w   r   i   t   e   I   5   3   T   o   I   6   4   (   p   a   r   a   m   s   ,   r   e   t   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   i   6   4   v   E   X   T   =   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   i   6   4   v   E   X   T   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   i   v   E   X   T   (   i   d   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   v   a   r       q   u   e   r   y   =   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   ;   v   a   r       p   a   r   a   m   =   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   [   "   g   e   t   Q   u   e   r   y   O   b   j   e   c   t   E   X   T   "   ]   (   q   u   e   r   y   ,   p   n   a   m   e   )   ;   v   a   r       r   e   t   ;   i   f   (   t   y   p   e   o   f       p   a   r   a   m   =   =   "   b   o   o   l   e   a   n   "   )   {   r   e   t   =   p   a   r   a   m   ?   1   :   0   }   e   l   s   e   {   r   e   t   =   p   a   r   a   m   }   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   r   e   t   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   i   v   E   X   T   =   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   i   v   E   X   T   ;   v   a   r       _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   6   4   v   E   X   T   =   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   i   6   4   v   E   X   T   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   6   4   v   E   X   T   =   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   6   4   v   E   X   T   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   v   (   i   d   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   v   a   r       q   u   e   r   y   =   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   ;   v   a   r       p   a   r   a   m   =   G   L   c   t   x   .   g   e   t   Q   u   e   r   y   P   a   r   a   m   e   t   e   r   (   q   u   e   r   y   ,   p   n   a   m   e   )   ;   v   a   r       r   e   t   ;   i   f   (   t   y   p   e   o   f       p   a   r   a   m   =   =   "   b   o   o   l   e   a   n   "   )   {   r   e   t   =   p   a   r   a   m   ?   1   :   0   }   e   l   s   e   {   r   e   t   =   p   a   r   a   m   }   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   r   e   t   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   v   =   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   v   ;   v   a   r       _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   v   E   X   T   =   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   i   v   E   X   T   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   v   E   X   T   =   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   v   E   X   T   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   Q   u   e   r   y   i   v   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   g   e   t   Q   u   e   r   y   (   t   a   r   g   e   t   ,   p   n   a   m   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   i   v   =   _   g   l   G   e   t   Q   u   e   r   y   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   Q   u   e   r   y   i   v   E   X   T   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   [   "   g   e   t   Q   u   e   r   y   E   X   T   "   ]   (   t   a   r   g   e   t   ,   p   n   a   m   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   i   v   E   X   T   =   _   g   l   G   e   t   Q   u   e   r   y   i   v   E   X   T   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   R   e   n   d   e   r   b   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   v   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   g   e   t   R   e   n   d   e   r   b   u   f   f   e   r   P   a   r   a   m   e   t   e   r   (   t   a   r   g   e   t   ,   p   n   a   m   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   R   e   n   d   e   r   b   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   v   =   _   g   l   G   e   t   R   e   n   d   e   r   b   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   v   (   s   a   m   p   l   e   r   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   H   E   A   P   F   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   g   e   t   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   (   G   L   .   s   a   m   p   l   e   r   s   [   s   a   m   p   l   e   r   ]   ,   p   n   a   m   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   v   =   _   g   l   G   e   t   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   v   (   s   a   m   p   l   e   r   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   g   e   t   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   (   G   L   .   s   a   m   p   l   e   r   s   [   s   a   m   p   l   e   r   ]   ,   p   n   a   m   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   v   =   _   g   l   G   e   t   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   S   h   a   d   e   r   I   n   f   o   L   o   g   (   s   h   a   d   e   r   ,   m   a   x   L   e   n   g   t   h   ,   l   e   n   g   t   h   ,   i   n   f   o   L   o   g   )   {   l   e   n   g   t   h   >   >   >   =   0   ;   i   n   f   o   L   o   g   >   >   >   =   0   ;   v   a   r       l   o   g   =   G   L   c   t   x   .   g   e   t   S   h   a   d   e   r   I   n   f   o   L   o   g   (   G   L   .   s   h   a   d   e   r   s   [   s   h   a   d   e   r   ]   )   ;   i   f   (   l   o   g   =   =   =   n   u   l   l   )   l   o   g   =   "   (   u   n   k   n   o   w   n       e   r   r   o   r   )   "   ;   v   a   r       n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   =   m   a   x   L   e   n   g   t   h   >   0   &   &   i   n   f   o   L   o   g   ?   s   t   r   i   n   g   T   o   U   T   F   8   (   l   o   g   ,   i   n   f   o   L   o   g   ,   m   a   x   L   e   n   g   t   h   )   :   0   ;   i   f   (   l   e   n   g   t   h   )   H   E   A   P   3   2   [   l   e   n   g   t   h   >   >   >   2   >   >   >   0   ]   =   n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   h   a   d   e   r   I   n   f   o   L   o   g   =   _   g   l   G   e   t   S   h   a   d   e   r   I   n   f   o   L   o   g   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   S   h   a   d   e   r   P   r   e   c   i   s   i   o   n   F   o   r   m   a   t   (   s   h   a   d   e   r   T   y   p   e   ,   p   r   e   c   i   s   i   o   n   T   y   p   e   ,   r   a   n   g   e   ,   p   r   e   c   i   s   i   o   n   )   {   r   a   n   g   e   >   >   >   =   0   ;   p   r   e   c   i   s   i   o   n   >   >   >   =   0   ;   v   a   r       r   e   s   u   l   t   =   G   L   c   t   x   .   g   e   t   S   h   a   d   e   r   P   r   e   c   i   s   i   o   n   F   o   r   m   a   t   (   s   h   a   d   e   r   T   y   p   e   ,   p   r   e   c   i   s   i   o   n   T   y   p   e   )   ;   H   E   A   P   3   2   [   r   a   n   g   e   >   >   >   2   >   >   >   0   ]   =   r   e   s   u   l   t   .   r   a   n   g   e   M   i   n   ;   H   E   A   P   3   2   [   r   a   n   g   e   +   4   >   >   >   2   >   >   >   0   ]   =   r   e   s   u   l   t   .   r   a   n   g   e   M   a   x   ;   H   E   A   P   3   2   [   p   r   e   c   i   s   i   o   n   >   >   >   2   >   >   >   0   ]   =   r   e   s   u   l   t   .   p   r   e   c   i   s   i   o   n   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   h   a   d   e   r   P   r   e   c   i   s   i   o   n   F   o   r   m   a   t   =   _   g   l   G   e   t   S   h   a   d   e   r   P   r   e   c   i   s   i   o   n   F   o   r   m   a   t   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   S   h   a   d   e   r   S   o   u   r   c   e   (   s   h   a   d   e   r   ,   b   u   f   S   i   z   e   ,   l   e   n   g   t   h   ,   s   o   u   r   c   e   )   {   l   e   n   g   t   h   >   >   >   =   0   ;   s   o   u   r   c   e   >   >   >   =   0   ;   v   a   r       r   e   s   u   l   t   =   G   L   c   t   x   .   g   e   t   S   h   a   d   e   r   S   o   u   r   c   e   (   G   L   .   s   h   a   d   e   r   s   [   s   h   a   d   e   r   ]   )   ;   i   f   (   !   r   e   s   u   l   t   )   r   e   t   u   r   n   ;   v   a   r       n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   =   b   u   f   S   i   z   e   >   0   &   &   s   o   u   r   c   e   ?   s   t   r   i   n   g   T   o   U   T   F   8   (   r   e   s   u   l   t   ,   s   o   u   r   c   e   ,   b   u   f   S   i   z   e   )   :   0   ;   i   f   (   l   e   n   g   t   h   )   H   E   A   P   3   2   [   l   e   n   g   t   h   >   >   >   2   >   >   >   0   ]   =   n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   h   a   d   e   r   S   o   u   r   c   e   =   _   g   l   G   e   t   S   h   a   d   e   r   S   o   u   r   c   e   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   S   h   a   d   e   r   i   v   (   s   h   a   d   e   r   ,   p   n   a   m   e   ,   p   )   {   p   >   >   >   =   0   ;   i   f   (   !   p   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   i   f   (   p   n   a   m   e   =   =   3   5   7   1   6   )   {   v   a   r       l   o   g   =   G   L   c   t   x   .   g   e   t   S   h   a   d   e   r   I   n   f   o   L   o   g   (   G   L   .   s   h   a   d   e   r   s   [   s   h   a   d   e   r   ]   )   ;   i   f   (   l   o   g   =   =   =   n   u   l   l   )   l   o   g   =   "   (   u   n   k   n   o   w   n       e   r   r   o   r   )   "   ;   v   a   r       l   o   g   L   e   n   g   t   h   =   l   o   g   ?   l   o   g   .   l   e   n   g   t   h   +   1   :   0   ;   H   E   A   P   3   2   [   p   >   >   >   2   >   >   >   0   ]   =   l   o   g   L   e   n   g   t   h   }   e   l   s   e       i   f   (   p   n   a   m   e   =   =   3   5   7   2   0   )   {   v   a   r       s   o   u   r   c   e   =   G   L   c   t   x   .   g   e   t   S   h   a   d   e   r   S   o   u   r   c   e   (   G   L   .   s   h   a   d   e   r   s   [   s   h   a   d   e   r   ]   )   ;   v   a   r       s   o   u   r   c   e   L   e   n   g   t   h   =   s   o   u   r   c   e   ?   s   o   u   r   c   e   .   l   e   n   g   t   h   +   1   :   0   ;   H   E   A   P   3   2   [   p   >   >   >   2   >   >   >   0   ]   =   s   o   u   r   c   e   L   e   n   g   t   h   }   e   l   s   e   {   H   E   A   P   3   2   [   p   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   g   e   t   S   h   a   d   e   r   P   a   r   a   m   e   t   e   r   (   G   L   .   s   h   a   d   e   r   s   [   s   h   a   d   e   r   ]   ,   p   n   a   m   e   )   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   h   a   d   e   r   i   v   =   _   g   l   G   e   t   S   h   a   d   e   r   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   S   t   r   i   n   g   (   n   a   m   e   _   )   {   v   a   r       r   e   t   =   G   L   .   s   t   r   i   n   g   C   a   c   h   e   [   n   a   m   e   _   ]   ;   i   f   (   !   r   e   t   )   {   s   w   i   t   c   h   (   n   a   m   e   _   )   {   c   a   s   e       7   9   3   9   :   r   e   t   =   s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   (   w   e   b   g   l   G   e   t   E   x   t   e   n   s   i   o   n   s   (   )   .   j   o   i   n   (   "       "   )   )   ;   b   r   e   a   k   ;   c   a   s   e       7   9   3   6   :   c   a   s   e       7   9   3   7   :   c   a   s   e       3   7   4   4   5   :   c   a   s   e       3   7   4   4   6   :   v   a   r       s   =   G   L   c   t   x   .   g   e   t   P   a   r   a   m   e   t   e   r   (   n   a   m   e   _   )   ;   i   f   (   !   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   }   r   e   t   =   s   ?   s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   (   s   )   :   0   ;   b   r   e   a   k   ;   c   a   s   e       7   9   3   8   :   v   a   r       w   e   b   G   L   V   e   r   s   i   o   n   =   G   L   c   t   x   .   g   e   t   P   a   r   a   m   e   t   e   r   (   7   9   3   8   )   ;   v   a   r       g   l   V   e   r   s   i   o   n   =   `   O   p   e   n   G   L       E   S       2   .   0       (   $   {   w   e   b   G   L   V   e   r   s   i   o   n   }   )   `   ;   i   f   (   t   r   u   e   )   g   l   V   e   r   s   i   o   n   =   `   O   p   e   n   G   L       E   S       3   .   0       (   $   {   w   e   b   G   L   V   e   r   s   i   o   n   }   )   `   ;   r   e   t   =   s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   (   g   l   V   e   r   s   i   o   n   )   ;   b   r   e   a   k   ;   c   a   s   e       3   5   7   2   4   :   v   a   r       g   l   s   l   V   e   r   s   i   o   n   =   G   L   c   t   x   .   g   e   t   P   a   r   a   m   e   t   e   r   (   3   5   7   2   4   )   ;   v   a   r       v   e   r   _   r   e   =   /   ^   W   e   b   G   L       G   L   S   L       E   S       (   [   0   -   9   ]   \   .   [   0   -   9   ]   [   0   -   9   ]   ?   )   (   ?   :   $   |       .   *   )   /   ;   v   a   r       v   e   r   _   n   u   m   =   g   l   s   l   V   e   r   s   i   o   n   .   m   a   t   c   h   (   v   e   r   _   r   e   )   ;   i   f   (   v   e   r   _   n   u   m   !   =   =   n   u   l   l   )   {   i   f   (   v   e   r   _   n   u   m   [   1   ]   .   l   e   n   g   t   h   =   =   3   )   v   e   r   _   n   u   m   [   1   ]   =   v   e   r   _   n   u   m   [   1   ]   +   "   0   "   ;   g   l   s   l   V   e   r   s   i   o   n   =   `   O   p   e   n   G   L       E   S       G   L   S   L       E   S       $   {   v   e   r   _   n   u   m   [   1   ]   }       (   $   {   g   l   s   l   V   e   r   s   i   o   n   }   )   `   }   r   e   t   =   s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   (   g   l   s   l   V   e   r   s   i   o   n   )   ;   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   }   G   L   .   s   t   r   i   n   g   C   a   c   h   e   [   n   a   m   e   _   ]   =   r   e   t   }   r   e   t   u   r   n       r   e   t   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   t   r   i   n   g   =   _   g   l   G   e   t   S   t   r   i   n   g   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   S   t   r   i   n   g   i   (   n   a   m   e   ,   i   n   d   e   x   )   {   i   f   (   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   v   e   r   s   i   o   n   <   2   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   2   )   ;   r   e   t   u   r   n       0   }   v   a   r       s   t   r   i   n   g   i   C   a   c   h   e   =   G   L   .   s   t   r   i   n   g   i   C   a   c   h   e   [   n   a   m   e   ]   ;   i   f   (   s   t   r   i   n   g   i   C   a   c   h   e   )   {   i   f   (   i   n   d   e   x   <   0   |   |   i   n   d   e   x   >   =   s   t   r   i   n   g   i   C   a   c   h   e   .   l   e   n   g   t   h   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n       0   }   r   e   t   u   r   n       s   t   r   i   n   g   i   C   a   c   h   e   [   i   n   d   e   x   ]   }   s   w   i   t   c   h   (   n   a   m   e   )   {   c   a   s   e       7   9   3   9   :   v   a   r       e   x   t   s   =   w   e   b   g   l   G   e   t   E   x   t   e   n   s   i   o   n   s   (   )   .   m   a   p   (   s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   )   ;   s   t   r   i   n   g   i   C   a   c   h   e   =   G   L   .   s   t   r   i   n   g   i   C   a   c   h   e   [   n   a   m   e   ]   =   e   x   t   s   ;   i   f   (   i   n   d   e   x   <   0   |   |   i   n   d   e   x   >   =   s   t   r   i   n   g   i   C   a   c   h   e   .   l   e   n   g   t   h   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n       0   }   r   e   t   u   r   n       s   t   r   i   n   g   i   C   a   c   h   e   [   i   n   d   e   x   ]   ;   d   e   f   a   u   l   t   :   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   r   e   t   u   r   n       0   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   t   r   i   n   g   i   =   _   g   l   G   e   t   S   t   r   i   n   g   i   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   S   y   n   c   i   v   (   s   y   n   c   ,   p   n   a   m   e   ,   b   u   f   S   i   z   e   ,   l   e   n   g   t   h   ,   v   a   l   u   e   s   )   {   s   y   n   c   >   >   >   =   0   ;   l   e   n   g   t   h   >   >   >   =   0   ;   v   a   l   u   e   s   >   >   >   =   0   ;   i   f   (   b   u   f   S   i   z   e   <   0   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   i   f   (   !   v   a   l   u   e   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   v   a   r       r   e   t   =   G   L   c   t   x   .   g   e   t   S   y   n   c   P   a   r   a   m   e   t   e   r   (   G   L   .   s   y   n   c   s   [   s   y   n   c   ]   ,   p   n   a   m   e   )   ;   i   f   (   r   e   t   !   =   =   n   u   l   l   )   {   H   E   A   P   3   2   [   v   a   l   u   e   s   >   >   >   2   >   >   >   0   ]   =   r   e   t   ;   i   f   (   l   e   n   g   t   h   )   H   E   A   P   3   2   [   l   e   n   g   t   h   >   >   >   2   >   >   >   0   ]   =   1   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   y   n   c   i   v   =   _   g   l   G   e   t   S   y   n   c   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   T   e   x   P   a   r   a   m   e   t   e   r   f   v   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   H   E   A   P   F   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   g   e   t   T   e   x   P   a   r   a   m   e   t   e   r   (   t   a   r   g   e   t   ,   p   n   a   m   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   T   e   x   P   a   r   a   m   e   t   e   r   f   v   =   _   g   l   G   e   t   T   e   x   P   a   r   a   m   e   t   e   r   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   T   e   x   P   a   r   a   m   e   t   e   r   i   v   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   g   e   t   T   e   x   P   a   r   a   m   e   t   e   r   (   t   a   r   g   e   t   ,   p   n   a   m   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   T   e   x   P   a   r   a   m   e   t   e   r   i   v   =   _   g   l   G   e   t   T   e   x   P   a   r   a   m   e   t   e   r   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   V   a   r   y   i   n   g   (   p   r   o   g   r   a   m   ,   i   n   d   e   x   ,   b   u   f   S   i   z   e   ,   l   e   n   g   t   h   ,   s   i   z   e   ,   t   y   p   e   ,   n   a   m   e   )   {   l   e   n   g   t   h   >   >   >   =   0   ;   s   i   z   e   >   >   >   =   0   ;   t   y   p   e   >   >   >   =   0   ;   n   a   m   e   >   >   >   =   0   ;   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   v   a   r       i   n   f   o   =   G   L   c   t   x   .   g   e   t   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   V   a   r   y   i   n   g   (   p   r   o   g   r   a   m   ,   i   n   d   e   x   )   ;   i   f   (   !   i   n   f   o   )   r   e   t   u   r   n   ;   i   f   (   n   a   m   e   &   &   b   u   f   S   i   z   e   >   0   )   {   v   a   r       n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   =   s   t   r   i   n   g   T   o   U   T   F   8   (   i   n   f   o   .   n   a   m   e   ,   n   a   m   e   ,   b   u   f   S   i   z   e   )   ;   i   f   (   l   e   n   g   t   h   )   H   E   A   P   3   2   [   l   e   n   g   t   h   >   >   >   2   >   >   >   0   ]   =   n   u   m   B   y   t   e   s   W   r   i   t   t   e   n   E   x   c   l   N   u   l   l   }   e   l   s   e   {   i   f   (   l   e   n   g   t   h   )   H   E   A   P   3   2   [   l   e   n   g   t   h   >   >   >   2   >   >   >   0   ]   =   0   }   i   f   (   s   i   z   e   )   H   E   A   P   3   2   [   s   i   z   e   >   >   >   2   >   >   >   0   ]   =   i   n   f   o   .   s   i   z   e   ;   i   f   (   t   y   p   e   )   H   E   A   P   3   2   [   t   y   p   e   >   >   >   2   >   >   >   0   ]   =   i   n   f   o   .   t   y   p   e   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   V   a   r   y   i   n   g   =   _   g   l   G   e   t   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   V   a   r   y   i   n   g   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   U   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   (   p   r   o   g   r   a   m   ,   u   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   )   {   u   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   >   >   >   =   0   ;   r   e   t   u   r   n       G   L   c   t   x   .   g   e   t   U   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   (   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ,   U   T   F   8   T   o   S   t   r   i   n   g   (   u   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   )   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   =   _   g   l   G   e   t   U   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   U   n   i   f   o   r   m   I   n   d   i   c   e   s   (   p   r   o   g   r   a   m   ,   u   n   i   f   o   r   m   C   o   u   n   t   ,   u   n   i   f   o   r   m   N   a   m   e   s   ,   u   n   i   f   o   r   m   I   n   d   i   c   e   s   )   {   u   n   i   f   o   r   m   N   a   m   e   s   >   >   >   =   0   ;   u   n   i   f   o   r   m   I   n   d   i   c   e   s   >   >   >   =   0   ;   i   f   (   !   u   n   i   f   o   r   m   I   n   d   i   c   e   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   i   f   (   u   n   i   f   o   r   m   C   o   u   n   t   >   0   &   &   (   u   n   i   f   o   r   m   N   a   m   e   s   =   =   0   |   |   u   n   i   f   o   r   m   I   n   d   i   c   e   s   =   =   0   )   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   v   a   r       n   a   m   e   s   =   [   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   u   n   i   f   o   r   m   C   o   u   n   t   ;   i   +   +   )   n   a   m   e   s   .   p   u   s   h   (   U   T   F   8   T   o   S   t   r   i   n   g   (   H   E   A   P   3   2   [   u   n   i   f   o   r   m   N   a   m   e   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   )   )   ;   v   a   r       r   e   s   u   l   t   =   G   L   c   t   x   .   g   e   t   U   n   i   f   o   r   m   I   n   d   i   c   e   s   (   p   r   o   g   r   a   m   ,   n   a   m   e   s   )   ;   i   f   (   !   r   e   s   u   l   t   )   r   e   t   u   r   n   ;   v   a   r       l   e   n   =   r   e   s   u   l   t   .   l   e   n   g   t   h   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   ;   i   +   +   )   {   H   E   A   P   3   2   [   u   n   i   f   o   r   m   I   n   d   i   c   e   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   r   e   s   u   l   t   [   i   ]   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   I   n   d   i   c   e   s   =   _   g   l   G   e   t   U   n   i   f   o   r   m   I   n   d   i   c   e   s   ;   v   a   r       j   s   t   o   i   _   q   =   s   t   r   =   >   p   a   r   s   e   I   n   t   (   s   t   r   )   ;   v   a   r       w   e   b   g   l   G   e   t   L   e   f   t   B   r   a   c   e   P   o   s   =   n   a   m   e   =   >   n   a   m   e   .   s   l   i   c   e   (   -   1   )   =   =   "   ]   "   &   &   n   a   m   e   .   l   a   s   t   I   n   d   e   x   O   f   (   "   [   "   )   ;   v   a   r       w   e   b   g   l   P   r   e   p   a   r   e   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   s   B   e   f   o   r   e   F   i   r   s   t   U   s   e   =   p   r   o   g   r   a   m   =   >   {   v   a   r       u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   =   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   ,   u   n   i   f   o   r   m   S   i   z   e   A   n   d   I   d   s   B   y   N   a   m   e   =   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   S   i   z   e   A   n   d   I   d   s   B   y   N   a   m   e   ,   i   ,   j   ;   i   f   (   !   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   )   {   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   =   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   =   {   }   ;   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   A   r   r   a   y   N   a   m   e   s   B   y   I   d   =   {   }   ;   v   a   r       n   u   m   A   c   t   i   v   e   U   n   i   f   o   r   m   s   =   G   L   c   t   x   .   g   e   t   P   r   o   g   r   a   m   P   a   r   a   m   e   t   e   r   (   p   r   o   g   r   a   m   ,   3   5   7   1   8   )   ;   f   o   r   (   i   =   0   ;   i   <   n   u   m   A   c   t   i   v   e   U   n   i   f   o   r   m   s   ;   +   +   i   )   {   v   a   r       u   =   G   L   c   t   x   .   g   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   (   p   r   o   g   r   a   m   ,   i   )   ;   v   a   r       n   m   =   u   .   n   a   m   e   ;   v   a   r       s   z   =   u   .   s   i   z   e   ;   v   a   r       l   b   =   w   e   b   g   l   G   e   t   L   e   f   t   B   r   a   c   e   P   o   s   (   n   m   )   ;   v   a   r       a   r   r   a   y   N   a   m   e   =   l   b   >   0   ?   n   m   .   s   l   i   c   e   (   0   ,   l   b   )   :   n   m   ;   v   a   r       i   d   =   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   I   d   C   o   u   n   t   e   r   ;   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   I   d   C   o   u   n   t   e   r   +   =   s   z   ;   u   n   i   f   o   r   m   S   i   z   e   A   n   d   I   d   s   B   y   N   a   m   e   [   a   r   r   a   y   N   a   m   e   ]   =   [   s   z   ,   i   d   ]   ;   f   o   r   (   j   =   0   ;   j   <   s   z   ;   +   +   j   )   {   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   [   i   d   ]   =   j   ;   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   A   r   r   a   y   N   a   m   e   s   B   y   I   d   [   i   d   +   +   ]   =   a   r   r   a   y   N   a   m   e   }   }   }   }   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   p   r   o   g   r   a   m   ,   n   a   m   e   )   {   n   a   m   e   >   >   >   =   0   ;   n   a   m   e   =   U   T   F   8   T   o   S   t   r   i   n   g   (   n   a   m   e   )   ;   i   f   (   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   )   {   w   e   b   g   l   P   r   e   p   a   r   e   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   s   B   e   f   o   r   e   F   i   r   s   t   U   s   e   (   p   r   o   g   r   a   m   )   ;   v   a   r       u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   =   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   ;   v   a   r       a   r   r   a   y   I   n   d   e   x   =   0   ;   v   a   r       u   n   i   f   o   r   m   B   a   s   e   N   a   m   e   =   n   a   m   e   ;   v   a   r       l   e   f   t   B   r   a   c   e   =   w   e   b   g   l   G   e   t   L   e   f   t   B   r   a   c   e   P   o   s   (   n   a   m   e   )   ;   i   f   (   l   e   f   t   B   r   a   c   e   >   0   )   {   a   r   r   a   y   I   n   d   e   x   =   j   s   t   o   i   _   q   (   n   a   m   e   .   s   l   i   c   e   (   l   e   f   t   B   r   a   c   e   +   1   )   )   >   >   >   0   ;   u   n   i   f   o   r   m   B   a   s   e   N   a   m   e   =   n   a   m   e   .   s   l   i   c   e   (   0   ,   l   e   f   t   B   r   a   c   e   )   }   v   a   r       s   i   z   e   A   n   d   I   d   =   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   S   i   z   e   A   n   d   I   d   s   B   y   N   a   m   e   [   u   n   i   f   o   r   m   B   a   s   e   N   a   m   e   ]   ;   i   f   (   s   i   z   e   A   n   d   I   d   &   &   a   r   r   a   y   I   n   d   e   x   <   s   i   z   e   A   n   d   I   d   [   0   ]   )   {   a   r   r   a   y   I   n   d   e   x   +   =   s   i   z   e   A   n   d   I   d   [   1   ]   ;   i   f   (   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   [   a   r   r   a   y   I   n   d   e   x   ]   =   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   [   a   r   r   a   y   I   n   d   e   x   ]   |   |   G   L   c   t   x   .   g   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   p   r   o   g   r   a   m   ,   n   a   m   e   )   )   {   r   e   t   u   r   n       a   r   r   a   y   I   n   d   e   x   }   }   }   e   l   s   e   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   }   r   e   t   u   r   n   -   1   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   =   _   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   ;   v   a   r       w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   =   l   o   c   a   t   i   o   n   =   >   {   v   a   r       p   =   G   L   c   t   x   .   c   u   r   r   e   n   t   P   r   o   g   r   a   m   ;   i   f   (   p   )   {   v   a   r       w   e   b   g   l   L   o   c   =   p   .   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   [   l   o   c   a   t   i   o   n   ]   ;   i   f   (   t   y   p   e   o   f       w   e   b   g   l   L   o   c   =   =   "   n   u   m   b   e   r   "   )   {   p   .   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   [   l   o   c   a   t   i   o   n   ]   =   w   e   b   g   l   L   o   c   =   G   L   c   t   x   .   g   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   p   ,   p   .   u   n   i   f   o   r   m   A   r   r   a   y   N   a   m   e   s   B   y   I   d   [   l   o   c   a   t   i   o   n   ]   +   (   w   e   b   g   l   L   o   c   >   0   ?   `   [   $   {   w   e   b   g   l   L   o   c   }   ]   `   :   "   "   )   )   }   r   e   t   u   r   n       w   e   b   g   l   L   o   c   }   e   l   s   e   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   2   )   }   }   ;   v   a   r       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   U   n   i   f   o   r   m   =   (   p   r   o   g   r   a   m   ,   l   o   c   a   t   i   o   n   ,   p   a   r   a   m   s   ,   t   y   p   e   )   =   >   {   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   w   e   b   g   l   P   r   e   p   a   r   e   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   s   B   e   f   o   r   e   F   i   r   s   t   U   s   e   (   p   r   o   g   r   a   m   )   ;   v   a   r       d   a   t   a   =   G   L   c   t   x   .   g   e   t   U   n   i   f   o   r   m   (   p   r   o   g   r   a   m   ,   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   )   ;   i   f   (   t   y   p   e   o   f       d   a   t   a   =   =   "   n   u   m   b   e   r   "   |   |   t   y   p   e   o   f       d   a   t   a   =   =   "   b   o   o   l   e   a   n   "   )   {   s   w   i   t   c   h   (   t   y   p   e   )   {   c   a   s   e       0   :   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   d   a   t   a   ;   b   r   e   a   k   ;   c   a   s   e       2   :   H   E   A   P   F   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   d   a   t   a   ;   b   r   e   a   k   }   }   e   l   s   e   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   d   a   t   a   .   l   e   n   g   t   h   ;   i   +   +   )   {   s   w   i   t   c   h   (   t   y   p   e   )   {   c   a   s   e       0   :   H   E   A   P   3   2   [   p   a   r   a   m   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   d   a   t   a   [   i   ]   ;   b   r   e   a   k   ;   c   a   s   e       2   :   H   E   A   P   F   3   2   [   p   a   r   a   m   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   d   a   t   a   [   i   ]   ;   b   r   e   a   k   }   }   }   }   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   U   n   i   f   o   r   m   f   v   (   p   r   o   g   r   a   m   ,   l   o   c   a   t   i   o   n   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   U   n   i   f   o   r   m   (   p   r   o   g   r   a   m   ,   l   o   c   a   t   i   o   n   ,   p   a   r   a   m   s   ,   2   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   f   v   =   _   g   l   G   e   t   U   n   i   f   o   r   m   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   U   n   i   f   o   r   m   i   v   (   p   r   o   g   r   a   m   ,   l   o   c   a   t   i   o   n   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   U   n   i   f   o   r   m   (   p   r   o   g   r   a   m   ,   l   o   c   a   t   i   o   n   ,   p   a   r   a   m   s   ,   0   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   i   v   =   _   g   l   G   e   t   U   n   i   f   o   r   m   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   U   n   i   f   o   r   m   u   i   v   (   p   r   o   g   r   a   m   ,   l   o   c   a   t   i   o   n   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   r   e   t   u   r   n       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   U   n   i   f   o   r   m   (   p   r   o   g   r   a   m   ,   l   o   c   a   t   i   o   n   ,   p   a   r   a   m   s   ,   0   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   u   i   v   =   _   g   l   G   e   t   U   n   i   f   o   r   m   u   i   v   ;   v   a   r       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   =   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   ,   t   y   p   e   )   =   >   {   i   f   (   !   p   a   r   a   m   s   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   i   f   (   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   c   l   i   e   n   t   B   u   f   f   e   r   s   [   i   n   d   e   x   ]   .   e   n   a   b   l   e   d   )   {   e   r   r   (   "   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   *   v       o   n       c   l   i   e   n   t   -   s   i   d   e       a   r   r   a   y   :       n   o   t       s   u   p   p   o   r   t   e   d   ,       b   a   d       d   a   t   a       r   e   t   u   r   n   e   d   "   )   }   v   a   r       d   a   t   a   =   G   L   c   t   x   .   g   e   t   V   e   r   t   e   x   A   t   t   r   i   b   (   i   n   d   e   x   ,   p   n   a   m   e   )   ;   i   f   (   p   n   a   m   e   =   =   3   4   9   7   5   )   {   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   d   a   t   a   &   &   d   a   t   a   [   "   n   a   m   e   "   ]   }   e   l   s   e       i   f   (   t   y   p   e   o   f       d   a   t   a   =   =   "   n   u   m   b   e   r   "   |   |   t   y   p   e   o   f       d   a   t   a   =   =   "   b   o   o   l   e   a   n   "   )   {   s   w   i   t   c   h   (   t   y   p   e   )   {   c   a   s   e       0   :   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   d   a   t   a   ;   b   r   e   a   k   ;   c   a   s   e       2   :   H   E   A   P   F   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   d   a   t   a   ;   b   r   e   a   k   ;   c   a   s   e       5   :   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   =   M   a   t   h   .   f   r   o   u   n   d   (   d   a   t   a   )   ;   b   r   e   a   k   }   }   e   l   s   e   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   d   a   t   a   .   l   e   n   g   t   h   ;   i   +   +   )   {   s   w   i   t   c   h   (   t   y   p   e   )   {   c   a   s   e       0   :   H   E   A   P   3   2   [   p   a   r   a   m   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   d   a   t   a   [   i   ]   ;   b   r   e   a   k   ;   c   a   s   e       2   :   H   E   A   P   F   3   2   [   p   a   r   a   m   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   d   a   t   a   [   i   ]   ;   b   r   e   a   k   ;   c   a   s   e       5   :   H   E   A   P   3   2   [   p   a   r   a   m   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   =   M   a   t   h   .   f   r   o   u   n   d   (   d   a   t   a   [   i   ]   )   ;   b   r   e   a   k   }   }   }   }   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   I   i   v   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   ,   0   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   I   i   v   =   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   I   i   v   ;   v   a   r       _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   I   u   i   v   =   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   I   i   v   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   I   u   i   v   =   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   I   u   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   v   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   o   i   n   t   e   r   )   {   p   o   i   n   t   e   r   >   >   >   =   0   ;   i   f   (   !   p   o   i   n   t   e   r   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   1   )   ;   r   e   t   u   r   n   }   i   f   (   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   c   l   i   e   n   t   B   u   f   f   e   r   s   [   i   n   d   e   x   ]   .   e   n   a   b   l   e   d   )   {   e   r   r   (   "   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r       o   n       c   l   i   e   n   t   -   s   i   d   e       a   r   r   a   y   :       n   o   t       s   u   p   p   o   r   t   e   d   ,       b   a   d       d   a   t   a       r   e   t   u   r   n   e   d   "   )   }   H   E   A   P   3   2   [   p   o   i   n   t   e   r   >   >   >   2   >   >   >   0   ]   =   G   L   c   t   x   .   g   e   t   V   e   r   t   e   x   A   t   t   r   i   b   O   f   f   s   e   t   (   i   n   d   e   x   ,   p   n   a   m   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   v   =   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   f   v   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   ,   2   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   f   v   =   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   i   v   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   ,   5   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   i   v   =   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   i   v   ;   v   a   r       _   g   l   H   i   n   t   =   (   x   0   ,   x   1   )   =   >   G   L   c   t   x   .   h   i   n   t   (   x   0   ,   x   1   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   H   i   n   t   =   _   g   l   H   i   n   t   ;   f   u   n   c   t   i   o   n       _   g   l   I   n   v   a   l   i   d   a   t   e   F   r   a   m   e   b   u   f   f   e   r   (   t   a   r   g   e   t   ,   n   u   m   A   t   t   a   c   h   m   e   n   t   s   ,   a   t   t   a   c   h   m   e   n   t   s   )   {   a   t   t   a   c   h   m   e   n   t   s   >   >   >   =   0   ;   v   a   r       l   i   s   t   =   t   e   m   p   F   i   x   e   d   L   e   n   g   t   h   A   r   r   a   y   [   n   u   m   A   t   t   a   c   h   m   e   n   t   s   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   u   m   A   t   t   a   c   h   m   e   n   t   s   ;   i   +   +   )   {   l   i   s   t   [   i   ]   =   H   E   A   P   3   2   [   a   t   t   a   c   h   m   e   n   t   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   }   G   L   c   t   x   .   i   n   v   a   l   i   d   a   t   e   F   r   a   m   e   b   u   f   f   e   r   (   t   a   r   g   e   t   ,   l   i   s   t   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   n   v   a   l   i   d   a   t   e   F   r   a   m   e   b   u   f   f   e   r   =   _   g   l   I   n   v   a   l   i   d   a   t   e   F   r   a   m   e   b   u   f   f   e   r   ;   f   u   n   c   t   i   o   n       _   g   l   I   n   v   a   l   i   d   a   t   e   S   u   b   F   r   a   m   e   b   u   f   f   e   r   (   t   a   r   g   e   t   ,   n   u   m   A   t   t   a   c   h   m   e   n   t   s   ,   a   t   t   a   c   h   m   e   n   t   s   ,   x   ,   y   ,   w   i   d   t   h   ,   h   e   i   g   h   t   )   {   a   t   t   a   c   h   m   e   n   t   s   >   >   >   =   0   ;   v   a   r       l   i   s   t   =   t   e   m   p   F   i   x   e   d   L   e   n   g   t   h   A   r   r   a   y   [   n   u   m   A   t   t   a   c   h   m   e   n   t   s   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   u   m   A   t   t   a   c   h   m   e   n   t   s   ;   i   +   +   )   {   l   i   s   t   [   i   ]   =   H   E   A   P   3   2   [   a   t   t   a   c   h   m   e   n   t   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   }   G   L   c   t   x   .   i   n   v   a   l   i   d   a   t   e   S   u   b   F   r   a   m   e   b   u   f   f   e   r   (   t   a   r   g   e   t   ,   l   i   s   t   ,   x   ,   y   ,   w   i   d   t   h   ,   h   e   i   g   h   t   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   n   v   a   l   i   d   a   t   e   S   u   b   F   r   a   m   e   b   u   f   f   e   r   =   _   g   l   I   n   v   a   l   i   d   a   t   e   S   u   b   F   r   a   m   e   b   u   f   f   e   r   ;   v   a   r       _   g   l   I   s   B   u   f   f   e   r   =   b   u   f   f   e   r   =   >   {   v   a   r       b   =   G   L   .   b   u   f   f   e   r   s   [   b   u   f   f   e   r   ]   ;   i   f   (   !   b   )   r   e   t   u   r   n       0   ;   r   e   t   u   r   n       G   L   c   t   x   .   i   s   B   u   f   f   e   r   (   b   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   B   u   f   f   e   r   =   _   g   l   I   s   B   u   f   f   e   r   ;   v   a   r       _   g   l   I   s   E   n   a   b   l   e   d   =   x   0   =   >   G   L   c   t   x   .   i   s   E   n   a   b   l   e   d   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   E   n   a   b   l   e   d   =   _   g   l   I   s   E   n   a   b   l   e   d   ;   v   a   r       _   g   l   I   s   F   r   a   m   e   b   u   f   f   e   r   =   f   r   a   m   e   b   u   f   f   e   r   =   >   {   v   a   r       f   b   =   G   L   .   f   r   a   m   e   b   u   f   f   e   r   s   [   f   r   a   m   e   b   u   f   f   e   r   ]   ;   i   f   (   !   f   b   )   r   e   t   u   r   n       0   ;   r   e   t   u   r   n       G   L   c   t   x   .   i   s   F   r   a   m   e   b   u   f   f   e   r   (   f   b   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   F   r   a   m   e   b   u   f   f   e   r   =   _   g   l   I   s   F   r   a   m   e   b   u   f   f   e   r   ;   v   a   r       _   g   l   I   s   P   r   o   g   r   a   m   =   p   r   o   g   r   a   m   =   >   {   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   i   f   (   !   p   r   o   g   r   a   m   )   r   e   t   u   r   n       0   ;   r   e   t   u   r   n       G   L   c   t   x   .   i   s   P   r   o   g   r   a   m   (   p   r   o   g   r   a   m   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   P   r   o   g   r   a   m   =   _   g   l   I   s   P   r   o   g   r   a   m   ;   v   a   r       _   g   l   I   s   Q   u   e   r   y   =   i   d   =   >   {   v   a   r       q   u   e   r   y   =   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   ;   i   f   (   !   q   u   e   r   y   )   r   e   t   u   r   n       0   ;   r   e   t   u   r   n       G   L   c   t   x   .   i   s   Q   u   e   r   y   (   q   u   e   r   y   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   Q   u   e   r   y   =   _   g   l   I   s   Q   u   e   r   y   ;   v   a   r       _   g   l   I   s   Q   u   e   r   y   E   X   T   =   i   d   =   >   {   v   a   r       q   u   e   r   y   =   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   ;   i   f   (   !   q   u   e   r   y   )   r   e   t   u   r   n       0   ;   r   e   t   u   r   n       G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   [   "   i   s   Q   u   e   r   y   E   X   T   "   ]   (   q   u   e   r   y   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   Q   u   e   r   y   E   X   T   =   _   g   l   I   s   Q   u   e   r   y   E   X   T   ;   v   a   r       _   g   l   I   s   R   e   n   d   e   r   b   u   f   f   e   r   =   r   e   n   d   e   r   b   u   f   f   e   r   =   >   {   v   a   r       r   b   =   G   L   .   r   e   n   d   e   r   b   u   f   f   e   r   s   [   r   e   n   d   e   r   b   u   f   f   e   r   ]   ;   i   f   (   !   r   b   )   r   e   t   u   r   n       0   ;   r   e   t   u   r   n       G   L   c   t   x   .   i   s   R   e   n   d   e   r   b   u   f   f   e   r   (   r   b   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   R   e   n   d   e   r   b   u   f   f   e   r   =   _   g   l   I   s   R   e   n   d   e   r   b   u   f   f   e   r   ;   v   a   r       _   g   l   I   s   S   a   m   p   l   e   r   =   i   d   =   >   {   v   a   r       s   a   m   p   l   e   r   =   G   L   .   s   a   m   p   l   e   r   s   [   i   d   ]   ;   i   f   (   !   s   a   m   p   l   e   r   )   r   e   t   u   r   n       0   ;   r   e   t   u   r   n       G   L   c   t   x   .   i   s   S   a   m   p   l   e   r   (   s   a   m   p   l   e   r   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   S   a   m   p   l   e   r   =   _   g   l   I   s   S   a   m   p   l   e   r   ;   v   a   r       _   g   l   I   s   S   h   a   d   e   r   =   s   h   a   d   e   r   =   >   {   v   a   r       s   =   G   L   .   s   h   a   d   e   r   s   [   s   h   a   d   e   r   ]   ;   i   f   (   !   s   )   r   e   t   u   r   n       0   ;   r   e   t   u   r   n       G   L   c   t   x   .   i   s   S   h   a   d   e   r   (   s   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   S   h   a   d   e   r   =   _   g   l   I   s   S   h   a   d   e   r   ;   f   u   n   c   t   i   o   n       _   g   l   I   s   S   y   n   c   (   s   y   n   c   )   {   s   y   n   c   >   >   >   =   0   ;   r   e   t   u   r   n       G   L   c   t   x   .   i   s   S   y   n   c   (   G   L   .   s   y   n   c   s   [   s   y   n   c   ]   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   S   y   n   c   =   _   g   l   I   s   S   y   n   c   ;   v   a   r       _   g   l   I   s   T   e   x   t   u   r   e   =   i   d   =   >   {   v   a   r       t   e   x   t   u   r   e   =   G   L   .   t   e   x   t   u   r   e   s   [   i   d   ]   ;   i   f   (   !   t   e   x   t   u   r   e   )   r   e   t   u   r   n       0   ;   r   e   t   u   r   n       G   L   c   t   x   .   i   s   T   e   x   t   u   r   e   (   t   e   x   t   u   r   e   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   T   e   x   t   u   r   e   =   _   g   l   I   s   T   e   x   t   u   r   e   ;   v   a   r       _   g   l   I   s   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   i   d   =   >   G   L   c   t   x   .   i   s   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   (   G   L   .   t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   [   i   d   ]   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   _   g   l   I   s   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ;   v   a   r       _   g   l   I   s   V   e   r   t   e   x   A   r   r   a   y   =   a   r   r   a   y   =   >   {   v   a   r       v   a   o   =   G   L   .   v   a   o   s   [   a   r   r   a   y   ]   ;   i   f   (   !   v   a   o   )   r   e   t   u   r   n       0   ;   r   e   t   u   r   n       G   L   c   t   x   .   i   s   V   e   r   t   e   x   A   r   r   a   y   (   v   a   o   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   V   e   r   t   e   x   A   r   r   a   y   =   _   g   l   I   s   V   e   r   t   e   x   A   r   r   a   y   ;   v   a   r       _   g   l   I   s   V   e   r   t   e   x   A   r   r   a   y   O   E   S   =   _   g   l   I   s   V   e   r   t   e   x   A   r   r   a   y   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   V   e   r   t   e   x   A   r   r   a   y   O   E   S   =   _   g   l   I   s   V   e   r   t   e   x   A   r   r   a   y   O   E   S   ;   v   a   r       _   g   l   L   i   n   e   W   i   d   t   h   =   x   0   =   >   G   L   c   t   x   .   l   i   n   e   W   i   d   t   h   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   L   i   n   e   W   i   d   t   h   =   _   g   l   L   i   n   e   W   i   d   t   h   ;   v   a   r       _   g   l   L   i   n   k   P   r   o   g   r   a   m   =   p   r   o   g   r   a   m   =   >   {   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   G   L   c   t   x   .   l   i   n   k   P   r   o   g   r   a   m   (   p   r   o   g   r   a   m   )   ;   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   L   o   c   s   B   y   I   d   =   0   ;   p   r   o   g   r   a   m   .   u   n   i   f   o   r   m   S   i   z   e   A   n   d   I   d   s   B   y   N   a   m   e   =   {   }   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   L   i   n   k   P   r   o   g   r   a   m   =   _   g   l   L   i   n   k   P   r   o   g   r   a   m   ;   f   u   n   c   t   i   o   n       _   g   l   M   a   p   B   u   f   f   e   r   R   a   n   g   e   (   t   a   r   g   e   t   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   a   c   c   e   s   s   )   {   o   f   f   s   e   t   >   >   >   =   0   ;   l   e   n   g   t   h   >   >   >   =   0   ;   i   f   (   (   a   c   c   e   s   s   &   (   1   |   3   2   )   )   !   =   0   )   {   e   r   r   (   "   g   l   M   a   p   B   u   f   f   e   r   R   a   n   g   e       a   c   c   e   s   s       d   o   e   s       n   o   t       s   u   p   p   o   r   t       M   A   P   _   R   E   A   D       o   r       M   A   P   _   U   N   S   Y   N   C   H   R   O   N   I   Z   E   D   "   )   ;   r   e   t   u   r   n       0   }   i   f   (   (   a   c   c   e   s   s   &   2   )   =   =   0   )   {   e   r   r   (   "   g   l   M   a   p   B   u   f   f   e   r   R   a   n   g   e       a   c   c   e   s   s       m   u   s   t       i   n   c   l   u   d   e       M   A   P   _   W   R   I   T   E   "   )   ;   r   e   t   u   r   n       0   }   i   f   (   (   a   c   c   e   s   s   &   (   4   |   8   )   )   =   =   0   )   {   e   r   r   (   "   g   l   M   a   p   B   u   f   f   e   r   R   a   n   g   e       a   c   c   e   s   s       m   u   s   t       i   n   c   l   u   d   e       I   N   V   A   L   I   D   A   T   E   _   B   U   F   F   E   R       o   r       I   N   V   A   L   I   D   A   T   E   _   R   A   N   G   E   "   )   ;   r   e   t   u   r   n       0   }   i   f   (   !   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   V   a   l   i   d   a   t   e   M   a   p   B   u   f   f   e   r   T   a   r   g   e   t   (   t   a   r   g   e   t   )   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   e   r   r   (   "   G   L   _   I   N   V   A   L   I   D   _   E   N   U   M       i   n       g   l   M   a   p   B   u   f   f   e   r   R   a   n   g   e   "   )   ;   r   e   t   u   r   n       0   }   v   a   r       m   e   m   =   _   m   a   l   l   o   c   (   l   e   n   g   t   h   )   ,   b   i   n   d   i   n   g   =   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   B   u   f   f   e   r   B   i   n   d   i   n   g   (   t   a   r   g   e   t   )   ;   i   f   (   !   m   e   m   )   r   e   t   u   r   n       0   ;   b   i   n   d   i   n   g   =   G   L   .   m   a   p   p   e   d   B   u   f   f   e   r   s   [   b   i   n   d   i   n   g   ]   ?   ?   =   {   }   ;   b   i   n   d   i   n   g   .   o   f   f   s   e   t   =   o   f   f   s   e   t   ;   b   i   n   d   i   n   g   .   l   e   n   g   t   h   =   l   e   n   g   t   h   ;   b   i   n   d   i   n   g   .   m   e   m   =   m   e   m   ;   b   i   n   d   i   n   g   .   a   c   c   e   s   s   =   a   c   c   e   s   s   ;   r   e   t   u   r   n       m   e   m   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   M   a   p   B   u   f   f   e   r   R   a   n   g   e   =   _   g   l   M   a   p   B   u   f   f   e   r   R   a   n   g   e   ;   v   a   r       _   g   l   P   a   u   s   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   (   )   =   >   G   L   c   t   x   .   p   a   u   s   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   (   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   a   u   s   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   _   g   l   P   a   u   s   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ;   v   a   r       _   g   l   P   i   x   e   l   S   t   o   r   e   i   =   (   p   n   a   m   e   ,   p   a   r   a   m   )   =   >   {   i   f   (   p   n   a   m   e   =   =   3   3   1   7   )   {   G   L   .   u   n   p   a   c   k   A   l   i   g   n   m   e   n   t   =   p   a   r   a   m   }   e   l   s   e       i   f   (   p   n   a   m   e   =   =   3   3   1   4   )   {   G   L   .   u   n   p   a   c   k   R   o   w   L   e   n   g   t   h   =   p   a   r   a   m   }   G   L   c   t   x   .   p   i   x   e   l   S   t   o   r   e   i   (   p   n   a   m   e   ,   p   a   r   a   m   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   i   x   e   l   S   t   o   r   e   i   =   _   g   l   P   i   x   e   l   S   t   o   r   e   i   ;   v   a   r       _   g   l   P   o   l   y   g   o   n   M   o   d   e   W   E   B   G   L   =   (   f   a   c   e   ,   m   o   d   e   )   =   >   {   G   L   c   t   x   .   w   e   b   g   l   P   o   l   y   g   o   n   M   o   d   e   [   "   p   o   l   y   g   o   n   M   o   d   e   W   E   B   G   L   "   ]   (   f   a   c   e   ,   m   o   d   e   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   o   l   y   g   o   n   M   o   d   e   W   E   B   G   L   =   _   g   l   P   o   l   y   g   o   n   M   o   d   e   W   E   B   G   L   ;   v   a   r       _   g   l   P   o   l   y   g   o   n   O   f   f   s   e   t   =   (   x   0   ,   x   1   )   =   >   G   L   c   t   x   .   p   o   l   y   g   o   n   O   f   f   s   e   t   (   x   0   ,   x   1   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   o   l   y   g   o   n   O   f   f   s   e   t   =   _   g   l   P   o   l   y   g   o   n   O   f   f   s   e   t   ;   v   a   r       _   g   l   P   o   l   y   g   o   n   O   f   f   s   e   t   C   l   a   m   p   E   X   T   =   (   f   a   c   t   o   r   ,   u   n   i   t   s   ,   c   l   a   m   p   )   =   >   {   G   L   c   t   x   .   e   x   t   P   o   l   y   g   o   n   O   f   f   s   e   t   C   l   a   m   p   [   "   p   o   l   y   g   o   n   O   f   f   s   e   t   C   l   a   m   p   E   X   T   "   ]   (   f   a   c   t   o   r   ,   u   n   i   t   s   ,   c   l   a   m   p   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   o   l   y   g   o   n   O   f   f   s   e   t   C   l   a   m   p   E   X   T   =   _   g   l   P   o   l   y   g   o   n   O   f   f   s   e   t   C   l   a   m   p   E   X   T   ;   f   u   n   c   t   i   o   n       _   g   l   P   r   o   g   r   a   m   B   i   n   a   r   y   (   p   r   o   g   r   a   m   ,   b   i   n   a   r   y   F   o   r   m   a   t   ,   b   i   n   a   r   y   ,   l   e   n   g   t   h   )   {   b   i   n   a   r   y   >   >   >   =   0   ;   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   r   o   g   r   a   m   B   i   n   a   r   y   =   _   g   l   P   r   o   g   r   a   m   B   i   n   a   r   y   ;   v   a   r       _   g   l   P   r   o   g   r   a   m   P   a   r   a   m   e   t   e   r   i   =   (   p   r   o   g   r   a   m   ,   p   n   a   m   e   ,   v   a   l   u   e   )   =   >   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   r   o   g   r   a   m   P   a   r   a   m   e   t   e   r   i   =   _   g   l   P   r   o   g   r   a   m   P   a   r   a   m   e   t   e   r   i   ;   v   a   r       _   g   l   Q   u   e   r   y   C   o   u   n   t   e   r   E   X   T   =   (   i   d   ,   t   a   r   g   e   t   )   =   >   {   G   L   c   t   x   .   d   i   s   j   o   i   n   t   T   i   m   e   r   Q   u   e   r   y   E   x   t   [   "   q   u   e   r   y   C   o   u   n   t   e   r   E   X   T   "   ]   (   G   L   .   q   u   e   r   i   e   s   [   i   d   ]   ,   t   a   r   g   e   t   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   Q   u   e   r   y   C   o   u   n   t   e   r   E   X   T   =   _   g   l   Q   u   e   r   y   C   o   u   n   t   e   r   E   X   T   ;   v   a   r       _   g   l   R   e   a   d   B   u   f   f   e   r   =   x   0   =   >   G   L   c   t   x   .   r   e   a   d   B   u   f   f   e   r   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   a   d   B   u   f   f   e   r   =   _   g   l   R   e   a   d   B   u   f   f   e   r   ;   v   a   r       c   o   m   p   u   t   e   U   n   p   a   c   k   A   l   i   g   n   e   d   I   m   a   g   e   S   i   z   e   =   (   w   i   d   t   h   ,   h   e   i   g   h   t   ,   s   i   z   e   P   e   r   P   i   x   e   l   )   =   >   {   f   u   n   c   t   i   o   n       r   o   u   n   d   e   d   T   o   N   e   x   t   M   u   l   t   i   p   l   e   O   f   (   x   ,   y   )   {   r   e   t   u   r   n       x   +   y   -   1   &   -   y   }   v   a   r       p   l   a   i   n   R   o   w   S   i   z   e   =   (   G   L   .   u   n   p   a   c   k   R   o   w   L   e   n   g   t   h   |   |   w   i   d   t   h   )   *   s   i   z   e   P   e   r   P   i   x   e   l   ;   v   a   r       a   l   i   g   n   e   d   R   o   w   S   i   z   e   =   r   o   u   n   d   e   d   T   o   N   e   x   t   M   u   l   t   i   p   l   e   O   f   (   p   l   a   i   n   R   o   w   S   i   z   e   ,   G   L   .   u   n   p   a   c   k   A   l   i   g   n   m   e   n   t   )   ;   r   e   t   u   r   n       h   e   i   g   h   t   *   a   l   i   g   n   e   d   R   o   w   S   i   z   e   }   ;   v   a   r       c   o   l   o   r   C   h   a   n   n   e   l   s   I   n   G   l   T   e   x   t   u   r   e   F   o   r   m   a   t   =   f   o   r   m   a   t   =   >   {   v   a   r       c   o   l   o   r   C   h   a   n   n   e   l   s   =   {   5   :   3   ,   6   :   4   ,   8   :   2   ,   2   9   5   0   2   :   3   ,   2   9   5   0   4   :   4   ,   2   6   9   1   7   :   2   ,   2   6   9   1   8   :   2   ,   2   9   8   4   6   :   3   ,   2   9   8   4   7   :   4   }   ;   r   e   t   u   r   n       c   o   l   o   r   C   h   a   n   n   e   l   s   [   f   o   r   m   a   t   -   6   4   0   2   ]   |   |   1   }   ;   v   a   r       h   e   a   p   O   b   j   e   c   t   F   o   r   W   e   b   G   L   T   y   p   e   =   t   y   p   e   =   >   {   t   y   p   e   -   =   5   1   2   0   ;   i   f   (   t   y   p   e   =   =   0   )   r   e   t   u   r   n       H   E   A   P   8   ;   i   f   (   t   y   p   e   =   =   1   )   r   e   t   u   r   n       H   E   A   P   U   8   ;   i   f   (   t   y   p   e   =   =   2   )   r   e   t   u   r   n       H   E   A   P   1   6   ;   i   f   (   t   y   p   e   =   =   4   )   r   e   t   u   r   n       H   E   A   P   3   2   ;   i   f   (   t   y   p   e   =   =   6   )   r   e   t   u   r   n       H   E   A   P   F   3   2   ;   i   f   (   t   y   p   e   =   =   5   |   |   t   y   p   e   =   =   2   8   9   2   2   |   |   t   y   p   e   =   =   2   8   5   2   0   |   |   t   y   p   e   =   =   3   0   7   7   9   |   |   t   y   p   e   =   =   3   0   7   8   2   )   r   e   t   u   r   n       H   E   A   P   U   3   2   ;   r   e   t   u   r   n       H   E   A   P   U   1   6   }   ;   v   a   r       t   o   T   y   p   e   d   A   r   r   a   y   I   n   d   e   x   =   (   p   o   i   n   t   e   r   ,   h   e   a   p   )   =   >   p   o   i   n   t   e   r   >   >   >   3   1   -   M   a   t   h   .   c   l   z   3   2   (   h   e   a   p   .   B   Y   T   E   S   _   P   E   R   _   E   L   E   M   E   N   T   )   ;   v   a   r       e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   T   e   x   P   i   x   e   l   D   a   t   a   =   (   t   y   p   e   ,   f   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   p   i   x   e   l   s   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   )   =   >   {   v   a   r       h   e   a   p   =   h   e   a   p   O   b   j   e   c   t   F   o   r   W   e   b   G   L   T   y   p   e   (   t   y   p   e   )   ;   v   a   r       s   i   z   e   P   e   r   P   i   x   e   l   =   c   o   l   o   r   C   h   a   n   n   e   l   s   I   n   G   l   T   e   x   t   u   r   e   F   o   r   m   a   t   (   f   o   r   m   a   t   )   *   h   e   a   p   .   B   Y   T   E   S   _   P   E   R   _   E   L   E   M   E   N   T   ;   v   a   r       b   y   t   e   s   =   c   o   m   p   u   t   e   U   n   p   a   c   k   A   l   i   g   n   e   d   I   m   a   g   e   S   i   z   e   (   w   i   d   t   h   ,   h   e   i   g   h   t   ,   s   i   z   e   P   e   r   P   i   x   e   l   )   ;   r   e   t   u   r   n       h   e   a   p   .   s   u   b   a   r   r   a   y   (   t   o   T   y   p   e   d   A   r   r   a   y   I   n   d   e   x   (   p   i   x   e   l   s   ,   h   e   a   p   )   >   >   >   0   ,   t   o   T   y   p   e   d   A   r   r   a   y   I   n   d   e   x   (   p   i   x   e   l   s   +   b   y   t   e   s   ,   h   e   a   p   )   >   >   >   0   )   }   ;   f   u   n   c   t   i   o   n       _   g   l   R   e   a   d   P   i   x   e   l   s   (   x   ,   y   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   s   )   {   p   i   x   e   l   s   >   >   >   =   0   ;   i   f   (   t   r   u   e   )   {   i   f   (   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   P   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   G   L   c   t   x   .   r   e   a   d   P   i   x   e   l   s   (   x   ,   y   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   s   )   ;   r   e   t   u   r   n   }   }   v   a   r       p   i   x   e   l   D   a   t   a   =   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   T   e   x   P   i   x   e   l   D   a   t   a   (   t   y   p   e   ,   f   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   p   i   x   e   l   s   ,   f   o   r   m   a   t   )   ;   i   f   (   !   p   i   x   e   l   D   a   t   a   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   r   e   t   u   r   n   }   G   L   c   t   x   .   r   e   a   d   P   i   x   e   l   s   (   x   ,   y   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   D   a   t   a   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   a   d   P   i   x   e   l   s   =   _   g   l   R   e   a   d   P   i   x   e   l   s   ;   v   a   r       _   g   l   R   e   l   e   a   s   e   S   h   a   d   e   r   C   o   m   p   i   l   e   r   =   (   )   =   >   {   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   l   e   a   s   e   S   h   a   d   e   r   C   o   m   p   i   l   e   r   =   _   g   l   R   e   l   e   a   s   e   S   h   a   d   e   r   C   o   m   p   i   l   e   r   ;   v   a   r       _   g   l   R   e   n   d   e   r   b   u   f   f   e   r   S   t   o   r   a   g   e   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   =   >   G   L   c   t   x   .   r   e   n   d   e   r   b   u   f   f   e   r   S   t   o   r   a   g   e   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   n   d   e   r   b   u   f   f   e   r   S   t   o   r   a   g   e   =   _   g   l   R   e   n   d   e   r   b   u   f   f   e   r   S   t   o   r   a   g   e   ;   v   a   r       _   g   l   R   e   n   d   e   r   b   u   f   f   e   r   S   t   o   r   a   g   e   M   u   l   t   i   s   a   m   p   l   e   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   =   >   G   L   c   t   x   .   r   e   n   d   e   r   b   u   f   f   e   r   S   t   o   r   a   g   e   M   u   l   t   i   s   a   m   p   l   e   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   n   d   e   r   b   u   f   f   e   r   S   t   o   r   a   g   e   M   u   l   t   i   s   a   m   p   l   e   =   _   g   l   R   e   n   d   e   r   b   u   f   f   e   r   S   t   o   r   a   g   e   M   u   l   t   i   s   a   m   p   l   e   ;   v   a   r       _   g   l   R   e   s   u   m   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   (   )   =   >   G   L   c   t   x   .   r   e   s   u   m   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   (   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   s   u   m   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   =   _   g   l   R   e   s   u   m   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ;   v   a   r       _   g   l   S   a   m   p   l   e   C   o   v   e   r   a   g   e   =   (   v   a   l   u   e   ,   i   n   v   e   r   t   )   =   >   {   G   L   c   t   x   .   s   a   m   p   l   e   C   o   v   e   r   a   g   e   (   v   a   l   u   e   ,   !   !   i   n   v   e   r   t   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   a   m   p   l   e   C   o   v   e   r   a   g   e   =   _   g   l   S   a   m   p   l   e   C   o   v   e   r   a   g   e   ;   v   a   r       _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   =   (   s   a   m   p   l   e   r   ,   p   n   a   m   e   ,   p   a   r   a   m   )   =   >   {   G   L   c   t   x   .   s   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   (   G   L   .   s   a   m   p   l   e   r   s   [   s   a   m   p   l   e   r   ]   ,   p   n   a   m   e   ,   p   a   r   a   m   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   =   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   ;   f   u   n   c   t   i   o   n       _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   v   (   s   a   m   p   l   e   r   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   v   a   r       p   a   r   a   m   =   H   E   A   P   F   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   ;   G   L   c   t   x   .   s   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   (   G   L   .   s   a   m   p   l   e   r   s   [   s   a   m   p   l   e   r   ]   ,   p   n   a   m   e   ,   p   a   r   a   m   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   v   =   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   v   ;   v   a   r       _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   =   (   s   a   m   p   l   e   r   ,   p   n   a   m   e   ,   p   a   r   a   m   )   =   >   {   G   L   c   t   x   .   s   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   (   G   L   .   s   a   m   p   l   e   r   s   [   s   a   m   p   l   e   r   ]   ,   p   n   a   m   e   ,   p   a   r   a   m   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   =   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   ;   f   u   n   c   t   i   o   n       _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   v   (   s   a   m   p   l   e   r   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   v   a   r       p   a   r   a   m   =   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   ;   G   L   c   t   x   .   s   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   (   G   L   .   s   a   m   p   l   e   r   s   [   s   a   m   p   l   e   r   ]   ,   p   n   a   m   e   ,   p   a   r   a   m   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   v   =   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   v   ;   v   a   r       _   g   l   S   c   i   s   s   o   r   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   =   >   G   L   c   t   x   .   s   c   i   s   s   o   r   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   c   i   s   s   o   r   =   _   g   l   S   c   i   s   s   o   r   ;   f   u   n   c   t   i   o   n       _   g   l   S   h   a   d   e   r   B   i   n   a   r   y   (   c   o   u   n   t   ,   s   h   a   d   e   r   s   ,   b   i   n   a   r   y   f   o   r   m   a   t   ,   b   i   n   a   r   y   ,   l   e   n   g   t   h   )   {   s   h   a   d   e   r   s   >   >   >   =   0   ;   b   i   n   a   r   y   >   >   >   =   0   ;   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   h   a   d   e   r   B   i   n   a   r   y   =   _   g   l   S   h   a   d   e   r   B   i   n   a   r   y   ;   f   u   n   c   t   i   o   n       _   g   l   S   h   a   d   e   r   S   o   u   r   c   e   (   s   h   a   d   e   r   ,   c   o   u   n   t   ,   s   t   r   i   n   g   ,   l   e   n   g   t   h   )   {   s   t   r   i   n   g   >   >   >   =   0   ;   l   e   n   g   t   h   >   >   >   =   0   ;   v   a   r       s   o   u   r   c   e   =   G   L   .   g   e   t   S   o   u   r   c   e   (   s   h   a   d   e   r   ,   c   o   u   n   t   ,   s   t   r   i   n   g   ,   l   e   n   g   t   h   )   ;   G   L   c   t   x   .   s   h   a   d   e   r   S   o   u   r   c   e   (   G   L   .   s   h   a   d   e   r   s   [   s   h   a   d   e   r   ]   ,   s   o   u   r   c   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   h   a   d   e   r   S   o   u   r   c   e   =   _   g   l   S   h   a   d   e   r   S   o   u   r   c   e   ;   v   a   r       _   g   l   S   t   e   n   c   i   l   F   u   n   c   =   (   x   0   ,   x   1   ,   x   2   )   =   >   G   L   c   t   x   .   s   t   e   n   c   i   l   F   u   n   c   (   x   0   ,   x   1   ,   x   2   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   F   u   n   c   =   _   g   l   S   t   e   n   c   i   l   F   u   n   c   ;   v   a   r       _   g   l   S   t   e   n   c   i   l   F   u   n   c   S   e   p   a   r   a   t   e   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   =   >   G   L   c   t   x   .   s   t   e   n   c   i   l   F   u   n   c   S   e   p   a   r   a   t   e   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   F   u   n   c   S   e   p   a   r   a   t   e   =   _   g   l   S   t   e   n   c   i   l   F   u   n   c   S   e   p   a   r   a   t   e   ;   v   a   r       _   g   l   S   t   e   n   c   i   l   M   a   s   k   =   x   0   =   >   G   L   c   t   x   .   s   t   e   n   c   i   l   M   a   s   k   (   x   0   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   M   a   s   k   =   _   g   l   S   t   e   n   c   i   l   M   a   s   k   ;   v   a   r       _   g   l   S   t   e   n   c   i   l   M   a   s   k   S   e   p   a   r   a   t   e   =   (   x   0   ,   x   1   )   =   >   G   L   c   t   x   .   s   t   e   n   c   i   l   M   a   s   k   S   e   p   a   r   a   t   e   (   x   0   ,   x   1   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   M   a   s   k   S   e   p   a   r   a   t   e   =   _   g   l   S   t   e   n   c   i   l   M   a   s   k   S   e   p   a   r   a   t   e   ;   v   a   r       _   g   l   S   t   e   n   c   i   l   O   p   =   (   x   0   ,   x   1   ,   x   2   )   =   >   G   L   c   t   x   .   s   t   e   n   c   i   l   O   p   (   x   0   ,   x   1   ,   x   2   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   O   p   =   _   g   l   S   t   e   n   c   i   l   O   p   ;   v   a   r       _   g   l   S   t   e   n   c   i   l   O   p   S   e   p   a   r   a   t   e   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   =   >   G   L   c   t   x   .   s   t   e   n   c   i   l   O   p   S   e   p   a   r   a   t   e   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   O   p   S   e   p   a   r   a   t   e   =   _   g   l   S   t   e   n   c   i   l   O   p   S   e   p   a   r   a   t   e   ;   f   u   n   c   t   i   o   n       _   g   l   T   e   x   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   b   o   r   d   e   r   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   s   )   {   p   i   x   e   l   s   >   >   >   =   0   ;   i   f   (   t   r   u   e   )   {   i   f   (   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   G   L   c   t   x   .   t   e   x   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   b   o   r   d   e   r   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   s   )   ;   r   e   t   u   r   n   }   }   v   a   r       p   i   x   e   l   D   a   t   a   =   p   i   x   e   l   s   ?   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   T   e   x   P   i   x   e   l   D   a   t   a   (   t   y   p   e   ,   f   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   p   i   x   e   l   s   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   )   :   n   u   l   l   ;   G   L   c   t   x   .   t   e   x   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   b   o   r   d   e   r   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   D   a   t   a   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   I   m   a   g   e   2   D   =   _   g   l   T   e   x   I   m   a   g   e   2   D   ;   f   u   n   c   t   i   o   n       _   g   l   T   e   x   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   b   o   r   d   e   r   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   s   )   {   p   i   x   e   l   s   >   >   >   =   0   ;   i   f   (   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   G   L   c   t   x   .   t   e   x   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   b   o   r   d   e   r   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   s   )   }   e   l   s   e       i   f   (   p   i   x   e   l   s   )   {   v   a   r       h   e   a   p   =   h   e   a   p   O   b   j   e   c   t   F   o   r   W   e   b   G   L   T   y   p   e   (   t   y   p   e   )   ;   v   a   r       p   i   x   e   l   D   a   t   a   =   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   T   e   x   P   i   x   e   l   D   a   t   a   (   t   y   p   e   ,   f   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   *   d   e   p   t   h   ,   p   i   x   e   l   s   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   )   ;   G   L   c   t   x   .   t   e   x   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   b   o   r   d   e   r   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   D   a   t   a   )   }   e   l   s   e   {   G   L   c   t   x   .   t   e   x   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   i   n   t   e   r   n   a   l   F   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   b   o   r   d   e   r   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   n   u   l   l   )   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   I   m   a   g   e   3   D   =   _   g   l   T   e   x   I   m   a   g   e   3   D   ;   v   a   r       _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   f   =   (   x   0   ,   x   1   ,   x   2   )   =   >   G   L   c   t   x   .   t   e   x   P   a   r   a   m   e   t   e   r   f   (   x   0   ,   x   1   ,   x   2   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   f   =   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   f   ;   f   u   n   c   t   i   o   n       _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   f   v   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   v   a   r       p   a   r   a   m   =   H   E   A   P   F   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   ;   G   L   c   t   x   .   t   e   x   P   a   r   a   m   e   t   e   r   f   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   f   v   =   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   f   v   ;   v   a   r       _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   i   =   (   x   0   ,   x   1   ,   x   2   )   =   >   G   L   c   t   x   .   t   e   x   P   a   r   a   m   e   t   e   r   i   (   x   0   ,   x   1   ,   x   2   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   i   =   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   i   ;   f   u   n   c   t   i   o   n       _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   i   v   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   {   p   a   r   a   m   s   >   >   >   =   0   ;   v   a   r       p   a   r   a   m   =   H   E   A   P   3   2   [   p   a   r   a   m   s   >   >   >   2   >   >   >   0   ]   ;   G   L   c   t   x   .   t   e   x   P   a   r   a   m   e   t   e   r   i   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   i   v   =   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   i   v   ;   v   a   r       _   g   l   T   e   x   S   t   o   r   a   g   e   2   D   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   =   >   G   L   c   t   x   .   t   e   x   S   t   o   r   a   g   e   2   D   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   S   t   o   r   a   g   e   2   D   =   _   g   l   T   e   x   S   t   o   r   a   g   e   2   D   ;   v   a   r       _   g   l   T   e   x   S   t   o   r   a   g   e   3   D   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   ,   x   5   )   =   >   G   L   c   t   x   .   t   e   x   S   t   o   r   a   g   e   3   D   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   ,   x   5   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   S   t   o   r   a   g   e   3   D   =   _   g   l   T   e   x   S   t   o   r   a   g   e   3   D   ;   f   u   n   c   t   i   o   n       _   g   l   T   e   x   S   u   b   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   s   )   {   p   i   x   e   l   s   >   >   >   =   0   ;   i   f   (   t   r   u   e   )   {   i   f   (   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   G   L   c   t   x   .   t   e   x   S   u   b   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   s   )   ;   r   e   t   u   r   n   }   }   v   a   r       p   i   x   e   l   D   a   t   a   =   p   i   x   e   l   s   ?   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   T   e   x   P   i   x   e   l   D   a   t   a   (   t   y   p   e   ,   f   o   r   m   a   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   p   i   x   e   l   s   ,   0   )   :   n   u   l   l   ;   G   L   c   t   x   .   t   e   x   S   u   b   I   m   a   g   e   2   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   D   a   t   a   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   S   u   b   I   m   a   g   e   2   D   =   _   g   l   T   e   x   S   u   b   I   m   a   g   e   2   D   ;   f   u   n   c   t   i   o   n       _   g   l   T   e   x   S   u   b   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   z   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   s   )   {   p   i   x   e   l   s   >   >   >   =   0   ;   i   f   (   G   L   c   t   x   .   c   u   r   r   e   n   t   P   i   x   e   l   U   n   p   a   c   k   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   G   L   c   t   x   .   t   e   x   S   u   b   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   z   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   p   i   x   e   l   s   )   }   e   l   s   e       i   f   (   p   i   x   e   l   s   )   {   v   a   r       h   e   a   p   =   h   e   a   p   O   b   j   e   c   t   F   o   r   W   e   b   G   L   T   y   p   e   (   t   y   p   e   )   ;   G   L   c   t   x   .   t   e   x   S   u   b   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   z   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   h   e   a   p   ,   t   o   T   y   p   e   d   A   r   r   a   y   I   n   d   e   x   (   p   i   x   e   l   s   ,   h   e   a   p   )   )   }   e   l   s   e   {   G   L   c   t   x   .   t   e   x   S   u   b   I   m   a   g   e   3   D   (   t   a   r   g   e   t   ,   l   e   v   e   l   ,   x   o   f   f   s   e   t   ,   y   o   f   f   s   e   t   ,   z   o   f   f   s   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   ,   d   e   p   t   h   ,   f   o   r   m   a   t   ,   t   y   p   e   ,   n   u   l   l   )   }   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   S   u   b   I   m   a   g   e   3   D   =   _   g   l   T   e   x   S   u   b   I   m   a   g   e   3   D   ;   f   u   n   c   t   i   o   n       _   g   l   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   V   a   r   y   i   n   g   s   (   p   r   o   g   r   a   m   ,   c   o   u   n   t   ,   v   a   r   y   i   n   g   s   ,   b   u   f   f   e   r   M   o   d   e   )   {   v   a   r   y   i   n   g   s   >   >   >   =   0   ;   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   v   a   r       v   a   r   s   =   [   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   +   )   v   a   r   s   .   p   u   s   h   (   U   T   F   8   T   o   S   t   r   i   n   g   (   H   E   A   P   3   2   [   v   a   r   y   i   n   g   s   +   i   *   4   >   >   >   2   >   >   >   0   ]   )   )   ;   G   L   c   t   x   .   t   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   V   a   r   y   i   n   g   s   (   p   r   o   g   r   a   m   ,   v   a   r   s   ,   b   u   f   f   e   r   M   o   d   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   V   a   r   y   i   n   g   s   =   _   g   l   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   V   a   r   y   i   n   g   s   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   1   f   =   (   l   o   c   a   t   i   o   n   ,   v   0   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   1   f   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   f   =   _   g   l   U   n   i   f   o   r   m   1   f   ;   v   a   r       m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   =   [   ]   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   1   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   2   8   8   )   {   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   [   c   o   u   n   t   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   +   +   i   )   {   v   i   e   w   [   i   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   4   *   i   >   >   >   2   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   F   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   4   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   1   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   f   v   =   _   g   l   U   n   i   f   o   r   m   1   f   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   1   i   =   (   l   o   c   a   t   i   o   n   ,   v   0   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   1   i   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   i   =   _   g   l   U   n   i   f   o   r   m   1   i   ;   v   a   r       m   i   n   i   T   e   m   p   W   e   b   G   L   I   n   t   B   u   f   f   e   r   s   =   [   ]   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   1   i   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   2   8   8   )   {   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   I   n   t   B   u   f   f   e   r   s   [   c   o   u   n   t   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   +   +   i   )   {   v   i   e   w   [   i   ]   =   H   E   A   P   3   2   [   v   a   l   u   e   +   4   *   i   >   >   >   2   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   4   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   1   i   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   i   v   =   _   g   l   U   n   i   f   o   r   m   1   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   1   u   i   =   (   l   o   c   a   t   i   o   n   ,   v   0   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   1   u   i   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   u   i   =   _   g   l   U   n   i   f   o   r   m   1   u   i   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   1   u   i   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   c   o   u   n   t   &   &   G   L   c   t   x   .   u   n   i   f   o   r   m   1   u   i   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   H   E   A   P   U   3   2   ,   v   a   l   u   e   >   >   >   2   ,   c   o   u   n   t   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   u   i   v   =   _   g   l   U   n   i   f   o   r   m   1   u   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   2   f   =   (   l   o   c   a   t   i   o   n   ,   v   0   ,   v   1   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   2   f   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   ,   v   1   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   f   =   _   g   l   U   n   i   f   o   r   m   2   f   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   2   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   1   4   4   )   {   c   o   u   n   t   *   =   2   ;   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   [   c   o   u   n   t   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   =   2   )   {   v   i   e   w   [   i   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   4   *   i   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   4   )   >   >   >   2   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   F   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   8   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   2   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   f   v   =   _   g   l   U   n   i   f   o   r   m   2   f   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   2   i   =   (   l   o   c   a   t   i   o   n   ,   v   0   ,   v   1   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   2   i   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   ,   v   1   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   i   =   _   g   l   U   n   i   f   o   r   m   2   i   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   2   i   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   1   4   4   )   {   c   o   u   n   t   *   =   2   ;   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   I   n   t   B   u   f   f   e   r   s   [   c   o   u   n   t   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   =   2   )   {   v   i   e   w   [   i   ]   =   H   E   A   P   3   2   [   v   a   l   u   e   +   4   *   i   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   ]   =   H   E   A   P   3   2   [   v   a   l   u   e   +   (   4   *   i   +   4   )   >   >   >   2   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   8   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   2   i   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   i   v   =   _   g   l   U   n   i   f   o   r   m   2   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   2   u   i   =   (   l   o   c   a   t   i   o   n   ,   v   0   ,   v   1   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   2   u   i   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   ,   v   1   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   u   i   =   _   g   l   U   n   i   f   o   r   m   2   u   i   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   2   u   i   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   c   o   u   n   t   &   &   G   L   c   t   x   .   u   n   i   f   o   r   m   2   u   i   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   H   E   A   P   U   3   2   ,   v   a   l   u   e   >   >   >   2   ,   c   o   u   n   t   *   2   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   u   i   v   =   _   g   l   U   n   i   f   o   r   m   2   u   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   3   f   =   (   l   o   c   a   t   i   o   n   ,   v   0   ,   v   1   ,   v   2   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   3   f   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   ,   v   1   ,   v   2   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   f   =   _   g   l   U   n   i   f   o   r   m   3   f   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   3   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   9   6   )   {   c   o   u   n   t   *   =   3   ;   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   [   c   o   u   n   t   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   =   3   )   {   v   i   e   w   [   i   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   4   *   i   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   4   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   2   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   8   )   >   >   >   2   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   F   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   1   2   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   3   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   f   v   =   _   g   l   U   n   i   f   o   r   m   3   f   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   3   i   =   (   l   o   c   a   t   i   o   n   ,   v   0   ,   v   1   ,   v   2   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   3   i   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   ,   v   1   ,   v   2   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   i   =   _   g   l   U   n   i   f   o   r   m   3   i   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   3   i   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   9   6   )   {   c   o   u   n   t   *   =   3   ;   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   I   n   t   B   u   f   f   e   r   s   [   c   o   u   n   t   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   =   3   )   {   v   i   e   w   [   i   ]   =   H   E   A   P   3   2   [   v   a   l   u   e   +   4   *   i   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   ]   =   H   E   A   P   3   2   [   v   a   l   u   e   +   (   4   *   i   +   4   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   2   ]   =   H   E   A   P   3   2   [   v   a   l   u   e   +   (   4   *   i   +   8   )   >   >   >   2   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   1   2   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   3   i   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   i   v   =   _   g   l   U   n   i   f   o   r   m   3   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   3   u   i   =   (   l   o   c   a   t   i   o   n   ,   v   0   ,   v   1   ,   v   2   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   3   u   i   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   ,   v   1   ,   v   2   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   u   i   =   _   g   l   U   n   i   f   o   r   m   3   u   i   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   3   u   i   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   c   o   u   n   t   &   &   G   L   c   t   x   .   u   n   i   f   o   r   m   3   u   i   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   H   E   A   P   U   3   2   ,   v   a   l   u   e   >   >   >   2   ,   c   o   u   n   t   *   3   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   u   i   v   =   _   g   l   U   n   i   f   o   r   m   3   u   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   4   f   =   (   l   o   c   a   t   i   o   n   ,   v   0   ,   v   1   ,   v   2   ,   v   3   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   4   f   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   ,   v   1   ,   v   2   ,   v   3   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   f   =   _   g   l   U   n   i   f   o   r   m   4   f   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   4   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   7   2   )   {   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   [   4   *   c   o   u   n   t   ]   ;   v   a   r       h   e   a   p   =   H   E   A   P   F   3   2   ;   v   a   l   u   e   =   v   a   l   u   e   >   >   >   2   ;   c   o   u   n   t   *   =   4   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   =   4   )   {   v   a   r       d   s   t   =   v   a   l   u   e   +   i   ;   v   i   e   w   [   i   ]   =   h   e   a   p   [   d   s   t   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   ]   =   h   e   a   p   [   d   s   t   +   1   >   >   >   0   ]   ;   v   i   e   w   [   i   +   2   ]   =   h   e   a   p   [   d   s   t   +   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   3   ]   =   h   e   a   p   [   d   s   t   +   3   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   F   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   1   6   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   4   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   f   v   =   _   g   l   U   n   i   f   o   r   m   4   f   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   4   i   =   (   l   o   c   a   t   i   o   n   ,   v   0   ,   v   1   ,   v   2   ,   v   3   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   4   i   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   ,   v   1   ,   v   2   ,   v   3   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   i   =   _   g   l   U   n   i   f   o   r   m   4   i   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   4   i   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   7   2   )   {   c   o   u   n   t   *   =   4   ;   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   I   n   t   B   u   f   f   e   r   s   [   c   o   u   n   t   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   =   4   )   {   v   i   e   w   [   i   ]   =   H   E   A   P   3   2   [   v   a   l   u   e   +   4   *   i   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   ]   =   H   E   A   P   3   2   [   v   a   l   u   e   +   (   4   *   i   +   4   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   2   ]   =   H   E   A   P   3   2   [   v   a   l   u   e   +   (   4   *   i   +   8   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   3   ]   =   H   E   A   P   3   2   [   v   a   l   u   e   +   (   4   *   i   +   1   2   )   >   >   >   2   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   1   6   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   4   i   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   i   v   =   _   g   l   U   n   i   f   o   r   m   4   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   4   u   i   =   (   l   o   c   a   t   i   o   n   ,   v   0   ,   v   1   ,   v   2   ,   v   3   )   =   >   {   G   L   c   t   x   .   u   n   i   f   o   r   m   4   u   i   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   v   0   ,   v   1   ,   v   2   ,   v   3   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   u   i   =   _   g   l   U   n   i   f   o   r   m   4   u   i   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   4   u   i   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   c   o   u   n   t   &   &   G   L   c   t   x   .   u   n   i   f   o   r   m   4   u   i   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   H   E   A   P   U   3   2   ,   v   a   l   u   e   >   >   >   2   ,   c   o   u   n   t   *   4   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   u   i   v   =   _   g   l   U   n   i   f   o   r   m   4   u   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   B   l   o   c   k   B   i   n   d   i   n   g   =   (   p   r   o   g   r   a   m   ,   u   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   ,   u   n   i   f   o   r   m   B   l   o   c   k   B   i   n   d   i   n   g   )   =   >   {   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   G   L   c   t   x   .   u   n   i   f   o   r   m   B   l   o   c   k   B   i   n   d   i   n   g   (   p   r   o   g   r   a   m   ,   u   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   ,   u   n   i   f   o   r   m   B   l   o   c   k   B   i   n   d   i   n   g   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   B   l   o   c   k   B   i   n   d   i   n   g   =   _   g   l   U   n   i   f   o   r   m   B   l   o   c   k   B   i   n   d   i   n   g   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   t   r   a   n   s   p   o   s   e   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   7   2   )   {   c   o   u   n   t   *   =   4   ;   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   [   c   o   u   n   t   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   =   4   )   {   v   i   e   w   [   i   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   4   *   i   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   4   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   2   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   8   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   3   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   1   2   )   >   >   >   2   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   F   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   1   6   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   M   a   t   r   i   x   2   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   !   !   t   r   a   n   s   p   o   s   e   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   f   v   =   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   x   3   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   t   r   a   n   s   p   o   s   e   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   c   o   u   n   t   &   &   G   L   c   t   x   .   u   n   i   f   o   r   m   M   a   t   r   i   x   2   x   3   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   !   !   t   r   a   n   s   p   o   s   e   ,   H   E   A   P   F   3   2   ,   v   a   l   u   e   >   >   >   2   ,   c   o   u   n   t   *   6   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   x   3   f   v   =   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   x   3   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   x   4   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   t   r   a   n   s   p   o   s   e   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   c   o   u   n   t   &   &   G   L   c   t   x   .   u   n   i   f   o   r   m   M   a   t   r   i   x   2   x   4   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   !   !   t   r   a   n   s   p   o   s   e   ,   H   E   A   P   F   3   2   ,   v   a   l   u   e   >   >   >   2   ,   c   o   u   n   t   *   8   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   x   4   f   v   =   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   x   4   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   t   r   a   n   s   p   o   s   e   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   3   2   )   {   c   o   u   n   t   *   =   9   ;   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   [   c   o   u   n   t   ]   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   =   9   )   {   v   i   e   w   [   i   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   4   *   i   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   4   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   2   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   8   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   3   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   1   2   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   4   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   1   6   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   5   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   2   0   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   6   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   2   4   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   7   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   2   8   )   >   >   >   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   8   ]   =   H   E   A   P   F   3   2   [   v   a   l   u   e   +   (   4   *   i   +   3   2   )   >   >   >   2   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   F   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   3   6   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   M   a   t   r   i   x   3   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   !   !   t   r   a   n   s   p   o   s   e   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   f   v   =   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   2   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   t   r   a   n   s   p   o   s   e   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   c   o   u   n   t   &   &   G   L   c   t   x   .   u   n   i   f   o   r   m   M   a   t   r   i   x   3   x   2   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   !   !   t   r   a   n   s   p   o   s   e   ,   H   E   A   P   F   3   2   ,   v   a   l   u   e   >   >   >   2   ,   c   o   u   n   t   *   6   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   2   f   v   =   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   2   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   4   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   t   r   a   n   s   p   o   s   e   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   c   o   u   n   t   &   &   G   L   c   t   x   .   u   n   i   f   o   r   m   M   a   t   r   i   x   3   x   4   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   !   !   t   r   a   n   s   p   o   s   e   ,   H   E   A   P   F   3   2   ,   v   a   l   u   e   >   >   >   2   ,   c   o   u   n   t   *   1   2   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   4   f   v   =   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   4   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   t   r   a   n   s   p   o   s   e   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   i   f   (   c   o   u   n   t   <   =   1   8   )   {   v   a   r       v   i   e   w   =   m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   [   1   6   *   c   o   u   n   t   ]   ;   v   a   r       h   e   a   p   =   H   E   A   P   F   3   2   ;   v   a   l   u   e   =   v   a   l   u   e   >   >   >   2   ;   c   o   u   n   t   *   =   1   6   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   o   u   n   t   ;   i   +   =   1   6   )   {   v   a   r       d   s   t   =   v   a   l   u   e   +   i   ;   v   i   e   w   [   i   ]   =   h   e   a   p   [   d   s   t   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   ]   =   h   e   a   p   [   d   s   t   +   1   >   >   >   0   ]   ;   v   i   e   w   [   i   +   2   ]   =   h   e   a   p   [   d   s   t   +   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   3   ]   =   h   e   a   p   [   d   s   t   +   3   >   >   >   0   ]   ;   v   i   e   w   [   i   +   4   ]   =   h   e   a   p   [   d   s   t   +   4   >   >   >   0   ]   ;   v   i   e   w   [   i   +   5   ]   =   h   e   a   p   [   d   s   t   +   5   >   >   >   0   ]   ;   v   i   e   w   [   i   +   6   ]   =   h   e   a   p   [   d   s   t   +   6   >   >   >   0   ]   ;   v   i   e   w   [   i   +   7   ]   =   h   e   a   p   [   d   s   t   +   7   >   >   >   0   ]   ;   v   i   e   w   [   i   +   8   ]   =   h   e   a   p   [   d   s   t   +   8   >   >   >   0   ]   ;   v   i   e   w   [   i   +   9   ]   =   h   e   a   p   [   d   s   t   +   9   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   0   ]   =   h   e   a   p   [   d   s   t   +   1   0   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   1   ]   =   h   e   a   p   [   d   s   t   +   1   1   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   2   ]   =   h   e   a   p   [   d   s   t   +   1   2   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   3   ]   =   h   e   a   p   [   d   s   t   +   1   3   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   4   ]   =   h   e   a   p   [   d   s   t   +   1   4   >   >   >   0   ]   ;   v   i   e   w   [   i   +   1   5   ]   =   h   e   a   p   [   d   s   t   +   1   5   >   >   >   0   ]   }   }   e   l   s   e   {   v   a   r       v   i   e   w   =   H   E   A   P   F   3   2   .   s   u   b   a   r   r   a   y   (   v   a   l   u   e   >   >   >   2   >   >   >   0   ,   v   a   l   u   e   +   c   o   u   n   t   *   6   4   >   >   >   2   >   >   >   0   )   }   G   L   c   t   x   .   u   n   i   f   o   r   m   M   a   t   r   i   x   4   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   !   !   t   r   a   n   s   p   o   s   e   ,   v   i   e   w   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   f   v   =   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   x   2   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   t   r   a   n   s   p   o   s   e   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   c   o   u   n   t   &   &   G   L   c   t   x   .   u   n   i   f   o   r   m   M   a   t   r   i   x   4   x   2   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   !   !   t   r   a   n   s   p   o   s   e   ,   H   E   A   P   F   3   2   ,   v   a   l   u   e   >   >   >   2   ,   c   o   u   n   t   *   8   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   x   2   f   v   =   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   x   2   f   v   ;   f   u   n   c   t   i   o   n       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   x   3   f   v   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   t   r   a   n   s   p   o   s   e   ,   v   a   l   u   e   )   {   v   a   l   u   e   >   >   >   =   0   ;   c   o   u   n   t   &   &   G   L   c   t   x   .   u   n   i   f   o   r   m   M   a   t   r   i   x   4   x   3   f   v   (   w   e   b   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   (   l   o   c   a   t   i   o   n   )   ,   !   !   t   r   a   n   s   p   o   s   e   ,   H   E   A   P   F   3   2   ,   v   a   l   u   e   >   >   >   2   ,   c   o   u   n   t   *   1   2   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   x   3   f   v   =   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   x   3   f   v   ;   v   a   r       _   g   l   U   n   m   a   p   B   u   f   f   e   r   =   t   a   r   g   e   t   =   >   {   i   f   (   !   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   V   a   l   i   d   a   t   e   M   a   p   B   u   f   f   e   r   T   a   r   g   e   t   (   t   a   r   g   e   t   )   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   0   )   ;   e   r   r   (   "   G   L   _   I   N   V   A   L   I   D   _   E   N   U   M       i   n       g   l   U   n   m   a   p   B   u   f   f   e   r   "   )   ;   r   e   t   u   r   n       0   }   v   a   r       b   u   f   f   e   r   =   e   m   s   c   r   i   p   t   e   n   W   e   b   G   L   G   e   t   B   u   f   f   e   r   B   i   n   d   i   n   g   (   t   a   r   g   e   t   )   ;   v   a   r       m   a   p   p   i   n   g   =   G   L   .   m   a   p   p   e   d   B   u   f   f   e   r   s   [   b   u   f   f   e   r   ]   ;   i   f   (   !   m   a   p   p   i   n   g   |   |   !   m   a   p   p   i   n   g   .   m   e   m   )   {   G   L   .   r   e   c   o   r   d   E   r   r   o   r   (   1   2   8   2   )   ;   e   r   r   (   "   b   u   f   f   e   r       w   a   s       n   e   v   e   r       m   a   p   p   e   d       i   n       g   l   U   n   m   a   p   B   u   f   f   e   r   "   )   ;   r   e   t   u   r   n       0   }   i   f   (   !   (   m   a   p   p   i   n   g   .   a   c   c   e   s   s   &   1   6   )   )   {   G   L   c   t   x   .   b   u   f   f   e   r   S   u   b   D   a   t   a   (   t   a   r   g   e   t   ,   m   a   p   p   i   n   g   .   o   f   f   s   e   t   ,   H   E   A   P   U   8   .   s   u   b   a   r   r   a   y   (   m   a   p   p   i   n   g   .   m   e   m   >   >   >   0   ,   m   a   p   p   i   n   g   .   m   e   m   +   m   a   p   p   i   n   g   .   l   e   n   g   t   h   >   >   >   0   )   )   }   _   f   r   e   e   (   m   a   p   p   i   n   g   .   m   e   m   )   ;   m   a   p   p   i   n   g   .   m   e   m   =   0   ;   r   e   t   u   r   n       1   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   m   a   p   B   u   f   f   e   r   =   _   g   l   U   n   m   a   p   B   u   f   f   e   r   ;   v   a   r       _   g   l   U   s   e   P   r   o   g   r   a   m   =   p   r   o   g   r   a   m   =   >   {   p   r   o   g   r   a   m   =   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   ;   G   L   c   t   x   .   u   s   e   P   r   o   g   r   a   m   (   p   r   o   g   r   a   m   )   ;   G   L   c   t   x   .   c   u   r   r   e   n   t   P   r   o   g   r   a   m   =   p   r   o   g   r   a   m   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   s   e   P   r   o   g   r   a   m   =   _   g   l   U   s   e   P   r   o   g   r   a   m   ;   v   a   r       _   g   l   V   a   l   i   d   a   t   e   P   r   o   g   r   a   m   =   p   r   o   g   r   a   m   =   >   {   G   L   c   t   x   .   v   a   l   i   d   a   t   e   P   r   o   g   r   a   m   (   G   L   .   p   r   o   g   r   a   m   s   [   p   r   o   g   r   a   m   ]   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   a   l   i   d   a   t   e   P   r   o   g   r   a   m   =   _   g   l   V   a   l   i   d   a   t   e   P   r   o   g   r   a   m   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   1   f   =   (   x   0   ,   x   1   )   =   >   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   1   f   (   x   0   ,   x   1   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   1   f   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   1   f   ;   f   u   n   c   t   i   o   n       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   1   f   v   (   i   n   d   e   x   ,   v   )   {   v   >   >   >   =   0   ;   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   1   f   (   i   n   d   e   x   ,   H   E   A   P   F   3   2   [   v   >   >   >   2   ]   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   1   f   v   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   1   f   v   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   2   f   =   (   x   0   ,   x   1   ,   x   2   )   =   >   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   2   f   (   x   0   ,   x   1   ,   x   2   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   2   f   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   2   f   ;   f   u   n   c   t   i   o   n       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   2   f   v   (   i   n   d   e   x   ,   v   )   {   v   >   >   >   =   0   ;   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   2   f   (   i   n   d   e   x   ,   H   E   A   P   F   3   2   [   v   >   >   >   2   ]   ,   H   E   A   P   F   3   2   [   v   +   4   >   >   >   2   ]   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   2   f   v   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   2   f   v   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   3   f   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   =   >   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   3   f   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   3   f   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   3   f   ;   f   u   n   c   t   i   o   n       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   3   f   v   (   i   n   d   e   x   ,   v   )   {   v   >   >   >   =   0   ;   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   3   f   (   i   n   d   e   x   ,   H   E   A   P   F   3   2   [   v   >   >   >   2   ]   ,   H   E   A   P   F   3   2   [   v   +   4   >   >   >   2   ]   ,   H   E   A   P   F   3   2   [   v   +   8   >   >   >   2   ]   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   3   f   v   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   3   f   v   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   4   f   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   =   >   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   4   f   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   4   f   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   4   f   ;   f   u   n   c   t   i   o   n       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   4   f   v   (   i   n   d   e   x   ,   v   )   {   v   >   >   >   =   0   ;   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   4   f   (   i   n   d   e   x   ,   H   E   A   P   F   3   2   [   v   >   >   >   2   ]   ,   H   E   A   P   F   3   2   [   v   +   4   >   >   >   2   ]   ,   H   E   A   P   F   3   2   [   v   +   8   >   >   >   2   ]   ,   H   E   A   P   F   3   2   [   v   +   1   2   >   >   >   2   ]   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   4   f   v   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   4   f   v   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   =   (   i   n   d   e   x   ,   d   i   v   i   s   o   r   )   =   >   {   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   (   i   n   d   e   x   ,   d   i   v   i   s   o   r   )   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   A   N   G   L   E   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   A   N   G   L   E   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   A   N   G   L   E   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   A   R   B   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   A   R   B   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   A   R   B   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   E   X   T   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   E   X   T   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   E   X   T   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   N   V   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   N   V   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   N   V   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   i   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   =   >   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   I   4   i   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   i   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   i   ;   f   u   n   c   t   i   o   n       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   i   v   (   i   n   d   e   x   ,   v   )   {   v   >   >   >   =   0   ;   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   I   4   i   (   i   n   d   e   x   ,   H   E   A   P   3   2   [   v   >   >   >   2   ]   ,   H   E   A   P   3   2   [   v   +   4   >   >   >   2   ]   ,   H   E   A   P   3   2   [   v   +   8   >   >   >   2   ]   ,   H   E   A   P   3   2   [   v   +   1   2   >   >   >   2   ]   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   i   v   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   i   v   ;   v   a   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   u   i   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   =   >   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   I   4   u   i   (   x   0   ,   x   1   ,   x   2   ,   x   3   ,   x   4   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   u   i   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   u   i   ;   f   u   n   c   t   i   o   n       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   u   i   v   (   i   n   d   e   x   ,   v   )   {   v   >   >   >   =   0   ;   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   I   4   u   i   (   i   n   d   e   x   ,   H   E   A   P   U   3   2   [   v   >   >   >   2   ]   ,   H   E   A   P   U   3   2   [   v   +   4   >   >   >   2   ]   ,   H   E   A   P   U   3   2   [   v   +   8   >   >   >   2   ]   ,   H   E   A   P   U   3   2   [   v   +   1   2   >   >   >   2   ]   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   u   i   v   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   u   i   v   ;   f   u   n   c   t   i   o   n       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   P   o   i   n   t   e   r   (   i   n   d   e   x   ,   s   i   z   e   ,   t   y   p   e   ,   s   t   r   i   d   e   ,   p   t   r   )   {   p   t   r   >   >   >   =   0   ;   v   a   r       c   b   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   c   l   i   e   n   t   B   u   f   f   e   r   s   [   i   n   d   e   x   ]   ;   i   f   (   !   G   L   c   t   x   .   c   u   r   r   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   c   b   .   s   i   z   e   =   s   i   z   e   ;   c   b   .   t   y   p   e   =   t   y   p   e   ;   c   b   .   n   o   r   m   a   l   i   z   e   d   =   f   a   l   s   e   ;   c   b   .   s   t   r   i   d   e   =   s   t   r   i   d   e   ;   c   b   .   p   t   r   =   p   t   r   ;   c   b   .   c   l   i   e   n   t   s   i   d   e   =   t   r   u   e   ;   c   b   .   v   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   A   d   a   p   t   o   r   =   f   u   n   c   t   i   o   n   (   i   n   d   e   x   ,   s   i   z   e   ,   t   y   p   e   ,   n   o   r   m   a   l   i   z   e   d   ,   s   t   r   i   d   e   ,   p   t   r   )   {   t   h   i   s   .   v   e   r   t   e   x   A   t   t   r   i   b   I   P   o   i   n   t   e   r   (   i   n   d   e   x   ,   s   i   z   e   ,   t   y   p   e   ,   s   t   r   i   d   e   ,   p   t   r   )   }   ;   r   e   t   u   r   n   }   c   b   .   c   l   i   e   n   t   s   i   d   e   =   f   a   l   s   e   ;   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   I   P   o   i   n   t   e   r   (   i   n   d   e   x   ,   s   i   z   e   ,   t   y   p   e   ,   s   t   r   i   d   e   ,   p   t   r   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   P   o   i   n   t   e   r   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   P   o   i   n   t   e   r   ;   f   u   n   c   t   i   o   n       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   (   i   n   d   e   x   ,   s   i   z   e   ,   t   y   p   e   ,   n   o   r   m   a   l   i   z   e   d   ,   s   t   r   i   d   e   ,   p   t   r   )   {   p   t   r   >   >   >   =   0   ;   v   a   r       c   b   =   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   c   l   i   e   n   t   B   u   f   f   e   r   s   [   i   n   d   e   x   ]   ;   i   f   (   !   G   L   c   t   x   .   c   u   r   r   e   n   t   A   r   r   a   y   B   u   f   f   e   r   B   i   n   d   i   n   g   )   {   c   b   .   s   i   z   e   =   s   i   z   e   ;   c   b   .   t   y   p   e   =   t   y   p   e   ;   c   b   .   n   o   r   m   a   l   i   z   e   d   =   n   o   r   m   a   l   i   z   e   d   ;   c   b   .   s   t   r   i   d   e   =   s   t   r   i   d   e   ;   c   b   .   p   t   r   =   p   t   r   ;   c   b   .   c   l   i   e   n   t   s   i   d   e   =   t   r   u   e   ;   c   b   .   v   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   A   d   a   p   t   o   r   =   f   u   n   c   t   i   o   n   (   i   n   d   e   x   ,   s   i   z   e   ,   t   y   p   e   ,   n   o   r   m   a   l   i   z   e   d   ,   s   t   r   i   d   e   ,   p   t   r   )   {   t   h   i   s   .   v   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   (   i   n   d   e   x   ,   s   i   z   e   ,   t   y   p   e   ,   n   o   r   m   a   l   i   z   e   d   ,   s   t   r   i   d   e   ,   p   t   r   )   }   ;   r   e   t   u   r   n   }   c   b   .   c   l   i   e   n   t   s   i   d   e   =   f   a   l   s   e   ;   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   (   i   n   d   e   x   ,   s   i   z   e   ,   t   y   p   e   ,   !   !   n   o   r   m   a   l   i   z   e   d   ,   s   t   r   i   d   e   ,   p   t   r   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   =   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   ;   v   a   r       _   g   l   V   i   e   w   p   o   r   t   =   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   =   >   G   L   c   t   x   .   v   i   e   w   p   o   r   t   (   x   0   ,   x   1   ,   x   2   ,   x   3   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   i   e   w   p   o   r   t   =   _   g   l   V   i   e   w   p   o   r   t   ;   f   u   n   c   t   i   o   n       _   g   l   W   a   i   t   S   y   n   c   (   s   y   n   c   ,   f   l   a   g   s   ,   t   i   m   e   o   u   t   )   {   s   y   n   c   >   >   >   =   0   ;   t   i   m   e   o   u   t   =   N   u   m   b   e   r   (   t   i   m   e   o   u   t   )   ;   G   L   c   t   x   .   w   a   i   t   S   y   n   c   (   G   L   .   s   y   n   c   s   [   s   y   n   c   ]   ,   f   l   a   g   s   ,   t   i   m   e   o   u   t   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   W   a   i   t   S   y   n   c   =   _   g   l   W   a   i   t   S   y   n   c   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   h   a   s   _   a   s   y   n   c   i   f   y   =   (   )   =   >   0   ;   v   a   r       d   o   R   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   =   (   t   a   r   g   e   t   ,   s   t   r   a   t   e   g   y   )   =   >   {   i   f   (   !   J   S   E   v   e   n   t   s   .   f   u   l   l   s   c   r   e   e   n   E   n   a   b   l   e   d   (   )   )   r   e   t   u   r   n   -   1   ;   t   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   i   f   (   !   t   a   r   g   e   t   )   r   e   t   u   r   n   -   4   ;   i   f   (   !   t   a   r   g   e   t   .   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   &   &   !   t   a   r   g   e   t   .   w   e   b   k   i   t   R   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   )   {   r   e   t   u   r   n   -   3   }   i   f   (   !   J   S   E   v   e   n   t   s   .   c   a   n   P   e   r   f   o   r   m   E   v   e   n   t   H   a   n   d   l   e   r   R   e   q   u   e   s   t   s   (   )   )   {   i   f   (   s   t   r   a   t   e   g   y   .   d   e   f   e   r   U   n   t   i   l   I   n   E   v   e   n   t   H   a   n   d   l   e   r   )   {   J   S   E   v   e   n   t   s   .   d   e   f   e   r   C   a   l   l   (   J   S   E   v   e   n   t   s   _   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   ,   1   ,   [   t   a   r   g   e   t   ,   s   t   r   a   t   e   g   y   ]   )   ;   r   e   t   u   r   n       1   }   r   e   t   u   r   n   -   2   }   r   e   t   u   r   n       J   S   E   v   e   n   t   s   _   r   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   (   t   a   r   g   e   t   ,   s   t   r   a   t   e   g   y   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   r   e   q   u   e   s   t   _   f   u   l   l   s   c   r   e   e   n   _   s   t   r   a   t   e   g   y   (   t   a   r   g   e   t   ,   d   e   f   e   r   U   n   t   i   l   I   n   E   v   e   n   t   H   a   n   d   l   e   r   ,   f   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   f   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   >   >   >   =   0   ;   v   a   r       s   t   r   a   t   e   g   y   =   {   s   c   a   l   e   M   o   d   e   :   H   E   A   P   3   2   [   f   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   >   >   >   2   >   >   >   0   ]   ,   c   a   n   v   a   s   R   e   s   o   l   u   t   i   o   n   S   c   a   l   e   M   o   d   e   :   H   E   A   P   3   2   [   f   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   +   4   >   >   >   2   >   >   >   0   ]   ,   f   i   l   t   e   r   i   n   g   M   o   d   e   :   H   E   A   P   3   2   [   f   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   +   8   >   >   >   2   >   >   >   0   ]   ,   d   e   f   e   r   U   n   t   i   l   I   n   E   v   e   n   t   H   a   n   d   l   e   r   ,   c   a   n   v   a   s   R   e   s   i   z   e   d   C   a   l   l   b   a   c   k   :   H   E   A   P   3   2   [   f   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   +   1   2   >   >   >   2   >   >   >   0   ]   ,   c   a   n   v   a   s   R   e   s   i   z   e   d   C   a   l   l   b   a   c   k   U   s   e   r   D   a   t   a   :   H   E   A   P   3   2   [   f   u   l   l   s   c   r   e   e   n   S   t   r   a   t   e   g   y   +   1   6   >   >   >   2   >   >   >   0   ]   }   ;   r   e   t   u   r   n       d   o   R   e   q   u   e   s   t   F   u   l   l   s   c   r   e   e   n   (   t   a   r   g   e   t   ,   s   t   r   a   t   e   g   y   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   r   e   q   u   e   s   t   _   p   o   i   n   t   e   r   l   o   c   k   (   t   a   r   g   e   t   ,   d   e   f   e   r   U   n   t   i   l   I   n   E   v   e   n   t   H   a   n   d   l   e   r   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   t   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   i   f   (   !   t   a   r   g   e   t   )   r   e   t   u   r   n   -   4   ;   i   f   (   !   t   a   r   g   e   t   .   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   )   {   r   e   t   u   r   n   -   1   }   i   f   (   !   J   S   E   v   e   n   t   s   .   c   a   n   P   e   r   f   o   r   m   E   v   e   n   t   H   a   n   d   l   e   r   R   e   q   u   e   s   t   s   (   )   )   {   i   f   (   d   e   f   e   r   U   n   t   i   l   I   n   E   v   e   n   t   H   a   n   d   l   e   r   )   {   J   S   E   v   e   n   t   s   .   d   e   f   e   r   C   a   l   l   (   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   ,   2   ,   [   t   a   r   g   e   t   ]   )   ;   r   e   t   u   r   n       1   }   r   e   t   u   r   n   -   2   }   r   e   t   u   r   n       r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   (   t   a   r   g   e   t   )   }   v   a   r       a   b   o   r   t   O   n   C   a   n   n   o   t   G   r   o   w   M   e   m   o   r   y   =   r   e   q   u   e   s   t   e   d   S   i   z   e   =   >   {   a   b   o   r   t   (   "   O   O   M   "   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   r   e   s   i   z   e   _   h   e   a   p   (   r   e   q   u   e   s   t   e   d   S   i   z   e   )   {   r   e   q   u   e   s   t   e   d   S   i   z   e   >   >   >   =   0   ;   v   a   r       o   l   d   S   i   z   e   =   H   E   A   P   U   8   .   l   e   n   g   t   h   ;   a   b   o   r   t   O   n   C   a   n   n   o   t   G   r   o   w   M   e   m   o   r   y   (   r   e   q   u   e   s   t   e   d   S   i   z   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   s   a   m   p   l   e   _   g   a   m   e   p   a   d   _   d   a   t   a   =   (   )   =   >   {   t   r   y   {   i   f   (   n   a   v   i   g   a   t   o   r   .   g   e   t   G   a   m   e   p   a   d   s   )   r   e   t   u   r   n   (   J   S   E   v   e   n   t   s   .   l   a   s   t   G   a   m   e   p   a   d   S   t   a   t   e   =   n   a   v   i   g   a   t   o   r   .   g   e   t   G   a   m   e   p   a   d   s   (   )   )   ?   0   :   -   1   }   c   a   t   c   h   (   e   )   {   n   a   v   i   g   a   t   o   r   .   g   e   t   G   a   m   e   p   a   d   s   =   n   u   l   l   }   r   e   t   u   r   n   -   1   }   ;   v   a   r       r   e   g   i   s   t   e   r   B   e   f   o   r   e   U   n   l   o   a   d   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   )   =   >   {   v   a   r       b   e   f   o   r   e   U   n   l   o   a   d   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   =   (   e   =   e   v   e   n   t   )   =   >   {   v   a   r       c   o   n   f   i   r   m   a   t   i   o   n   M   e   s   s   a   g   e   =   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   0   ,   u   s   e   r   D   a   t   a   )   ;   i   f   (   c   o   n   f   i   r   m   a   t   i   o   n   M   e   s   s   a   g   e   )   {   c   o   n   f   i   r   m   a   t   i   o   n   M   e   s   s   a   g   e   =   U   T   F   8   T   o   S   t   r   i   n   g   (   c   o   n   f   i   r   m   a   t   i   o   n   M   e   s   s   a   g   e   )   }   i   f   (   c   o   n   f   i   r   m   a   t   i   o   n   M   e   s   s   a   g   e   )   {   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   ;   e   .   r   e   t   u   r   n   V   a   l   u   e   =   c   o   n   f   i   r   m   a   t   i   o   n   M   e   s   s   a   g   e   ;   r   e   t   u   r   n       c   o   n   f   i   r   m   a   t   i   o   n   M   e   s   s   a   g   e   }   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   :   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   b   e   f   o   r   e   U   n   l   o   a   d   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   b   e   f   o   r   e   u   n   l   o   a   d   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   u   s   e   r   D   a   t   a   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   i   f   (   t   y   p   e   o   f       o   n   b   e   f   o   r   e   u   n   l   o   a   d   =   =   "   u   n   d   e   f   i   n   e   d   "   )   r   e   t   u   r   n   -   1   ;   i   f   (   t   a   r   g   e   t   T   h   r   e   a   d   !   =   =   1   )   r   e   t   u   r   n   -   5   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   B   e   f   o   r   e   U   n   l   o   a   d   E   v   e   n   t   C   a   l   l   b   a   c   k   (   2   ,   u   s   e   r   D   a   t   a   ,   t   r   u   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   8   ,   "   b   e   f   o   r   e   u   n   l   o   a   d   "   )   }   v   a   r       r   e   g   i   s   t   e   r   F   o   c   u   s   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   =   >   {   J   S   E   v   e   n   t   s   .   f   o   c   u   s   E   v   e   n   t   |   |   =   _   m   a   l   l   o   c   (   2   5   6   )   ;   v   a   r       f   o   c   u   s   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   =   (   e   =   e   v   e   n   t   )   =   >   {   v   a   r       n   o   d   e   N   a   m   e   =   J   S   E   v   e   n   t   s   .   g   e   t   N   o   d   e   N   a   m   e   F   o   r   T   a   r   g   e   t   (   e   .   t   a   r   g   e   t   )   ;   v   a   r       i   d   =   e   .   t   a   r   g   e   t   .   i   d   ?   e   .   t   a   r   g   e   t   .   i   d   :   "   "   ;   v   a   r       f   o   c   u   s   E   v   e   n   t   =   J   S   E   v   e   n   t   s   .   f   o   c   u   s   E   v   e   n   t   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   n   o   d   e   N   a   m   e   ,   f   o   c   u   s   E   v   e   n   t   +   0   ,   1   2   8   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   i   d   ,   f   o   c   u   s   E   v   e   n   t   +   1   2   8   ,   1   2   8   )   ;   i   f   (   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   f   o   c   u   s   E   v   e   n   t   ,   u   s   e   r   D   a   t   a   )   )   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   :   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   f   o   c   u   s   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   b   l   u   r   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   F   o   c   u   s   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   1   2   ,   "   b   l   u   r   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   e   l   e   m   e   n   t   _   c   s   s   _   s   i   z   e   (   t   a   r   g   e   t   ,   w   i   d   t   h   ,   h   e   i   g   h   t   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   t   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   i   f   (   !   t   a   r   g   e   t   )   r   e   t   u   r   n   -   4   ;   t   a   r   g   e   t   .   s   t   y   l   e   .   w   i   d   t   h   =   w   i   d   t   h   +   "   p   x   "   ;   t   a   r   g   e   t   .   s   t   y   l   e   .   h   e   i   g   h   t   =   h   e   i   g   h   t   +   "   p   x   "   ;   r   e   t   u   r   n       0   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   f   o   c   u   s   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   F   o   c   u   s   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   1   3   ,   "   f   o   c   u   s   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   v   a   r       f   i   l   l   F   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   D   a   t   a   =   e   v   e   n   t   S   t   r   u   c   t   =   >   {   v   a   r       f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   =   d   o   c   u   m   e   n   t   .   f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   |   |   d   o   c   u   m   e   n   t   .   m   o   z   F   u   l   l   S   c   r   e   e   n   E   l   e   m   e   n   t   |   |   d   o   c   u   m   e   n   t   .   w   e   b   k   i   t   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   |   |   d   o   c   u   m   e   n   t   .   m   s   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   ;   v   a   r       i   s   F   u   l   l   s   c   r   e   e   n   =   !   !   f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   ;   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   >   >   >   0   ]   =   i   s   F   u   l   l   s   c   r   e   e   n   ;   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   +   1   >   >   >   0   ]   =   J   S   E   v   e   n   t   s   .   f   u   l   l   s   c   r   e   e   n   E   n   a   b   l   e   d   (   )   ;   v   a   r       r   e   p   o   r   t   e   d   E   l   e   m   e   n   t   =   i   s   F   u   l   l   s   c   r   e   e   n   ?   f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   :   J   S   E   v   e   n   t   s   .   p   r   e   v   i   o   u   s   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   ;   v   a   r       n   o   d   e   N   a   m   e   =   J   S   E   v   e   n   t   s   .   g   e   t   N   o   d   e   N   a   m   e   F   o   r   T   a   r   g   e   t   (   r   e   p   o   r   t   e   d   E   l   e   m   e   n   t   )   ;   v   a   r       i   d   =   r   e   p   o   r   t   e   d   E   l   e   m   e   n   t   ?   .   i   d   |   |   "   "   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   n   o   d   e   N   a   m   e   ,   e   v   e   n   t   S   t   r   u   c   t   +   2   ,   1   2   8   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   i   d   ,   e   v   e   n   t   S   t   r   u   c   t   +   1   3   0   ,   1   2   8   )   ;   H   E   A   P   3   2   [   e   v   e   n   t   S   t   r   u   c   t   +   2   6   0   >   >   >   2   >   >   >   0   ]   =   r   e   p   o   r   t   e   d   E   l   e   m   e   n   t   ?   r   e   p   o   r   t   e   d   E   l   e   m   e   n   t   .   c   l   i   e   n   t   W   i   d   t   h   :   0   ;   H   E   A   P   3   2   [   e   v   e   n   t   S   t   r   u   c   t   +   2   6   4   >   >   >   2   >   >   >   0   ]   =   r   e   p   o   r   t   e   d   E   l   e   m   e   n   t   ?   r   e   p   o   r   t   e   d   E   l   e   m   e   n   t   .   c   l   i   e   n   t   H   e   i   g   h   t   :   0   ;   H   E   A   P   3   2   [   e   v   e   n   t   S   t   r   u   c   t   +   2   6   8   >   >   >   2   >   >   >   0   ]   =   s   c   r   e   e   n   .   w   i   d   t   h   ;   H   E   A   P   3   2   [   e   v   e   n   t   S   t   r   u   c   t   +   2   7   2   >   >   >   2   >   >   >   0   ]   =   s   c   r   e   e   n   .   h   e   i   g   h   t   ;   i   f   (   i   s   F   u   l   l   s   c   r   e   e   n   )   {   J   S   E   v   e   n   t   s   .   p   r   e   v   i   o   u   s   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   =   f   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   }   }   ;   v   a   r       r   e   g   i   s   t   e   r   F   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   =   >   {   J   S   E   v   e   n   t   s   .   f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   |   |   =   _   m   a   l   l   o   c   (   2   7   6   )   ;   v   a   r       f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   h   a   n   d   l   e   r   F   u   n   c   =   (   e   =   e   v   e   n   t   )   =   >   {   v   a   r       f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   =   J   S   E   v   e   n   t   s   .   f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   ;   f   i   l   l   F   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   D   a   t   a   (   f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   )   ;   i   f   (   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   ,   u   s   e   r   D   a   t   a   )   )   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   f   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   h   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   i   f   (   !   J   S   E   v   e   n   t   s   .   f   u   l   l   s   c   r   e   e   n   E   n   a   b   l   e   d   (   )   )   r   e   t   u   r   n   -   1   ;   t   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   i   f   (   !   t   a   r   g   e   t   )   r   e   t   u   r   n   -   4   ;   r   e   g   i   s   t   e   r   F   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   1   9   ,   "   w   e   b   k   i   t   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   F   u   l   l   s   c   r   e   e   n   C   h   a   n   g   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   1   9   ,   "   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   v   a   r       r   e   g   i   s   t   e   r   G   a   m   e   p   a   d   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   =   >   {   J   S   E   v   e   n   t   s   .   g   a   m   e   p   a   d   E   v   e   n   t   |   |   =   _   m   a   l   l   o   c   (   1   2   4   0   )   ;   v   a   r       g   a   m   e   p   a   d   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   =   (   e   =   e   v   e   n   t   )   =   >   {   v   a   r       g   a   m   e   p   a   d   E   v   e   n   t   =   J   S   E   v   e   n   t   s   .   g   a   m   e   p   a   d   E   v   e   n   t   ;   f   i   l   l   G   a   m   e   p   a   d   E   v   e   n   t   D   a   t   a   (   g   a   m   e   p   a   d   E   v   e   n   t   ,   e   [   "   g   a   m   e   p   a   d   "   ]   )   ;   i   f   (   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   g   a   m   e   p   a   d   E   v   e   n   t   ,   u   s   e   r   D   a   t   a   )   )   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   :   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ,   a   l   l   o   w   s   D   e   f   e   r   r   e   d   C   a   l   l   s   :   t   r   u   e   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   g   a   m   e   p   a   d   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   g   a   m   e   p   a   d   c   o   n   n   e   c   t   e   d   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   i   f   (   _   e   m   s   c   r   i   p   t   e   n   _   s   a   m   p   l   e   _   g   a   m   e   p   a   d   _   d   a   t   a   (   )   )   r   e   t   u   r   n   -   1   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   G   a   m   e   p   a   d   E   v   e   n   t   C   a   l   l   b   a   c   k   (   2   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   6   ,   "   g   a   m   e   p   a   d   c   o   n   n   e   c   t   e   d   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   g   a   m   e   p   a   d   d   i   s   c   o   n   n   e   c   t   e   d   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   i   f   (   _   e   m   s   c   r   i   p   t   e   n   _   s   a   m   p   l   e   _   g   a   m   e   p   a   d   _   d   a   t   a   (   )   )   r   e   t   u   r   n   -   1   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   G   a   m   e   p   a   d   E   v   e   n   t   C   a   l   l   b   a   c   k   (   2   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   7   ,   "   g   a   m   e   p   a   d   d   i   s   c   o   n   n   e   c   t   e   d   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   v   a   r       r   e   g   i   s   t   e   r   K   e   y   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   =   >   {   J   S   E   v   e   n   t   s   .   k   e   y   E   v   e   n   t   |   |   =   _   m   a   l   l   o   c   (   1   6   0   )   ;   v   a   r       k   e   y   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   =   e   =   >   {   v   a   r       k   e   y   E   v   e   n   t   D   a   t   a   =   J   S   E   v   e   n   t   s   .   k   e   y   E   v   e   n   t   ;   H   E   A   P   F   6   4   [   k   e   y   E   v   e   n   t   D   a   t   a   >   >   >   3   >   >   >   0   ]   =   e   .   t   i   m   e   S   t   a   m   p   ;   v   a   r       i   d   x   =   k   e   y   E   v   e   n   t   D   a   t   a   >   >   >   2   ;   H   E   A   P   3   2   [   i   d   x   +   2   >   >   >   0   ]   =   e   .   l   o   c   a   t   i   o   n   ;   H   E   A   P   8   [   k   e   y   E   v   e   n   t   D   a   t   a   +   1   2   >   >   >   0   ]   =   e   .   c   t   r   l   K   e   y   ;   H   E   A   P   8   [   k   e   y   E   v   e   n   t   D   a   t   a   +   1   3   >   >   >   0   ]   =   e   .   s   h   i   f   t   K   e   y   ;   H   E   A   P   8   [   k   e   y   E   v   e   n   t   D   a   t   a   +   1   4   >   >   >   0   ]   =   e   .   a   l   t   K   e   y   ;   H   E   A   P   8   [   k   e   y   E   v   e   n   t   D   a   t   a   +   1   5   >   >   >   0   ]   =   e   .   m   e   t   a   K   e   y   ;   H   E   A   P   8   [   k   e   y   E   v   e   n   t   D   a   t   a   +   1   6   >   >   >   0   ]   =   e   .   r   e   p   e   a   t   ;   H   E   A   P   3   2   [   i   d   x   +   5   >   >   >   0   ]   =   e   .   c   h   a   r   C   o   d   e   ;   H   E   A   P   3   2   [   i   d   x   +   6   >   >   >   0   ]   =   e   .   k   e   y   C   o   d   e   ;   H   E   A   P   3   2   [   i   d   x   +   7   >   >   >   0   ]   =   e   .   w   h   i   c   h   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   e   .   k   e   y   |   |   "   "   ,   k   e   y   E   v   e   n   t   D   a   t   a   +   3   2   ,   3   2   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   e   .   c   o   d   e   |   |   "   "   ,   k   e   y   E   v   e   n   t   D   a   t   a   +   6   4   ,   3   2   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   e   .   c   h   a   r   |   |   "   "   ,   k   e   y   E   v   e   n   t   D   a   t   a   +   9   6   ,   3   2   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   e   .   l   o   c   a   l   e   |   |   "   "   ,   k   e   y   E   v   e   n   t   D   a   t   a   +   1   2   8   ,   3   2   )   ;   i   f   (   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   k   e   y   E   v   e   n   t   D   a   t   a   ,   u   s   e   r   D   a   t   a   )   )   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   :   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   k   e   y   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   k   e   y   d   o   w   n   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   K   e   y   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   ,   "   k   e   y   d   o   w   n   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   k   e   y   p   r   e   s   s   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   K   e   y   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   1   ,   "   k   e   y   p   r   e   s   s   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   k   e   y   u   p   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   K   e   y   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   3   ,   "   k   e   y   u   p   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   a   i   n   _   l   o   o   p   (   f   u   n   c   ,   f   p   s   ,   s   i   m   u   l   a   t   e   I   n   f   i   n   i   t   e   L   o   o   p   )   {   f   u   n   c   >   >   >   =   0   ;   v   a   r       i   t   e   r   F   u   n   c   =   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   f   u   n   c   )   ;   s   e   t   M   a   i   n   L   o   o   p   (   i   t   e   r   F   u   n   c   ,   f   p   s   ,   s   i   m   u   l   a   t   e   I   n   f   i   n   i   t   e   L   o   o   p   )   }   v   a   r       f   i   l   l   M   o   u   s   e   E   v   e   n   t   D   a   t   a   =   (   e   v   e   n   t   S   t   r   u   c   t   ,   e   ,   t   a   r   g   e   t   )   =   >   {   H   E   A   P   F   6   4   [   e   v   e   n   t   S   t   r   u   c   t   >   >   >   3   >   >   >   0   ]   =   e   .   t   i   m   e   S   t   a   m   p   ;   v   a   r       i   d   x   =   e   v   e   n   t   S   t   r   u   c   t   >   >   >   2   ;   H   E   A   P   3   2   [   i   d   x   +   2   >   >   >   0   ]   =   e   .   s   c   r   e   e   n   X   ;   H   E   A   P   3   2   [   i   d   x   +   3   >   >   >   0   ]   =   e   .   s   c   r   e   e   n   Y   ;   H   E   A   P   3   2   [   i   d   x   +   4   >   >   >   0   ]   =   e   .   c   l   i   e   n   t   X   ;   H   E   A   P   3   2   [   i   d   x   +   5   >   >   >   0   ]   =   e   .   c   l   i   e   n   t   Y   ;   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   +   2   4   >   >   >   0   ]   =   e   .   c   t   r   l   K   e   y   ;   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   +   2   5   >   >   >   0   ]   =   e   .   s   h   i   f   t   K   e   y   ;   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   +   2   6   >   >   >   0   ]   =   e   .   a   l   t   K   e   y   ;   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   +   2   7   >   >   >   0   ]   =   e   .   m   e   t   a   K   e   y   ;   H   E   A   P   1   6   [   i   d   x   *   2   +   1   4   >   >   >   0   ]   =   e   .   b   u   t   t   o   n   ;   H   E   A   P   1   6   [   i   d   x   *   2   +   1   5   >   >   >   0   ]   =   e   .   b   u   t   t   o   n   s   ;   H   E   A   P   3   2   [   i   d   x   +   8   >   >   >   0   ]   =   e   [   "   m   o   v   e   m   e   n   t   X   "   ]   ;   H   E   A   P   3   2   [   i   d   x   +   9   >   >   >   0   ]   =   e   [   "   m   o   v   e   m   e   n   t   Y   "   ]   ;   v   a   r       r   e   c   t   =   g   e   t   B   o   u   n   d   i   n   g   C   l   i   e   n   t   R   e   c   t   (   t   a   r   g   e   t   )   ;   H   E   A   P   3   2   [   i   d   x   +   1   0   >   >   >   0   ]   =   e   .   c   l   i   e   n   t   X   -   (   r   e   c   t   .   l   e   f   t   |   0   )   ;   H   E   A   P   3   2   [   i   d   x   +   1   1   >   >   >   0   ]   =   e   .   c   l   i   e   n   t   Y   -   (   r   e   c   t   .   t   o   p   |   0   )   }   ;   v   a   r       r   e   g   i   s   t   e   r   M   o   u   s   e   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   =   >   {   J   S   E   v   e   n   t   s   .   m   o   u   s   e   E   v   e   n   t   |   |   =   _   m   a   l   l   o   c   (   6   4   )   ;   t   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   v   a   r       m   o   u   s   e   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   =   (   e   =   e   v   e   n   t   )   =   >   {   f   i   l   l   M   o   u   s   e   E   v   e   n   t   D   a   t   a   (   J   S   E   v   e   n   t   s   .   m   o   u   s   e   E   v   e   n   t   ,   e   ,   t   a   r   g   e   t   )   ;   i   f   (   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   J   S   E   v   e   n   t   s   .   m   o   u   s   e   E   v   e   n   t   ,   u   s   e   r   D   a   t   a   )   )   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   ,   a   l   l   o   w   s   D   e   f   e   r   r   e   d   C   a   l   l   s   :   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   !   =   "   m   o   u   s   e   m   o   v   e   "   &   &   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   !   =   "   m   o   u   s   e   e   n   t   e   r   "   &   &   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   !   =   "   m   o   u   s   e   l   e   a   v   e   "   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   m   o   u   s   e   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   o   u   s   e   d   o   w   n   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   M   o   u   s   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   5   ,   "   m   o   u   s   e   d   o   w   n   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   o   u   s   e   e   n   t   e   r   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   M   o   u   s   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   3   3   ,   "   m   o   u   s   e   e   n   t   e   r   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   o   u   s   e   l   e   a   v   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   M   o   u   s   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   3   4   ,   "   m   o   u   s   e   l   e   a   v   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   o   u   s   e   m   o   v   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   M   o   u   s   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   8   ,   "   m   o   u   s   e   m   o   v   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   o   u   s   e   u   p   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   M   o   u   s   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   6   ,   "   m   o   u   s   e   u   p   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   v   a   r       f   i   l   l   P   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   D   a   t   a   =   e   v   e   n   t   S   t   r   u   c   t   =   >   {   v   a   r       p   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   =   d   o   c   u   m   e   n   t   .   p   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   |   |   d   o   c   u   m   e   n   t   .   m   o   z   P   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   |   |   d   o   c   u   m   e   n   t   .   w   e   b   k   i   t   P   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   |   |   d   o   c   u   m   e   n   t   .   m   s   P   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   ;   v   a   r       i   s   P   o   i   n   t   e   r   l   o   c   k   e   d   =   !   !   p   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   ;   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   >   >   >   0   ]   =   i   s   P   o   i   n   t   e   r   l   o   c   k   e   d   ;   v   a   r       n   o   d   e   N   a   m   e   =   J   S   E   v   e   n   t   s   .   g   e   t   N   o   d   e   N   a   m   e   F   o   r   T   a   r   g   e   t   (   p   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   )   ;   v   a   r       i   d   =   p   o   i   n   t   e   r   L   o   c   k   E   l   e   m   e   n   t   ?   .   i   d   |   |   "   "   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   n   o   d   e   N   a   m   e   ,   e   v   e   n   t   S   t   r   u   c   t   +   1   ,   1   2   8   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   i   d   ,   e   v   e   n   t   S   t   r   u   c   t   +   1   2   9   ,   1   2   8   )   }   ;   v   a   r       r   e   g   i   s   t   e   r   P   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   =   >   {   J   S   E   v   e   n   t   s   .   p   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   |   |   =   _   m   a   l   l   o   c   (   2   5   7   )   ;   v   a   r       p   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   =   (   e   =   e   v   e   n   t   )   =   >   {   v   a   r       p   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   =   J   S   E   v   e   n   t   s   .   p   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   ;   f   i   l   l   P   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   D   a   t   a   (   p   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   )   ;   i   f   (   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   p   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   ,   u   s   e   r   D   a   t   a   )   )   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   p   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   p   o   i   n   t   e   r   l   o   c   k   c   h   a   n   g   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   i   f   (   !   d   o   c   u   m   e   n   t   |   |   !   d   o   c   u   m   e   n   t   .   b   o   d   y   |   |   !   d   o   c   u   m   e   n   t   .   b   o   d   y   .   r   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   &   &   !   d   o   c   u   m   e   n   t   .   b   o   d   y   .   m   o   z   R   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   &   &   !   d   o   c   u   m   e   n   t   .   b   o   d   y   .   w   e   b   k   i   t   R   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   &   &   !   d   o   c   u   m   e   n   t   .   b   o   d   y   .   m   s   R   e   q   u   e   s   t   P   o   i   n   t   e   r   L   o   c   k   )   {   r   e   t   u   r   n   -   1   }   t   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   i   f   (   !   t   a   r   g   e   t   )   r   e   t   u   r   n   -   4   ;   r   e   g   i   s   t   e   r   P   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   0   ,   "   m   o   z   p   o   i   n   t   e   r   l   o   c   k   c   h   a   n   g   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   ;   r   e   g   i   s   t   e   r   P   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   0   ,   "   w   e   b   k   i   t   p   o   i   n   t   e   r   l   o   c   k   c   h   a   n   g   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   ;   r   e   g   i   s   t   e   r   P   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   0   ,   "   m   s   p   o   i   n   t   e   r   l   o   c   k   c   h   a   n   g   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   P   o   i   n   t   e   r   l   o   c   k   C   h   a   n   g   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   0   ,   "   p   o   i   n   t   e   r   l   o   c   k   c   h   a   n   g   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   v   a   r       r   e   g   i   s   t   e   r   U   i   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   =   >   {   J   S   E   v   e   n   t   s   .   u   i   E   v   e   n   t   |   |   =   _   m   a   l   l   o   c   (   3   6   )   ;   t   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   v   a   r       u   i   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   =   (   e   =   e   v   e   n   t   )   =   >   {   i   f   (   e   .   t   a   r   g   e   t   !   =   t   a   r   g   e   t   )   {   r   e   t   u   r   n   }   v   a   r       b   =   d   o   c   u   m   e   n   t   .   b   o   d   y   ;   i   f   (   !   b   )   {   r   e   t   u   r   n   }   v   a   r       u   i   E   v   e   n   t   =   J   S   E   v   e   n   t   s   .   u   i   E   v   e   n   t   ;   H   E   A   P   3   2   [   u   i   E   v   e   n   t   >   >   >   2   >   >   >   0   ]   =   0   ;   H   E   A   P   3   2   [   u   i   E   v   e   n   t   +   4   >   >   >   2   >   >   >   0   ]   =   b   .   c   l   i   e   n   t   W   i   d   t   h   ;   H   E   A   P   3   2   [   u   i   E   v   e   n   t   +   8   >   >   >   2   >   >   >   0   ]   =   b   .   c   l   i   e   n   t   H   e   i   g   h   t   ;   H   E   A   P   3   2   [   u   i   E   v   e   n   t   +   1   2   >   >   >   2   >   >   >   0   ]   =   i   n   n   e   r   W   i   d   t   h   ;   H   E   A   P   3   2   [   u   i   E   v   e   n   t   +   1   6   >   >   >   2   >   >   >   0   ]   =   i   n   n   e   r   H   e   i   g   h   t   ;   H   E   A   P   3   2   [   u   i   E   v   e   n   t   +   2   0   >   >   >   2   >   >   >   0   ]   =   o   u   t   e   r   W   i   d   t   h   ;   H   E   A   P   3   2   [   u   i   E   v   e   n   t   +   2   4   >   >   >   2   >   >   >   0   ]   =   o   u   t   e   r   H   e   i   g   h   t   ;   H   E   A   P   3   2   [   u   i   E   v   e   n   t   +   2   8   >   >   >   2   >   >   >   0   ]   =   p   a   g   e   X   O   f   f   s   e   t   |   0   ;   H   E   A   P   3   2   [   u   i   E   v   e   n   t   +   3   2   >   >   >   2   >   >   >   0   ]   =   p   a   g   e   Y   O   f   f   s   e   t   |   0   ;   i   f   (   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   u   i   E   v   e   n   t   ,   u   s   e   r   D   a   t   a   )   )   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   u   i   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   r   e   s   i   z   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   U   i   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   1   0   ,   "   r   e   s   i   z   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   v   a   r       r   e   g   i   s   t   e   r   T   o   u   c   h   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   =   >   {   J   S   E   v   e   n   t   s   .   t   o   u   c   h   E   v   e   n   t   |   |   =   _   m   a   l   l   o   c   (   1   5   5   2   )   ;   t   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   v   a   r       t   o   u   c   h   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   =   e   =   >   {   v   a   r       t   ,   t   o   u   c   h   e   s   =   {   }   ,   e   t   =   e   .   t   o   u   c   h   e   s   ;   f   o   r   (   l   e   t       t       o   f       e   t   )   {   t   .   i   s   C   h   a   n   g   e   d   =   t   .   o   n   T   a   r   g   e   t   =   0   ;   t   o   u   c   h   e   s   [   t   .   i   d   e   n   t   i   f   i   e   r   ]   =   t   }   f   o   r   (   l   e   t       t       o   f       e   .   c   h   a   n   g   e   d   T   o   u   c   h   e   s   )   {   t   .   i   s   C   h   a   n   g   e   d   =   1   ;   t   o   u   c   h   e   s   [   t   .   i   d   e   n   t   i   f   i   e   r   ]   =   t   }   f   o   r   (   l   e   t       t       o   f       e   .   t   a   r   g   e   t   T   o   u   c   h   e   s   )   {   t   o   u   c   h   e   s   [   t   .   i   d   e   n   t   i   f   i   e   r   ]   .   o   n   T   a   r   g   e   t   =   1   }   v   a   r       t   o   u   c   h   E   v   e   n   t   =   J   S   E   v   e   n   t   s   .   t   o   u   c   h   E   v   e   n   t   ;   H   E   A   P   F   6   4   [   t   o   u   c   h   E   v   e   n   t   >   >   >   3   >   >   >   0   ]   =   e   .   t   i   m   e   S   t   a   m   p   ;   H   E   A   P   8   [   t   o   u   c   h   E   v   e   n   t   +   1   2   >   >   >   0   ]   =   e   .   c   t   r   l   K   e   y   ;   H   E   A   P   8   [   t   o   u   c   h   E   v   e   n   t   +   1   3   >   >   >   0   ]   =   e   .   s   h   i   f   t   K   e   y   ;   H   E   A   P   8   [   t   o   u   c   h   E   v   e   n   t   +   1   4   >   >   >   0   ]   =   e   .   a   l   t   K   e   y   ;   H   E   A   P   8   [   t   o   u   c   h   E   v   e   n   t   +   1   5   >   >   >   0   ]   =   e   .   m   e   t   a   K   e   y   ;   v   a   r       i   d   x   =   t   o   u   c   h   E   v   e   n   t   +   1   6   ;   v   a   r       t   a   r   g   e   t   R   e   c   t   =   g   e   t   B   o   u   n   d   i   n   g   C   l   i   e   n   t   R   e   c   t   (   t   a   r   g   e   t   )   ;   v   a   r       n   u   m   T   o   u   c   h   e   s   =   0   ;   f   o   r   (   l   e   t       t       o   f       O   b   j   e   c   t   .   v   a   l   u   e   s   (   t   o   u   c   h   e   s   )   )   {   v   a   r       i   d   x   3   2   =   i   d   x   >   >   >   2   ;   H   E   A   P   3   2   [   i   d   x   3   2   +   0   >   >   >   0   ]   =   t   .   i   d   e   n   t   i   f   i   e   r   ;   H   E   A   P   3   2   [   i   d   x   3   2   +   1   >   >   >   0   ]   =   t   .   s   c   r   e   e   n   X   ;   H   E   A   P   3   2   [   i   d   x   3   2   +   2   >   >   >   0   ]   =   t   .   s   c   r   e   e   n   Y   ;   H   E   A   P   3   2   [   i   d   x   3   2   +   3   >   >   >   0   ]   =   t   .   c   l   i   e   n   t   X   ;   H   E   A   P   3   2   [   i   d   x   3   2   +   4   >   >   >   0   ]   =   t   .   c   l   i   e   n   t   Y   ;   H   E   A   P   3   2   [   i   d   x   3   2   +   5   >   >   >   0   ]   =   t   .   p   a   g   e   X   ;   H   E   A   P   3   2   [   i   d   x   3   2   +   6   >   >   >   0   ]   =   t   .   p   a   g   e   Y   ;   H   E   A   P   8   [   i   d   x   +   2   8   >   >   >   0   ]   =   t   .   i   s   C   h   a   n   g   e   d   ;   H   E   A   P   8   [   i   d   x   +   2   9   >   >   >   0   ]   =   t   .   o   n   T   a   r   g   e   t   ;   H   E   A   P   3   2   [   i   d   x   3   2   +   8   >   >   >   0   ]   =   t   .   c   l   i   e   n   t   X   -   (   t   a   r   g   e   t   R   e   c   t   .   l   e   f   t   |   0   )   ;   H   E   A   P   3   2   [   i   d   x   3   2   +   9   >   >   >   0   ]   =   t   .   c   l   i   e   n   t   Y   -   (   t   a   r   g   e   t   R   e   c   t   .   t   o   p   |   0   )   ;   i   d   x   +   =   4   8   ;   i   f   (   +   +   n   u   m   T   o   u   c   h   e   s   >   3   1   )   {   b   r   e   a   k   }   }   H   E   A   P   3   2   [   t   o   u   c   h   E   v   e   n   t   +   8   >   >   >   2   >   >   >   0   ]   =   n   u   m   T   o   u   c   h   e   s   ;   i   f   (   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   t   o   u   c   h   E   v   e   n   t   ,   u   s   e   r   D   a   t   a   )   )   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   ,   a   l   l   o   w   s   D   e   f   e   r   r   e   d   C   a   l   l   s   :   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   =   =   "   t   o   u   c   h   s   t   a   r   t   "   |   |   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   =   =   "   t   o   u   c   h   e   n   d   "   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   t   o   u   c   h   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   t   o   u   c   h   c   a   n   c   e   l   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   T   o   u   c   h   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   5   ,   "   t   o   u   c   h   c   a   n   c   e   l   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   t   o   u   c   h   e   n   d   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   T   o   u   c   h   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   3   ,   "   t   o   u   c   h   e   n   d   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   t   o   u   c   h   m   o   v   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   T   o   u   c   h   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   4   ,   "   t   o   u   c   h   m   o   v   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   t   o   u   c   h   s   t   a   r   t   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   T   o   u   c   h   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   2   ,   "   t   o   u   c   h   s   t   a   r   t   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   v   a   r       f   i   l   l   V   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   D   a   t   a   =   e   v   e   n   t   S   t   r   u   c   t   =   >   {   v   a   r       v   i   s   i   b   i   l   i   t   y   S   t   a   t   e   s   =   [   "   h   i   d   d   e   n   "   ,   "   v   i   s   i   b   l   e   "   ,   "   p   r   e   r   e   n   d   e   r   "   ,   "   u   n   l   o   a   d   e   d   "   ]   ;   v   a   r       v   i   s   i   b   i   l   i   t   y   S   t   a   t   e   =   v   i   s   i   b   i   l   i   t   y   S   t   a   t   e   s   .   i   n   d   e   x   O   f   (   d   o   c   u   m   e   n   t   .   v   i   s   i   b   i   l   i   t   y   S   t   a   t   e   )   ;   H   E   A   P   8   [   e   v   e   n   t   S   t   r   u   c   t   >   >   >   0   ]   =   d   o   c   u   m   e   n   t   .   h   i   d   d   e   n   ;   H   E   A   P   3   2   [   e   v   e   n   t   S   t   r   u   c   t   +   4   >   >   >   2   >   >   >   0   ]   =   v   i   s   i   b   i   l   i   t   y   S   t   a   t   e   }   ;   v   a   r       r   e   g   i   s   t   e   r   V   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   =   >   {   J   S   E   v   e   n   t   s   .   v   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   |   |   =   _   m   a   l   l   o   c   (   8   )   ;   v   a   r       v   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   =   (   e   =   e   v   e   n   t   )   =   >   {   v   a   r       v   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   =   J   S   E   v   e   n   t   s   .   v   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   ;   f   i   l   l   V   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   D   a   t   a   (   v   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   )   ;   i   f   (   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   v   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   ,   u   s   e   r   D   a   t   a   )   )   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   v   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   H   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   v   i   s   i   b   i   l   i   t   y   c   h   a   n   g   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   r   e   t   u   r   n       r   e   g   i   s   t   e   r   V   i   s   i   b   i   l   i   t   y   C   h   a   n   g   e   E   v   e   n   t   C   a   l   l   b   a   c   k   (   s   p   e   c   i   a   l   H   T   M   L   T   a   r   g   e   t   s   [   1   ]   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   2   1   ,   "   v   i   s   i   b   i   l   i   t   y   c   h   a   n   g   e   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   v   a   r       r   e   g   i   s   t   e   r   W   h   e   e   l   E   v   e   n   t   C   a   l   l   b   a   c   k   =   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   e   v   e   n   t   T   y   p   e   I   d   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   =   >   {   J   S   E   v   e   n   t   s   .   w   h   e   e   l   E   v   e   n   t   |   |   =   _   m   a   l   l   o   c   (   9   6   )   ;   v   a   r       w   h   e   e   l   H   a   n   d   l   e   r   F   u   n   c   =   (   e   =   e   v   e   n   t   )   =   >   {   v   a   r       w   h   e   e   l   E   v   e   n   t   =   J   S   E   v   e   n   t   s   .   w   h   e   e   l   E   v   e   n   t   ;   f   i   l   l   M   o   u   s   e   E   v   e   n   t   D   a   t   a   (   w   h   e   e   l   E   v   e   n   t   ,   e   ,   t   a   r   g   e   t   )   ;   H   E   A   P   F   6   4   [   w   h   e   e   l   E   v   e   n   t   +   6   4   >   >   >   3   >   >   >   0   ]   =   e   [   "   d   e   l   t   a   X   "   ]   ;   H   E   A   P   F   6   4   [   w   h   e   e   l   E   v   e   n   t   +   7   2   >   >   >   3   >   >   >   0   ]   =   e   [   "   d   e   l   t   a   Y   "   ]   ;   H   E   A   P   F   6   4   [   w   h   e   e   l   E   v   e   n   t   +   8   0   >   >   >   3   >   >   >   0   ]   =   e   [   "   d   e   l   t   a   Z   "   ]   ;   H   E   A   P   3   2   [   w   h   e   e   l   E   v   e   n   t   +   8   8   >   >   >   2   >   >   >   0   ]   =   e   [   "   d   e   l   t   a   M   o   d   e   "   ]   ;   i   f   (   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   c   a   l   l   b   a   c   k   f   u   n   c   )   (   e   v   e   n   t   T   y   p   e   I   d   ,   w   h   e   e   l   E   v   e   n   t   ,   u   s   e   r   D   a   t   a   )   )   e   .   p   r   e   v   e   n   t   D   e   f   a   u   l   t   (   )   }   ;   v   a   r       e   v   e   n   t   H   a   n   d   l   e   r   =   {   t   a   r   g   e   t   ,   a   l   l   o   w   s   D   e   f   e   r   r   e   d   C   a   l   l   s   :   t   r   u   e   ,   e   v   e   n   t   T   y   p   e   S   t   r   i   n   g   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   h   a   n   d   l   e   r   F   u   n   c   :   w   h   e   e   l   H   a   n   d   l   e   r   F   u   n   c   ,   u   s   e   C   a   p   t   u   r   e   }   ;   r   e   t   u   r   n       J   S   E   v   e   n   t   s   .   r   e   g   i   s   t   e   r   O   r   R   e   m   o   v   e   H   a   n   d   l   e   r   (   e   v   e   n   t   H   a   n   d   l   e   r   )   }   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   w   h   e   e   l   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   u   s   e   r   D   a   t   a   >   >   >   =   0   ;   c   a   l   l   b   a   c   k   f   u   n   c   >   >   >   =   0   ;   t   a   r   g   e   t   T   h   r   e   a   d   >   >   >   =   0   ;   t   a   r   g   e   t   =   f   i   n   d   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   i   f   (   !   t   a   r   g   e   t   )   r   e   t   u   r   n   -   4   ;   i   f   (   t   y   p   e   o   f       t   a   r   g   e   t   .   o   n   w   h   e   e   l   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   r   e   t   u   r   n       r   e   g   i   s   t   e   r   W   h   e   e   l   E   v   e   n   t   C   a   l   l   b   a   c   k   (   t   a   r   g   e   t   ,   u   s   e   r   D   a   t   a   ,   u   s   e   C   a   p   t   u   r   e   ,   c   a   l   l   b   a   c   k   f   u   n   c   ,   9   ,   "   w   h   e   e   l   "   ,   t   a   r   g   e   t   T   h   r   e   a   d   )   }   e   l   s   e   {   r   e   t   u   r   n   -   1   }   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   w   i   n   d   o   w   _   t   i   t   l   e   (   t   i   t   l   e   )   {   t   i   t   l   e   >   >   >   =   0   ;   r   e   t   u   r   n       d   o   c   u   m   e   n   t   .   t   i   t   l   e   =   U   T   F   8   T   o   S   t   r   i   n   g   (   t   i   t   l   e   )   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   s   l   e   e   p   =   (   )   =   >   {   t   h   r   o   w   "   P   l   e   a   s   e       c   o   m   p   i   l   e       y   o   u   r       p   r   o   g   r   a   m       w   i   t   h       a   s   y   n   c       s   u   p   p   o   r   t       i   n       o   r   d   e   r       t   o       u   s   e       a   s   y   n   c   h   r   o   n   o   u   s       o   p   e   r   a   t   i   o   n   s       l   i   k   e       e   m   s   c   r   i   p   t   e   n   _   s   l   e   e   p   "   }   ;   v   a   r       w   e   b   g   l   P   o   w   e   r   P   r   e   f   e   r   e   n   c   e   s   =   [   "   d   e   f   a   u   l   t   "   ,   "   l   o   w   -   p   o   w   e   r   "   ,   "   h   i   g   h   -   p   e   r   f   o   r   m   a   n   c   e   "   ]   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   w   e   b   g   l   _   d   o   _   c   r   e   a   t   e   _   c   o   n   t   e   x   t   (   t   a   r   g   e   t   ,   a   t   t   r   i   b   u   t   e   s   )   {   t   a   r   g   e   t   >   >   >   =   0   ;   a   t   t   r   i   b   u   t   e   s   >   >   >   =   0   ;   v   a   r       a   t   t   r   3   2   =   a   t   t   r   i   b   u   t   e   s   >   >   >   2   ;   v   a   r       p   o   w   e   r   P   r   e   f   e   r   e   n   c   e   =   H   E   A   P   3   2   [   a   t   t   r   3   2   +   (   8   >   >   2   )   >   >   >   0   ]   ;   v   a   r       c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   =   {   a   l   p   h   a   :   !   !   H   E   A   P   8   [   a   t   t   r   i   b   u   t   e   s   +   0   >   >   >   0   ]   ,   d   e   p   t   h   :   !   !   H   E   A   P   8   [   a   t   t   r   i   b   u   t   e   s   +   1   >   >   >   0   ]   ,   s   t   e   n   c   i   l   :   !   !   H   E   A   P   8   [   a   t   t   r   i   b   u   t   e   s   +   2   >   >   >   0   ]   ,   a   n   t   i   a   l   i   a   s   :   !   !   H   E   A   P   8   [   a   t   t   r   i   b   u   t   e   s   +   3   >   >   >   0   ]   ,   p   r   e   m   u   l   t   i   p   l   i   e   d   A   l   p   h   a   :   !   !   H   E   A   P   8   [   a   t   t   r   i   b   u   t   e   s   +   4   >   >   >   0   ]   ,   p   r   e   s   e   r   v   e   D   r   a   w   i   n   g   B   u   f   f   e   r   :   !   !   H   E   A   P   8   [   a   t   t   r   i   b   u   t   e   s   +   5   >   >   >   0   ]   ,   p   o   w   e   r   P   r   e   f   e   r   e   n   c   e   :   w   e   b   g   l   P   o   w   e   r   P   r   e   f   e   r   e   n   c   e   s   [   p   o   w   e   r   P   r   e   f   e   r   e   n   c   e   ]   ,   f   a   i   l   I   f   M   a   j   o   r   P   e   r   f   o   r   m   a   n   c   e   C   a   v   e   a   t   :   !   !   H   E   A   P   8   [   a   t   t   r   i   b   u   t   e   s   +   1   2   >   >   >   0   ]   ,   m   a   j   o   r   V   e   r   s   i   o   n   :   H   E   A   P   3   2   [   a   t   t   r   3   2   +   (   1   6   >   >   2   )   >   >   >   0   ]   ,   m   i   n   o   r   V   e   r   s   i   o   n   :   H   E   A   P   3   2   [   a   t   t   r   3   2   +   (   2   0   >   >   2   )   >   >   >   0   ]   ,   e   n   a   b   l   e   E   x   t   e   n   s   i   o   n   s   B   y   D   e   f   a   u   l   t   :   H   E   A   P   8   [   a   t   t   r   i   b   u   t   e   s   +   2   4   >   >   >   0   ]   ,   e   x   p   l   i   c   i   t   S   w   a   p   C   o   n   t   r   o   l   :   H   E   A   P   8   [   a   t   t   r   i   b   u   t   e   s   +   2   5   >   >   >   0   ]   ,   p   r   o   x   y   C   o   n   t   e   x   t   T   o   M   a   i   n   T   h   r   e   a   d   :   H   E   A   P   3   2   [   a   t   t   r   3   2   +   (   2   8   >   >   2   )   >   >   >   0   ]   ,   r   e   n   d   e   r   V   i   a   O   f   f   s   c   r   e   e   n   B   a   c   k   B   u   f   f   e   r   :   H   E   A   P   8   [   a   t   t   r   i   b   u   t   e   s   +   3   2   >   >   >   0   ]   }   ;   v   a   r       c   a   n   v   a   s   =   f   i   n   d   C   a   n   v   a   s   E   v   e   n   t   T   a   r   g   e   t   (   t   a   r   g   e   t   )   ;   i   f   (   !   c   a   n   v   a   s   )   {   r   e   t   u   r   n       0   }   i   f   (   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   .   e   x   p   l   i   c   i   t   S   w   a   p   C   o   n   t   r   o   l   )   {   r   e   t   u   r   n       0   }   v   a   r       c   o   n   t   e   x   t   H   a   n   d   l   e   =   G   L   .   c   r   e   a   t   e   C   o   n   t   e   x   t   (   c   a   n   v   a   s   ,   c   o   n   t   e   x   t   A   t   t   r   i   b   u   t   e   s   )   ;   r   e   t   u   r   n       c   o   n   t   e   x   t   H   a   n   d   l   e   }   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   w   e   b   g   l   _   c   r   e   a   t   e   _   c   o   n   t   e   x   t   =   _   e   m   s   c   r   i   p   t   e   n   _   w   e   b   g   l   _   d   o   _   c   r   e   a   t   e   _   c   o   n   t   e   x   t   ;   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   w   e   b   g   l   _   d   e   s   t   r   o   y   _   c   o   n   t   e   x   t   (   c   o   n   t   e   x   t   H   a   n   d   l   e   )   {   c   o   n   t   e   x   t   H   a   n   d   l   e   >   >   >   =   0   ;   i   f   (   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   =   =   c   o   n   t   e   x   t   H   a   n   d   l   e   )   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   =   0   ;   G   L   .   d   e   l   e   t   e   C   o   n   t   e   x   t   (   c   o   n   t   e   x   t   H   a   n   d   l   e   )   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   w   e   b   g   l   _   e   n   a   b   l   e   _   e   x   t   e   n   s   i   o   n   (   c   o   n   t   e   x   t   H   a   n   d   l   e   ,   e   x   t   e   n   s   i   o   n   )   {   c   o   n   t   e   x   t   H   a   n   d   l   e   >   >   >   =   0   ;   e   x   t   e   n   s   i   o   n   >   >   >   =   0   ;   v   a   r       c   o   n   t   e   x   t   =   G   L   .   g   e   t   C   o   n   t   e   x   t   (   c   o   n   t   e   x   t   H   a   n   d   l   e   )   ;   v   a   r       e   x   t   S   t   r   i   n   g   =   U   T   F   8   T   o   S   t   r   i   n   g   (   e   x   t   e   n   s   i   o   n   )   ;   i   f   (   e   x   t   S   t   r   i   n   g   .   s   t   a   r   t   s   W   i   t   h   (   "   G   L   _   "   )   )   e   x   t   S   t   r   i   n   g   =   e   x   t   S   t   r   i   n   g   .   s   l   i   c   e   (   3   )   ;   i   f   (   e   x   t   S   t   r   i   n   g   =   =   "   W   E   B   G   L   _   d   r   a   w   _   i   n   s   t   a   n   c   e   d   _   b   a   s   e   _   v   e   r   t   e   x   _   b   a   s   e   _   i   n   s   t   a   n   c   e   "   )   w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   d   r   a   w   _   i   n   s   t   a   n   c   e   d   _   b   a   s   e   _   v   e   r   t   e   x   _   b   a   s   e   _   i   n   s   t   a   n   c   e   (   G   L   c   t   x   )   ;   i   f   (   e   x   t   S   t   r   i   n   g   =   =   "   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   _   i   n   s   t   a   n   c   e   d   _   b   a   s   e   _   v   e   r   t   e   x   _   b   a   s   e   _   i   n   s   t   a   n   c   e   "   )   w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   _   i   n   s   t   a   n   c   e   d   _   b   a   s   e   _   v   e   r   t   e   x   _   b   a   s   e   _   i   n   s   t   a   n   c   e   (   G   L   c   t   x   )   ;   i   f   (   e   x   t   S   t   r   i   n   g   =   =   "   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   "   )   w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   m   u   l   t   i   _   d   r   a   w   (   G   L   c   t   x   )   ;   i   f   (   e   x   t   S   t   r   i   n   g   =   =   "   E   X   T   _   p   o   l   y   g   o   n   _   o   f   f   s   e   t   _   c   l   a   m   p   "   )   w   e   b   g   l   _   e   n   a   b   l   e   _   E   X   T   _   p   o   l   y   g   o   n   _   o   f   f   s   e   t   _   c   l   a   m   p   (   G   L   c   t   x   )   ;   i   f   (   e   x   t   S   t   r   i   n   g   =   =   "   E   X   T   _   c   l   i   p   _   c   o   n   t   r   o   l   "   )   w   e   b   g   l   _   e   n   a   b   l   e   _   E   X   T   _   c   l   i   p   _   c   o   n   t   r   o   l   (   G   L   c   t   x   )   ;   i   f   (   e   x   t   S   t   r   i   n   g   =   =   "   W   E   B   G   L   _   p   o   l   y   g   o   n   _   m   o   d   e   "   )   w   e   b   g   l   _   e   n   a   b   l   e   _   W   E   B   G   L   _   p   o   l   y   g   o   n   _   m   o   d   e   (   G   L   c   t   x   )   ;   v   a   r       e   x   t   =   c   o   n   t   e   x   t   .   G   L   c   t   x   .   g   e   t   E   x   t   e   n   s   i   o   n   (   e   x   t   S   t   r   i   n   g   )   ;   r   e   t   u   r   n   !   !   e   x   t   }   f   u   n   c   t   i   o   n       _   e   m   s   c   r   i   p   t   e   n   _   w   e   b   g   l   _   m   a   k   e   _   c   o   n   t   e   x   t   _   c   u   r   r   e   n   t   (   c   o   n   t   e   x   t   H   a   n   d   l   e   )   {   c   o   n   t   e   x   t   H   a   n   d   l   e   >   >   >   =   0   ;   v   a   r       s   u   c   c   e   s   s   =   G   L   .   m   a   k   e   C   o   n   t   e   x   t   C   u   r   r   e   n   t   (   c   o   n   t   e   x   t   H   a   n   d   l   e   )   ;   r   e   t   u   r   n       s   u   c   c   e   s   s   ?   0   :   -   5   }   v   a   r       E   N   V   =   {   }   ;   v   a   r       g   e   t   E   x   e   c   u   t   a   b   l   e   N   a   m   e   =   (   )   =   >   t   h   i   s   P   r   o   g   r   a   m   |   |   "   .   /   t   h   i   s   .   p   r   o   g   r   a   m   "   ;   v   a   r       g   e   t   E   n   v   S   t   r   i   n   g   s   =   (   )   =   >   {   i   f   (   !   g   e   t   E   n   v   S   t   r   i   n   g   s   .   s   t   r   i   n   g   s   )   {   v   a   r       l   a   n   g   =   (   t   y   p   e   o   f       n   a   v   i   g   a   t   o   r   =   =   "   o   b   j   e   c   t   "   &   &   n   a   v   i   g   a   t   o   r   .   l   a   n   g   u   a   g   e   s   &   &   n   a   v   i   g   a   t   o   r   .   l   a   n   g   u   a   g   e   s   [   0   ]   |   |   "   C   "   )   .   r   e   p   l   a   c   e   (   "   -   "   ,   "   _   "   )   +   "   .   U   T   F   -   8   "   ;   v   a   r       e   n   v   =   {   U   S   E   R   :   "   w   e   b   _   u   s   e   r   "   ,   L   O   G   N   A   M   E   :   "   w   e   b   _   u   s   e   r   "   ,   P   A   T   H   :   "   /   "   ,   P   W   D   :   "   /   "   ,   H   O   M   E   :   "   /   h   o   m   e   /   w   e   b   _   u   s   e   r   "   ,   L   A   N   G   :   l   a   n   g   ,   _   :   g   e   t   E   x   e   c   u   t   a   b   l   e   N   a   m   e   (   )   }   ;   f   o   r   (   v   a   r       x       i   n       E   N   V   )   {   i   f   (   E   N   V   [   x   ]   =   =   =   u   n   d   e   f   i   n   e   d   )   d   e   l   e   t   e       e   n   v   [   x   ]   ;   e   l   s   e       e   n   v   [   x   ]   =   E   N   V   [   x   ]   }   v   a   r       s   t   r   i   n   g   s   =   [   ]   ;   f   o   r   (   v   a   r       x       i   n       e   n   v   )   {   s   t   r   i   n   g   s   .   p   u   s   h   (   `   $   {   x   }   =   $   {   e   n   v   [   x   ]   }   `   )   }   g   e   t   E   n   v   S   t   r   i   n   g   s   .   s   t   r   i   n   g   s   =   s   t   r   i   n   g   s   }   r   e   t   u   r   n       g   e   t   E   n   v   S   t   r   i   n   g   s   .   s   t   r   i   n   g   s   }   ;   f   u   n   c   t   i   o   n       _   e   n   v   i   r   o   n   _   g   e   t   (   _   _   e   n   v   i   r   o   n   ,   e   n   v   i   r   o   n   _   b   u   f   )   {   _   _   e   n   v   i   r   o   n   >   >   >   =   0   ;   e   n   v   i   r   o   n   _   b   u   f   >   >   >   =   0   ;   v   a   r       b   u   f   S   i   z   e   =   0   ;   v   a   r       e   n   v   p   =   0   ;   f   o   r   (   v   a   r       s   t   r   i   n   g       o   f       g   e   t   E   n   v   S   t   r   i   n   g   s   (   )   )   {   v   a   r       p   t   r   =   e   n   v   i   r   o   n   _   b   u   f   +   b   u   f   S   i   z   e   ;   H   E   A   P   U   3   2   [   _   _   e   n   v   i   r   o   n   +   e   n   v   p   >   >   >   2   >   >   >   0   ]   =   p   t   r   ;   b   u   f   S   i   z   e   +   =   s   t   r   i   n   g   T   o   U   T   F   8   (   s   t   r   i   n   g   ,   p   t   r   ,   I   n   f   i   n   i   t   y   )   +   1   ;   e   n   v   p   +   =   4   }   r   e   t   u   r   n       0   }   f   u   n   c   t   i   o   n       _   e   n   v   i   r   o   n   _   s   i   z   e   s   _   g   e   t   (   p   e   n   v   i   r   o   n   _   c   o   u   n   t   ,   p   e   n   v   i   r   o   n   _   b   u   f   _   s   i   z   e   )   {   p   e   n   v   i   r   o   n   _   c   o   u   n   t   >   >   >   =   0   ;   p   e   n   v   i   r   o   n   _   b   u   f   _   s   i   z   e   >   >   >   =   0   ;   v   a   r       s   t   r   i   n   g   s   =   g   e   t   E   n   v   S   t   r   i   n   g   s   (   )   ;   H   E   A   P   U   3   2   [   p   e   n   v   i   r   o   n   _   c   o   u   n   t   >   >   >   2   >   >   >   0   ]   =   s   t   r   i   n   g   s   .   l   e   n   g   t   h   ;   v   a   r       b   u   f   S   i   z   e   =   0   ;   f   o   r   (   v   a   r       s   t   r   i   n   g       o   f       s   t   r   i   n   g   s   )   {   b   u   f   S   i   z   e   +   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   s   t   r   i   n   g   )   +   1   }   H   E   A   P   U   3   2   [   p   e   n   v   i   r   o   n   _   b   u   f   _   s   i   z   e   >   >   >   2   >   >   >   0   ]   =   b   u   f   S   i   z   e   ;   r   e   t   u   r   n       0   }   f   u   n   c   t   i   o   n       _   f   d   _   c   l   o   s   e   (   f   d   )   {   t   r   y   {   v   a   r       s   t   r   e   a   m   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   e   a   m   F   r   o   m   F   D   (   f   d   )   ;   F   S   .   c   l   o   s   e   (   s   t   r   e   a   m   )   ;   r   e   t   u   r   n       0   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n       e   .   e   r   r   n   o   }   }   v   a   r       d   o   R   e   a   d   v   =   (   s   t   r   e   a   m   ,   i   o   v   ,   i   o   v   c   n   t   ,   o   f   f   s   e   t   )   =   >   {   v   a   r       r   e   t   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   i   o   v   c   n   t   ;   i   +   +   )   {   v   a   r       p   t   r   =   H   E   A   P   U   3   2   [   i   o   v   >   >   >   2   >   >   >   0   ]   ;   v   a   r       l   e   n   =   H   E   A   P   U   3   2   [   i   o   v   +   4   >   >   >   2   >   >   >   0   ]   ;   i   o   v   +   =   8   ;   v   a   r       c   u   r   r   =   F   S   .   r   e   a   d   (   s   t   r   e   a   m   ,   H   E   A   P   8   ,   p   t   r   ,   l   e   n   ,   o   f   f   s   e   t   )   ;   i   f   (   c   u   r   r   <   0   )   r   e   t   u   r   n   -   1   ;   r   e   t   +   =   c   u   r   r   ;   i   f   (   c   u   r   r   <   l   e   n   )   b   r   e   a   k   ;   i   f   (   t   y   p   e   o   f       o   f   f   s   e   t   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   o   f   f   s   e   t   +   =   c   u   r   r   }   }   r   e   t   u   r   n       r   e   t   }   ;   f   u   n   c   t   i   o   n       _   f   d   _   r   e   a   d   (   f   d   ,   i   o   v   ,   i   o   v   c   n   t   ,   p   n   u   m   )   {   i   o   v   >   >   >   =   0   ;   i   o   v   c   n   t   >   >   >   =   0   ;   p   n   u   m   >   >   >   =   0   ;   t   r   y   {   v   a   r       s   t   r   e   a   m   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   e   a   m   F   r   o   m   F   D   (   f   d   )   ;   v   a   r       n   u   m   =   d   o   R   e   a   d   v   (   s   t   r   e   a   m   ,   i   o   v   ,   i   o   v   c   n   t   )   ;   H   E   A   P   U   3   2   [   p   n   u   m   >   >   >   2   >   >   >   0   ]   =   n   u   m   ;   r   e   t   u   r   n       0   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n       e   .   e   r   r   n   o   }   }   f   u   n   c   t   i   o   n       _   f   d   _   s   e   e   k   (   f   d   ,   o   f   f   s   e   t   ,   w   h   e   n   c   e   ,   n   e   w   O   f   f   s   e   t   )   {   o   f   f   s   e   t   =   b   i   g   i   n   t   T   o   I   5   3   C   h   e   c   k   e   d   (   o   f   f   s   e   t   )   ;   n   e   w   O   f   f   s   e   t   >   >   >   =   0   ;   t   r   y   {   i   f   (   i   s   N   a   N   (   o   f   f   s   e   t   )   )   r   e   t   u   r   n       6   1   ;   v   a   r       s   t   r   e   a   m   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   e   a   m   F   r   o   m   F   D   (   f   d   )   ;   F   S   .   l   l   s   e   e   k   (   s   t   r   e   a   m   ,   o   f   f   s   e   t   ,   w   h   e   n   c   e   )   ;   H   E   A   P   6   4   [   n   e   w   O   f   f   s   e   t   >   >   >   3   >   >   >   0   ]   =   B   i   g   I   n   t   (   s   t   r   e   a   m   .   p   o   s   i   t   i   o   n   )   ;   i   f   (   s   t   r   e   a   m   .   g   e   t   d   e   n   t   s   &   &   o   f   f   s   e   t   =   =   =   0   &   &   w   h   e   n   c   e   =   =   =   0   )   s   t   r   e   a   m   .   g   e   t   d   e   n   t   s   =   n   u   l   l   ;   r   e   t   u   r   n       0   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n       e   .   e   r   r   n   o   }   }   v   a   r       d   o   W   r   i   t   e   v   =   (   s   t   r   e   a   m   ,   i   o   v   ,   i   o   v   c   n   t   ,   o   f   f   s   e   t   )   =   >   {   v   a   r       r   e   t   =   0   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   i   o   v   c   n   t   ;   i   +   +   )   {   v   a   r       p   t   r   =   H   E   A   P   U   3   2   [   i   o   v   >   >   >   2   >   >   >   0   ]   ;   v   a   r       l   e   n   =   H   E   A   P   U   3   2   [   i   o   v   +   4   >   >   >   2   >   >   >   0   ]   ;   i   o   v   +   =   8   ;   v   a   r       c   u   r   r   =   F   S   .   w   r   i   t   e   (   s   t   r   e   a   m   ,   H   E   A   P   8   ,   p   t   r   ,   l   e   n   ,   o   f   f   s   e   t   )   ;   i   f   (   c   u   r   r   <   0   )   r   e   t   u   r   n   -   1   ;   r   e   t   +   =   c   u   r   r   ;   i   f   (   c   u   r   r   <   l   e   n   )   {   b   r   e   a   k   }   i   f   (   t   y   p   e   o   f       o   f   f   s   e   t   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   o   f   f   s   e   t   +   =   c   u   r   r   }   }   r   e   t   u   r   n       r   e   t   }   ;   f   u   n   c   t   i   o   n       _   f   d   _   w   r   i   t   e   (   f   d   ,   i   o   v   ,   i   o   v   c   n   t   ,   p   n   u   m   )   {   i   o   v   >   >   >   =   0   ;   i   o   v   c   n   t   >   >   >   =   0   ;   p   n   u   m   >   >   >   =   0   ;   t   r   y   {   v   a   r       s   t   r   e   a   m   =   S   Y   S   C   A   L   L   S   .   g   e   t   S   t   r   e   a   m   F   r   o   m   F   D   (   f   d   )   ;   v   a   r       n   u   m   =   d   o   W   r   i   t   e   v   (   s   t   r   e   a   m   ,   i   o   v   ,   i   o   v   c   n   t   )   ;   H   E   A   P   U   3   2   [   p   n   u   m   >   >   >   2   >   >   >   0   ]   =   n   u   m   ;   r   e   t   u   r   n       0   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n       e   .   e   r   r   n   o   }   }   f   u   n   c   t   i   o   n       _   l   l   v   m   _   e   h   _   t   y   p   e   i   d   _   f   o   r   (   t   y   p   e   )   {   t   y   p   e   >   >   >   =   0   ;   r   e   t   u   r   n       t   y   p   e   }   f   u   n   c   t   i   o   n       _   r   a   n   d   o   m   _   g   e   t   (   b   u   f   f   e   r   ,   s   i   z   e   )   {   b   u   f   f   e   r   >   >   >   =   0   ;   s   i   z   e   >   >   >   =   0   ;   t   r   y   {   r   a   n   d   o   m   F   i   l   l   (   H   E   A   P   U   8   .   s   u   b   a   r   r   a   y   (   b   u   f   f   e   r   >   >   >   0   ,   b   u   f   f   e   r   +   s   i   z   e   >   >   >   0   )   )   ;   r   e   t   u   r   n       0   }   c   a   t   c   h   (   e   )   {   i   f   (   t   y   p   e   o   f       F   S   =   =   "   u   n   d   e   f   i   n   e   d   "   |   |   !   (   e   .   n   a   m   e   =   =   =   "   E   r   r   n   o   E   r   r   o   r   "   )   )   t   h   r   o   w       e   ;   r   e   t   u   r   n       e   .   e   r   r   n   o   }   }   v   a   r       l   i   s   t   e   n   O   n   c   e   =   (   o   b   j   e   c   t   ,   e   v   e   n   t   ,   f   u   n   c   )   =   >   o   b   j   e   c   t   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   e   v   e   n   t   ,   f   u   n   c   ,   {   o   n   c   e   :   t   r   u   e   }   )   ;   v   a   r       a   u   t   o   R   e   s   u   m   e   A   u   d   i   o   C   o   n   t   e   x   t   =   (   c   t   x   ,   e   l   e   m   e   n   t   s   )   =   >   {   i   f   (   !   e   l   e   m   e   n   t   s   )   {   e   l   e   m   e   n   t   s   =   [   d   o   c   u   m   e   n   t   ,   d   o   c   u   m   e   n   t   .   g   e   t   E   l   e   m   e   n   t   B   y   I   d   (   "   c   a   n   v   a   s   "   )   ]   }   [   "   k   e   y   d   o   w   n   "   ,   "   m   o   u   s   e   d   o   w   n   "   ,   "   t   o   u   c   h   s   t   a   r   t   "   ]   .   f   o   r   E   a   c   h   (   e   v   e   n   t   =   >   {   e   l   e   m   e   n   t   s   .   f   o   r   E   a   c   h   (   e   l   e   m   e   n   t   =   >   {   i   f   (   e   l   e   m   e   n   t   )   {   l   i   s   t   e   n   O   n   c   e   (   e   l   e   m   e   n   t   ,   e   v   e   n   t   ,   (   )   =   >   {   i   f   (   c   t   x   .   s   t   a   t   e   =   =   =   "   s   u   s   p   e   n   d   e   d   "   )   c   t   x   .   r   e   s   u   m   e   (   )   }   )   }   }   )   }   )   }   ;   v   a   r       g   e   t   C   F   u   n   c   =   i   d   e   n   t   =   >   {   v   a   r       f   u   n   c   =   M   o   d   u   l   e   [   "   _   "   +   i   d   e   n   t   ]   ;   r   e   t   u   r   n       f   u   n   c   }   ;   v   a   r       w   r   i   t   e   A   r   r   a   y   T   o   M   e   m   o   r   y   =   (   a   r   r   a   y   ,   b   u   f   f   e   r   )   =   >   {   H   E   A   P   8   .   s   e   t   (   a   r   r   a   y   ,   b   u   f   f   e   r   >   >   >   0   )   }   ;   v   a   r       c   c   a   l   l   =   (   i   d   e   n   t   ,   r   e   t   u   r   n   T   y   p   e   ,   a   r   g   T   y   p   e   s   ,   a   r   g   s   ,   o   p   t   s   )   =   >   {   v   a   r       t   o   C   =   {   s   t   r   i   n   g   :   s   t   r   =   >   {   v   a   r       r   e   t   =   0   ;   i   f   (   s   t   r   !   =   =   n   u   l   l   &   &   s   t   r   !   =   =   u   n   d   e   f   i   n   e   d   &   &   s   t   r   !   =   =   0   )   {   r   e   t   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   s   t   r   )   }   r   e   t   u   r   n       r   e   t   }   ,   a   r   r   a   y   :   a   r   r   =   >   {   v   a   r       r   e   t   =   s   t   a   c   k   A   l   l   o   c   (   a   r   r   .   l   e   n   g   t   h   )   ;   w   r   i   t   e   A   r   r   a   y   T   o   M   e   m   o   r   y   (   a   r   r   ,   r   e   t   )   ;   r   e   t   u   r   n       r   e   t   }   }   ;   f   u   n   c   t   i   o   n       c   o   n   v   e   r   t   R   e   t   u   r   n   V   a   l   u   e   (   r   e   t   )   {   i   f   (   r   e   t   u   r   n   T   y   p   e   =   =   =   "   s   t   r   i   n   g   "   )   {   r   e   t   u   r   n       U   T   F   8   T   o   S   t   r   i   n   g   (   r   e   t   )   }   i   f   (   r   e   t   u   r   n   T   y   p   e   =   =   =   "   b   o   o   l   e   a   n   "   )   r   e   t   u   r   n       B   o   o   l   e   a   n   (   r   e   t   )   ;   r   e   t   u   r   n       r   e   t   }   v   a   r       f   u   n   c   =   g   e   t   C   F   u   n   c   (   i   d   e   n   t   )   ;   v   a   r       c   A   r   g   s   =   [   ]   ;   v   a   r       s   t   a   c   k   =   0   ;   i   f   (   a   r   g   s   )   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   a   r   g   s   .   l   e   n   g   t   h   ;   i   +   +   )   {   v   a   r       c   o   n   v   e   r   t   e   r   =   t   o   C   [   a   r   g   T   y   p   e   s   [   i   ]   ]   ;   i   f   (   c   o   n   v   e   r   t   e   r   )   {   i   f   (   s   t   a   c   k   =   =   =   0   )   s   t   a   c   k   =   s   t   a   c   k   S   a   v   e   (   )   ;   c   A   r   g   s   [   i   ]   =   c   o   n   v   e   r   t   e   r   (   a   r   g   s   [   i   ]   )   }   e   l   s   e   {   c   A   r   g   s   [   i   ]   =   a   r   g   s   [   i   ]   }   }   }   v   a   r       r   e   t   =   f   u   n   c   (   .   .   .   c   A   r   g   s   )   ;   f   u   n   c   t   i   o   n       o   n   D   o   n   e   (   r   e   t   )   {   i   f   (   s   t   a   c   k   !   =   =   0   )   s   t   a   c   k   R   e   s   t   o   r   e   (   s   t   a   c   k   )   ;   r   e   t   u   r   n       c   o   n   v   e   r   t   R   e   t   u   r   n   V   a   l   u   e   (   r   e   t   )   }   r   e   t   =   o   n   D   o   n   e   (   r   e   t   )   ;   r   e   t   u   r   n       r   e   t   }   ;   v   a   r       F   S   _   c   r   e   a   t   e   P   a   t   h   =   (   .   .   .   a   r   g   s   )   =   >   F   S   .   c   r   e   a   t   e   P   a   t   h   (   .   .   .   a   r   g   s   )   ;   v   a   r       F   S   _   u   n   l   i   n   k   =   (   .   .   .   a   r   g   s   )   =   >   F   S   .   u   n   l   i   n   k   (   .   .   .   a   r   g   s   )   ;   v   a   r       F   S   _   c   r   e   a   t   e   L   a   z   y   F   i   l   e   =   (   .   .   .   a   r   g   s   )   =   >   F   S   .   c   r   e   a   t   e   L   a   z   y   F   i   l   e   (   .   .   .   a   r   g   s   )   ;   v   a   r       F   S   _   c   r   e   a   t   e   D   e   v   i   c   e   =   (   .   .   .   a   r   g   s   )   =   >   F   S   .   c   r   e   a   t   e   D   e   v   i   c   e   (   .   .   .   a   r   g   s   )   ;   v   a   r       c   r   e   a   t   e   C   o   n   t   e   x   t   =   B   r   o   w   s   e   r   .   c   r   e   a   t   e   C   o   n   t   e   x   t   ;   F   S   .   c   r   e   a   t   e   P   r   e   l   o   a   d   e   d   F   i   l   e   =   F   S   _   c   r   e   a   t   e   P   r   e   l   o   a   d   e   d   F   i   l   e   ;   F   S   .   s   t   a   t   i   c   I   n   i   t   (   )   ;   M   E   M   F   S   .   d   o   e   s   N   o   t   E   x   i   s   t   E   r   r   o   r   =   n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   4   4   )   ;   M   E   M   F   S   .   d   o   e   s   N   o   t   E   x   i   s   t   E   r   r   o   r   .   s   t   a   c   k   =   "   <   g   e   n   e   r   i   c       e   r   r   o   r   ,       n   o       s   t   a   c   k   >   "   ;   r   e   g   i   s   t   e   r   P   r   e   M   a   i   n   L   o   o   p   (   (   )   =   >   G   L   .   n   e   w   R   e   n   d   e   r   i   n   g   F   r   a   m   e   S   t   a   r   t   e   d   (   )   )   ;   M   o   d   u   l   e   [   "   r   e   q   u   e   s   t   A   n   i   m   a   t   i   o   n   F   r   a   m   e   "   ]   =   M   a   i   n   L   o   o   p   .   r   e   q   u   e   s   t   A   n   i   m   a   t   i   o   n   F   r   a   m   e   ;   M   o   d   u   l   e   [   "   p   a   u   s   e   M   a   i   n   L   o   o   p   "   ]   =   M   a   i   n   L   o   o   p   .   p   a   u   s   e   ;   M   o   d   u   l   e   [   "   r   e   s   u   m   e   M   a   i   n   L   o   o   p   "   ]   =   M   a   i   n   L   o   o   p   .   r   e   s   u   m   e   ;   M   a   i   n   L   o   o   p   .   i   n   i   t   (   )   ;   f   o   r   (   l   e   t       i   =   0   ;   i   <   3   2   ;   +   +   i   )   t   e   m   p   F   i   x   e   d   L   e   n   g   t   h   A   r   r   a   y   .   p   u   s   h   (   n   e   w       A   r   r   a   y   (   i   )   )   ;   v   a   r       m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   S   t   o   r   a   g   e   =   n   e   w       F   l   o   a   t   3   2   A   r   r   a   y   (   2   8   8   )   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   =   2   8   8   ;   +   +   i   )   {   m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   [   i   ]   =   m   i   n   i   T   e   m   p   W   e   b   G   L   F   l   o   a   t   B   u   f   f   e   r   s   S   t   o   r   a   g   e   .   s   u   b   a   r   r   a   y   (   0   ,   i   )   }   v   a   r       m   i   n   i   T   e   m   p   W   e   b   G   L   I   n   t   B   u   f   f   e   r   s   S   t   o   r   a   g   e   =   n   e   w       I   n   t   3   2   A   r   r   a   y   (   2   8   8   )   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   =   2   8   8   ;   +   +   i   )   {   m   i   n   i   T   e   m   p   W   e   b   G   L   I   n   t   B   u   f   f   e   r   s   [   i   ]   =   m   i   n   i   T   e   m   p   W   e   b   G   L   I   n   t   B   u   f   f   e   r   s   S   t   o   r   a   g   e   .   s   u   b   a   r   r   a   y   (   0   ,   i   )   }   {   i   f   (   M   o   d   u   l   e   [   "   n   o   E   x   i   t   R   u   n   t   i   m   e   "   ]   )   n   o   E   x   i   t   R   u   n   t   i   m   e   =   M   o   d   u   l   e   [   "   n   o   E   x   i   t   R   u   n   t   i   m   e   "   ]   ;   i   f   (   M   o   d   u   l   e   [   "   p   r   e   l   o   a   d   P   l   u   g   i   n   s   "   ]   )   p   r   e   l   o   a   d   P   l   u   g   i   n   s   =   M   o   d   u   l   e   [   "   p   r   e   l   o   a   d   P   l   u   g   i   n   s   "   ]   ;   i   f   (   M   o   d   u   l   e   [   "   p   r   i   n   t   "   ]   )   o   u   t   =   M   o   d   u   l   e   [   "   p   r   i   n   t   "   ]   ;   i   f   (   M   o   d   u   l   e   [   "   p   r   i   n   t   E   r   r   "   ]   )   e   r   r   =   M   o   d   u   l   e   [   "   p   r   i   n   t   E   r   r   "   ]   ;   i   f   (   M   o   d   u   l   e   [   "   w   a   s   m   B   i   n   a   r   y   "   ]   )   w   a   s   m   B   i   n   a   r   y   =   M   o   d   u   l   e   [   "   w   a   s   m   B   i   n   a   r   y   "   ]   ;   i   f   (   M   o   d   u   l   e   [   "   a   r   g   u   m   e   n   t   s   "   ]   )   a   r   g   u   m   e   n   t   s   _   =   M   o   d   u   l   e   [   "   a   r   g   u   m   e   n   t   s   "   ]   ;   i   f   (   M   o   d   u   l   e   [   "   t   h   i   s   P   r   o   g   r   a   m   "   ]   )   t   h   i   s   P   r   o   g   r   a   m   =   M   o   d   u   l   e   [   "   t   h   i   s   P   r   o   g   r   a   m   "   ]   }   M   o   d   u   l   e   [   "   a   d   d   R   u   n   D   e   p   e   n   d   e   n   c   y   "   ]   =   a   d   d   R   u   n   D   e   p   e   n   d   e   n   c   y   ;   M   o   d   u   l   e   [   "   r   e   m   o   v   e   R   u   n   D   e   p   e   n   d   e   n   c   y   "   ]   =   r   e   m   o   v   e   R   u   n   D   e   p   e   n   d   e   n   c   y   ;   M   o   d   u   l   e   [   "   c   c   a   l   l   "   ]   =   c   c   a   l   l   ;   M   o   d   u   l   e   [   "   c   r   e   a   t   e   C   o   n   t   e   x   t   "   ]   =   c   r   e   a   t   e   C   o   n   t   e   x   t   ;   M   o   d   u   l   e   [   "   F   S   _   c   r   e   a   t   e   P   r   e   l   o   a   d   e   d   F   i   l   e   "   ]   =   F   S   _   c   r   e   a   t   e   P   r   e   l   o   a   d   e   d   F   i   l   e   ;   M   o   d   u   l   e   [   "   F   S   _   u   n   l   i   n   k   "   ]   =   F   S   _   u   n   l   i   n   k   ;   M   o   d   u   l   e   [   "   F   S   _   c   r   e   a   t   e   P   a   t   h   "   ]   =   F   S   _   c   r   e   a   t   e   P   a   t   h   ;   M   o   d   u   l   e   [   "   F   S   _   c   r   e   a   t   e   D   e   v   i   c   e   "   ]   =   F   S   _   c   r   e   a   t   e   D   e   v   i   c   e   ;   M   o   d   u   l   e   [   "   F   S   _   c   r   e   a   t   e   D   a   t   a   F   i   l   e   "   ]   =   F   S   _   c   r   e   a   t   e   D   a   t   a   F   i   l   e   ;   M   o   d   u   l   e   [   "   F   S   _   c   r   e   a   t   e   L   a   z   y   F   i   l   e   "   ]   =   F   S   _   c   r   e   a   t   e   L   a   z   y   F   i   l   e   ;   v   a   r       A   S   M   _   C   O   N   S   T   S   =   {   3   5   6   7   9   7   :   (   )   =   >   {   F   S   .   m   k   d   i   r   (   "   /   p   r   e   s   e   t   s   "   )   ;   F   S   .   m   k   d   i   r   (   "   /   t   e   x   t   u   r   e   s   "   )   ;   F   S   .   m   k   d   i   r   (   "   /   s   n   d   "   )   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   s   c   a   n   v   a   s   "   )   .   h   e   i   g   h   t   =   w   i   n   d   o   w   .   i   n   n   e   r   H   e   i   g   h   t   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   s   c   a   n   v   a   s   "   )   .   w   i   d   t   h   =   w   i   n   d   o   w   .   i   n   n   e   r   H   e   i   g   h   t   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   m   c   a   n   v   a   s   "   )   .   h   e   i   g   h   t   =   w   i   n   d   o   w   .   i   n   n   e   r   H   e   i   g   h   t   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   m   c   a   n   v   a   s   "   )   .   w   i   d   t   h   =   w   i   n   d   o   w   .   i   n   n   e   r   H   e   i   g   h   t   ;   v   a   r       $   s   n   g   s   =   [   ]   ;   v   a   r       $   s   h   d   s   =   [   ]   ;   v   a   r       $   t   e   x   s   =   [   ]   ;   f   u   n   c   t   i   o   n       t   e   x   t   u   r   e   s   (   x   m   l   )   {   c   o   n   s   t       n   p   a   r   s   e   r   =   n   e   w       D   O   M   P   a   r   s   e   r   ;   c   o   n   s   t       h   t   m   l   D   o   c   s   =   n   p   a   r   s   e   r   .   p   a   r   s   e   F   r   o   m   S   t   r   i   n   g   (   x   m   l   .   r   e   s   p   o   n   s   e   T   e   x   t   ,   "   t   e   x   t   /   h   t   m   l   "   )   ;   c   o   n   s   t       p   r   e   L   i   s   t   =   h   t   m   l   D   o   c   s   .   g   e   t   E   l   e   m   e   n   t   s   B   y   T   a   g   N   a   m   e   (   "   p   r   e   "   )   [   0   ]   .   g   e   t   E   l   e   m   e   n   t   s   B   y   T   a   g   N   a   m   e   (   "   a   "   )   ;   $   t   e   x   s   [   0   ]   =   p   r   e   L   i   s   t   .   l   e   n   g   t   h   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   s   c   a   n   n   e   d   :       "   +   $   t   e   x   s   [   0   ]   +   "       t   e   x   t   u   r   e   s   .   "   )   ;   f   o   r   (   v   a   r       i   =   1   ;   i   <   p   r   e   L   i   s   t   .   l   e   n   g   t   h   ;   i   +   +   )   {   v   a   r       t   x   x   t   =   p   r   e   L   i   s   t   [   i   ]   .   h   r   e   f   ;   l   e   t       p   a   t   h   N   a   m   e   =   "   h   t   t   p   s   :   /   /   n   o   a   h   c   o   h   n   .   c   o   m   /   t   e   x   t   u   r   e   s   "   ;   l   e   t       c   u   r   r   e   n   t   O   r   i   g   i   n   =   w   i   n   d   o   w   .   l   o   c   a   t   i   o   n   .   o   r   i   g   i   n   ;   l   e   t       l   a   s   t   S   l   a   s   h   I   n   d   e   x   =   p   a   t   h   N   a   m   e   .   l   a   s   t   I   n   d   e   x   O   f   (   "   /   "   )   ;   l   e   t       b   a   s   e   P   a   t   h   =   p   a   t   h   N   a   m   e   .   s   u   b   s   t   r   i   n   g   (   0   ,   l   a   s   t   S   l   a   s   h   I   n   d   e   x   )   ;   t   x   x   t   =   t   x   x   t   .   r   e   p   l   a   c   e   (   c   u   r   r   e   n   t   O   r   i   g   i   n   ,   "   "   )   ;   $   t   e   x   s   [   i   ]   =   b   a   s   e   P   a   t   h   +   "   /   t   e   x   t   u   r   e   s   "   +   t   x   x   t   ;   c   o   n   s   t       f   f   =   n   e   w       X   M   L   H   t   t   p   R   e   q   u   e   s   t   ;   f   f   .   o   p   e   n   (   "   G   E   T   "   ,   $   t   e   x   s   [   i   ]   ,   t   r   u   e   )   ;   f   f   .   r   e   s   p   o   n   s   e   T   y   p   e   =   "   a   r   r   a   y   b   u   f   f   e   r   "   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   s   t   a   t   "   )   .   i   n   n   e   r   H   T   M   L   =   "   D   o   w   n   l   o   a   d   i   n   g       T   e   x   t   u   r   e   "   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   s   t   a   t   "   )   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   =   "   y   e   l   l   o   w   "   ;   f   f   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   l   o   a   d   "   ,   f   u   n   c   t   i   o   n   (   )   {   l   e   t       s   a   r   r   a   y   B   u   f   f   e   r   =   f   f   .   r   e   s   p   o   n   s   e   ;   i   f   (   s   a   r   r   a   y   B   u   f   f   e   r   )   {   l   e   t       s   f   i   l   =   n   e   w       U   i   n   t   8   C   l   a   m   p   e   d   A   r   r   a   y   (   s   a   r   r   a   y   B   u   f   f   e   r   )   ;   F   S   .   w   r   i   t   e   F   i   l   e   (   "   /   t   e   x   t   u   r   e   s   /   "   +   t   x   x   t   ,   s   f   i   l   )   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   g   o   t       t   e   x   t   u   r   e   :       "   +   t   x   x   t   +   "       /       "   +   $   t   e   x   s   [   i   ]   )   ;   s   e   t   T   i   m   e   o   u   t   (   f   u   n   c   t   i   o   n   (   )   {   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   s   t   a   t   "   )   .   i   n   n   e   r   H   T   M   L   =   "   D   o   w   n   l   o   a   d   e   d       T   e   x   t   u   r   e   "   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   s   t   a   t   "   )   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   =   "   b   l   u   e   "   }   ,   5   0   0   )   }   }   )   ;   f   f   .   s   e   n   d   (   n   u   l   l   )   }   }   f   u   n   c   t   i   o   n       s   c   a   n   T   e   x   t   u   r   e   s   (   )   {   c   o   n   s   t       n   x   h   t   t   p   =   n   e   w       X   M   L   H   t   t   p   R   e   q   u   e   s   t   ;   n   x   h   t   t   p   .   o   n   r   e   a   d   y   s   t   a   t   e   c   h   a   n   g   e   =   f   u   n   c   t   i   o   n   (   )   {   i   f   (   t   h   i   s   .   r   e   a   d   y   S   t   a   t   e   =   =   4   &   &   t   h   i   s   .   s   t   a   t   u   s   =   =   2   0   0   )   {   c   o   n   s   o   l   e   .   l   o   g   (   "   s   c   a   n   n   i   n   g       t   e   x   t   u   r   e   s   .   "   )   ;   t   e   x   t   u   r   e   s   (   t   h   i   s   )   }   }   ;   n   x   h   t   t   p   .   o   p   e   n   (   "   G   E   T   "   ,   "   .   /   t   e   x   t   u   r   e   s   /   "   ,   t   r   u   e   )   ;   n   x   h   t   t   p   .   s   e   n   d   (   )   }   f   u   n   c   t   i   o   n       s   h   d   s   (   x   m   l   )   {   c   o   n   s   t       n   p   a   r   s   e   r   =   n   e   w       D   O   M   P   a   r   s   e   r   ;   c   o   n   s   t       h   t   m   l   D   o   c   s   =   n   p   a   r   s   e   r   .   p   a   r   s   e   F   r   o   m   S   t   r   i   n   g   (   x   m   l   .   r   e   s   p   o   n   s   e   T   e   x   t   ,   "   t   e   x   t   /   h   t   m   l   "   )   ;   c   o   n   s   t       p   r   e   L   i   s   t   =   h   t   m   l   D   o   c   s   .   g   e   t   E   l   e   m   e   n   t   s   B   y   T   a   g   N   a   m   e   (   "   p   r   e   "   )   [   0   ]   .   g   e   t   E   l   e   m   e   n   t   s   B   y   T   a   g   N   a   m   e   (   "   a   "   )   ;   $   s   h   d   s   [   0   ]   =   p   r   e   L   i   s   t   .   l   e   n   g   t   h   ;   f   o   r   (   v   a   r       i   =   1   ;   i   <   p   r   e   L   i   s   t   .   l   e   n   g   t   h   ;   i   +   +   )   {   v   a   r       t   x   x   t   =   p   r   e   L   i   s   t   [   i   ]   .   h   r   e   f   ;   l   e   t       p   a   t   h   N   a   m   e   =   "   h   t   t   p   s   :   /   /   g   l   s   l   .   1   i   n   k   .   u   s   /   m   i   l   k   "   ;   l   e   t       c   u   r   r   e   n   t   O   r   i   g   i   n   =   w   i   n   d   o   w   .   l   o   c   a   t   i   o   n   .   o   r   i   g   i   n   ;   l   e   t       l   a   s   t   S   l   a   s   h   I   n   d   e   x   =   p   a   t   h   N   a   m   e   .   l   a   s   t   I   n   d   e   x   O   f   (   "   /   "   )   ;   l   e   t       b   a   s   e   P   a   t   h   =   p   a   t   h   N   a   m   e   .   s   u   b   s   t   r   i   n   g   (   0   ,   l   a   s   t   S   l   a   s   h   I   n   d   e   x   )   ;   t   x   x   t   =   t   x   x   t   .   r   e   p   l   a   c   e   (   c   u   r   r   e   n   t   O   r   i   g   i   n   ,   "   "   )   ;   $   s   h   d   s   [   i   ]   =   b   a   s   e   P   a   t   h   +   "   /   m   i   l   k   "   +   t   x   x   t   }   }   f   u   n   c   t   i   o   n       s   c   a   n   S   h   a   d   e   r   s   (   )   {   c   o   n   s   t       n   x   h   t   t   p   =   n   e   w       X   M   L   H   t   t   p   R   e   q   u   e   s   t   ;   n   x   h   t   t   p   .   o   n   r   e   a   d   y   s   t   a   t   e   c   h   a   n   g   e   =   f   u   n   c   t   i   o   n   (   )   {   i   f   (   t   h   i   s   .   r   e   a   d   y   S   t   a   t   e   =   =   4   &   &   t   h   i   s   .   s   t   a   t   u   s   =   =   2   0   0   )   {   s   h   d   s   (   t   h   i   s   )   }   }   ;   n   x   h   t   t   p   .   o   p   e   n   (   "   G   E   T   "   ,   "   h   t   t   p   s   :   /   /   g   l   s   l   .   1   i   n   k   .   u   s   /   m   i   l   k   /   "   ,   t   r   u   e   )   ;   n   x   h   t   t   p   .   s   e   n   d   (   )   }   f   u   n   c   t   i   o   n       s   n   g   s   (   x   m   l   )   {   c   o   n   s   t       n   p   a   r   s   e   r   =   n   e   w       D   O   M   P   a   r   s   e   r   ;   c   o   n   s   t       h   t   m   l   D   o   c   s   =   n   p   a   r   s   e   r   .   p   a   r   s   e   F   r   o   m   S   t   r   i   n   g   (   x   m   l   .   r   e   s   p   o   n   s   e   T   e   x   t   ,   "   t   e   x   t   /   h   t   m   l   "   )   ;   c   o   n   s   t       p   r   e   L   i   s   t   =   h   t   m   l   D   o   c   s   .   g   e   t   E   l   e   m   e   n   t   s   B   y   T   a   g   N   a   m   e   (   "   p   r   e   "   )   [   0   ]   .   g   e   t   E   l   e   m   e   n   t   s   B   y   T   a   g   N   a   m   e   (   "   a   "   )   ;   $   s   n   g   s   [   0   ]   =   p   r   e   L   i   s   t   .   l   e   n   g   t   h   ;   f   o   r   (   v   a   r       i   =   1   ;   i   <   p   r   e   L   i   s   t   .   l   e   n   g   t   h   ;   i   +   +   )   {   v   a   r       t   x   x   t   =   p   r   e   L   i   s   t   [   i   ]   .   h   r   e   f   ;   l   e   t       p   a   t   h   N   a   m   e   =   w   i   n   d   o   w   .   l   o   c   a   t   i   o   n   .   p   a   t   h   n   a   m   e   ;   l   e   t       c   u   r   r   e   n   t   O   r   i   g   i   n   =   w   i   n   d   o   w   .   l   o   c   a   t   i   o   n   .   o   r   i   g   i   n   ;   l   e   t       l   a   s   t   S   l   a   s   h   I   n   d   e   x   =   p   a   t   h   N   a   m   e   .   l   a   s   t   I   n   d   e   x   O   f   (   "   /   "   )   ;   l   e   t       b   a   s   e   P   a   t   h   =   p   a   t   h   N   a   m   e   .   s   u   b   s   t   r   i   n   g   (   0   ,   l   a   s   t   S   l   a   s   h   I   n   d   e   x   +   1   )   ;   t   x   x   t   =   t   x   x   t   .   r   e   p   l   a   c   e   (   c   u   r   r   e   n   t   O   r   i   g   i   n   ,   "   "   )   ;   $   s   n   g   s   [   i   ]   =   b   a   s   e   P   a   t   h   +   "   s   o   n   g   s   /   "   +   t   x   x   t   }   }   f   u   n   c   t   i   o   n       s   c   a   n   S   o   n   g   s   (   )   {   c   o   n   s   t       n   x   h   t   t   p   =   n   e   w       X   M   L   H   t   t   p   R   e   q   u   e   s   t   ;   n   x   h   t   t   p   .   o   n   r   e   a   d   y   s   t   a   t   e   c   h   a   n   g   e   =   f   u   n   c   t   i   o   n   (   )   {   i   f   (   t   h   i   s   .   r   e   a   d   y   S   t   a   t   e   =   =   4   &   &   t   h   i   s   .   s   t   a   t   u   s   =   =   2   0   0   )   {   s   n   g   s   (   t   h   i   s   )   }   }   ;   n   x   h   t   t   p   .   o   p   e   n   (   "   G   E   T   "   ,   "   s   o   n   g   s   /   "   ,   t   r   u   e   )   ;   n   x   h   t   t   p   .   s   e   n   d   (   )   }   f   u   n   c   t   i   o   n       p   l   l   (   )   {   M   o   d   u   l   e   .   c   c   a   l   l   (   "   p   l   "   )   }   c   o   n   s   t       f   l   l   =   n   e   w       B   r   o   a   d   c   a   s   t   C   h   a   n   n   e   l   (   "   f   i   l   e   "   )   ;   f   l   l   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   m   e   s   s   a   g   e   "   ,   e   a   =   >   {   c   o   n   s   t       f   i   l   l   =   n   e   w       U   i   n   t   8   A   r   r   a   y   (   e   a   .   d   a   t   a   .   d   a   t   a   )   ;   F   S   .   w   r   i   t   e   F   i   l   e   (   "   /   s   n   d   /   s   a   m   p   l   e   .   w   a   v   "   ,   f   i   l   l   )   ;   s   e   t   T   i   m   e   o   u   t   (   f   u   n   c   t   i   o   n   (   )   {   p   l   l   (   )   }   ,   5   0   0   )   ;   c   o   n   s   t       s   h   u   t   D   o   w   n   =   n   e   w       B   r   o   a   d   c   a   s   t   C   h   a   n   n   e   l   (   "   s   h   u   t   D   o   w   n   "   )   ;   s   h   u   t   D   o   w   n   .   p   o   s   t   M   e   s   s   a   g   e   (   {   d   a   t   a   :   2   2   2   }   )   }   )   ;   v   a   r       p   t   h   =   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   m   i   l   k   P   a   t   h   "   )   .   i   n   n   e   r   H   T   M   L   ;   M   o   d   u   l   e   .   g   e   t   S   h   a   d   e   r   (   )   ;   s   c   a   n   S   o   n   g   s   (   )   ;   s   c   a   n   S   h   a   d   e   r   s   (   )   ;   s   c   a   n   T   e   x   t   u   r   e   s   (   )   ;   f   u   n   c   t   i   o   n       s   n   d   (   )   {   c   o   n   s   t       r   a   n   d   S   o   n   g   =   M   a   t   h   .   f   l   o   o   r   (   (   $   s   n   g   s   [   0   ]   -   5   )   *   M   a   t   h   .   r   a   n   d   o   m   (   )   )   ;   c   o   n   s   t       s   o   n   g   S   r   c   =   $   s   n   g   s   [   r   a   n   d   S   o   n   g   +   5   ]   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   t   r   a   c   k   "   )   .   s   r   c   =   s   o   n   g   S   r   c   ;   c   o   n   s   t       s   n   g   =   n   e   w       B   r   o   a   d   c   a   s   t   C   h   a   n   n   e   l   (   "   s   n   g   "   )   ;   s   n   g   .   p   o   s   t   M   e   s   s   a   g   e   (   {   d   a   t   a   :   s   o   n   g   S   r   c   }   )   }   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   m   u   s   i   c   B   t   n   "   )   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   c   l   i   c   k   "   ,   f   u   n   c   t   i   o   n   (   )   {   w   i   n   d   o   w   .   o   p   e   n   (   "   .   /   f   l   a   c   "   )   ;   s   e   t   T   i   m   e   o   u   t   (   f   u   n   c   t   i   o   n   (   )   {   s   n   d   (   )   }   ,   1   4   5   0   )   }   )   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   m   i   l   k   B   t   n   "   )   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   c   l   i   c   k   "   ,   f   u   n   c   t   i   o   n   (   )   {   M   o   d   u   l   e   .   s   e   t   W   i   n   d   o   w   S   i   z   e   (   w   i   n   d   o   w   .   i   n   n   e   r   H   e   i   g   h   t   ,   w   i   n   d   o   w   .   i   n   n   e   r   H   e   i   g   h   t   )   ;   c   o   n   s   t       r   a   n   d   S   h   d   =   M   a   t   h   .   f   l   o   o   r   (   (   $   s   h   d   s   [   0   ]   -   5   )   *   M   a   t   h   .   r   a   n   d   o   m   (   )   )   ;   c   o   n   s   t       m   i   l   k   S   r   c   =   $   s   h   d   s   [   r   a   n   d   S   h   d   +   5   ]   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   G   o   t       s   h   a   d   e   r   :       "   +   m   i   l   k   S   r   c   )   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   m   i   l   k   P   a   t   h   "   )   .   i   n   n   e   r   H   T   M   L   =   m   i   l   k   S   r   c   ;   M   o   d   u   l   e   .   g   e   t   S   h   a   d   e   r   (   )   }   )   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   m   e   s   h   S   i   z   e   "   )   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   c   h   a   n   g   e   "   ,   e   v   e   n   t   =   >   {   l   e   t       m   e   s   h   V   a   l   u   e   =   e   v   e   n   t   .   t   a   r   g   e   t   .   v   a   l   u   e   ;   l   e   t       v   a   l   u   e   s   =   m   e   s   h   V   a   l   u   e   .   s   p   l   i   t   (   "   ,   "   )   .   m   a   p   (   N   u   m   b   e   r   )   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   S   e   t   t   i   n   g       M   e   s   h   :   "   ,   v   a   l   u   e   s   [   0   ]   ,   v   a   l   u   e   s   [   1   ]   )   ;   M   o   d   u   l   e   .   s   e   t   M   e   s   h   (   v   a   l   u   e   s   [   0   ]   ,   v   a   l   u   e   s   [   1   ]   )   }   )   ;   s   e   t   T   i   m   e   o   u   t   (   f   u   n   c   t   i   o   n   (   )   {   M   o   d   u   l   e   .   s   t   a   r   t   R   e   n   d   e   r   (   w   i   n   d   o   w   .   i   n   n   e   r   H   e   i   g   h   t   )   }   ,   1   5   0   0   )   }   ,   3   6   1   6   2   8   :   $   0   =   >   {   v   a   r       s   t   r   =   U   T   F   8   T   o   S   t   r   i   n   g   (   $   0   )   +   "   \   n   \   n   "   +   "   A   b   o   r   t   /   R   e   t   r   y   /   I   g   n   o   r   e   /   A   l   w   a   y   s   I   g   n   o   r   e   ?       [   a   r   i   A   ]       :   "   ;   v   a   r       r   e   p   l   y   =   w   i   n   d   o   w   .   p   r   o   m   p   t   (   s   t   r   ,   "   i   "   )   ;   i   f   (   r   e   p   l   y   =   =   =   n   u   l   l   )   {   r   e   p   l   y   =   "   i   "   }   r   e   t   u   r   n       a   l   l   o   c   a   t   e   (   i   n   t   A   r   r   a   y   F   r   o   m   S   t   r   i   n   g   (   r   e   p   l   y   )   ,   "   i   8   "   ,   A   L   L   O   C   _   N   O   R   M   A   L   )   }   ,   3   6   1   8   5   3   :   (   )   =   >   {   i   f   (   t   y   p   e   o   f       A   u   d   i   o   C   o   n   t   e   x   t   !   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   r   e   t   u   r   n       t   r   u   e   }   e   l   s   e       i   f   (   t   y   p   e   o   f       w   e   b   k   i   t   A   u   d   i   o   C   o   n   t   e   x   t   !   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   r   e   t   u   r   n       t   r   u   e   }   r   e   t   u   r   n       f   a   l   s   e   }   ,   3   6   2   e   3   :   (   )   =   >   {   i   f   (   t   y   p   e   o   f       n   a   v   i   g   a   t   o   r   .   m   e   d   i   a   D   e   v   i   c   e   s   !   =   =   "   u   n   d   e   f   i   n   e   d   "   &   &   t   y   p   e   o   f       n   a   v   i   g   a   t   o   r   .   m   e   d   i   a   D   e   v   i   c   e   s   .   g   e   t   U   s   e   r   M   e   d   i   a   !   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   r   e   t   u   r   n       t   r   u   e   }   e   l   s   e       i   f   (   t   y   p   e   o   f       n   a   v   i   g   a   t   o   r   .   w   e   b   k   i   t   G   e   t   U   s   e   r   M   e   d   i   a   !   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   r   e   t   u   r   n       t   r   u   e   }   r   e   t   u   r   n       f   a   l   s   e   }   ,   3   6   2   2   3   4   :   $   0   =   >   {   i   f   (   t   y   p   e   o   f       M   o   d   u   l   e   [   "   S   D   L   2   "   ]   =   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   =   {   }   }   v   a   r       S   D   L   2   =   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   ;   i   f   (   !   $   0   )   {   S   D   L   2   .   a   u   d   i   o   =   {   }   }   e   l   s   e   {   S   D   L   2   .   c   a   p   t   u   r   e   =   {   }   }   i   f   (   !   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   )   {   i   f   (   t   y   p   e   o   f       A   u   d   i   o   C   o   n   t   e   x   t   !   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   =   n   e   w       A   u   d   i   o   C   o   n   t   e   x   t   }   e   l   s   e       i   f   (   t   y   p   e   o   f       w   e   b   k   i   t   A   u   d   i   o   C   o   n   t   e   x   t   !   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   =   n   e   w       w   e   b   k   i   t   A   u   d   i   o   C   o   n   t   e   x   t   }   i   f   (   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   )   {   i   f   (   t   y   p   e   o   f       n   a   v   i   g   a   t   o   r   .   u   s   e   r   A   c   t   i   v   a   t   i   o   n   =   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   a   u   t   o   R   e   s   u   m   e   A   u   d   i   o   C   o   n   t   e   x   t   (   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   )   }   }   }   r   e   t   u   r   n       S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   =   =   =   u   n   d   e   f   i   n   e   d   ?   -   1   :   0   }   ,   3   6   2   7   8   6   :   (   )   =   >   {   v   a   r       S   D   L   2   =   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   ;   r   e   t   u   r   n       S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   s   a   m   p   l   e   R   a   t   e   }   ,   3   6   2   8   5   4   :   (   $   0   ,   $   1   ,   $   2   ,   $   3   )   =   >   {   v   a   r       S   D   L   2   =   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   ;   v   a   r       h   a   v   e   _   m   i   c   r   o   p   h   o   n   e   =   f   u   n   c   t   i   o   n   (   s   t   r   e   a   m   )   {   i   f   (   S   D   L   2   .   c   a   p   t   u   r   e   .   s   i   l   e   n   c   e   T   i   m   e   r   !   =   =   u   n   d   e   f   i   n   e   d   )   {   c   l   e   a   r   I   n   t   e   r   v   a   l   (   S   D   L   2   .   c   a   p   t   u   r   e   .   s   i   l   e   n   c   e   T   i   m   e   r   )   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   s   i   l   e   n   c   e   T   i   m   e   r   =   u   n   d   e   f   i   n   e   d   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   s   i   l   e   n   c   e   B   u   f   f   e   r   =   u   n   d   e   f   i   n   e   d   }   S   D   L   2   .   c   a   p   t   u   r   e   .   m   e   d   i   a   S   t   r   e   a   m   N   o   d   e   =   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   c   r   e   a   t   e   M   e   d   i   a   S   t   r   e   a   m   S   o   u   r   c   e   (   s   t   r   e   a   m   )   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   =   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   c   r   e   a   t   e   S   c   r   i   p   t   P   r   o   c   e   s   s   o   r   (   $   1   ,   $   0   ,   1   )   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   .   o   n   a   u   d   i   o   p   r   o   c   e   s   s   =   f   u   n   c   t   i   o   n   (   a   u   d   i   o   P   r   o   c   e   s   s   i   n   g   E   v   e   n   t   )   {   i   f   (   S   D   L   2   =   =   =   u   n   d   e   f   i   n   e   d   |   |   S   D   L   2   .   c   a   p   t   u   r   e   =   =   =   u   n   d   e   f   i   n   e   d   )   {   r   e   t   u   r   n   }   a   u   d   i   o   P   r   o   c   e   s   s   i   n   g   E   v   e   n   t   .   o   u   t   p   u   t   B   u   f   f   e   r   .   g   e   t   C   h   a   n   n   e   l   D   a   t   a   (   0   )   .   f   i   l   l   (   0   )   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   c   u   r   r   e   n   t   C   a   p   t   u   r   e   B   u   f   f   e   r   =   a   u   d   i   o   P   r   o   c   e   s   s   i   n   g   E   v   e   n   t   .   i   n   p   u   t   B   u   f   f   e   r   ;   d   y   n   C   a   l   l   (   "   v   i   "   ,   $   2   ,   [   $   3   ]   )   }   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   m   e   d   i   a   S   t   r   e   a   m   N   o   d   e   .   c   o   n   n   e   c   t   (   S   D   L   2   .   c   a   p   t   u   r   e   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   )   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   .   c   o   n   n   e   c   t   (   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   d   e   s   t   i   n   a   t   i   o   n   )   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   s   t   r   e   a   m   =   s   t   r   e   a   m   }   ;   v   a   r       n   o   _   m   i   c   r   o   p   h   o   n   e   =   f   u   n   c   t   i   o   n   (   e   r   r   o   r   )   {   }   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   s   i   l   e   n   c   e   B   u   f   f   e   r   =   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   c   r   e   a   t   e   B   u   f   f   e   r   (   $   0   ,   $   1   ,   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   s   a   m   p   l   e   R   a   t   e   )   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   s   i   l   e   n   c   e   B   u   f   f   e   r   .   g   e   t   C   h   a   n   n   e   l   D   a   t   a   (   0   )   .   f   i   l   l   (   0   )   ;   v   a   r       s   i   l   e   n   c   e   _   c   a   l   l   b   a   c   k   =   f   u   n   c   t   i   o   n   (   )   {   S   D   L   2   .   c   a   p   t   u   r   e   .   c   u   r   r   e   n   t   C   a   p   t   u   r   e   B   u   f   f   e   r   =   S   D   L   2   .   c   a   p   t   u   r   e   .   s   i   l   e   n   c   e   B   u   f   f   e   r   ;   d   y   n   C   a   l   l   (   "   v   i   "   ,   $   2   ,   [   $   3   ]   )   }   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   s   i   l   e   n   c   e   T   i   m   e   r   =   s   e   t   I   n   t   e   r   v   a   l   (   s   i   l   e   n   c   e   _   c   a   l   l   b   a   c   k   ,   $   1   /   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   s   a   m   p   l   e   R   a   t   e   *   1   e   3   )   ;   i   f   (   n   a   v   i   g   a   t   o   r   .   m   e   d   i   a   D   e   v   i   c   e   s   !   =   =   u   n   d   e   f   i   n   e   d   &   &   n   a   v   i   g   a   t   o   r   .   m   e   d   i   a   D   e   v   i   c   e   s   .   g   e   t   U   s   e   r   M   e   d   i   a   !   =   =   u   n   d   e   f   i   n   e   d   )   {   n   a   v   i   g   a   t   o   r   .   m   e   d   i   a   D   e   v   i   c   e   s   .   g   e   t   U   s   e   r   M   e   d   i   a   (   {   a   u   d   i   o   :   t   r   u   e   ,   v   i   d   e   o   :   f   a   l   s   e   }   )   .   t   h   e   n   (   h   a   v   e   _   m   i   c   r   o   p   h   o   n   e   )   .   c   a   t   c   h   (   n   o   _   m   i   c   r   o   p   h   o   n   e   )   }   e   l   s   e       i   f   (   n   a   v   i   g   a   t   o   r   .   w   e   b   k   i   t   G   e   t   U   s   e   r   M   e   d   i   a   !   =   =   u   n   d   e   f   i   n   e   d   )   {   n   a   v   i   g   a   t   o   r   .   w   e   b   k   i   t   G   e   t   U   s   e   r   M   e   d   i   a   (   {   a   u   d   i   o   :   t   r   u   e   ,   v   i   d   e   o   :   f   a   l   s   e   }   ,   h   a   v   e   _   m   i   c   r   o   p   h   o   n   e   ,   n   o   _   m   i   c   r   o   p   h   o   n   e   )   }   }   ,   3   6   4   5   4   7   :   (   $   0   ,   $   1   ,   $   2   ,   $   3   )   =   >   {   v   a   r       S   D   L   2   =   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   ;   S   D   L   2   .   a   u   d   i   o   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   =   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   [   "   c   r   e   a   t   e   S   c   r   i   p   t   P   r   o   c   e   s   s   o   r   "   ]   (   $   1   ,   0   ,   $   0   )   ;   S   D   L   2   .   a   u   d   i   o   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   [   "   o   n   a   u   d   i   o   p   r   o   c   e   s   s   "   ]   =   f   u   n   c   t   i   o   n   (   e   )   {   i   f   (   S   D   L   2   =   =   =   u   n   d   e   f   i   n   e   d   |   |   S   D   L   2   .   a   u   d   i   o   =   =   =   u   n   d   e   f   i   n   e   d   )   {   r   e   t   u   r   n   }   i   f   (   S   D   L   2   .   a   u   d   i   o   .   s   i   l   e   n   c   e   T   i   m   e   r   !   =   =   u   n   d   e   f   i   n   e   d   )   {   c   l   e   a   r   I   n   t   e   r   v   a   l   (   S   D   L   2   .   a   u   d   i   o   .   s   i   l   e   n   c   e   T   i   m   e   r   )   ;   S   D   L   2   .   a   u   d   i   o   .   s   i   l   e   n   c   e   T   i   m   e   r   =   u   n   d   e   f   i   n   e   d   ;   S   D   L   2   .   a   u   d   i   o   .   s   i   l   e   n   c   e   B   u   f   f   e   r   =   u   n   d   e   f   i   n   e   d   }   S   D   L   2   .   a   u   d   i   o   .   c   u   r   r   e   n   t   O   u   t   p   u   t   B   u   f   f   e   r   =   e   [   "   o   u   t   p   u   t   B   u   f   f   e   r   "   ]   ;   d   y   n   C   a   l   l   (   "   v   i   "   ,   $   2   ,   [   $   3   ]   )   }   ;   S   D   L   2   .   a   u   d   i   o   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   [   "   c   o   n   n   e   c   t   "   ]   (   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   [   "   d   e   s   t   i   n   a   t   i   o   n   "   ]   )   ;   i   f   (   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   s   t   a   t   e   =   =   =   "   s   u   s   p   e   n   d   e   d   "   )   {   S   D   L   2   .   a   u   d   i   o   .   s   i   l   e   n   c   e   B   u   f   f   e   r   =   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   c   r   e   a   t   e   B   u   f   f   e   r   (   $   0   ,   $   1   ,   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   s   a   m   p   l   e   R   a   t   e   )   ;   S   D   L   2   .   a   u   d   i   o   .   s   i   l   e   n   c   e   B   u   f   f   e   r   .   g   e   t   C   h   a   n   n   e   l   D   a   t   a   (   0   )   .   f   i   l   l   (   0   )   ;   v   a   r       s   i   l   e   n   c   e   _   c   a   l   l   b   a   c   k   =   f   u   n   c   t   i   o   n   (   )   {   i   f   (   t   y   p   e   o   f       n   a   v   i   g   a   t   o   r   .   u   s   e   r   A   c   t   i   v   a   t   i   o   n   !   =   =   "   u   n   d   e   f   i   n   e   d   "   )   {   i   f   (   n   a   v   i   g   a   t   o   r   .   u   s   e   r   A   c   t   i   v   a   t   i   o   n   .   h   a   s   B   e   e   n   A   c   t   i   v   e   )   {   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   r   e   s   u   m   e   (   )   }   }   S   D   L   2   .   a   u   d   i   o   .   c   u   r   r   e   n   t   O   u   t   p   u   t   B   u   f   f   e   r   =   S   D   L   2   .   a   u   d   i   o   .   s   i   l   e   n   c   e   B   u   f   f   e   r   ;   d   y   n   C   a   l   l   (   "   v   i   "   ,   $   2   ,   [   $   3   ]   )   ;   S   D   L   2   .   a   u   d   i   o   .   c   u   r   r   e   n   t   O   u   t   p   u   t   B   u   f   f   e   r   =   u   n   d   e   f   i   n   e   d   }   ;   S   D   L   2   .   a   u   d   i   o   .   s   i   l   e   n   c   e   T   i   m   e   r   =   s   e   t   I   n   t   e   r   v   a   l   (   s   i   l   e   n   c   e   _   c   a   l   l   b   a   c   k   ,   $   1   /   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   s   a   m   p   l   e   R   a   t   e   *   1   e   3   )   }   }   ,   3   6   5   7   2   2   :   (   $   0   ,   $   1   )   =   >   {   v   a   r       S   D   L   2   =   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   ;   v   a   r       n   u   m   C   h   a   n   n   e   l   s   =   S   D   L   2   .   c   a   p   t   u   r   e   .   c   u   r   r   e   n   t   C   a   p   t   u   r   e   B   u   f   f   e   r   .   n   u   m   b   e   r   O   f   C   h   a   n   n   e   l   s   ;   f   o   r   (   v   a   r       c   =   0   ;   c   <   n   u   m   C   h   a   n   n   e   l   s   ;   +   +   c   )   {   v   a   r       c   h   a   n   n   e   l   D   a   t   a   =   S   D   L   2   .   c   a   p   t   u   r   e   .   c   u   r   r   e   n   t   C   a   p   t   u   r   e   B   u   f   f   e   r   .   g   e   t   C   h   a   n   n   e   l   D   a   t   a   (   c   )   ;   i   f   (   c   h   a   n   n   e   l   D   a   t   a   .   l   e   n   g   t   h   !   =   $   1   )   {   t   h   r   o   w   "   W   e   b       A   u   d   i   o       c   a   p   t   u   r   e       b   u   f   f   e   r       l   e   n   g   t   h       m   i   s   m   a   t   c   h   !       D   e   s   t   i   n   a   t   i   o   n       s   i   z   e   :       "   +   c   h   a   n   n   e   l   D   a   t   a   .   l   e   n   g   t   h   +   "       s   a   m   p   l   e   s       v   s       e   x   p   e   c   t   e   d       "   +   $   1   +   "       s   a   m   p   l   e   s   !   "   }   i   f   (   n   u   m   C   h   a   n   n   e   l   s   =   =   1   )   {   f   o   r   (   v   a   r       j   =   0   ;   j   <   $   1   ;   +   +   j   )   {   s   e   t   V   a   l   u   e   (   $   0   +   j   *   4   ,   c   h   a   n   n   e   l   D   a   t   a   [   j   ]   ,   "   f   l   o   a   t   "   )   }   }   e   l   s   e   {   f   o   r   (   v   a   r       j   =   0   ;   j   <   $   1   ;   +   +   j   )   {   s   e   t   V   a   l   u   e   (   $   0   +   (   j   *   n   u   m   C   h   a   n   n   e   l   s   +   c   )   *   4   ,   c   h   a   n   n   e   l   D   a   t   a   [   j   ]   ,   "   f   l   o   a   t   "   )   }   }   }   }   ,   3   6   6   3   2   7   :   (   $   0   ,   $   1   )   =   >   {   v   a   r       S   D   L   2   =   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   ;   v   a   r       b   u   f   =   $   0   >   >   >   2   ;   v   a   r       n   u   m   C   h   a   n   n   e   l   s   =   S   D   L   2   .   a   u   d   i   o   .   c   u   r   r   e   n   t   O   u   t   p   u   t   B   u   f   f   e   r   [   "   n   u   m   b   e   r   O   f   C   h   a   n   n   e   l   s   "   ]   ;   f   o   r   (   v   a   r       c   =   0   ;   c   <   n   u   m   C   h   a   n   n   e   l   s   ;   +   +   c   )   {   v   a   r       c   h   a   n   n   e   l   D   a   t   a   =   S   D   L   2   .   a   u   d   i   o   .   c   u   r   r   e   n   t   O   u   t   p   u   t   B   u   f   f   e   r   [   "   g   e   t   C   h   a   n   n   e   l   D   a   t   a   "   ]   (   c   )   ;   i   f   (   c   h   a   n   n   e   l   D   a   t   a   .   l   e   n   g   t   h   !   =   $   1   )   {   t   h   r   o   w   "   W   e   b       A   u   d   i   o       o   u   t   p   u   t       b   u   f   f   e   r       l   e   n   g   t   h       m   i   s   m   a   t   c   h   !       D   e   s   t   i   n   a   t   i   o   n       s   i   z   e   :       "   +   c   h   a   n   n   e   l   D   a   t   a   .   l   e   n   g   t   h   +   "       s   a   m   p   l   e   s       v   s       e   x   p   e   c   t   e   d       "   +   $   1   +   "       s   a   m   p   l   e   s   !   "   }   f   o   r   (   v   a   r       j   =   0   ;   j   <   $   1   ;   +   +   j   )   {   c   h   a   n   n   e   l   D   a   t   a   [   j   ]   =   H   E   A   P   F   3   2   [   b   u   f   +   (   j   *   n   u   m   C   h   a   n   n   e   l   s   +   c   )   >   >   >   0   ]   }   }   }   ,   3   6   6   8   1   6   :   $   0   =   >   {   v   a   r       S   D   L   2   =   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   ;   i   f   (   $   0   )   {   i   f   (   S   D   L   2   .   c   a   p   t   u   r   e   .   s   i   l   e   n   c   e   T   i   m   e   r   !   =   =   u   n   d   e   f   i   n   e   d   )   {   c   l   e   a   r   I   n   t   e   r   v   a   l   (   S   D   L   2   .   c   a   p   t   u   r   e   .   s   i   l   e   n   c   e   T   i   m   e   r   )   }   i   f   (   S   D   L   2   .   c   a   p   t   u   r   e   .   s   t   r   e   a   m   !   =   =   u   n   d   e   f   i   n   e   d   )   {   v   a   r       t   r   a   c   k   s   =   S   D   L   2   .   c   a   p   t   u   r   e   .   s   t   r   e   a   m   .   g   e   t   A   u   d   i   o   T   r   a   c   k   s   (   )   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   t   r   a   c   k   s   .   l   e   n   g   t   h   ;   i   +   +   )   {   S   D   L   2   .   c   a   p   t   u   r   e   .   s   t   r   e   a   m   .   r   e   m   o   v   e   T   r   a   c   k   (   t   r   a   c   k   s   [   i   ]   )   }   }   i   f   (   S   D   L   2   .   c   a   p   t   u   r   e   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   !   =   =   u   n   d   e   f   i   n   e   d   )   {   S   D   L   2   .   c   a   p   t   u   r   e   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   .   o   n   a   u   d   i   o   p   r   o   c   e   s   s   =   f   u   n   c   t   i   o   n   (   a   u   d   i   o   P   r   o   c   e   s   s   i   n   g   E   v   e   n   t   )   {   }   ;   S   D   L   2   .   c   a   p   t   u   r   e   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   .   d   i   s   c   o   n   n   e   c   t   (   )   }   i   f   (   S   D   L   2   .   c   a   p   t   u   r   e   .   m   e   d   i   a   S   t   r   e   a   m   N   o   d   e   !   =   =   u   n   d   e   f   i   n   e   d   )   {   S   D   L   2   .   c   a   p   t   u   r   e   .   m   e   d   i   a   S   t   r   e   a   m   N   o   d   e   .   d   i   s   c   o   n   n   e   c   t   (   )   }   S   D   L   2   .   c   a   p   t   u   r   e   =   u   n   d   e   f   i   n   e   d   }   e   l   s   e   {   i   f   (   S   D   L   2   .   a   u   d   i   o   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   !   =   u   n   d   e   f   i   n   e   d   )   {   S   D   L   2   .   a   u   d   i   o   .   s   c   r   i   p   t   P   r   o   c   e   s   s   o   r   N   o   d   e   .   d   i   s   c   o   n   n   e   c   t   (   )   }   i   f   (   S   D   L   2   .   a   u   d   i   o   .   s   i   l   e   n   c   e   T   i   m   e   r   !   =   =   u   n   d   e   f   i   n   e   d   )   {   c   l   e   a   r   I   n   t   e   r   v   a   l   (   S   D   L   2   .   a   u   d   i   o   .   s   i   l   e   n   c   e   T   i   m   e   r   )   }   S   D   L   2   .   a   u   d   i   o   =   u   n   d   e   f   i   n   e   d   }   i   f   (   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   !   =   =   u   n   d   e   f   i   n   e   d   &   &   S   D   L   2   .   a   u   d   i   o   =   =   =   u   n   d   e   f   i   n   e   d   &   &   S   D   L   2   .   c   a   p   t   u   r   e   =   =   =   u   n   d   e   f   i   n   e   d   )   {   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   .   c   l   o   s   e   (   )   ;   S   D   L   2   .   a   u   d   i   o   C   o   n   t   e   x   t   =   u   n   d   e   f   i   n   e   d   }   }   ,   3   6   7   8   2   2   :   (   $   0   ,   $   1   ,   $   2   )   =   >   {   v   a   r       w   =   $   0   ;   v   a   r       h   =   $   1   ;   v   a   r       p   i   x   e   l   s   =   $   2   ;   i   f   (   !   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   )   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   =   {   }   ;   v   a   r       S   D   L   2   =   M   o   d   u   l   e   [   "   S   D   L   2   "   ]   ;   i   f   (   S   D   L   2   .   c   t   x   C   a   n   v   a   s   !   =   =   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   )   {   S   D   L   2   .   c   t   x   =   M   o   d   u   l   e   [   "   c   r   e   a   t   e   C   o   n   t   e   x   t   "   ]   (   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   ,   f   a   l   s   e   ,   t   r   u   e   )   ;   S   D   L   2   .   c   t   x   C   a   n   v   a   s   =   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   }   i   f   (   S   D   L   2   .   w   !   =   =   w   |   |   S   D   L   2   .   h   !   =   =   h   |   |   S   D   L   2   .   i   m   a   g   e   C   t   x   !   =   =   S   D   L   2   .   c   t   x   )   {   S   D   L   2   .   i   m   a   g   e   =   S   D   L   2   .   c   t   x   .   c   r   e   a   t   e   I   m   a   g   e   D   a   t   a   (   w   ,   h   )   ;   S   D   L   2   .   w   =   w   ;   S   D   L   2   .   h   =   h   ;   S   D   L   2   .   i   m   a   g   e   C   t   x   =   S   D   L   2   .   c   t   x   }   v   a   r       d   a   t   a   =   S   D   L   2   .   i   m   a   g   e   .   d   a   t   a   ;   v   a   r       s   r   c   =   p   i   x   e   l   s   /   4   ;   v   a   r       d   s   t   =   0   ;   v   a   r       n   u   m   ;   i   f   (   t   y   p   e   o   f       C   a   n   v   a   s   P   i   x   e   l   A   r   r   a   y   !   =   =   "   u   n   d   e   f   i   n   e   d   "   &   &   d   a   t   a       i   n   s   t   a   n   c   e   o   f       C   a   n   v   a   s   P   i   x   e   l   A   r   r   a   y   )   {   n   u   m   =   d   a   t   a   .   l   e   n   g   t   h   ;   w   h   i   l   e   (   d   s   t   <   n   u   m   )   {   v   a   r       v   a   l   =   H   E   A   P   3   2   [   s   r   c   >   >   >   0   ]   ;   d   a   t   a   [   d   s   t   ]   =   v   a   l   &   2   5   5   ;   d   a   t   a   [   d   s   t   +   1   ]   =   v   a   l   >   >   8   &   2   5   5   ;   d   a   t   a   [   d   s   t   +   2   ]   =   v   a   l   >   >   1   6   &   2   5   5   ;   d   a   t   a   [   d   s   t   +   3   ]   =   2   5   5   ;   s   r   c   +   +   ;   d   s   t   +   =   4   }   }   e   l   s   e   {   i   f   (   S   D   L   2   .   d   a   t   a   3   2   D   a   t   a   !   =   =   d   a   t   a   )   {   S   D   L   2   .   d   a   t   a   3   2   =   n   e   w       I   n   t   3   2   A   r   r   a   y   (   d   a   t   a   .   b   u   f   f   e   r   )   ;   S   D   L   2   .   d   a   t   a   8   =   n   e   w       U   i   n   t   8   A   r   r   a   y   (   d   a   t   a   .   b   u   f   f   e   r   )   ;   S   D   L   2   .   d   a   t   a   3   2   D   a   t   a   =   d   a   t   a   }   v   a   r       d   a   t   a   3   2   =   S   D   L   2   .   d   a   t   a   3   2   ;   n   u   m   =   d   a   t   a   3   2   .   l   e   n   g   t   h   ;   d   a   t   a   3   2   .   s   e   t   (   H   E   A   P   3   2   .   s   u   b   a   r   r   a   y   (   s   r   c   >   >   >   0   ,   s   r   c   +   n   u   m   >   >   >   0   )   )   ;   v   a   r       d   a   t   a   8   =   S   D   L   2   .   d   a   t   a   8   ;   v   a   r       i   =   3   ;   v   a   r       j   =   i   +   4   *   n   u   m   ;   i   f   (   n   u   m   %   8   =   =   0   )   {   w   h   i   l   e   (   i   <   j   )   {   d   a   t   a   8   [   i   ]   =   2   5   5   ;   i   =   i   +   4   |   0   ;   d   a   t   a   8   [   i   ]   =   2   5   5   ;   i   =   i   +   4   |   0   ;   d   a   t   a   8   [   i   ]   =   2   5   5   ;   i   =   i   +   4   |   0   ;   d   a   t   a   8   [   i   ]   =   2   5   5   ;   i   =   i   +   4   |   0   ;   d   a   t   a   8   [   i   ]   =   2   5   5   ;   i   =   i   +   4   |   0   ;   d   a   t   a   8   [   i   ]   =   2   5   5   ;   i   =   i   +   4   |   0   ;   d   a   t   a   8   [   i   ]   =   2   5   5   ;   i   =   i   +   4   |   0   ;   d   a   t   a   8   [   i   ]   =   2   5   5   ;   i   =   i   +   4   |   0   }   }   e   l   s   e   {   w   h   i   l   e   (   i   <   j   )   {   d   a   t   a   8   [   i   ]   =   2   5   5   ;   i   =   i   +   4   |   0   }   }   }   S   D   L   2   .   c   t   x   .   p   u   t   I   m   a   g   e   D   a   t   a   (   S   D   L   2   .   i   m   a   g   e   ,   0   ,   0   )   }   ,   3   6   9   2   9   0   :   (   $   0   ,   $   1   ,   $   2   ,   $   3   ,   $   4   )   =   >   {   v   a   r       w   =   $   0   ;   v   a   r       h   =   $   1   ;   v   a   r       h   o   t   _   x   =   $   2   ;   v   a   r       h   o   t   _   y   =   $   3   ;   v   a   r       p   i   x   e   l   s   =   $   4   ;   v   a   r       c   a   n   v   a   s   =   d   o   c   u   m   e   n   t   .   c   r   e   a   t   e   E   l   e   m   e   n   t   (   "   c   a   n   v   a   s   "   )   ;   c   a   n   v   a   s   .   w   i   d   t   h   =   w   ;   c   a   n   v   a   s   .   h   e   i   g   h   t   =   h   ;   v   a   r       c   t   x   =   c   a   n   v   a   s   .   g   e   t   C   o   n   t   e   x   t   (   "   2   d   "   )   ;   v   a   r       i   m   a   g   e   =   c   t   x   .   c   r   e   a   t   e   I   m   a   g   e   D   a   t   a   (   w   ,   h   )   ;   v   a   r       d   a   t   a   =   i   m   a   g   e   .   d   a   t   a   ;   v   a   r       s   r   c   =   p   i   x   e   l   s   /   4   ;   v   a   r       d   s   t   =   0   ;   v   a   r       n   u   m   ;   i   f   (   t   y   p   e   o   f       C   a   n   v   a   s   P   i   x   e   l   A   r   r   a   y   !   =   =   "   u   n   d   e   f   i   n   e   d   "   &   &   d   a   t   a       i   n   s   t   a   n   c   e   o   f       C   a   n   v   a   s   P   i   x   e   l   A   r   r   a   y   )   {   n   u   m   =   d   a   t   a   .   l   e   n   g   t   h   ;   w   h   i   l   e   (   d   s   t   <   n   u   m   )   {   v   a   r       v   a   l   =   H   E   A   P   3   2   [   s   r   c   >   >   >   0   ]   ;   d   a   t   a   [   d   s   t   ]   =   v   a   l   &   2   5   5   ;   d   a   t   a   [   d   s   t   +   1   ]   =   v   a   l   >   >   8   &   2   5   5   ;   d   a   t   a   [   d   s   t   +   2   ]   =   v   a   l   >   >   1   6   &   2   5   5   ;   d   a   t   a   [   d   s   t   +   3   ]   =   v   a   l   >   >   2   4   &   2   5   5   ;   s   r   c   +   +   ;   d   s   t   +   =   4   }   }   e   l   s   e   {   v   a   r       d   a   t   a   3   2   =   n   e   w       I   n   t   3   2   A   r   r   a   y   (   d   a   t   a   .   b   u   f   f   e   r   )   ;   n   u   m   =   d   a   t   a   3   2   .   l   e   n   g   t   h   ;   d   a   t   a   3   2   .   s   e   t   (   H   E   A   P   3   2   .   s   u   b   a   r   r   a   y   (   s   r   c   >   >   >   0   ,   s   r   c   +   n   u   m   >   >   >   0   )   )   }   c   t   x   .   p   u   t   I   m   a   g   e   D   a   t   a   (   i   m   a   g   e   ,   0   ,   0   )   ;   v   a   r       u   r   l   =   h   o   t   _   x   =   =   =   0   &   &   h   o   t   _   y   =   =   =   0   ?   "   u   r   l   (   "   +   c   a   n   v   a   s   .   t   o   D   a   t   a   U   R   L   (   )   +   "   )   ,       a   u   t   o   "   :   "   u   r   l   (   "   +   c   a   n   v   a   s   .   t   o   D   a   t   a   U   R   L   (   )   +   "   )       "   +   h   o   t   _   x   +   "       "   +   h   o   t   _   y   +   "   ,       a   u   t   o   "   ;   v   a   r       u   r   l   B   u   f   =   _   m   a   l   l   o   c   (   u   r   l   .   l   e   n   g   t   h   +   1   )   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   u   r   l   ,   u   r   l   B   u   f   ,   u   r   l   .   l   e   n   g   t   h   +   1   )   ;   r   e   t   u   r   n       u   r   l   B   u   f   }   ,   3   7   0   2   7   8   :   $   0   =   >   {   i   f   (   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   )   {   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   .   s   t   y   l   e   [   "   c   u   r   s   o   r   "   ]   =   U   T   F   8   T   o   S   t   r   i   n   g   (   $   0   )   }   }   ,   3   7   0   3   6   1   :   (   )   =   >   {   i   f   (   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   )   {   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   .   s   t   y   l   e   [   "   c   u   r   s   o   r   "   ]   =   "   n   o   n   e   "   }   }   ,   3   7   0   4   3   0   :   (   )   =   >   w   i   n   d   o   w   .   i   n   n   e   r   W   i   d   t   h   ,   3   7   0   4   6   0   :   (   )   =   >   w   i   n   d   o   w   .   i   n   n   e   r   H   e   i   g   h   t   }   ;   f   u   n   c   t   i   o   n       g   e   t   S   h   a   d   e   r   (   )   {   v   a   r       p   t   h   =   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   m   i   l   k   P   a   t   h   "   )   .   i   n   n   e   r   H   T   M   L   ;   c   o   n   s   t       f   f   =   n   e   w       X   M   L   H   t   t   p   R   e   q   u   e   s   t   ;   f   f   .   o   p   e   n   (   "   G   E   T   "   ,   p   t   h   ,   t   r   u   e   )   ;   f   f   .   r   e   s   p   o   n   s   e   T   y   p   e   =   "   a   r   r   a   y   b   u   f   f   e   r   "   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   s   t   a   t   "   )   .   i   n   n   e   r   H   T   M   L   =   "   D   o   w   n   l   o   a   d   i   n   g       S   h   a   d   e   r   "   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   s   t   a   t   "   )   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   =   "   y   e   l   l   o   w   "   ;   f   f   .   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   l   o   a   d   "   ,   f   u   n   c   t   i   o   n   (   )   {   l   e   t       s   a   r   r   a   y   B   u   f   f   e   r   =   f   f   .   r   e   s   p   o   n   s   e   ;   i   f   (   s   a   r   r   a   y   B   u   f   f   e   r   )   {   l   e   t       s   f   i   l   =   n   e   w       U   i   n   t   8   C   l   a   m   p   e   d   A   r   r   a   y   (   s   a   r   r   a   y   B   u   f   f   e   r   )   ;   F   S   .   w   r   i   t   e   F   i   l   e   (   "   /   p   r   e   s   e   t   s   /   p   r   e   s   e   t   .   m   i   l   k   "   ,   s   f   i   l   )   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   g   o   t       p   r   e   s   e   t   :       "   +   p   t   h   )   ;   s   e   t   T   i   m   e   o   u   t   (   f   u   n   c   t   i   o   n   (   )   {   M   o   d   u   l   e   .   l   o   a   d   P   r   e   s   e   t   F   i   l   e   (   "   /   p   r   e   s   e   t   s   /   p   r   e   s   e   t   .   m   i   l   k   "   )   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   s   t   a   t   "   )   .   i   n   n   e   r   H   T   M   L   =   "   D   o   w   n   l   o   a   d   e   d       S   h   a   d   e   r   "   ;   d   o   c   u   m   e   n   t   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   "   #   s   t   a   t   "   )   .   s   t   y   l   e   .   b   a   c   k   g   r   o   u   n   d   C   o   l   o   r   =   "   b   l   u   e   "   }   ,   5   0   0   )   }   }   )   ;   f   f   .   s   e   n   d   (   n   u   l   l   )   }   v   a   r       w   a   s   m   I   m   p   o   r   t   s   =   {   w   :   _   _   _   c   x   a   _   b   e   g   i   n   _   c   a   t   c   h   ,   J   :   _   _   _   c   x   a   _   e   n   d   _   c   a   t   c   h   ,   a   :   _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   2   ,   l   :   _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   3   ,   z   :   _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   4   ,   q   a   :   _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   5   ,   O   h   :   _   _   _   c   x   a   _   r   e   t   h   r   o   w   ,   r   :   _   _   _   c   x   a   _   t   h   r   o   w   ,   c   :   _   _   _   r   e   s   u   m   e   E   x   c   e   p   t   i   o   n   ,   F   a   :   _   _   _   s   y   s   c   a   l   l   _   f   c   n   t   l   6   4   ,   V   b   :   _   _   _   s   y   s   c   a   l   l   _   g   e   t   d   e   n   t   s   6   4   ,   d   c   :   _   _   _   s   y   s   c   a   l   l   _   i   o   c   t   l   ,   X   b   :   _   _   _   s   y   s   c   a   l   l   _   l   s   t   a   t   6   4   ,   Y   b   :   _   _   _   s   y   s   c   a   l   l   _   n   e   w   f   s   t   a   t   a   t   ,   G   a   :   _   _   _   s   y   s   c   a   l   l   _   o   p   e   n   a   t   ,   S   b   :   _   _   _   s   y   s   c   a   l   l   _   r   e   a   d   l   i   n   k   a   t   ,   Z   b   :   _   _   _   s   y   s   c   a   l   l   _   s   t   a   t   6   4   ,   U   b   :   _   _   a   b   o   r   t   _   j   s   ,   J   a   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   b   i   g   i   n   t   ,   v   f   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   b   o   o   l   ,   m   e   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   e   m   v   a   l   ,   I   a   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   f   l   o   a   t   ,   R   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   f   u   n   c   t   i   o   n   ,   M   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   i   n   t   e   g   e   r   ,   t   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   m   e   m   o   r   y   _   v   i   e   w   ,   H   e   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   s   t   d   _   s   t   r   i   n   g   ,   l   a   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   s   t   d   _   w   s   t   r   i   n   g   ,   G   f   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   v   o   i   d   ,   T   b   :   _   _   t   z   s   e   t   _   j   s   ,   e   c   :   _   c   l   o   c   k   _   t   i   m   e   _   g   e   t   ,   M   a   :   _   e   g   l   B   i   n   d   A   P   I   ,   h   b   :   _   e   g   l   C   h   o   o   s   e   C   o   n   f   i   g   ,   $   a   :   _   e   g   l   C   r   e   a   t   e   C   o   n   t   e   x   t   ,   Q   a   :   _   e   g   l   C   r   e   a   t   e   W   i   n   d   o   w   S   u   r   f   a   c   e   ,   E   h   :   _   e   g   l   D   e   s   t   r   o   y   C   o   n   t   e   x   t   ,   F   h   :   _   e   g   l   D   e   s   t   r   o   y   S   u   r   f   a   c   e   ,   A   :   _   e   g   l   G   e   t   C   o   n   f   i   g   A   t   t   r   i   b   ,   s   a   :   _   e   g   l   G   e   t   D   i   s   p   l   a   y   ,   D   h   :   _   e   g   l   G   e   t   E   r   r   o   r   ,   n   b   :   _   e   g   l   I   n   i   t   i   a   l   i   z   e   ,   K   a   :   _   e   g   l   M   a   k   e   C   u   r   r   e   n   t   ,   C   h   :   _   e   g   l   Q   u   e   r   y   S   t   r   i   n   g   ,   t   b   :   _   e   g   l   S   w   a   p   B   u   f   f   e   r   s   ,   G   h   :   _   e   g   l   S   w   a   p   I   n   t   e   r   v   a   l   ,   J   h   :   _   e   g   l   T   e   r   m   i   n   a   t   e   ,   I   h   :   _   e   g   l   W   a   i   t   G   L   ,   H   h   :   _   e   g   l   W   a   i   t   N   a   t   i   v   e   ,   r   b   :   _   e   m   s   c   r   i   p   t   e   n   _   a   s   m   _   c   o   n   s   t   _   i   n   t   ,   B   :   _   e   m   s   c   r   i   p   t   e   n   _   a   s   m   _   c   o   n   s   t   _   i   n   t   _   s   y   n   c   _   o   n   _   m   a   i   n   _   t   h   r   e   a   d   ,   o   b   :   _   e   m   s   c   r   i   p   t   e   n   _   a   s   m   _   c   o   n   s   t   _   p   t   r   _   s   y   n   c   _   o   n   _   m   a   i   n   _   t   h   r   e   a   d   ,   H   a   :   _   e   m   s   c   r   i   p   t   e   n   _   d   a   t   e   _   n   o   w   ,   x   h   :   _   e   m   s   c   r   i   p   t   e   n   _   e   x   i   t   _   f   u   l   l   s   c   r   e   e   n   ,   A   h   :   _   e   m   s   c   r   i   p   t   e   n   _   e   x   i   t   _   p   o   i   n   t   e   r   l   o   c   k   ,   c   a   :   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   d   e   v   i   c   e   _   p   i   x   e   l   _   r   a   t   i   o   ,   T   :   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   e   l   e   m   e   n   t   _   c   s   s   _   s   i   z   e   ,   l   b   :   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   g   a   m   e   p   a   d   _   s   t   a   t   u   s   ,   D   a   :   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   n   o   w   ,   K   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   n   u   m   _   g   a   m   e   p   a   d   s   ,   B   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   s   c   r   e   e   n   _   s   i   z   e   ,   b   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   A   c   t   i   v   e   T   e   x   t   u   r   e   ,   a   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   A   t   t   a   c   h   S   h   a   d   e   r   ,   Z   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   e   g   i   n   Q   u   e   r   y   ,   t   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   e   g   i   n   Q   u   e   r   y   E   X   T   ,   C   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   e   g   i   n   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ,   $   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   A   t   t   r   i   b   L   o   c   a   t   i   o   n   ,   _   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   B   u   f   f   e   r   ,   z   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   B   u   f   f   e   r   B   a   s   e   ,   A   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   B   u   f   f   e   r   R   a   n   g   e   ,   Z   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   F   r   a   m   e   b   u   f   f   e   r   ,   Y   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   R   e   n   d   e   r   b   u   f   f   e   r   ,   H   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   S   a   m   p   l   e   r   ,   X   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   T   e   x   t   u   r   e   ,   z   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ,   H   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   ,   l   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   O   E   S   ,   W   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   C   o   l   o   r   ,   V   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   E   q   u   a   t   i   o   n   ,   U   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   E   q   u   a   t   i   o   n   S   e   p   a   r   a   t   e   ,   T   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   F   u   n   c   ,   S   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   F   u   n   c   S   e   p   a   r   a   t   e   ,   M   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   i   t   F   r   a   m   e   b   u   f   f   e   r   ,   R   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   u   f   f   e   r   D   a   t   a   ,   Q   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   u   f   f   e   r   S   u   b   D   a   t   a   ,   P   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   h   e   c   k   F   r   a   m   e   b   u   f   f   e   r   S   t   a   t   u   s   ,   O   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   ,   c   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   B   u   f   f   e   r   f   i   ,   d   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   B   u   f   f   e   r   f   v   ,   f   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   B   u   f   f   e   r   i   v   ,   e   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   B   u   f   f   e   r   u   i   v   ,   N   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   C   o   l   o   r   ,   M   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   D   e   p   t   h   f   ,   L   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   S   t   e   n   c   i   l   ,   Q   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   i   e   n   t   W   a   i   t   S   y   n   c   ,   o   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   i   p   C   o   n   t   r   o   l   E   X   T   ,   K   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   l   o   r   M   a   s   k   ,   J   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   m   p   i   l   e   S   h   a   d   e   r   ,   I   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   2   D   ,   c   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   3   D   ,   H   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   2   D   ,   b   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   S   u   b   I   m   a   g   e   3   D   ,   a   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   p   y   B   u   f   f   e   r   S   u   b   D   a   t   a   ,   G   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   p   y   T   e   x   I   m   a   g   e   2   D   ,   F   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   2   D   ,   d   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   3   D   ,   E   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   r   e   a   t   e   P   r   o   g   r   a   m   ,   D   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   r   e   a   t   e   S   h   a   d   e   r   ,   C   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   u   l   l   F   a   c   e   ,   B   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   B   u   f   f   e   r   s   ,   A   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   F   r   a   m   e   b   u   f   f   e   r   s   ,   z   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   P   r   o   g   r   a   m   ,   $   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   Q   u   e   r   i   e   s   ,   v   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   Q   u   e   r   i   e   s   E   X   T   ,   y   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   R   e   n   d   e   r   b   u   f   f   e   r   s   ,   J   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   S   a   m   p   l   e   r   s   ,   x   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   S   h   a   d   e   r   ,   R   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   S   y   n   c   ,   w   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   T   e   x   t   u   r   e   s   ,   y   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   ,   G   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   ,   k   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   O   E   S   ,   v   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   p   t   h   F   u   n   c   ,   t   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   p   t   h   M   a   s   k   ,   s   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   p   t   h   R   a   n   g   e   f   ,   r   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   t   a   c   h   S   h   a   d   e   r   ,   q   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   i   s   a   b   l   e   ,   p   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   i   s   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   ,   o   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   ,   V   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   ,   e   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   A   N   G   L   E   ,   h   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   A   R   B   ,   k   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   E   X   T   ,   i   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   I   n   s   t   a   n   c   e   d   N   V   ,   T   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   B   u   f   f   e   r   s   ,   i   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   B   u   f   f   e   r   s   E   X   T   ,   f   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   B   u   f   f   e   r   s   W   E   B   G   L   ,   n   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   ,   U   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   ,   d   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   A   N   G   L   E   ,   f   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   A   R   B   ,   g   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   E   X   T   ,   j   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   I   n   s   t   a   n   c   e   d   N   V   ,   g   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   R   a   n   g   e   E   l   e   m   e   n   t   s   ,   m   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   a   b   l   e   ,   l   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   ,   Y   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   d   Q   u   e   r   y   ,   s   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   d   Q   u   e   r   y   E   X   T   ,   B   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   d   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ,   T   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   e   n   c   e   S   y   n   c   ,   k   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   i   n   i   s   h   ,   j   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   l   u   s   h   ,   I   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   l   u   s   h   M   a   p   p   e   d   B   u   f   f   e   r   R   a   n   g   e   ,   i   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   r   a   m   e   b   u   f   f   e   r   R   e   n   d   e   r   b   u   f   f   e   r   ,   h   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   2   D   ,   K   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   L   a   y   e   r   ,   g   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   r   o   n   t   F   a   c   e   ,   f   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   B   u   f   f   e   r   s   ,   d   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   F   r   a   m   e   b   u   f   f   e   r   s   ,   a   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   Q   u   e   r   i   e   s   ,   w   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   Q   u   e   r   i   e   s   E   X   T   ,   c   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   R   e   n   d   e   r   b   u   f   f   e   r   s   ,   K   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   S   a   m   p   l   e   r   s   ,   b   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   T   e   x   t   u   r   e   s   ,   x   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   ,   F   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   ,   j   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   O   E   S   ,   e   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   e   r   a   t   e   M   i   p   m   a   p   ,   a   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   c   t   i   v   e   A   t   t   r   i   b   ,   _   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   ,   X   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   N   a   m   e   ,   Y   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   B   l   o   c   k   i   v   ,   _   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   c   t   i   v   e   U   n   i   f   o   r   m   s   i   v   ,   Z   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   t   t   a   c   h   e   d   S   h   a   d   e   r   s   ,   Y   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   A   t   t   r   i   b   L   o   c   a   t   i   o   n   ,   X   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   B   o   o   l   e   a   n   v   ,   L   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   B   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   6   4   v   ,   W   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   B   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   v   ,   U   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   B   u   f   f   e   r   P   o   i   n   t   e   r   v   ,   V   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   E   r   r   o   r   ,   U   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   F   l   o   a   t   v   ,   o   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   F   r   a   g   D   a   t   a   L   o   c   a   t   i   o   n   ,   T   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   F   r   a   m   e   b   u   f   f   e   r   A   t   t   a   c   h   m   e   n   t   P   a   r   a   m   e   t   e   r   i   v   ,   M   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   g   e   r   6   4   i   _   v   ,   O   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   g   e   r   6   4   v   ,   D   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   g   e   r   i   _   v   ,   S   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   g   e   r   v   ,   l   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   r   n   a   l   f   o   r   m   a   t   i   v   ,   s   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   P   r   o   g   r   a   m   B   i   n   a   r   y   ,   Q   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   P   r   o   g   r   a   m   I   n   f   o   L   o   g   ,   R   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   P   r   o   g   r   a   m   i   v   ,   n   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   i   6   4   v   E   X   T   ,   p   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   i   v   E   X   T   ,   m   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   6   4   v   E   X   T   ,   W   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   v   ,   o   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   O   b   j   e   c   t   u   i   v   E   X   T   ,   X   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   i   v   ,   q   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   i   v   E   X   T   ,   P   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   R   e   n   d   e   r   b   u   f   f   e   r   P   a   r   a   m   e   t   e   r   i   v   ,   B   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   v   ,   C   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   v   ,   N   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   h   a   d   e   r   I   n   f   o   L   o   g   ,   M   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   h   a   d   e   r   P   r   e   c   i   s   i   o   n   F   o   r   m   a   t   ,   L   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   h   a   d   e   r   S   o   u   r   c   e   ,   O   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   h   a   d   e   r   i   v   ,   K   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   t   r   i   n   g   ,   b   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   t   r   i   n   g   i   ,   N   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   y   n   c   i   v   ,   J   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   T   e   x   P   a   r   a   m   e   t   e   r   f   v   ,   I   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   T   e   x   P   a   r   a   m   e   t   e   r   i   v   ,   x   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   V   a   r   y   i   n   g   ,   Z   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   B   l   o   c   k   I   n   d   e   x   ,   $   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   I   n   d   i   c   e   s   ,   E   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   ,   H   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   f   v   ,   F   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   i   v   ,   p   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   U   n   i   f   o   r   m   u   i   v   ,   v   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   I   i   v   ,   u   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   I   u   i   v   ,   B   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   v   ,   D   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   f   v   ,   C   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   V   e   r   t   e   x   A   t   t   r   i   b   i   v   ,   A   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   H   i   n   t   ,   p   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   n   v   a   l   i   d   a   t   e   F   r   a   m   e   b   u   f   f   e   r   ,   o   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   n   v   a   l   i   d   a   t   e   S   u   b   F   r   a   m   e   b   u   f   f   e   r   ,   z   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   B   u   f   f   e   r   ,   y   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   E   n   a   b   l   e   d   ,   x   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   F   r   a   m   e   b   u   f   f   e   r   ,   w   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   P   r   o   g   r   a   m   ,   _   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   Q   u   e   r   y   ,   u   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   Q   u   e   r   y   E   X   T   ,   u   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   R   e   n   d   e   r   b   u   f   f   e   r   ,   I   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   S   a   m   p   l   e   r   ,   t   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   S   h   a   d   e   r   ,   S   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   S   y   n   c   ,   s   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   T   e   x   t   u   r   e   ,   w   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ,   E   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   V   e   r   t   e   x   A   r   r   a   y   ,   g   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   V   e   r   t   e   x   A   r   r   a   y   O   E   S   ,   r   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   L   i   n   e   W   i   d   t   h   ,   q   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   L   i   n   k   P   r   o   g   r   a   m   ,   J   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   M   a   p   B   u   f   f   e   r   R   a   n   g   e   ,   v   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   a   u   s   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ,   p   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   i   x   e   l   S   t   o   r   e   i   ,   n   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   o   l   y   g   o   n   M   o   d   e   W   E   B   G   L   ,   o   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   o   l   y   g   o   n   O   f   f   s   e   t   ,   p   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   o   l   y   g   o   n   O   f   f   s   e   t   C   l   a   m   p   E   X   T   ,   r   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   r   o   g   r   a   m   B   i   n   a   r   y   ,   q   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   r   o   g   r   a   m   P   a   r   a   m   e   t   e   r   i   ,   r   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   Q   u   e   r   y   C   o   u   n   t   e   r   E   X   T   ,   h   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   a   d   B   u   f   f   e   r   ,   n   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   a   d   P   i   x   e   l   s   ,   m   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   l   e   a   s   e   S   h   a   d   e   r   C   o   m   p   i   l   e   r   ,   l   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   n   d   e   r   b   u   f   f   e   r   S   t   o   r   a   g   e   ,   L   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   n   d   e   r   b   u   f   f   e   r   S   t   o   r   a   g   e   M   u   l   t   i   s   a   m   p   l   e   ,   u   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   s   u   m   e   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   ,   k   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   a   m   p   l   e   C   o   v   e   r   a   g   e   ,   E   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   ,   D   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   f   v   ,   G   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   ,   F   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   v   ,   j   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   c   i   s   s   o   r   ,   h   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   h   a   d   e   r   B   i   n   a   r   y   ,   g   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   h   a   d   e   r   S   o   u   r   c   e   ,   f   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   F   u   n   c   ,   e   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   F   u   n   c   S   e   p   a   r   a   t   e   ,   d   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   M   a   s   k   ,   c   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   M   a   s   k   S   e   p   a   r   a   t   e   ,   b   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   O   p   ,   a   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   O   p   S   e   p   a   r   a   t   e   ,   $   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   I   m   a   g   e   2   D   ,   f   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   I   m   a   g   e   3   D   ,   _   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   f   ,   Z   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   f   v   ,   Y   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   i   ,   X   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   i   v   ,   n   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   S   t   o   r   a   g   e   2   D   ,   m   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   S   t   o   r   a   g   e   3   D   ,   W   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   S   u   b   I   m   a   g   e   2   D   ,   e   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   S   u   b   I   m   a   g   e   3   D   ,   y   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   V   a   r   y   i   n   g   s   ,   V   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   f   ,   U   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   f   v   ,   T   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   i   ,   S   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   i   v   ,   n   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   u   i   ,   j   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   u   i   v   ,   R   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   f   ,   Q   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   f   v   ,   P   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   i   ,   O   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   i   v   ,   m   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   u   i   ,   i   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   u   i   v   ,   N   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   f   ,   M   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   f   v   ,   L   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   i   ,   K   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   i   v   ,   l   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   u   i   ,   h   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   u   i   v   ,   J   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   f   ,   I   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   f   v   ,   G   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   i   ,   F   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   i   v   ,   k   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   u   i   ,   g   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   u   i   v   ,   W   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   B   l   o   c   k   B   i   n   d   i   n   g   ,   E   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   f   v   ,   S   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   x   3   f   v   ,   Q   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   2   x   4   f   v   ,   D   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   f   v   ,   R   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   2   f   v   ,   O   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   4   f   v   ,   C   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   f   v   ,   P   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   x   2   f   v   ,   N   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   x   3   f   v   ,   V   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   m   a   p   B   u   f   f   e   r   ,   B   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   s   e   P   r   o   g   r   a   m   ,   A   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   a   l   i   d   a   t   e   P   r   o   g   r   a   m   ,   z   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   1   f   ,   y   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   1   f   v   ,   x   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   2   f   ,   w   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   2   f   v   ,   v   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   3   f   ,   u   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   3   f   v   ,   t   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   4   f   ,   s   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   4   f   v   ,   A   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   ,   c   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   A   N   G   L   E   ,   j   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   A   R   B   ,   l   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   E   X   T   ,   k   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   D   i   v   i   s   o   r   N   V   ,   t   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   i   ,   r   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   i   v   ,   s   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   u   i   ,   q   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   4   u   i   v   ,   w   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   P   o   i   n   t   e   r   ,   r   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   ,   q   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   i   e   w   p   o   r   t   ,   P   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   W   a   i   t   S   y   n   c   ,   o   a   :   _   e   m   s   c   r   i   p   t   e   n   _   h   a   s   _   a   s   y   n   c   i   f   y   ,   y   h   :   _   e   m   s   c   r   i   p   t   e   n   _   r   e   q   u   e   s   t   _   f   u   l   l   s   c   r   e   e   n   _   s   t   r   a   t   e   g   y   ,   i   b   :   _   e   m   s   c   r   i   p   t   e   n   _   r   e   q   u   e   s   t   _   p   o   i   n   t   e   r   l   o   c   k   ,   W   b   :   _   e   m   s   c   r   i   p   t   e   n   _   r   e   s   i   z   e   _   h   e   a   p   ,   m   b   :   _   e   m   s   c   r   i   p   t   e   n   _   s   a   m   p   l   e   _   g   a   m   e   p   a   d   _   d   a   t   a   ,   N   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   b   e   f   o   r   e   u   n   l   o   a   d   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   _   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   b   l   u   r   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   b   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   c   a   n   v   a   s   _   e   l   e   m   e   n   t   _   s   i   z   e   ,   m   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   e   l   e   m   e   n   t   _   c   s   s   _   s   i   z   e   ,   a   b   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   f   o   c   u   s   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   R   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   f   u   l   l   s   c   r   e   e   n   c   h   a   n   g   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   k   b   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   g   a   m   e   p   a   d   c   o   n   n   e   c   t   e   d   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   j   b   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   g   a   m   e   p   a   d   d   i   s   c   o   n   n   e   c   t   e   d   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   U   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   k   e   y   d   o   w   n   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   S   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   k   e   y   p   r   e   s   s   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   T   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   k   e   y   u   p   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   _   h   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   a   i   n   _   l   o   o   p   ,   W   h   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   a   i   n   _   l   o   o   p   _   t   i   m   i   n   g   ,   f   b   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   o   u   s   e   d   o   w   n   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   d   b   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   o   u   s   e   e   n   t   e   r   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   c   b   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   o   u   s   e   l   e   a   v   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   g   b   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   o   u   s   e   m   o   v   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   e   b   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   o   u   s   e   u   p   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   V   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   p   o   i   n   t   e   r   l   o   c   k   c   h   a   n   g   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   P   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   r   e   s   i   z   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   W   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   t   o   u   c   h   c   a   n   c   e   l   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   Y   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   t   o   u   c   h   e   n   d   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   X   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   t   o   u   c   h   m   o   v   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   Z   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   t   o   u   c   h   s   t   a   r   t   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   O   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   v   i   s   i   b   i   l   i   t   y   c   h   a   n   g   e   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   b   b   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   w   h   e   e   l   _   c   a   l   l   b   a   c   k   _   o   n   _   t   h   r   e   a   d   ,   z   h   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   w   i   n   d   o   w   _   t   i   t   l   e   ,   n   a   :   _   e   m   s   c   r   i   p   t   e   n   _   s   l   e   e   p   ,   h   h   :   _   e   m   s   c   r   i   p   t   e   n   _   w   e   b   g   l   _   c   r   e   a   t   e   _   c   o   n   t   e   x   t   ,   u   g   :   _   e   m   s   c   r   i   p   t   e   n   _   w   e   b   g   l   _   d   e   s   t   r   o   y   _   c   o   n   t   e   x   t   ,   a   a   :   _   e   m   s   c   r   i   p   t   e   n   _   w   e   b   g   l   _   e   n   a   b   l   e   _   e   x   t   e   n   s   i   o   n   ,   L   a   :   _   e   m   s   c   r   i   p   t   e   n   _   w   e   b   g   l   _   m   a   k   e   _   c   o   n   t   e   x   t   _   c   u   r   r   e   n   t   ,   $   b   :   _   e   n   v   i   r   o   n   _   g   e   t   ,   a   c   :   _   e   n   v   i   r   o   n   _   s   i   z   e   s   _   g   e   t   ,   L   h   :   _   e   x   i   t   ,   g   a   :   _   f   d   _   c   l   o   s   e   ,   b   c   :   _   f   d   _   r   e   a   d   ,   _   b   :   _   f   d   _   s   e   e   k   ,   E   a   :   _   f   d   _   w   r   i   t   e   ,   $   f   :   g   e   t   S   h   a   d   e   r   ,   z   a   :   _   g   l   A   c   t   i   v   e   T   e   x   t   u   r   e   ,   x   a   :   _   g   l   A   t   t   a   c   h   S   h   a   d   e   r   ,   x   :   _   g   l   B   i   n   d   B   u   f   f   e   r   ,   u   :   _   g   l   B   i   n   d   F   r   a   m   e   b   u   f   f   e   r   ,   $   :   _   g   l   B   i   n   d   S   a   m   p   l   e   r   ,   H   :   _   g   l   B   i   n   d   T   e   x   t   u   r   e   ,   s   :   _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   ,   K   :   _   g   l   B   l   e   n   d   F   u   n   c   ,   D   :   _   g   l   B   u   f   f   e   r   D   a   t   a   ,   i   a   :   _   g   l   B   u   f   f   e   r   S   u   b   D   a   t   a   ,   i   h   :   _   g   l   C   l   e   a   r   ,   $   h   :   _   g   l   C   l   e   a   r   C   o   l   o   r   ,   F   b   :   _   g   l   C   o   m   p   i   l   e   S   h   a   d   e   r   ,   P   :   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   2   D   ,   T   h   :   _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   2   D   ,   M   b   :   _   g   l   C   r   e   a   t   e   P   r   o   g   r   a   m   ,   H   b   :   _   g   l   C   r   e   a   t   e   S   h   a   d   e   r   ,   A   b   :   _   g   l   C   u   l   l   F   a   c   e   ,   V   h   :   _   g   l   D   e   l   e   t   e   B   u   f   f   e   r   s   ,   Y   h   :   _   g   l   D   e   l   e   t   e   F   r   a   m   e   b   u   f   f   e   r   s   ,   L   b   :   _   g   l   D   e   l   e   t   e   P   r   o   g   r   a   m   ,   O   b   :   _   g   l   D   e   l   e   t   e   S   a   m   p   l   e   r   s   ,   k   a   :   _   g   l   D   e   l   e   t   e   S   h   a   d   e   r   ,   B   a   :   _   g   l   D   e   l   e   t   e   T   e   x   t   u   r   e   s   ,   U   h   :   _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   ,   w   a   :   _   g   l   D   e   t   a   c   h   S   h   a   d   e   r   ,   U   :   _   g   l   D   i   s   a   b   l   e   ,   d   a   :   _   g   l   D   i   s   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   ,   S   :   _   g   l   D   r   a   w   A   r   r   a   y   s   ,   X   h   :   _   g   l   D   r   a   w   B   u   f   f   e   r   s   ,   P   h   :   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   ,   Q   :   _   g   l   E   n   a   b   l   e   ,   o   :   _   g   l   E   n   a   b   l   e   V   e   r   t   e   x   A   t   t   r   i   b   A   r   r   a   y   ,   s   b   :   _   g   l   F   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   2   D   ,   I   b   :   _   g   l   F   r   o   n   t   F   a   c   e   ,   j   a   :   _   g   l   G   e   n   B   u   f   f   e   r   s   ,   Z   h   :   _   g   l   G   e   n   F   r   a   m   e   b   u   f   f   e   r   s   ,   P   b   :   _   g   l   G   e   n   S   a   m   p   l   e   r   s   ,   V   :   _   g   l   G   e   n   T   e   x   t   u   r   e   s   ,   t   a   :   _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   ,   _   :   _   g   l   G   e   t   E   r   r   o   r   ,   W   :   _   g   l   G   e   t   I   n   t   e   g   e   r   v   ,   J   b   :   _   g   l   G   e   t   P   r   o   g   r   a   m   I   n   f   o   L   o   g   ,   v   a   :   _   g   l   G   e   t   P   r   o   g   r   a   m   i   v   ,   E   b   :   _   g   l   G   e   t   S   h   a   d   e   r   I   n   f   o   L   o   g   ,   u   a   :   _   g   l   G   e   t   S   h   a   d   e   r   i   v   ,   C   a   :   _   g   l   G   e   t   S   t   r   i   n   g   ,   L   :   _   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   ,   f   a   :   _   g   l   H   i   n   t   ,   p   b   :   _   g   l   L   i   n   e   W   i   d   t   h   ,   K   b   :   _   g   l   L   i   n   k   P   r   o   g   r   a   m   ,   O   :   _   g   l   P   i   x   e   l   S   t   o   r   e   i   ,   X   :   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   ,   Q   b   :   _   g   l   S   c   i   s   s   o   r   ,   G   b   :   _   g   l   S   h   a   d   e   r   S   o   u   r   c   e   ,   I   :   _   g   l   T   e   x   I   m   a   g   e   2   D   ,   N   b   :   _   g   l   T   e   x   I   m   a   g   e   3   D   ,   n   :   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   i   ,   D   b   :   _   g   l   U   n   i   f   o   r   m   1   f   v   ,   C   b   :   _   g   l   U   n   i   f   o   r   m   1   i   v   ,   B   b   :   _   g   l   U   n   i   f   o   r   m   2   f   v   ,   z   b   :   _   g   l   U   n   i   f   o   r   m   2   i   v   ,   y   b   :   _   g   l   U   n   i   f   o   r   m   3   f   v   ,   x   b   :   _   g   l   U   n   i   f   o   r   m   4   f   v   ,   w   b   :   _   g   l   U   n   i   f   o   r   m   4   i   v   ,   v   b   :   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   4   f   v   ,   u   b   :   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   f   v   ,   N   :   _   g   l   U   s   e   P   r   o   g   r   a   m   ,   q   b   :   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   4   f   ,   Q   h   :   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   I   P   o   i   n   t   e   r   ,   q   :   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   ,   Y   :   _   g   l   V   i   e   w   p   o   r   t   ,   p   a   :   i   n   v   o   k   e   _   d   i   ,   N   h   :   i   n   v   o   k   e   _   d   i   d   ,   S   h   :   i   n   v   o   k   e   _   f   i   i   ,   i   :   i   n   v   o   k   e   _   f   i   i   f   ,   C   :   i   n   v   o   k   e   _   i   ,   b   :   i   n   v   o   k   e   _   i   i   ,   c   c   :   i   n   v   o   k   e   _   i   i   d   d   d   d   ,   R   h   :   i   n   v   o   k   e   _   i   i   f   ,   g   :   i   n   v   o   k   e   _   i   i   i   ,   M   h   :   i   n   v   o   k   e   _   i   i   i   d   d   ,   h   :   i   n   v   o   k   e   _   i   i   i   i   ,   v   :   i   n   v   o   k   e   _   i   i   i   i   i   ,   p   :   i   n   v   o   k   e   _   i   i   i   i   i   i   ,   E   :   i   n   v   o   k   e   _   i   i   i   i   i   i   i   ,   y   a   :   i   n   v   o   k   e   _   i   i   i   i   i   i   i   i   ,   k   :   i   n   v   o   k   e   _   v   ,   r   a   :   i   n   v   o   k   e   _   v   f   ,   f   :   i   n   v   o   k   e   _   v   i   ,   t   c   :   i   n   v   o   k   e   _   v   i   f   ,   h   a   :   i   n   v   o   k   e   _   v   i   f   f   f   f   ,   e   :   i   n   v   o   k   e   _   v   i   i   ,   e   a   :   i   n   v   o   k   e   _   v   i   i   f   ,   d   :   i   n   v   o   k   e   _   v   i   i   i   ,   j   :   i   n   v   o   k   e   _   v   i   i   i   i   ,   y   :   i   n   v   o   k   e   _   v   i   i   i   i   i   ,   m   :   i   n   v   o   k   e   _   v   i   i   i   i   i   i   ,   F   :   i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   i   ,   Z   :   i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   i   i   ,   A   a   :   i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   i   i   i   ,   G   :   _   l   l   v   m   _   e   h   _   t   y   p   e   i   d   _   f   o   r   ,   R   b   :   _   r   a   n   d   o   m   _   g   e   t   }   ;   v   a   r       w   a   s   m   E   x   p   o   r   t   s   =   a   w   a   i   t       c   r   e   a   t   e   W   a   s   m   (   )   ;   v   a   r       _   _   _   w   a   s   m   _   c   a   l   l   _   c   t   o   r   s   =   w   a   s   m   E   x   p   o   r   t   s   [   "   b   i   "   ]   ;   v   a   r       _   p   l   =   M   o   d   u   l   e   [   "   _   p   l   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   c   i   "   ]   ;   v   a   r       _   a   d   d   _   a   u   d   i   o   _   d   a   t   a   =   M   o   d   u   l   e   [   "   _   a   d   d   _   a   u   d   i   o   _   d   a   t   a   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   d   i   "   ]   ;   v   a   r       _   m   a   i   n   =   M   o   d   u   l   e   [   "   _   m   a   i   n   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   f   i   "   ]   ;   v   a   r       _   _   _   g   e   t   T   y   p   e   N   a   m   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   g   i   "   ]   ;   v   a   r       _   f   r   e   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   h   i   "   ]   ;   v   a   r       _   m   a   l   l   o   c   =   w   a   s   m   E   x   p   o   r   t   s   [   "   i   i   "   ]   ;   v   a   r       _   s   e   t   T   h   r   e   w   =   w   a   s   m   E   x   p   o   r   t   s   [   "   j   i   "   ]   ;   v   a   r       _   _   e   m   s   c   r   i   p   t   e   n   _   t   e   m   p   r   e   t   _   s   e   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   k   i   "   ]   ;   v   a   r       _   _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   r   e   s   t   o   r   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   l   i   "   ]   ;   v   a   r       _   _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   a   l   l   o   c   =   w   a   s   m   E   x   p   o   r   t   s   [   "   m   i   "   ]   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   g   e   t   _   c   u   r   r   e   n   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   n   i   "   ]   ;   v   a   r       _   _   _   c   x   a   _   d   e   c   r   e   m   e   n   t   _   e   x   c   e   p   t   i   o   n   _   r   e   f   c   o   u   n   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   o   i   "   ]   ;   v   a   r       _   _   _   c   x   a   _   i   n   c   r   e   m   e   n   t   _   e   x   c   e   p   t   i   o   n   _   r   e   f   c   o   u   n   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   p   i   "   ]   ;   v   a   r       _   _   _   c   x   a   _   c   a   n   _   c   a   t   c   h   =   w   a   s   m   E   x   p   o   r   t   s   [   "   q   i   "   ]   ;   v   a   r       _   _   _   c   x   a   _   g   e   t   _   e   x   c   e   p   t   i   o   n   _   p   t   r   =   w   a   s   m   E   x   p   o   r   t   s   [   "   r   i   "   ]   ;   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   i   (   i   n   d   e   x   ,   a   1   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   (   i   n   d   e   x   ,   a   1   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   f   (   i   n   d   e   x   ,   a   1   ,   a   2   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   i   d   d   d   d   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   i   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   ,   a   7   ,   a   8   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   ,   a   7   ,   a   8   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   ,   a   7   ,   a   8   ,   a   9   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   ,   a   7   ,   a   8   ,   a   9   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   ,   a   7   ,   a   8   ,   a   9   ,   a   1   0   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   ,   a   7   ,   a   8   ,   a   9   ,   a   1   0   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   i   i   i   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   ,   a   7   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   ,   a   7   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   i   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   (   i   n   d   e   x   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   i   i   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   i   i   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   f   i   i   (   i   n   d   e   x   ,   a   1   ,   a   2   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   f   i   i   f   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   (   i   n   d   e   x   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   i   f   (   i   n   d   e   x   ,   a   1   ,   a   2   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   i   f   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   i   f   f   f   f   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   f   (   i   n   d   e   x   ,   a   1   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   d   i   (   i   n   d   e   x   ,   a   1   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   d   i   d   (   i   n   d   e   x   ,   a   1   ,   a   2   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   i   i   i   d   d   (   i   n   d   e   x   ,   a   1   ,   a   2   ,   a   3   ,   a   4   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   i   n   d   e   x   )   (   a   1   ,   a   2   ,   a   3   ,   a   4   )   }   c   a   t   c   h   (   e   )   {   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   i   f   (   e   !   =   =   e   +   0   )   t   h   r   o   w       e   ;   _   s   e   t   T   h   r   e   w   (   1   ,   0   )   }   }   f   u   n   c   t   i   o   n       a   p   p   l   y   S   i   g   n   a   t   u   r   e   C   o   n   v   e   r   s   i   o   n   s   (   w   a   s   m   E   x   p   o   r   t   s   )   {   w   a   s   m   E   x   p   o   r   t   s   =   O   b   j   e   c   t   .   a   s   s   i   g   n   (   {   }   ,   w   a   s   m   E   x   p   o   r   t   s   )   ;   v   a   r       m   a   k   e   W   r   a   p   p   e   r   _   p   p   =   f   =   >   a   0   =   >   f   (   a   0   )   >   >   >   0   ;   v   a   r       m   a   k   e   W   r   a   p   p   e   r   _   p   =   f   =   >   (   )   =   >   f   (   )   >   >   >   0   ;   w   a   s   m   E   x   p   o   r   t   s   [   "   g   i   "   ]   =   m   a   k   e   W   r   a   p   p   e   r   _   p   p   (   w   a   s   m   E   x   p   o   r   t   s   [   "   g   i   "   ]   )   ;   w   a   s   m   E   x   p   o   r   t   s   [   "   i   i   "   ]   =   m   a   k   e   W   r   a   p   p   e   r   _   p   p   (   w   a   s   m   E   x   p   o   r   t   s   [   "   i   i   "   ]   )   ;   w   a   s   m   E   x   p   o   r   t   s   [   "   m   i   "   ]   =   m   a   k   e   W   r   a   p   p   e   r   _   p   p   (   w   a   s   m   E   x   p   o   r   t   s   [   "   m   i   "   ]   )   ;   w   a   s   m   E   x   p   o   r   t   s   [   "   n   i   "   ]   =   m   a   k   e   W   r   a   p   p   e   r   _   p   (   w   a   s   m   E   x   p   o   r   t   s   [   "   n   i   "   ]   )   ;   w   a   s   m   E   x   p   o   r   t   s   [   "   r   i   "   ]   =   m   a   k   e   W   r   a   p   p   e   r   _   p   p   (   w   a   s   m   E   x   p   o   r   t   s   [   "   r   i   "   ]   )   ;   r   e   t   u   r   n       w   a   s   m   E   x   p   o   r   t   s   }   f   u   n   c   t   i   o   n       c   a   l   l   M   a   i   n   (   )   {   v   a   r       e   n   t   r   y   F   u   n   c   t   i   o   n   =   _   m   a   i   n   ;   v   a   r       a   r   g   c   =   0   ;   v   a   r       a   r   g   v   =   0   ;   t   r   y   {   v   a   r       r   e   t   =   e   n   t   r   y   F   u   n   c   t   i   o   n   (   a   r   g   c   ,   a   r   g   v   )   ;   e   x   i   t   J   S   (   r   e   t   ,   t   r   u   e   )   ;   r   e   t   u   r   n       r   e   t   }   c   a   t   c   h   (   e   )   {   r   e   t   u   r   n       h   a   n   d   l   e   E   x   c   e   p   t   i   o   n   (   e   )   }   }   f   u   n   c   t   i   o   n       r   u   n   (   )   {   i   f   (   r   u   n   D   e   p   e   n   d   e   n   c   i   e   s   >   0   )   {   d   e   p   e   n   d   e   n   c   i   e   s   F   u   l   f   i   l   l   e   d   =   r   u   n   ;   r   e   t   u   r   n   }   p   r   e   R   u   n   (   )   ;   i   f   (   r   u   n   D   e   p   e   n   d   e   n   c   i   e   s   >   0   )   {   d   e   p   e   n   d   e   n   c   i   e   s   F   u   l   f   i   l   l   e   d   =   r   u   n   ;   r   e   t   u   r   n   }   f   u   n   c   t   i   o   n       d   o   R   u   n   (   )   {   M   o   d   u   l   e   [   "   c   a   l   l   e   d   R   u   n   "   ]   =   t   r   u   e   ;   i   f   (   A   B   O   R   T   )   r   e   t   u   r   n   ;   i   n   i   t   R   u   n   t   i   m   e   (   )   ;   p   r   e   M   a   i   n   (   )   ;   r   e   a   d   y   P   r   o   m   i   s   e   R   e   s   o   l   v   e   (   M   o   d   u   l   e   )   ;   M   o   d   u   l   e   [   "   o   n   R   u   n   t   i   m   e   I   n   i   t   i   a   l   i   z   e   d   "   ]   ?   .   (   )   ;   v   a   r       n   o   I   n   i   t   i   a   l   R   u   n   =   M   o   d   u   l   e   [   "   n   o   I   n   i   t   i   a   l   R   u   n   "   ]   |   |   f   a   l   s   e   ;   i   f   (   !   n   o   I   n   i   t   i   a   l   R   u   n   )   c   a   l   l   M   a   i   n   (   )   ;   p   o   s   t   R   u   n   (   )   }   i   f   (   M   o   d   u   l   e   [   "   s   e   t   S   t   a   t   u   s   "   ]   )   {   M   o   d   u   l   e   [   "   s   e   t   S   t   a   t   u   s   "   ]   (   "   R   u   n   n   i   n   g   .   .   .   "   )   ;   s   e   t   T   i   m   e   o   u   t   (   (   )   =   >   {   s   e   t   T   i   m   e   o   u   t   (   (   )   =   >   M   o   d   u   l   e   [   "   s   e   t   S   t   a   t   u   s   "   ]   (   "   "   )   ,   1   )   ;   d   o   R   u   n   (   )   }   ,   1   )   }   e   l   s   e   {   d   o   R   u   n   (   )   }   }   f   u   n   c   t   i   o   n       p   r   e   I   n   i   t   (   )   {   i   f   (   M   o   d   u   l   e   [   "   p   r   e   I   n   i   t   "   ]   )   {   i   f   (   t   y   p   e   o   f       M   o   d   u   l   e   [   "   p   r   e   I   n   i   t   "   ]   =   =   "   f   u   n   c   t   i   o   n   "   )   M   o   d   u   l   e   [   "   p   r   e   I   n   i   t   "   ]   =   [   M   o   d   u   l   e   [   "   p   r   e   I   n   i   t   "   ]   ]   ;   w   h   i   l   e   (   M   o   d   u   l   e   [   "   p   r   e   I   n   i   t   "   ]   .   l   e   n   g   t   h   >   0   )   {   M   o   d   u   l   e   [   "   p   r   e   I   n   i   t   "   ]   .   s   h   i   f   t   (   )   (   )   }   }   }   p   r   e   I   n   i   t   (   )   ;   r   u   n   (   )   ;   m   o   d   u   l   e   R   t   n   =   r   e   a   d   y   P   r   o   m   i   s   e   ;   
   
   
           r   e   t   u   r   n       m   o   d   u   l   e   R   t   n   ;   
   }   
   )   ;   
   }   )   (   )   ;   
   i   f       (   t   y   p   e   o   f       e   x   p   o   r   t   s       =   =   =       '   o   b   j   e   c   t   '       &   &       t   y   p   e   o   f       m   o   d   u   l   e       =   =   =       '   o   b   j   e   c   t   '   )       {   
           m   o   d   u   l   e   .   e   x   p   o   r   t   s       =       c   r   e   a   t   e   M   o   d   u   l   e   ;   
           /   /       T   h   i   s       d   e   f   a   u   l   t       e   x   p   o   r   t       l   o   o   k   s       r   e   d   u   n   d   a   n   t   ,       b   u   t       i   t       a   l   l   o   w   s       T   S       t   o       i   m   p   o   r   t       t   h   i   s   
           /   /       c   o   m   m   o   n   j   s       s   t   y   l   e       m   o   d   u   l   e   .   
           m   o   d   u   l   e   .   e   x   p   o   r   t   s   .   d   e   f   a   u   l   t       =       c   r   e   a   t   e   M   o   d   u   l   e   ;   
   }       e   l   s   e       i   f       (   t   y   p   e   o   f       d   e   f   i   n   e       =   =   =       '   f   u   n   c   t   i   o   n   '       &   &       d   e   f   i   n   e   [   '   a   m   d   '   ]   )   
           d   e   f   i   n   e   (   [   ]   ,       (   )       =   >       c   r   e   a   t   e   M   o   d   u   l   e   )   ;   
   