ÿþ  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   =   g   l   o   b   a   l   T   h   i   s   .   d   o   c   u   m   e   n   t   ?   .   c   u   r   r   e   n   t   S   c   r   i   p   t   ?   .   s   r   c   ;   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       E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   R   =   g   l   o   b   a   l   T   h   i   s   .   n   a   m   e   =   =   "   e   m   -   w   w   "   ;   v   a   r       E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   A   U   D   I   O   _   W   O   R   K   L   E   T   =   !   !   g   l   o   b   a   l   T   h   i   s   .   A   u   d   i   o   W   o   r   k   l   e   t   G   l   o   b   a   l   S   c   o   p   e   ;   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   A   U   D   I   O   _   W   O   R   K   L   E   T   )   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   R   =   t   r   u   e   ;   v   a   r       E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   E   B   =   !   !   g   l   o   b   a   l   T   h   i   s   .   w   i   n   d   o   w   ;   v   a   r       E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   O   R   K   E   R   =   !   !   g   l   o   b   a   l   T   h   i   s   .   W   o   r   k   e   r   G   l   o   b   a   l   S   c   o   p   e   ;   v   a   r       E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   N   O   D   E   =   g   l   o   b   a   l   T   h   i   s   .   p   r   o   c   e   s   s   ?   .   v   e   r   s   i   o   n   s   ?   .   n   o   d   e   &   &   g   l   o   b   a   l   T   h   i   s   .   p   r   o   c   e   s   s   ?   .   t   y   p   e   !   =   "   r   e   n   d   e   r   e   r   "   ;   v   a   r       E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   =   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   O   R   K   E   R   &   &   s   e   l   f   .   n   a   m   e   ?   .   s   t   a   r   t   s   W   i   t   h   (   "   e   m   -   p   t   h   r   e   a   d   "   )   ;   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   }   ;   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   O   R   K   E   R   )   {   _   s   c   r   i   p   t   N   a   m   e   =   s   e   l   f   .   l   o   c   a   t   i   o   n   .   h   r   e   f   }   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   {   }   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   O   R   K   E   R   )   {   r   e   a   d   B   i   n   a   r   y   =   u   r   l   =   >   {   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   )   ;   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   "   ;   x   h   r   .   s   e   n   d   (   n   u   l   l   )   ;   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   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   o   d   u   l   e   ;   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   ;   f   u   n   c   t   i   o   n       g   r   o   w   M   e   m   V   i   e   w   s   (   )   {   i   f   (   w   a   s   m   M   e   m   o   r   y   .   b   u   f   f   e   r   !   =   H   E   A   P   8   .   b   u   f   f   e   r   )   {   u   p   d   a   t   e   M   e   m   o   r   y   V   i   e   w   s   (   )   }   }   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       s   t   a   r   t   W   o   r   k   e   r   ;   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   {   v   a   r       i   n   i   t   i   a   l   i   z   e   d   J   S   =   f   a   l   s   e   ;   s   e   l   f   .   o   n   u   n   h   a   n   d   l   e   d   r   e   j   e   c   t   i   o   n   =   e   =   >   {   t   h   r   o   w       e   .   r   e   a   s   o   n   |   |   e   }   ;   f   u   n   c   t   i   o   n       h   a   n   d   l   e   M   e   s   s   a   g   e   (   e   )   {   t   r   y   {   v   a   r       m   s   g   D   a   t   a   =   e   [   "   d   a   t   a   "   ]   ;   v   a   r       c   m   d   =   m   s   g   D   a   t   a   .   c   m   d   ;   i   f   (   c   m   d   =   =   =   "   l   o   a   d   "   )   {   l   e   t       m   e   s   s   a   g   e   Q   u   e   u   e   =   [   ]   ;   s   e   l   f   .   o   n   m   e   s   s   a   g   e   =   e   =   >   m   e   s   s   a   g   e   Q   u   e   u   e   .   p   u   s   h   (   e   )   ;   s   t   a   r   t   W   o   r   k   e   r   =   (   )   =   >   {   p   o   s   t   M   e   s   s   a   g   e   (   {   c   m   d   :   "   l   o   a   d   e   d   "   }   )   ;   f   o   r   (   l   e   t       m   s   g       o   f       m   e   s   s   a   g   e   Q   u   e   u   e   )   {   h   a   n   d   l   e   M   e   s   s   a   g   e   (   m   s   g   )   }   s   e   l   f   .   o   n   m   e   s   s   a   g   e   =   h   a   n   d   l   e   M   e   s   s   a   g   e   }   ;   f   o   r   (   c   o   n   s   t       h   a   n   d   l   e   r       o   f       m   s   g   D   a   t   a   .   h   a   n   d   l   e   r   s   )   {   i   f   (   !   M   o   d   u   l   e   [   h   a   n   d   l   e   r   ]   |   |   M   o   d   u   l   e   [   h   a   n   d   l   e   r   ]   .   p   r   o   x   y   )   {   M   o   d   u   l   e   [   h   a   n   d   l   e   r   ]   =   (   .   .   .   a   r   g   s   )   =   >   {   p   o   s   t   M   e   s   s   a   g   e   (   {   c   m   d   :   "   c   a   l   l   H   a   n   d   l   e   r   "   ,   h   a   n   d   l   e   r   ,   a   r   g   s   }   )   }   ;   i   f   (   h   a   n   d   l   e   r   =   =   "   p   r   i   n   t   "   )   o   u   t   =   M   o   d   u   l   e   [   h   a   n   d   l   e   r   ]   ;   i   f   (   h   a   n   d   l   e   r   =   =   "   p   r   i   n   t   E   r   r   "   )   e   r   r   =   M   o   d   u   l   e   [   h   a   n   d   l   e   r   ]   }   }   w   a   s   m   M   e   m   o   r   y   =   m   s   g   D   a   t   a   .   w   a   s   m   M   e   m   o   r   y   ;   u   p   d   a   t   e   M   e   m   o   r   y   V   i   e   w   s   (   )   ;   w   a   s   m   M   o   d   u   l   e   =   m   s   g   D   a   t   a   .   w   a   s   m   M   o   d   u   l   e   ;   c   r   e   a   t   e   W   a   s   m   (   )   ;   r   u   n   (   )   }   e   l   s   e       i   f   (   c   m   d   =   =   =   "   r   u   n   "   )   {   e   s   t   a   b   l   i   s   h   S   t   a   c   k   S   p   a   c   e   (   m   s   g   D   a   t   a   .   p   t   h   r   e   a   d   _   p   t   r   )   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   i   n   i   t   (   m   s   g   D   a   t   a   .   p   t   h   r   e   a   d   _   p   t   r   ,   0   ,   0   ,   1   ,   0   ,   0   )   ;   P   T   h   r   e   a   d   .   r   e   c   e   i   v   e   O   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   (   m   s   g   D   a   t   a   )   ;   P   T   h   r   e   a   d   .   t   h   r   e   a   d   I   n   i   t   T   L   S   (   )   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   m   a   i   l   b   o   x   _   a   w   a   i   t   (   m   s   g   D   a   t   a   .   p   t   h   r   e   a   d   _   p   t   r   )   ;   i   f   (   !   i   n   i   t   i   a   l   i   z   e   d   J   S   )   {   _   _   e   m   b   i   n   d   _   i   n   i   t   i   a   l   i   z   e   _   b   i   n   d   i   n   g   s   (   )   ;   i   n   i   t   i   a   l   i   z   e   d   J   S   =   t   r   u   e   }   t   r   y   {   i   n   v   o   k   e   E   n   t   r   y   P   o   i   n   t   (   m   s   g   D   a   t   a   .   s   t   a   r   t   _   r   o   u   t   i   n   e   ,   m   s   g   D   a   t   a   .   a   r   g   )   }   c   a   t   c   h   (   e   x   )   {   i   f   (   e   x   !   =   "   u   n   w   i   n   d   "   )   {   t   h   r   o   w       e   x   }   }   }   e   l   s   e       i   f   (   m   s   g   D   a   t   a   .   t   a   r   g   e   t   =   =   =   "   s   e   t   i   m   m   e   d   i   a   t   e   "   )   {   }   e   l   s   e       i   f   (   c   m   d   =   =   =   "   c   h   e   c   k   M   a   i   l   b   o   x   "   )   {   i   f   (   i   n   i   t   i   a   l   i   z   e   d   J   S   )   {   c   h   e   c   k   M   a   i   l   b   o   x   (   )   }   }   e   l   s   e       i   f   (   c   m   d   )   {   e   r   r   (   `   w   o   r   k   e   r   :       r   e   c   e   i   v   e   d       u   n   k   n   o   w   n       c   o   m   m   a   n   d       $   {   c   m   d   }   `   )   ;   e   r   r   (   m   s   g   D   a   t   a   )   }   }   c   a   t   c   h   (   e   x   )   {   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   c   r   a   s   h   e   d   (   )   ;   t   h   r   o   w       e   x   }   }   s   e   l   f   .   o   n   m   e   s   s   a   g   e   =   h   a   n   d   l   e   M   e   s   s   a   g   e   }   v   a   r       w   w   P   a   r   a   m   s   ;   f   u   n   c   t   i   o   n       s   t   a   r   t   W   a   s   m   W   o   r   k   e   r   (   p   r   o   p   s   )   {   w   w   P   a   r   a   m   s   =   p   r   o   p   s   ;   w   a   s   m   M   e   m   o   r   y   =   p   r   o   p   s   .   w   a   s   m   M   e   m   o   r   y   ;   u   p   d   a   t   e   M   e   m   o   r   y   V   i   e   w   s   (   )   ;   w   a   s   m   M   o   d   u   l   e   =   p   r   o   p   s   .   w   a   s   m   ;   c   r   e   a   t   e   W   a   s   m   (   )   ;   r   u   n   (   )   ;   p   r   o   p   s   .   w   a   s   m   =   p   r   o   p   s   .   m   e   m   M   e   m   o   r   y   =   0   }   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   R   &   &   !   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   A   U   D   I   O   _   W   O   R   K   L   E   T   )   {   o   n   m   e   s   s   a   g   e   =   d   =   >   {   o   n   m   e   s   s   a   g   e   =   n   u   l   l   ;   s   t   a   r   t   W   a   s   m   W   o   r   k   e   r   (   d   .   d   a   t   a   )   }   }   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   A   U   D   I   O   _   W   O   R   K   L   E   T   )   {   f   u   n   c   t   i   o   n       c   r   e   a   t   e   W   a   s   m   A   u   d   i   o   W   o   r   k   l   e   t   P   r   o   c   e   s   s   o   r   (   a   u   d   i   o   P   a   r   a   m   s   )   {   c   l   a   s   s       W   a   s   m   A   u   d   i   o   W   o   r   k   l   e   t   P   r   o   c   e   s   s   o   r       e   x   t   e   n   d   s       A   u   d   i   o   W   o   r   k   l   e   t   P   r   o   c   e   s   s   o   r   {   c   o   n   s   t   r   u   c   t   o   r   (   a   r   g   s   )   {   s   u   p   e   r   (   )   ;   l   e   t       o   p   t   s   =   a   r   g   s   .   p   r   o   c   e   s   s   o   r   O   p   t   i   o   n   s   ;   t   h   i   s   .   c   a   l   l   b   a   c   k   =   (   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   ,   a   7   )   =   >   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   (   o   p   t   s   .   c   a   l   l   b   a   c   k   ,   a   1   ,   a   2   ,   a   3   ,   a   4   ,   a   5   ,   a   6   ,   a   7   )   ;   t   h   i   s   .   u   s   e   r   D   a   t   a   =   o   p   t   s   .   u   s   e   r   D   a   t   a   ;   t   h   i   s   .   s   a   m   p   l   e   s   P   e   r   C   h   a   n   n   e   l   =   o   p   t   s   .   s   a   m   p   l   e   s   P   e   r   C   h   a   n   n   e   l   ;   t   h   i   s   .   b   y   t   e   s   P   e   r   C   h   a   n   n   e   l   =   t   h   i   s   .   s   a   m   p   l   e   s   P   e   r   C   h   a   n   n   e   l   *   4   ;   t   h   i   s   .   o   u   t   p   u   t   V   i   e   w   s   =   n   e   w       A   r   r   a   y   (   M   a   t   h   .   m   i   n   (   (   w   w   P   a   r   a   m   s   .   s   t   a   c   k   S   i   z   e   -   1   6   )   /   t   h   i   s   .   b   y   t   e   s   P   e   r   C   h   a   n   n   e   l   |   0   ,   6   4   )   )   ;   t   h   i   s   .   c   r   e   a   t   e   O   u   t   p   u   t   V   i   e   w   s   (   )   }   c   r   e   a   t   e   O   u   t   p   u   t   V   i   e   w   s   (   )   {   v   a   r       o   l   d   S   t   a   c   k   P   t   r   =   s   t   a   c   k   S   a   v   e   (   )   ;   v   a   r       v   i   e   w   D   a   t   a   I   d   x   =   s   t   a   c   k   A   l   l   o   c   (   t   h   i   s   .   o   u   t   p   u   t   V   i   e   w   s   .   l   e   n   g   t   h   *   t   h   i   s   .   b   y   t   e   s   P   e   r   C   h   a   n   n   e   l   )   >   >   2   ;   f   o   r   (   v   a   r       n   =   t   h   i   s   .   o   u   t   p   u   t   V   i   e   w   s   .   l   e   n   g   t   h   -   1   ;   n   >   =   0   ;   n   -   -   )   {   t   h   i   s   .   o   u   t   p   u   t   V   i   e   w   s   [   n   ]   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   .   s   u   b   a   r   r   a   y   (   v   i   e   w   D   a   t   a   I   d   x   ,   v   i   e   w   D   a   t   a   I   d   x   +   =   t   h   i   s   .   s   a   m   p   l   e   s   P   e   r   C   h   a   n   n   e   l   )   }   s   t   a   c   k   R   e   s   t   o   r   e   (   o   l   d   S   t   a   c   k   P   t   r   )   }   s   t   a   t   i   c       g   e   t       p   a   r   a   m   e   t   e   r   D   e   s   c   r   i   p   t   o   r   s   (   )   {   r   e   t   u   r   n       a   u   d   i   o   P   a   r   a   m   s   }   p   r   o   c   e   s   s   (   i   n   p   u   t   L   i   s   t   ,   o   u   t   p   u   t   L   i   s   t   ,   p   a   r   a   m   e   t   e   r   s   )   {   i   f   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   .   b   u   f   f   e   r   !   =   t   h   i   s   .   o   u   t   p   u   t   V   i   e   w   s   [   0   ]   .   b   u   f   f   e   r   )   {   t   h   i   s   .   c   r   e   a   t   e   O   u   t   p   u   t   V   i   e   w   s   (   )   }   v   a   r       n   u   m   I   n   p   u   t   s   =   i   n   p   u   t   L   i   s   t   .   l   e   n   g   t   h   ;   v   a   r       n   u   m   O   u   t   p   u   t   s   =   o   u   t   p   u   t   L   i   s   t   .   l   e   n   g   t   h   ;   v   a   r       e   n   t   r   y   ;   v   a   r       s   u   b   e   n   t   r   y   ;   v   a   r       s   t   a   c   k   M   e   m   o   r   y   S   t   r   u   c   t   =   (   n   u   m   I   n   p   u   t   s   +   n   u   m   O   u   t   p   u   t   s   )   *   1   2   ;   v   a   r       s   t   a   c   k   M   e   m   o   r   y   D   a   t   a   =   0   ;   f   o   r   (   e   n   t   r   y       o   f       i   n   p   u   t   L   i   s   t   )   {   s   t   a   c   k   M   e   m   o   r   y   D   a   t   a   +   =   e   n   t   r   y   .   l   e   n   g   t   h   }   s   t   a   c   k   M   e   m   o   r   y   D   a   t   a   *   =   t   h   i   s   .   b   y   t   e   s   P   e   r   C   h   a   n   n   e   l   ;   v   a   r       o   u   t   p   u   t   V   i   e   w   s   N   e   e   d   e   d   =   0   ;   f   o   r   (   e   n   t   r   y       o   f       o   u   t   p   u   t   L   i   s   t   )   {   o   u   t   p   u   t   V   i   e   w   s   N   e   e   d   e   d   +   =   e   n   t   r   y   .   l   e   n   g   t   h   }   s   t   a   c   k   M   e   m   o   r   y   D   a   t   a   +   =   o   u   t   p   u   t   V   i   e   w   s   N   e   e   d   e   d   *   t   h   i   s   .   b   y   t   e   s   P   e   r   C   h   a   n   n   e   l   ;   v   a   r       n   u   m   P   a   r   a   m   s   =   0   ;   f   o   r   (   e   n   t   r   y       i   n       p   a   r   a   m   e   t   e   r   s   )   {   +   +   n   u   m   P   a   r   a   m   s   ;   s   t   a   c   k   M   e   m   o   r   y   S   t   r   u   c   t   +   =   8   ;   s   t   a   c   k   M   e   m   o   r   y   D   a   t   a   +   =   p   a   r   a   m   e   t   e   r   s   [   e   n   t   r   y   ]   .   b   y   t   e   L   e   n   g   t   h   }   v   a   r       o   l   d   S   t   a   c   k   P   t   r   =   s   t   a   c   k   S   a   v   e   (   )   ;   v   a   r       s   t   a   c   k   M   e   m   o   r   y   A   l   i   g   n   e   d   =   s   t   a   c   k   M   e   m   o   r   y   S   t   r   u   c   t   +   s   t   a   c   k   M   e   m   o   r   y   D   a   t   a   +   1   5   &   ~   1   5   ;   v   a   r       s   t   r   u   c   t   P   t   r   =   s   t   a   c   k   A   l   l   o   c   (   s   t   a   c   k   M   e   m   o   r   y   A   l   i   g   n   e   d   )   ;   v   a   r       d   a   t   a   P   t   r   =   s   t   r   u   c   t   P   t   r   +   (   s   t   a   c   k   M   e   m   o   r   y   A   l   i   g   n   e   d   -   s   t   a   c   k   M   e   m   o   r   y   D   a   t   a   )   ;   v   a   r       i   n   p   u   t   s   P   t   r   =   s   t   r   u   c   t   P   t   r   ;   f   o   r   (   e   n   t   r   y       o   f       i   n   p   u   t   L   i   s   t   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   r   u   c   t   P   t   r   >   >   2   ]   =   e   n   t   r   y   .   l   e   n   g   t   h   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   r   u   c   t   P   t   r   +   4   >   >   2   ]   =   t   h   i   s   .   s   a   m   p   l   e   s   P   e   r   C   h   a   n   n   e   l   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   r   u   c   t   P   t   r   +   8   >   >   2   ]   =   d   a   t   a   P   t   r   ;   s   t   r   u   c   t   P   t   r   +   =   1   2   ;   f   o   r   (   s   u   b   e   n   t   r   y       o   f       e   n   t   r   y   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   .   s   e   t   (   s   u   b   e   n   t   r   y   ,   d   a   t   a   P   t   r   >   >   2   )   ;   d   a   t   a   P   t   r   +   =   t   h   i   s   .   b   y   t   e   s   P   e   r   C   h   a   n   n   e   l   }   }   v   a   r       p   a   r   a   m   s   P   t   r   =   s   t   r   u   c   t   P   t   r   ;   f   o   r   (   e   n   t   r   y   =   0   ;   s   u   b   e   n   t   r   y   =   p   a   r   a   m   e   t   e   r   s   [   e   n   t   r   y   +   +   ]   ;   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   r   u   c   t   P   t   r   >   >   2   ]   =   s   u   b   e   n   t   r   y   .   l   e   n   g   t   h   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   r   u   c   t   P   t   r   +   4   >   >   2   ]   =   d   a   t   a   P   t   r   ;   s   t   r   u   c   t   P   t   r   +   =   8   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   .   s   e   t   (   s   u   b   e   n   t   r   y   ,   d   a   t   a   P   t   r   >   >   2   )   ;   d   a   t   a   P   t   r   +   =   s   u   b   e   n   t   r   y   .   l   e   n   g   t   h   *   4   }   v   a   r       o   u   t   p   u   t   s   P   t   r   =   s   t   r   u   c   t   P   t   r   ;   f   o   r   (   e   n   t   r   y       o   f       o   u   t   p   u   t   L   i   s   t   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   r   u   c   t   P   t   r   >   >   2   ]   =   e   n   t   r   y   .   l   e   n   g   t   h   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   r   u   c   t   P   t   r   +   4   >   >   2   ]   =   t   h   i   s   .   s   a   m   p   l   e   s   P   e   r   C   h   a   n   n   e   l   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   r   u   c   t   P   t   r   +   8   >   >   2   ]   =   d   a   t   a   P   t   r   ;   s   t   r   u   c   t   P   t   r   +   =   1   2   ;   d   a   t   a   P   t   r   +   =   t   h   i   s   .   b   y   t   e   s   P   e   r   C   h   a   n   n   e   l   *   e   n   t   r   y   .   l   e   n   g   t   h   }   v   a   r       d   i   d   P   r   o   d   u   c   e   A   u   d   i   o   =   t   h   i   s   .   c   a   l   l   b   a   c   k   (   n   u   m   I   n   p   u   t   s   ,   i   n   p   u   t   s   P   t   r   ,   n   u   m   O   u   t   p   u   t   s   ,   o   u   t   p   u   t   s   P   t   r   ,   n   u   m   P   a   r   a   m   s   ,   p   a   r   a   m   s   P   t   r   ,   t   h   i   s   .   u   s   e   r   D   a   t   a   )   ;   i   f   (   d   i   d   P   r   o   d   u   c   e   A   u   d   i   o   )   {   f   o   r   (   e   n   t   r   y       o   f       o   u   t   p   u   t   L   i   s   t   )   {   f   o   r   (   s   u   b   e   n   t   r   y       o   f       e   n   t   r   y   )   {   s   u   b   e   n   t   r   y   .   s   e   t   (   t   h   i   s   .   o   u   t   p   u   t   V   i   e   w   s   [   -   -   o   u   t   p   u   t   V   i   e   w   s   N   e   e   d   e   d   ]   )   }   }   }   s   t   a   c   k   R   e   s   t   o   r   e   (   o   l   d   S   t   a   c   k   P   t   r   )   ;   r   e   t   u   r   n   !   !   d   i   d   P   r   o   d   u   c   e   A   u   d   i   o   }   }   r   e   t   u   r   n       W   a   s   m   A   u   d   i   o   W   o   r   k   l   e   t   P   r   o   c   e   s   s   o   r   }   v   a   r       p   o   r   t   =   g   l   o   b   a   l   T   h   i   s   .   p   o   r   t   |   |   {   }   ;   c   l   a   s   s       B   o   o   t   s   t   r   a   p   M   e   s   s   a   g   e   s       e   x   t   e   n   d   s       A   u   d   i   o   W   o   r   k   l   e   t   P   r   o   c   e   s   s   o   r   {   c   o   n   s   t   r   u   c   t   o   r   (   a   r   g   )   {   s   u   p   e   r   (   )   ;   s   t   a   r   t   W   a   s   m   W   o   r   k   e   r   (   a   r   g   .   p   r   o   c   e   s   s   o   r   O   p   t   i   o   n   s   )   ;   i   f   (   !   (   p   o   r   t       i   n   s   t   a   n   c   e   o   f       M   e   s   s   a   g   e   P   o   r   t   )   )   {   t   h   i   s   .   p   o   r   t   .   o   n   m   e   s   s   a   g   e   =   p   o   r   t   .   o   n   m   e   s   s   a   g   e   ;   p   o   r   t   =   t   h   i   s   .   p   o   r   t   }   }   p   r   o   c   e   s   s   (   )   {   }   }   r   e   g   i   s   t   e   r   P   r   o   c   e   s   s   o   r   (   "   e   m   -   b   o   o   t   s   t   r   a   p   "   ,   B   o   o   t   s   t   r   a   p   M   e   s   s   a   g   e   s   )   ;   p   o   r   t   .   o   n   m   e   s   s   a   g   e   =   a   s   y   n   c       m   s   g   =   >   {   l   e   t       d   =   m   s   g   .   d   a   t   a   ;   i   f   (   d   [   "   _   b   o   o   t   "   ]   )   {   s   t   a   r   t   W   a   s   m   W   o   r   k   e   r   (   d   )   }   e   l   s   e       i   f   (   d   [   "   _   w   p   n   "   ]   )   {   r   e   g   i   s   t   e   r   P   r   o   c   e   s   s   o   r   (   d   [   "   _   w   p   n   "   ]   ,   c   r   e   a   t   e   W   a   s   m   A   u   d   i   o   W   o   r   k   l   e   t   P   r   o   c   e   s   s   o   r   (   d   .   a   u   d   i   o   P   a   r   a   m   s   )   )   ;   p   o   r   t   .   p   o   s   t   M   e   s   s   a   g   e   (   {   _   w   s   c   :   d   .   c   a   l   l   b   a   c   k   ,   a   r   g   s   :   [   d   .   c   o   n   t   e   x   t   H   a   n   d   l   e   ,   1   ,   d   .   u   s   e   r   D   a   t   a   ]   }   )   }   e   l   s   e       i   f   (   d   [   "   _   w   s   c   "   ]   )   {   g   e   t   W   a   s   m   T   a   b   l   e   E   n   t   r   y   (   d   [   "   _   w   s   c   "   ]   )   (   .   .   .   d   .   a   r   g   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   F   6   4   ;   v   a   r       H   E   A   P   6   4   ,   H   E   A   P   U   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       i   n   i   t   M   e   m   o   r   y   (   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   |   |   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   R   )   {   r   e   t   u   r   n   }   i   f   (   M   o   d   u   l   e   [   "   w   a   s   m   M   e   m   o   r   y   "   ]   )   {   w   a   s   m   M   e   m   o   r   y   =   M   o   d   u   l   e   [   "   w   a   s   m   M   e   m   o   r   y   "   ]   }   e   l   s   e   {   v   a   r       I   N   I   T   I   A   L   _   M   E   M   O   R   Y   =   M   o   d   u   l   e   [   "   I   N   I   T   I   A   L   _   M   E   M   O   R   Y   "   ]   |   |   1   6   7   7   7   2   1   6   ;   w   a   s   m   M   e   m   o   r   y   =   n   e   w       W   e   b   A   s   s   e   m   b   l   y   .   M   e   m   o   r   y   (   {   i   n   i   t   i   a   l   :   I   N   I   T   I   A   L   _   M   E   M   O   R   Y   /   6   5   5   3   6   ,   m   a   x   i   m   u   m   :   3   2   7   6   8   ,   s   h   a   r   e   d   :   t   r   u   e   }   )   }   u   p   d   a   t   e   M   e   m   o   r   y   V   i   e   w   s   (   )   }   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   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   R   )   r   e   t   u   r   n       _   w   a   s   m   W   o   r   k   e   r   I   n   i   t   i   a   l   i   z   e   R   u   n   t   i   m   e   (   )   ;   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       s   t   a   r   t   W   o   r   k   e   r   (   )   ;   w   a   s   m   E   x   p   o   r   t   s   [   "   S   h   "   ]   (   )   }   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   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   |   |   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   R   )   {   r   e   t   u   r   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   )   }   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   -   v   .   0   9   -   t   h   r   e   a   d   .   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   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   (   )   {   a   s   s   i   g   n   W   a   s   m   I   m   p   o   r   t   s   (   )   ;   v   a   r       i   m   p   o   r   t   s   =   {   a   :   w   a   s   m   I   m   p   o   r   t   s   }   ;   r   e   t   u   r   n       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   s   y   n   c   i   f   y   .   i   n   s   t   r   u   m   e   n   t   W   a   s   m   E   x   p   o   r   t   s   (   w   a   s   m   E   x   p   o   r   t   s   )   ;   r   e   g   i   s   t   e   r   T   L   S   I   n   i   t   (   w   a   s   m   E   x   p   o   r   t   s   [   "   f   i   "   ]   )   ;   a   s   s   i   g   n   W   a   s   m   E   x   p   o   r   t   s   (   w   a   s   m   E   x   p   o   r   t   s   )   ;   w   a   s   m   M   o   d   u   l   e   =   m   o   d   u   l   e   ;   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       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   "   ]   ,   r   e   s   u   l   t   [   "   m   o   d   u   l   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   ,   (   i   n   s   t   ,   m   o   d   )   =   >   {   r   e   s   o   l   v   e   (   r   e   c   e   i   v   e   I   n   s   t   a   n   c   e   (   i   n   s   t   ,   m   o   d   )   )   }   )   }   )   }   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   |   |   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   R   )   {   v   a   r       i   n   s   t   a   n   c   e   =   n   e   w       W   e   b   A   s   s   e   m   b   l   y   .   I   n   s   t   a   n   c   e   (   w   a   s   m   M   o   d   u   l   e   ,   g   e   t   W   a   s   m   I   m   p   o   r   t   s   (   )   )   ;   r   e   t   u   r   n       r   e   c   e   i   v   e   I   n   s   t   a   n   c   e   (   i   n   s   t   a   n   c   e   ,   w   a   s   m   M   o   d   u   l   e   )   }   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   (   )   ;   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   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       t   e   r   m   i   n   a   t   e   W   o   r   k   e   r   =   w   o   r   k   e   r   =   >   {   w   o   r   k   e   r   .   t   e   r   m   i   n   a   t   e   (   )   ;   w   o   r   k   e   r   .   o   n   m   e   s   s   a   g   e   =   e   =   >   {   }   }   ;   v   a   r       c   l   e   a   n   u   p   T   h   r   e   a   d   =   p   t   h   r   e   a   d   _   p   t   r   =   >   {   v   a   r       w   o   r   k   e   r   =   P   T   h   r   e   a   d   .   p   t   h   r   e   a   d   s   [   p   t   h   r   e   a   d   _   p   t   r   ]   ;   P   T   h   r   e   a   d   .   r   e   t   u   r   n   W   o   r   k   e   r   T   o   P   o   o   l   (   w   o   r   k   e   r   )   }   ;   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   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       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   ;   v   a   r       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   (   )   }   }   }   ;   v   a   r       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   )   }   ;   v   a   r       s   p   a   w   n   T   h   r   e   a   d   =   t   h   r   e   a   d   P   a   r   a   m   s   =   >   {   v   a   r       w   o   r   k   e   r   =   P   T   h   r   e   a   d   .   g   e   t   N   e   w   W   o   r   k   e   r   (   )   ;   i   f   (   !   w   o   r   k   e   r   )   {   r   e   t   u   r   n       6   }   P   T   h   r   e   a   d   .   r   u   n   n   i   n   g   W   o   r   k   e   r   s   .   p   u   s   h   (   w   o   r   k   e   r   )   ;   P   T   h   r   e   a   d   .   p   t   h   r   e   a   d   s   [   t   h   r   e   a   d   P   a   r   a   m   s   .   p   t   h   r   e   a   d   _   p   t   r   ]   =   w   o   r   k   e   r   ;   w   o   r   k   e   r   .   p   t   h   r   e   a   d   _   p   t   r   =   t   h   r   e   a   d   P   a   r   a   m   s   .   p   t   h   r   e   a   d   _   p   t   r   ;   v   a   r       m   s   g   =   {   c   m   d   :   "   r   u   n   "   ,   s   t   a   r   t   _   r   o   u   t   i   n   e   :   t   h   r   e   a   d   P   a   r   a   m   s   .   s   t   a   r   t   R   o   u   t   i   n   e   ,   a   r   g   :   t   h   r   e   a   d   P   a   r   a   m   s   .   a   r   g   ,   p   t   h   r   e   a   d   _   p   t   r   :   t   h   r   e   a   d   P   a   r   a   m   s   .   p   t   h   r   e   a   d   _   p   t   r   }   ;   m   s   g   .   m   o   d   u   l   e   C   a   n   v   a   s   I   d   =   t   h   r   e   a   d   P   a   r   a   m   s   .   m   o   d   u   l   e   C   a   n   v   a   s   I   d   ;   m   s   g   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   =   t   h   r   e   a   d   P   a   r   a   m   s   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   ;   w   o   r   k   e   r   .   p   o   s   t   M   e   s   s   a   g   e   (   m   s   g   ,   t   h   r   e   a   d   P   a   r   a   m   s   .   t   r   a   n   s   f   e   r   L   i   s   t   )   ;   r   e   t   u   r   n       0   }   ;   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       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       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   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       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   =   (   f   u   n   c   I   n   d   e   x   ,   e   m   A   s   m   A   d   d   r   ,   s   y   n   c   ,   .   .   .   c   a   l   l   A   r   g   s   )   =   >   {   v   a   r       s   e   r   i   a   l   i   z   e   d   N   u   m   C   a   l   l   A   r   g   s   =   c   a   l   l   A   r   g   s   .   l   e   n   g   t   h   *   2   ;   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   v   a   r       a   r   g   s   =   s   t   a   c   k   A   l   l   o   c   (   s   e   r   i   a   l   i   z   e   d   N   u   m   C   a   l   l   A   r   g   s   *   8   )   ;   v   a   r       b   =   a   r   g   s   >   >   3   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   c   a   l   l   A   r   g   s   .   l   e   n   g   t   h   ;   i   +   +   )   {   v   a   r       a   r   g   =   c   a   l   l   A   r   g   s   [   i   ]   ;   i   f   (   t   y   p   e   o   f       a   r   g   =   =   "   b   i   g   i   n   t   "   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   6   4   )   [   b   +   2   *   i   ]   =   1   n   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   6   4   )   [   b   +   2   *   i   +   1   ]   =   a   r   g   }   e   l   s   e   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   6   4   )   [   b   +   2   *   i   ]   =   0   n   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   6   4   )   [   b   +   2   *   i   +   1   ]   =   a   r   g   }   }   v   a   r       r   t   n   =   _   _   e   m   s   c   r   i   p   t   e   n   _   r   u   n   _   j   s   _   o   n   _   m   a   i   n   _   t   h   r   e   a   d   (   f   u   n   c   I   n   d   e   x   ,   e   m   A   s   m   A   d   d   r   ,   s   e   r   i   a   l   i   z   e   d   N   u   m   C   a   l   l   A   r   g   s   ,   a   r   g   s   ,   s   y   n   c   )   ;   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   r   e   t   u   r   n       r   t   n   }   ;   f   u   n   c   t   i   o   n       _   p   r   o   c   _   e   x   i   t   (   c   o   d   e   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   0   ,   0   ,   1   ,   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   (   )   )   {   P   T   h   r   e   a   d   .   t   e   r   m   i   n   a   t   e   A   l   l   T   h   r   e   a   d   s   (   )   ;   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   )   )   }   f   u   n   c   t   i   o   n       e   x   i   t   O   n   M   a   i   n   T   h   r   e   a   d   (   r   e   t   u   r   n   C   o   d   e   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   1   ,   0   ,   0   ,   r   e   t   u   r   n   C   o   d   e   )   ;   _   e   x   i   t   (   r   e   t   u   r   n   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   ;   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   {   e   x   i   t   O   n   M   a   i   n   T   h   r   e   a   d   (   s   t   a   t   u   s   )   ;   t   h   r   o   w   "   u   n   w   i   n   d   "   }   _   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       P   T   h   r   e   a   d   =   {   u   n   u   s   e   d   W   o   r   k   e   r   s   :   [   ]   ,   r   u   n   n   i   n   g   W   o   r   k   e   r   s   :   [   ]   ,   t   l   s   I   n   i   t   F   u   n   c   t   i   o   n   s   :   [   ]   ,   p   t   h   r   e   a   d   s   :   {   }   ,   i   n   i   t   (   )   {   i   f   (   !   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   |   |   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   R   )   )   {   P   T   h   r   e   a   d   .   i   n   i   t   M   a   i   n   T   h   r   e   a   d   (   )   }   }   ,   i   n   i   t   M   a   i   n   T   h   r   e   a   d   (   )   {   v   a   r       p   t   h   r   e   a   d   P   o   o   l   S   i   z   e   =   1   6   ;   w   h   i   l   e   (   p   t   h   r   e   a   d   P   o   o   l   S   i   z   e   -   -   )   {   P   T   h   r   e   a   d   .   a   l   l   o   c   a   t   e   U   n   u   s   e   d   W   o   r   k   e   r   (   )   }   a   d   d   O   n   P   r   e   R   u   n   (   a   s   y   n   c   (   )   =   >   {   v   a   r       p   t   h   r   e   a   d   P   o   o   l   R   e   a   d   y   =   P   T   h   r   e   a   d   .   l   o   a   d   W   a   s   m   M   o   d   u   l   e   T   o   A   l   l   W   o   r   k   e   r   s   (   )   ;   a   d   d   R   u   n   D   e   p   e   n   d   e   n   c   y   (   "   l   o   a   d   i   n   g   -   w   o   r   k   e   r   s   "   )   ;   a   w   a   i   t       p   t   h   r   e   a   d   P   o   o   l   R   e   a   d   y   ;   r   e   m   o   v   e   R   u   n   D   e   p   e   n   d   e   n   c   y   (   "   l   o   a   d   i   n   g   -   w   o   r   k   e   r   s   "   )   }   )   }   ,   t   e   r   m   i   n   a   t   e   A   l   l   T   h   r   e   a   d   s   :   (   )   =   >   {   f   o   r   (   v   a   r       w   o   r   k   e   r       o   f       P   T   h   r   e   a   d   .   r   u   n   n   i   n   g   W   o   r   k   e   r   s   )   {   t   e   r   m   i   n   a   t   e   W   o   r   k   e   r   (   w   o   r   k   e   r   )   }   f   o   r   (   v   a   r       w   o   r   k   e   r       o   f       P   T   h   r   e   a   d   .   u   n   u   s   e   d   W   o   r   k   e   r   s   )   {   t   e   r   m   i   n   a   t   e   W   o   r   k   e   r   (   w   o   r   k   e   r   )   }   P   T   h   r   e   a   d   .   u   n   u   s   e   d   W   o   r   k   e   r   s   =   [   ]   ;   P   T   h   r   e   a   d   .   r   u   n   n   i   n   g   W   o   r   k   e   r   s   =   [   ]   ;   P   T   h   r   e   a   d   .   p   t   h   r   e   a   d   s   =   {   }   }   ,   r   e   t   u   r   n   W   o   r   k   e   r   T   o   P   o   o   l   :   w   o   r   k   e   r   =   >   {   v   a   r       p   t   h   r   e   a   d   _   p   t   r   =   w   o   r   k   e   r   .   p   t   h   r   e   a   d   _   p   t   r   ;   d   e   l   e   t   e       P   T   h   r   e   a   d   .   p   t   h   r   e   a   d   s   [   p   t   h   r   e   a   d   _   p   t   r   ]   ;   P   T   h   r   e   a   d   .   u   n   u   s   e   d   W   o   r   k   e   r   s   .   p   u   s   h   (   w   o   r   k   e   r   )   ;   P   T   h   r   e   a   d   .   r   u   n   n   i   n   g   W   o   r   k   e   r   s   .   s   p   l   i   c   e   (   P   T   h   r   e   a   d   .   r   u   n   n   i   n   g   W   o   r   k   e   r   s   .   i   n   d   e   x   O   f   (   w   o   r   k   e   r   )   ,   1   )   ;   w   o   r   k   e   r   .   p   t   h   r   e   a   d   _   p   t   r   =   0   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   f   r   e   e   _   d   a   t   a   (   p   t   h   r   e   a   d   _   p   t   r   )   }   ,   r   e   c   e   i   v   e   O   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   (   d   a   t   a   )   {   i   f   (   t   y   p   e   o   f       G   L   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   O   b   j   e   c   t   .   a   s   s   i   g   n   (   G   L   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   ,   d   a   t   a   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   )   ;   i   f   (   !   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   &   &   d   a   t   a   .   m   o   d   u   l   e   C   a   n   v   a   s   I   d   &   &   G   L   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   [   d   a   t   a   .   m   o   d   u   l   e   C   a   n   v   a   s   I   d   ]   )   {   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   =   G   L   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   [   d   a   t   a   .   m   o   d   u   l   e   C   a   n   v   a   s   I   d   ]   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   ;   M   o   d   u   l   e   [   "   c   a   n   v   a   s   "   ]   .   i   d   =   d   a   t   a   .   m   o   d   u   l   e   C   a   n   v   a   s   I   d   }   }   }   ,   t   h   r   e   a   d   I   n   i   t   T   L   S   (   )   {   P   T   h   r   e   a   d   .   t   l   s   I   n   i   t   F   u   n   c   t   i   o   n   s   .   f   o   r   E   a   c   h   (   f   =   >   f   (   )   )   }   ,   l   o   a   d   W   a   s   m   M   o   d   u   l   e   T   o   W   o   r   k   e   r   :   w   o   r   k   e   r   =   >   n   e   w       P   r   o   m   i   s   e   (   o   n   F   i   n   i   s   h   e   d   L   o   a   d   i   n   g   =   >   {   w   o   r   k   e   r   .   o   n   m   e   s   s   a   g   e   =   e   =   >   {   v   a   r       d   =   e   [   "   d   a   t   a   "   ]   ;   v   a   r       c   m   d   =   d   .   c   m   d   ;   i   f   (   d   .   t   a   r   g   e   t   T   h   r   e   a   d   &   &   d   .   t   a   r   g   e   t   T   h   r   e   a   d   !   =   _   p   t   h   r   e   a   d   _   s   e   l   f   (   )   )   {   v   a   r       t   a   r   g   e   t   W   o   r   k   e   r   =   P   T   h   r   e   a   d   .   p   t   h   r   e   a   d   s   [   d   .   t   a   r   g   e   t   T   h   r   e   a   d   ]   ;   i   f   (   t   a   r   g   e   t   W   o   r   k   e   r   )   {   t   a   r   g   e   t   W   o   r   k   e   r   .   p   o   s   t   M   e   s   s   a   g   e   (   d   ,   d   .   t   r   a   n   s   f   e   r   L   i   s   t   )   }   e   l   s   e   {   e   r   r   (   `   I   n   t   e   r   n   a   l       e   r   r   o   r   !       W   o   r   k   e   r       s   e   n   t       a       m   e   s   s   a   g   e       "   $   {   c   m   d   }   "       t   o       t   a   r   g   e   t       p   t   h   r   e   a   d       $   {   d   .   t   a   r   g   e   t   T   h   r   e   a   d   }   ,       b   u   t       t   h   a   t       t   h   r   e   a   d       n   o       l   o   n   g   e   r       e   x   i   s   t   s   !   `   )   }   r   e   t   u   r   n   }   i   f   (   c   m   d   =   =   =   "   c   h   e   c   k   M   a   i   l   b   o   x   "   )   {   c   h   e   c   k   M   a   i   l   b   o   x   (   )   }   e   l   s   e       i   f   (   c   m   d   =   =   =   "   s   p   a   w   n   T   h   r   e   a   d   "   )   {   s   p   a   w   n   T   h   r   e   a   d   (   d   )   }   e   l   s   e       i   f   (   c   m   d   =   =   =   "   c   l   e   a   n   u   p   T   h   r   e   a   d   "   )   {   c   a   l   l   U   s   e   r   C   a   l   l   b   a   c   k   (   (   )   =   >   c   l   e   a   n   u   p   T   h   r   e   a   d   (   d   .   t   h   r   e   a   d   )   )   }   e   l   s   e       i   f   (   c   m   d   =   =   =   "   l   o   a   d   e   d   "   )   {   w   o   r   k   e   r   .   l   o   a   d   e   d   =   t   r   u   e   ;   o   n   F   i   n   i   s   h   e   d   L   o   a   d   i   n   g   (   w   o   r   k   e   r   )   }   e   l   s   e       i   f   (   d   .   t   a   r   g   e   t   =   =   =   "   s   e   t   i   m   m   e   d   i   a   t   e   "   )   {   w   o   r   k   e   r   .   p   o   s   t   M   e   s   s   a   g   e   (   d   )   }   e   l   s   e       i   f   (   c   m   d   =   =   =   "   c   a   l   l   H   a   n   d   l   e   r   "   )   {   M   o   d   u   l   e   [   d   .   h   a   n   d   l   e   r   ]   (   .   .   .   d   .   a   r   g   s   )   }   e   l   s   e       i   f   (   c   m   d   )   {   e   r   r   (   `   w   o   r   k   e   r       s   e   n   t       a   n       u   n   k   n   o   w   n       c   o   m   m   a   n   d       $   {   c   m   d   }   `   )   }   }   ;   w   o   r   k   e   r   .   o   n   e   r   r   o   r   =   e   =   >   {   v   a   r       m   e   s   s   a   g   e   =   "   w   o   r   k   e   r       s   e   n   t       a   n       e   r   r   o   r   !   "   ;   e   r   r   (   `   $   {   m   e   s   s   a   g   e   }       $   {   e   .   f   i   l   e   n   a   m   e   }   :   $   {   e   .   l   i   n   e   n   o   }   :       $   {   e   .   m   e   s   s   a   g   e   }   `   )   ;   t   h   r   o   w       e   }   ;   v   a   r       h   a   n   d   l   e   r   s   =   [   ]   ;   v   a   r       k   n   o   w   n   H   a   n   d   l   e   r   s   =   [   "   o   n   E   x   i   t   "   ,   "   o   n   A   b   o   r   t   "   ,   "   p   r   i   n   t   "   ,   "   p   r   i   n   t   E   r   r   "   ]   ;   f   o   r   (   v   a   r       h   a   n   d   l   e   r       o   f       k   n   o   w   n   H   a   n   d   l   e   r   s   )   {   i   f   (   M   o   d   u   l   e   .   p   r   o   p   e   r   t   y   I   s   E   n   u   m   e   r   a   b   l   e   (   h   a   n   d   l   e   r   )   )   {   h   a   n   d   l   e   r   s   .   p   u   s   h   (   h   a   n   d   l   e   r   )   }   }   w   o   r   k   e   r   .   p   o   s   t   M   e   s   s   a   g   e   (   {   c   m   d   :   "   l   o   a   d   "   ,   h   a   n   d   l   e   r   s   ,   w   a   s   m   M   e   m   o   r   y   ,   w   a   s   m   M   o   d   u   l   e   }   )   }   )   ,   a   s   y   n   c       l   o   a   d   W   a   s   m   M   o   d   u   l   e   T   o   A   l   l   W   o   r   k   e   r   s   (   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   |   |   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   R   )   {   r   e   t   u   r   n   }   l   e   t       p   t   h   r   e   a   d   P   o   o   l   R   e   a   d   y   =   P   r   o   m   i   s   e   .   a   l   l   (   P   T   h   r   e   a   d   .   u   n   u   s   e   d   W   o   r   k   e   r   s   .   m   a   p   (   P   T   h   r   e   a   d   .   l   o   a   d   W   a   s   m   M   o   d   u   l   e   T   o   W   o   r   k   e   r   )   )   ;   r   e   t   u   r   n       p   t   h   r   e   a   d   P   o   o   l   R   e   a   d   y   }   ,   a   l   l   o   c   a   t   e   U   n   u   s   e   d   W   o   r   k   e   r   (   )   {   v   a   r       w   o   r   k   e   r   ;   v   a   r       p   t   h   r   e   a   d   M   a   i   n   J   s   =   _   s   c   r   i   p   t   N   a   m   e   ;   i   f   (   M   o   d   u   l   e   [   "   m   a   i   n   S   c   r   i   p   t   U   r   l   O   r   B   l   o   b   "   ]   )   {   p   t   h   r   e   a   d   M   a   i   n   J   s   =   M   o   d   u   l   e   [   "   m   a   i   n   S   c   r   i   p   t   U   r   l   O   r   B   l   o   b   "   ]   ;   i   f   (   t   y   p   e   o   f       p   t   h   r   e   a   d   M   a   i   n   J   s   !   =   "   s   t   r   i   n   g   "   )   {   p   t   h   r   e   a   d   M   a   i   n   J   s   =   U   R   L   .   c   r   e   a   t   e   O   b   j   e   c   t   U   R   L   (   p   t   h   r   e   a   d   M   a   i   n   J   s   )   }   }   i   f   (   g   l   o   b   a   l   T   h   i   s   .   t   r   u   s   t   e   d   T   y   p   e   s   ?   .   c   r   e   a   t   e   P   o   l   i   c   y   )   {   v   a   r       p   =   t   r   u   s   t   e   d   T   y   p   e   s   .   c   r   e   a   t   e   P   o   l   i   c   y   (   "   e   m   s   c   r   i   p   t   e   n   #   w   o   r   k   e   r   P   o   l   i   c   y   2   "   ,   {   c   r   e   a   t   e   S   c   r   i   p   t   U   R   L   :   i   g   n   o   r   e   d   =   >   p   t   h   r   e   a   d   M   a   i   n   J   s   }   )   ;   w   o   r   k   e   r   =   n   e   w       W   o   r   k   e   r   (   p   .   c   r   e   a   t   e   S   c   r   i   p   t   U   R   L   (   "   i   g   n   o   r   e   d   "   )   ,   {   n   a   m   e   :   "   e   m   -   p   t   h   r   e   a   d   "   }   )   }   e   l   s   e       w   o   r   k   e   r   =   n   e   w       W   o   r   k   e   r   (   p   t   h   r   e   a   d   M   a   i   n   J   s   ,   {   n   a   m   e   :   "   e   m   -   p   t   h   r   e   a   d   "   }   )   ;   P   T   h   r   e   a   d   .   u   n   u   s   e   d   W   o   r   k   e   r   s   .   p   u   s   h   (   w   o   r   k   e   r   )   }   ,   g   e   t   N   e   w   W   o   r   k   e   r   (   )   {   i   f   (   P   T   h   r   e   a   d   .   u   n   u   s   e   d   W   o   r   k   e   r   s   .   l   e   n   g   t   h   =   =   0   )   {   P   T   h   r   e   a   d   .   a   l   l   o   c   a   t   e   U   n   u   s   e   d   W   o   r   k   e   r   (   )   ;   P   T   h   r   e   a   d   .   l   o   a   d   W   a   s   m   M   o   d   u   l   e   T   o   W   o   r   k   e   r   (   P   T   h   r   e   a   d   .   u   n   u   s   e   d   W   o   r   k   e   r   s   [   0   ]   )   }   r   e   t   u   r   n       P   T   h   r   e   a   d   .   u   n   u   s   e   d   W   o   r   k   e   r   s   .   p   o   p   (   )   }   }   ;   v   a   r       _   w   a   s   m   W   o   r   k   e   r   D   e   l   a   y   e   d   M   e   s   s   a   g   e   Q   u   e   u   e   =   [   ]   ;   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       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   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   {   i   f   (   _   p   t   h   r   e   a   d   _   s   e   l   f   (   )   )   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   e   x   i   t   (   E   X   I   T   S   T   A   T   U   S   )   ;   r   e   t   u   r   n   }   _   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       w   a   s   m   T   a   b   l   e   M   i   r   r   o   r   =   [   ]   ;   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       _   w   a   s   m   W   o   r   k   e   r   R   u   n   P   o   s   t   M   e   s   s   a   g   e   =   e   =   >   {   l   e   t       d   a   t   a   =   e   .   d   a   t   a   ;   l   e   t       w   a   s   m   C   a   l   l   =   d   a   t   a   [   "   _   w   s   c   "   ]   ;   w   a   s   m   C   a   l   l   &   &   c   a   l   l   U   s   e   r   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   (   w   a   s   m   C   a   l   l   )   (   .   .   .   d   a   t   a   [   "   x   "   ]   )   )   }   ;   v   a   r       _   w   a   s   m   W   o   r   k   e   r   A   p   p   e   n   d   T   o   Q   u   e   u   e   =   e   =   >   {   _   w   a   s   m   W   o   r   k   e   r   D   e   l   a   y   e   d   M   e   s   s   a   g   e   Q   u   e   u   e   .   p   u   s   h   (   e   )   }   ;   v   a   r       _   w   a   s   m   W   o   r   k   e   r   I   n   i   t   i   a   l   i   z   e   R   u   n   t   i   m   e   =   (   )   =   >   {   n   o   E   x   i   t   R   u   n   t   i   m   e   =   1   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   w   a   s   m   _   w   o   r   k   e   r   _   i   n   i   t   i   a   l   i   z   e   (   w   w   P   a   r   a   m   s   .   s   t   a   c   k   L   o   w   e   s   t   A   d   d   r   e   s   s   ,   w   w   P   a   r   a   m   s   .   s   t   a   c   k   S   i   z   e   )   ;   _   _   _   s   e   t   _   t   h   r   e   a   d   _   s   t   a   t   e   (   0   ,   0   ,   0   ,   !   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   A   U   D   I   O   _   W   O   R   K   L   E   T   )   ;   _   _   e   m   b   i   n   d   _   i   n   i   t   i   a   l   i   z   e   _   b   i   n   d   i   n   g   s   (   )   ;   i   f   (   !   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   A   U   D   I   O   _   W   O   R   K   L   E   T   )   {   r   e   m   o   v   e   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   m   e   s   s   a   g   e   "   ,   _   w   a   s   m   W   o   r   k   e   r   A   p   p   e   n   d   T   o   Q   u   e   u   e   )   ;   _   w   a   s   m   W   o   r   k   e   r   D   e   l   a   y   e   d   M   e   s   s   a   g   e   Q   u   e   u   e   =   _   w   a   s   m   W   o   r   k   e   r   D   e   l   a   y   e   d   M   e   s   s   a   g   e   Q   u   e   u   e   .   f   o   r   E   a   c   h   (   _   w   a   s   m   W   o   r   k   e   r   R   u   n   P   o   s   t   M   e   s   s   a   g   e   )   ;   a   d   d   E   v   e   n   t   L   i   s   t   e   n   e   r   (   "   m   e   s   s   a   g   e   "   ,   _   w   a   s   m   W   o   r   k   e   r   R   u   n   P   o   s   t   M   e   s   s   a   g   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       d   y   n   C   a   l   l   s   =   {   }   ;   v   a   r       d   y   n   C   a   l   l   L   e   g   a   c   y   =   (   s   i   g   ,   p   t   r   ,   a   r   g   s   )   =   >   {   s   i   g   =   s   i   g   .   r   e   p   l   a   c   e   (   /   p   /   g   ,   "   i   "   )   ;   v   a   r       f   =   d   y   n   C   a   l   l   s   [   s   i   g   ]   ;   r   e   t   u   r   n       f   (   p   t   r   ,   .   .   .   a   r   g   s   )   }   ;   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       r   t   n   =   d   y   n   C   a   l   l   L   e   g   a   c   y   (   s   i   g   ,   p   t   r   ,   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       r   t   n   }   r   e   t   u   r   n       c   o   n   v   e   r   t   (   r   t   n   )   }   ;   f   u   n   c   t   i   o   n       e   s   t   a   b   l   i   s   h   S   t   a   c   k   S   p   a   c   e   (   p   t   h   r   e   a   d   _   p   t   r   )   {   v   a   r       s   t   a   c   k   H   i   g   h   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   h   r   e   a   d   _   p   t   r   +   5   2   >   >   2   ]   ;   v   a   r       s   t   a   c   k   S   i   z   e   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   h   r   e   a   d   _   p   t   r   +   5   6   >   >   2   ]   ;   v   a   r       s   t   a   c   k   L   o   w   =   s   t   a   c   k   H   i   g   h   -   s   t   a   c   k   S   i   z   e   ;   _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   s   e   t   _   l   i   m   i   t   s   (   s   t   a   c   k   H   i   g   h   ,   s   t   a   c   k   L   o   w   )   ;   s   t   a   c   k   R   e   s   t   o   r   e   (   s   t   a   c   k   H   i   g   h   )   }   v   a   r       i   n   v   o   k   e   E   n   t   r   y   P   o   i   n   t   =   (   p   t   r   ,   a   r   g   )   =   >   {   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   C   o   u   n   t   e   r   =   0   ;   n   o   E   x   i   t   R   u   n   t   i   m   e   =   0   ;   v   a   r       r   e   s   u   l   t   =   (   a   1   =   >   d   y   n   C   a   l   l   _   i   i   (   p   t   r   ,   a   1   )   )   (   a   r   g   )   ;   f   u   n   c   t   i   o   n       f   i   n   i   s   h   (   r   e   s   u   l   t   )   {   i   f   (   k   e   e   p   R   u   n   t   i   m   e   A   l   i   v   e   (   )   )   {   E   X   I   T   S   T   A   T   U   S   =   r   e   s   u   l   t   ;   r   e   t   u   r   n   }   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   e   x   i   t   (   r   e   s   u   l   t   )   }   f   i   n   i   s   h   (   r   e   s   u   l   t   )   }   ;   i   n   v   o   k   e   E   n   t   r   y   P   o   i   n   t   .   i   s   A   s   y   n   c   =   t   r   u   e   ;   v   a   r       n   o   E   x   i   t   R   u   n   t   i   m   e   =   t   r   u   e   ;   v   a   r       r   e   g   i   s   t   e   r   T   L   S   I   n   i   t   =   t   l   s   I   n   i   t   F   u   n   c   =   >   P   T   h   r   e   a   d   .   t   l   s   I   n   i   t   F   u   n   c   t   i   o   n   s   .   p   u   s   h   (   t   l   s   I   n   i   t   F   u   n   c   )   ;   v   a   r       w   a   s   m   M   e   m   o   r   y   ;   v   a   r       U   T   F   8   D   e   c   o   d   e   r   =   g   l   o   b   a   l   T   h   i   s   .   T   e   x   t   D   e   c   o   d   e   r   &   &   n   e   w       T   e   x   t   D   e   c   o   d   e   r   ;   v   a   r       f   i   n   d   S   t   r   i   n   g   E   n   d   =   (   h   e   a   p   O   r   A   r   r   a   y   ,   i   d   x   ,   m   a   x   B   y   t   e   s   T   o   R   e   a   d   ,   i   g   n   o   r   e   N   u   l   )   =   >   {   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   ;   i   f   (   i   g   n   o   r   e   N   u   l   )   r   e   t   u   r   n       m   a   x   I   d   x   ;   w   h   i   l   e   (   h   e   a   p   O   r   A   r   r   a   y   [   i   d   x   ]   &   &   !   (   i   d   x   >   =   m   a   x   I   d   x   )   )   +   +   i   d   x   ;   r   e   t   u   r   n       i   d   x   }   ;   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   ,   i   g   n   o   r   e   N   u   l   )   =   >   {   v   a   r       e   n   d   P   t   r   =   f   i   n   d   S   t   r   i   n   g   E   n   d   (   h   e   a   p   O   r   A   r   r   a   y   ,   i   d   x   ,   m   a   x   B   y   t   e   s   T   o   R   e   a   d   ,   i   g   n   o   r   e   N   u   l   )   ;   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   .   b   u   f   f   e   r       i   n   s   t   a   n   c   e   o   f       A   r   r   a   y   B   u   f   f   e   r   ?   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   )   :   h   e   a   p   O   r   A   r   r   a   y   .   s   l   i   c   e   (   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       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   ,   i   g   n   o   r   e   N   u   l   )   =   >   p   t   r   ?   U   T   F   8   A   r   r   a   y   T   o   S   t   r   i   n   g   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   ,   p   t   r   ,   m   a   x   B   y   t   e   s   T   o   R   e   a   d   ,   i   g   n   o   r   e   N   u   l   )   :   "   "   ;   v   a   r       _   _   _   a   s   s   e   r   t   _   f   a   i   l   =   (   c   o   n   d   i   t   i   o   n   ,   f   i   l   e   n   a   m   e   ,   l   i   n   e   ,   f   u   n   c   )   =   >   a   b   o   r   t   (   `   A   s   s   e   r   t   i   o   n       f   a   i   l   e   d   :       $   {   U   T   F   8   T   o   S   t   r   i   n   g   (   c   o   n   d   i   t   i   o   n   )   }   ,       a   t   :       `   +   [   f   i   l   e   n   a   m   e   ?   U   T   F   8   T   o   S   t   r   i   n   g   (   f   i   l   e   n   a   m   e   )   :   "   u   n   k   n   o   w   n       f   i   l   e   n   a   m   e   "   ,   l   i   n   e   ,   f   u   n   c   ?   U   T   F   8   T   o   S   t   r   i   n   g   (   f   u   n   c   )   :   "   u   n   k   n   o   w   n       f   u   n   c   t   i   o   n   "   ]   )   ;   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       _   _   _   c   x   a   _   b   e   g   i   n   _   c   a   t   c   h   =   p   t   r   =   >   {   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   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   t   h   i   s   .   p   t   r   +   4   >   >   2   ]   =   t   y   p   e   }   g   e   t   _   t   y   p   e   (   )   {   r   e   t   u   r   n   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   t   h   i   s   .   p   t   r   +   4   >   >   2   ]   }   s   e   t   _   d   e   s   t   r   u   c   t   o   r   (   d   e   s   t   r   u   c   t   o   r   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   t   h   i   s   .   p   t   r   +   8   >   >   2   ]   =   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   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   t   h   i   s   .   p   t   r   +   8   >   >   2   ]   }   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   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   t   h   i   s   .   p   t   r   +   1   2   ]   =   c   a   u   g   h   t   }   g   e   t   _   c   a   u   g   h   t   (   )   {   r   e   t   u   r   n   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   t   h   i   s   .   p   t   r   +   1   2   ]   !   =   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   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   t   h   i   s   .   p   t   r   +   1   3   ]   =   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   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   t   h   i   s   .   p   t   r   +   1   3   ]   !   =   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   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   t   h   i   s   .   p   t   r   +   1   6   >   >   2   ]   =   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   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   t   h   i   s   .   p   t   r   +   1   6   >   >   2   ]   }   }   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   }   ;   v   a   r       _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   2   =   (   )   =   >   f   i   n   d   M   a   t   c   h   i   n   g   C   a   t   c   h   (   [   ]   )   ;   v   a   r       _   _   _   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   =   >   f   i   n   d   M   a   t   c   h   i   n   g   C   a   t   c   h   (   [   a   r   g   0   ]   )   ;   v   a   r       _   _   _   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   )   =   >   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   ]   )   ;   v   a   r       _   _   _   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   )   =   >   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   }   ;   v   a   r       _   _   _   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   )   =   >   {   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   }   ;   v   a   r       _   _   _   c   x   a   _   u   n   c   a   u   g   h   t   _   e   x   c   e   p   t   i   o   n   s   =   (   )   =   >   u   n   c   a   u   g   h   t   E   x   c   e   p   t   i   o   n   C   o   u   n   t   ;   v   a   r       _   _   _   r   e   s   u   m   e   E   x   c   e   p   t   i   o   n   =   p   t   r   =   >   {   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       _   _   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   =   >   {   v   a   r       s   t   r   =   "   "   ;   w   h   i   l   e   (   1   )   {   v   a   r       c   h   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   [   p   t   r   +   +   ]   ;   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   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   p   o   i   n   t   e   r   ]   :   p   o   i   n   t   e   r   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   [   p   o   i   n   t   e   r   ]   ;   c   a   s   e       2   :   r   e   t   u   r   n       s   i   g   n   e   d   ?   p   o   i   n   t   e   r   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   1   6   )   [   p   o   i   n   t   e   r   >   >   1   ]   :   p   o   i   n   t   e   r   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   1   6   )   [   p   o   i   n   t   e   r   >   >   1   ]   ;   c   a   s   e       4   :   r   e   t   u   r   n       s   i   g   n   e   d   ?   p   o   i   n   t   e   r   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   o   i   n   t   e   r   >   >   2   ]   :   p   o   i   n   t   e   r   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   o   i   n   t   e   r   >   >   2   ]   ;   c   a   s   e       8   :   r   e   t   u   r   n       s   i   g   n   e   d   ?   p   o   i   n   t   e   r   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   6   4   )   [   p   o   i   n   t   e   r   >   >   3   ]   :   p   o   i   n   t   e   r   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   6   4   )   [   p   o   i   n   t   e   r   >   >   3   ]   ;   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   =   (   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   )   =   >   {   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   }   ,   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       _   _   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   )   =   >   {   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   }   ,   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   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   [   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   }   )   }   ;   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   ]   ;   v   a   r       _   _   e   m   v   a   l   _   d   e   c   r   e   f   =   h   a   n   d   l   e   =   >   {   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   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   o   i   n   t   e   r   >   >   2   ]   )   }   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   )   ,   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   }   ;   v   a   r       _   _   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   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   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   o   i   n   t   e   r   >   >   2   ]   )   }   ;   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   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   6   4   )   [   p   o   i   n   t   e   r   >   >   3   ]   )   }   ;   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   =   (   r   a   w   T   y   p   e   ,   n   a   m   e   ,   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   :   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   ,   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   "   ,   "   f   r   o   m   R   e   t   W   i   r   e   "   ,   "   t   o   C   l   a   s   s   P   a   r   a   m   W   i   r   e   "   ]   ;   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       =       t   o   C   l   a   s   s   P   a   r   a   m   W   i   r   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   )   {   v   a   r       a   r   g   N   a   m   e   =   `   t   o   A   r   g   $   {   i   }   W   i   r   e   `   ;   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   N   a   m   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   N   a   m   e   )   }   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   `   ;   v   a   r       r   e   t   u   r   n   V   a   l   =   r   e   t   u   r   n   s   ?   "   r   v   "   :   "   "   ;   a   r   g   s   1   .   p   u   s   h   (   "   A   s   y   n   c   i   f   y   "   )   ;   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   `   f   u   n   c   t   i   o   n       o   n   D   o   n   e   (   $   {   r   e   t   u   r   n   V   a   l   }   )       {   \   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       =       f   r   o   m   R   e   t   W   i   r   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   "   ;   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   `   r   e   t   u   r   n       A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a       ?       A   s   y   n   c   i   f   y   .   w   h   e   n   D   o   n   e   (   )   .   t   h   e   n   (   o   n   D   o   n   e   )       :       o   n   D   o   n   e   (   $   {   r   e   t   u   r   n   V   a   l   }   )   ;   \   n   `   ;   i   n   v   o   k   e   r   F   n   B   o   d   y   +   =   "   }   \   n   "   ;   r   e   t   u   r   n       n   e   w       F   u   n   c   t   i   o   n   (   a   r   g   s   1   ,   i   n   v   o   k   e   r   F   n   B   o   d   y   )   }   v   a   r       r   u   n   A   n   d   A   b   o   r   t   I   f   E   r   r   o   r   =   f   u   n   c   =   >   {   t   r   y   {   r   e   t   u   r   n       f   u   n   c   (   )   }   c   a   t   c   h   (   e   )   {   a   b   o   r   t   (   e   )   }   }   ;   v   a   r       r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   u   s   h   =   (   )   =   >   {   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   C   o   u   n   t   e   r   +   =   1   }   ;   v   a   r       r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   o   p   =   (   )   =   >   {   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   C   o   u   n   t   e   r   -   =   1   }   ;   v   a   r       A   s   y   n   c   i   f   y   =   {   i   n   s   t   r   u   m   e   n   t   W   a   s   m   I   m   p   o   r   t   s   (   i   m   p   o   r   t   s   )   {   v   a   r       i   m   p   o   r   t   P   a   t   t   e   r   n   =   /   ^   (   i   n   v   o   k   e   _   .   *   |   _   _   a   s   y   n   c   j   s   _   _   .   *   )   $   /   ;   f   o   r   (   l   e   t   [   x   ,   o   r   i   g   i   n   a   l   ]   o   f       O   b   j   e   c   t   .   e   n   t   r   i   e   s   (   i   m   p   o   r   t   s   )   )   {   i   f   (   t   y   p   e   o   f       o   r   i   g   i   n   a   l   =   =   "   f   u   n   c   t   i   o   n   "   )   {   l   e   t       i   s   A   s   y   n   c   i   f   y   I   m   p   o   r   t   =   o   r   i   g   i   n   a   l   .   i   s   A   s   y   n   c   |   |   i   m   p   o   r   t   P   a   t   t   e   r   n   .   t   e   s   t   (   x   )   }   }   }   ,   i   n   s   t   r   u   m   e   n   t   F   u   n   c   t   i   o   n   (   o   r   i   g   i   n   a   l   )   {   v   a   r       w   r   a   p   p   e   r   =   (   .   .   .   a   r   g   s   )   =   >   {   A   s   y   n   c   i   f   y   .   e   x   p   o   r   t   C   a   l   l   S   t   a   c   k   .   p   u   s   h   (   o   r   i   g   i   n   a   l   )   ;   t   r   y   {   r   e   t   u   r   n       o   r   i   g   i   n   a   l   (   .   .   .   a   r   g   s   )   }   f   i   n   a   l   l   y   {   i   f   (   !   A   B   O   R   T   )   {   v   a   r       t   o   p   =   A   s   y   n   c   i   f   y   .   e   x   p   o   r   t   C   a   l   l   S   t   a   c   k   .   p   o   p   (   )   ;   A   s   y   n   c   i   f   y   .   m   a   y   b   e   S   t   o   p   U   n   w   i   n   d   (   )   }   }   }   ;   A   s   y   n   c   i   f   y   .   f   u   n   c   W   r   a   p   p   e   r   s   .   s   e   t   (   o   r   i   g   i   n   a   l   ,   w   r   a   p   p   e   r   )   ;   r   e   t   u   r   n       w   r   a   p   p   e   r   }   ,   i   n   s   t   r   u   m   e   n   t   W   a   s   m   E   x   p   o   r   t   s   (   e   x   p   o   r   t   s   )   {   v   a   r       r   e   t   =   {   }   ;   f   o   r   (   l   e   t   [   x   ,   o   r   i   g   i   n   a   l   ]   o   f       O   b   j   e   c   t   .   e   n   t   r   i   e   s   (   e   x   p   o   r   t   s   )   )   {   i   f   (   t   y   p   e   o   f       o   r   i   g   i   n   a   l   =   =   "   f   u   n   c   t   i   o   n   "   )   {   v   a   r       w   r   a   p   p   e   r   =   A   s   y   n   c   i   f   y   .   i   n   s   t   r   u   m   e   n   t   F   u   n   c   t   i   o   n   (   o   r   i   g   i   n   a   l   )   ;   r   e   t   [   x   ]   =   w   r   a   p   p   e   r   }   e   l   s   e   {   r   e   t   [   x   ]   =   o   r   i   g   i   n   a   l   }   }   r   e   t   u   r   n       r   e   t   }   ,   S   t   a   t   e   :   {   N   o   r   m   a   l   :   0   ,   U   n   w   i   n   d   i   n   g   :   1   ,   R   e   w   i   n   d   i   n   g   :   2   ,   D   i   s   a   b   l   e   d   :   3   }   ,   s   t   a   t   e   :   0   ,   S   t   a   c   k   S   i   z   e   :   4   0   9   6   ,   c   u   r   r   D   a   t   a   :   n   u   l   l   ,   h   a   n   d   l   e   S   l   e   e   p   R   e   t   u   r   n   V   a   l   u   e   :   0   ,   e   x   p   o   r   t   C   a   l   l   S   t   a   c   k   :   [   ]   ,   c   a   l   l   s   t   a   c   k   F   u   n   c   T   o   I   d   :   n   e   w       M   a   p   ,   c   a   l   l   S   t   a   c   k   I   d   T   o   F   u   n   c   :   n   e   w       M   a   p   ,   f   u   n   c   W   r   a   p   p   e   r   s   :   n   e   w       M   a   p   ,   c   a   l   l   S   t   a   c   k   I   d   :   0   ,   a   s   y   n   c   P   r   o   m   i   s   e   H   a   n   d   l   e   r   s   :   n   u   l   l   ,   s   l   e   e   p   C   a   l   l   b   a   c   k   s   :   [   ]   ,   g   e   t   C   a   l   l   S   t   a   c   k   I   d   (   f   u   n   c   )   {   i   f   (   !   A   s   y   n   c   i   f   y   .   c   a   l   l   s   t   a   c   k   F   u   n   c   T   o   I   d   .   h   a   s   (   f   u   n   c   )   )   {   v   a   r       i   d   =   A   s   y   n   c   i   f   y   .   c   a   l   l   S   t   a   c   k   I   d   +   +   ;   A   s   y   n   c   i   f   y   .   c   a   l   l   s   t   a   c   k   F   u   n   c   T   o   I   d   .   s   e   t   (   f   u   n   c   ,   i   d   )   ;   A   s   y   n   c   i   f   y   .   c   a   l   l   S   t   a   c   k   I   d   T   o   F   u   n   c   .   s   e   t   (   i   d   ,   f   u   n   c   )   }   r   e   t   u   r   n       A   s   y   n   c   i   f   y   .   c   a   l   l   s   t   a   c   k   F   u   n   c   T   o   I   d   .   g   e   t   (   f   u   n   c   )   }   ,   m   a   y   b   e   S   t   o   p   U   n   w   i   n   d   (   )   {   i   f   (   A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a   &   &   A   s   y   n   c   i   f   y   .   s   t   a   t   e   =   =   =   A   s   y   n   c   i   f   y   .   S   t   a   t   e   .   U   n   w   i   n   d   i   n   g   &   &   A   s   y   n   c   i   f   y   .   e   x   p   o   r   t   C   a   l   l   S   t   a   c   k   .   l   e   n   g   t   h   =   =   =   0   )   {   A   s   y   n   c   i   f   y   .   s   t   a   t   e   =   A   s   y   n   c   i   f   y   .   S   t   a   t   e   .   N   o   r   m   a   l   ;   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   u   s   h   (   )   ;   r   u   n   A   n   d   A   b   o   r   t   I   f   E   r   r   o   r   (   _   a   s   y   n   c   i   f   y   _   s   t   o   p   _   u   n   w   i   n   d   )   ;   i   f   (   t   y   p   e   o   f       F   i   b   e   r   s   !   =   "   u   n   d   e   f   i   n   e   d   "   )   {   F   i   b   e   r   s   .   t   r   a   m   p   o   l   i   n   e   (   )   }   }   }   ,   w   h   e   n   D   o   n   e   (   )   {   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   )   =   >   {   A   s   y   n   c   i   f   y   .   a   s   y   n   c   P   r   o   m   i   s   e   H   a   n   d   l   e   r   s   =   {   r   e   s   o   l   v   e   ,   r   e   j   e   c   t   }   }   )   }   ,   a   l   l   o   c   a   t   e   D   a   t   a   (   )   {   v   a   r       p   t   r   =   _   m   a   l   l   o   c   (   1   2   +   A   s   y   n   c   i   f   y   .   S   t   a   c   k   S   i   z   e   )   ;   A   s   y   n   c   i   f   y   .   s   e   t   D   a   t   a   H   e   a   d   e   r   (   p   t   r   ,   p   t   r   +   1   2   ,   A   s   y   n   c   i   f   y   .   S   t   a   c   k   S   i   z   e   )   ;   A   s   y   n   c   i   f   y   .   s   e   t   D   a   t   a   R   e   w   i   n   d   F   u   n   c   (   p   t   r   )   ;   r   e   t   u   r   n       p   t   r   }   ,   s   e   t   D   a   t   a   H   e   a   d   e   r   (   p   t   r   ,   s   t   a   c   k   ,   s   t   a   c   k   S   i   z   e   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   r   >   >   2   ]   =   s   t   a   c   k   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   r   +   4   >   >   2   ]   =   s   t   a   c   k   +   s   t   a   c   k   S   i   z   e   }   ,   s   e   t   D   a   t   a   R   e   w   i   n   d   F   u   n   c   (   p   t   r   )   {   v   a   r       b   o   t   t   o   m   O   f   C   a   l   l   S   t   a   c   k   =   A   s   y   n   c   i   f   y   .   e   x   p   o   r   t   C   a   l   l   S   t   a   c   k   [   0   ]   ;   v   a   r       r   e   w   i   n   d   I   d   =   A   s   y   n   c   i   f   y   .   g   e   t   C   a   l   l   S   t   a   c   k   I   d   (   b   o   t   t   o   m   O   f   C   a   l   l   S   t   a   c   k   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   t   r   +   8   >   >   2   ]   =   r   e   w   i   n   d   I   d   }   ,   g   e   t   D   a   t   a   R   e   w   i   n   d   F   u   n   c   (   p   t   r   )   {   v   a   r       i   d   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   t   r   +   8   >   >   2   ]   ;   v   a   r       f   u   n   c   =   A   s   y   n   c   i   f   y   .   c   a   l   l   S   t   a   c   k   I   d   T   o   F   u   n   c   .   g   e   t   (   i   d   )   ;   r   e   t   u   r   n       f   u   n   c   }   ,   d   o   R   e   w   i   n   d   (   p   t   r   )   {   v   a   r       o   r   i   g   i   n   a   l   =   A   s   y   n   c   i   f   y   .   g   e   t   D   a   t   a   R   e   w   i   n   d   F   u   n   c   (   p   t   r   )   ;   v   a   r       f   u   n   c   =   A   s   y   n   c   i   f   y   .   f   u   n   c   W   r   a   p   p   e   r   s   .   g   e   t   (   o   r   i   g   i   n   a   l   )   ;   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   o   p   (   )   ;   r   e   t   u   r   n       f   u   n   c   (   )   }   ,   h   a   n   d   l   e   S   l   e   e   p   (   s   t   a   r   t   A   s   y   n   c   )   {   i   f   (   A   B   O   R   T   )   r   e   t   u   r   n   ;   i   f   (   A   s   y   n   c   i   f   y   .   s   t   a   t   e   =   =   =   A   s   y   n   c   i   f   y   .   S   t   a   t   e   .   N   o   r   m   a   l   )   {   v   a   r       r   e   a   c   h   e   d   C   a   l   l   b   a   c   k   =   f   a   l   s   e   ;   v   a   r       r   e   a   c   h   e   d   A   f   t   e   r   C   a   l   l   b   a   c   k   =   f   a   l   s   e   ;   s   t   a   r   t   A   s   y   n   c   (   (   h   a   n   d   l   e   S   l   e   e   p   R   e   t   u   r   n   V   a   l   u   e   =   0   )   =   >   {   i   f   (   A   B   O   R   T   )   r   e   t   u   r   n   ;   A   s   y   n   c   i   f   y   .   h   a   n   d   l   e   S   l   e   e   p   R   e   t   u   r   n   V   a   l   u   e   =   h   a   n   d   l   e   S   l   e   e   p   R   e   t   u   r   n   V   a   l   u   e   ;   r   e   a   c   h   e   d   C   a   l   l   b   a   c   k   =   t   r   u   e   ;   i   f   (   !   r   e   a   c   h   e   d   A   f   t   e   r   C   a   l   l   b   a   c   k   )   {   r   e   t   u   r   n   }   A   s   y   n   c   i   f   y   .   s   t   a   t   e   =   A   s   y   n   c   i   f   y   .   S   t   a   t   e   .   R   e   w   i   n   d   i   n   g   ;   r   u   n   A   n   d   A   b   o   r   t   I   f   E   r   r   o   r   (   (   )   =   >   _   a   s   y   n   c   i   f   y   _   s   t   a   r   t   _   r   e   w   i   n   d   (   A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a   )   )   ;   i   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   .   f   u   n   c   )   {   M   a   i   n   L   o   o   p   .   r   e   s   u   m   e   (   )   }   v   a   r       a   s   y   n   c   W   a   s   m   R   e   t   u   r   n   V   a   l   u   e   ,   i   s   E   r   r   o   r   =   f   a   l   s   e   ;   t   r   y   {   a   s   y   n   c   W   a   s   m   R   e   t   u   r   n   V   a   l   u   e   =   A   s   y   n   c   i   f   y   .   d   o   R   e   w   i   n   d   (   A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a   )   }   c   a   t   c   h   (   e   r   r   )   {   a   s   y   n   c   W   a   s   m   R   e   t   u   r   n   V   a   l   u   e   =   e   r   r   ;   i   s   E   r   r   o   r   =   t   r   u   e   }   v   a   r       h   a   n   d   l   e   d   =   f   a   l   s   e   ;   i   f   (   !   A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a   )   {   v   a   r       a   s   y   n   c   P   r   o   m   i   s   e   H   a   n   d   l   e   r   s   =   A   s   y   n   c   i   f   y   .   a   s   y   n   c   P   r   o   m   i   s   e   H   a   n   d   l   e   r   s   ;   i   f   (   a   s   y   n   c   P   r   o   m   i   s   e   H   a   n   d   l   e   r   s   )   {   A   s   y   n   c   i   f   y   .   a   s   y   n   c   P   r   o   m   i   s   e   H   a   n   d   l   e   r   s   =   n   u   l   l   ;   (   i   s   E   r   r   o   r   ?   a   s   y   n   c   P   r   o   m   i   s   e   H   a   n   d   l   e   r   s   .   r   e   j   e   c   t   :   a   s   y   n   c   P   r   o   m   i   s   e   H   a   n   d   l   e   r   s   .   r   e   s   o   l   v   e   )   (   a   s   y   n   c   W   a   s   m   R   e   t   u   r   n   V   a   l   u   e   )   ;   h   a   n   d   l   e   d   =   t   r   u   e   }   }   i   f   (   i   s   E   r   r   o   r   &   &   !   h   a   n   d   l   e   d   )   {   t   h   r   o   w       a   s   y   n   c   W   a   s   m   R   e   t   u   r   n   V   a   l   u   e   }   }   )   ;   r   e   a   c   h   e   d   A   f   t   e   r   C   a   l   l   b   a   c   k   =   t   r   u   e   ;   i   f   (   !   r   e   a   c   h   e   d   C   a   l   l   b   a   c   k   )   {   A   s   y   n   c   i   f   y   .   s   t   a   t   e   =   A   s   y   n   c   i   f   y   .   S   t   a   t   e   .   U   n   w   i   n   d   i   n   g   ;   A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a   =   A   s   y   n   c   i   f   y   .   a   l   l   o   c   a   t   e   D   a   t   a   (   )   ;   i   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   .   f   u   n   c   )   {   M   a   i   n   L   o   o   p   .   p   a   u   s   e   (   )   }   r   u   n   A   n   d   A   b   o   r   t   I   f   E   r   r   o   r   (   (   )   =   >   _   a   s   y   n   c   i   f   y   _   s   t   a   r   t   _   u   n   w   i   n   d   (   A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a   )   )   }   }   e   l   s   e       i   f   (   A   s   y   n   c   i   f   y   .   s   t   a   t   e   =   =   =   A   s   y   n   c   i   f   y   .   S   t   a   t   e   .   R   e   w   i   n   d   i   n   g   )   {   A   s   y   n   c   i   f   y   .   s   t   a   t   e   =   A   s   y   n   c   i   f   y   .   S   t   a   t   e   .   N   o   r   m   a   l   ;   r   u   n   A   n   d   A   b   o   r   t   I   f   E   r   r   o   r   (   _   a   s   y   n   c   i   f   y   _   s   t   o   p   _   r   e   w   i   n   d   )   ;   _   f   r   e   e   (   A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a   )   ;   A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a   =   n   u   l   l   ;   A   s   y   n   c   i   f   y   .   s   l   e   e   p   C   a   l   l   b   a   c   k   s   .   f   o   r   E   a   c   h   (   c   a   l   l   U   s   e   r   C   a   l   l   b   a   c   k   )   }   e   l   s   e   {   a   b   o   r   t   (   `   i   n   v   a   l   i   d       s   t   a   t   e   :       $   {   A   s   y   n   c   i   f   y   .   s   t   a   t   e   }   `   )   }   r   e   t   u   r   n       A   s   y   n   c   i   f   y   .   h   a   n   d   l   e   S   l   e   e   p   R   e   t   u   r   n   V   a   l   u   e   }   ,   h   a   n   d   l   e   A   s   y   n   c   :   s   t   a   r   t   A   s   y   n   c   =   >   A   s   y   n   c   i   f   y   .   h   a   n   d   l   e   S   l   e   e   p   (   w   a   k   e   U   p   =   >   {   s   t   a   r   t   A   s   y   n   c   (   )   .   t   h   e   n   (   w   a   k   e   U   p   )   }   )   }   ;   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   ]   .   i   s   V   o   i   d   ;   v   a   r       r   e   t   T   y   p   e   =   a   r   g   T   y   p   e   s   [   0   ]   ;   v   a   r       i   n   s   t   T   y   p   e   =   a   r   g   T   y   p   e   s   [   1   ]   ;   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   ,   r   e   t   T   y   p   e   .   f   r   o   m   W   i   r   e   T   y   p   e   .   b   i   n   d   (   r   e   t   T   y   p   e   )   ,   i   n   s   t   T   y   p   e   ?   .   t   o   W   i   r   e   T   y   p   e   .   b   i   n   d   (   i   n   s   t   T   y   p   e   )   ]   ;   f   o   r   (   v   a   r       i   =   2   ;   i   <   a   r   g   C   o   u   n   t   ;   +   +   i   )   {   v   a   r       a   r   g   T   y   p   e   =   a   r   g   T   y   p   e   s   [   i   ]   ;   c   l   o   s   u   r   e   A   r   g   s   .   p   u   s   h   (   a   r   g   T   y   p   e   .   t   o   W   i   r   e   T   y   p   e   .   b   i   n   d   (   a   r   g   T   y   p   e   )   )   }   c   l   o   s   u   r   e   A   r   g   s   .   p   u   s   h   (   A   s   y   n   c   i   f   y   )   ;   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       i   n   v   o   k   e   r   F   a   c   t   o   r   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   =   i   n   v   o   k   e   r   F   a   c   t   o   r   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   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   f   i   r   s   t   E   l   e   m   e   n   t   +   i   *   4   >   >   2   ]   )   }   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       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   (   )   {   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   )   }   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   ;   f   o   r   (   l   e   t   [   i   ,   d   t   ]   o   f       d   e   p   e   n   d   e   n   t   T   y   p   e   s   .   e   n   t   r   i   e   s   (   )   )   {   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   )   }   ;   v   a   r       _   _   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   )   =   >   {   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   =   (   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   )   =   >   {   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   ,   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   }   )   }   ;   v   a   r       _   _   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   )   =   >   {   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   h   a   n   d   l   e   >   >   2   ]   ;   v   a   r       d   a   t   a   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   h   a   n   d   l   e   +   4   >   >   2   ]   ;   r   e   t   u   r   n       n   e   w       T   A   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   ,   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   }   )   }   ;   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   )   =   >   {   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   +   +   ]   =   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   +   +   ]   =   1   9   2   |   u   >   >   6   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   ]   =   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   +   +   ]   =   2   2   4   |   u   >   >   1   2   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   ]   =   1   2   8   |   u   >   >   6   &   6   3   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   ]   =   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   +   +   ]   =   2   4   0   |   u   >   >   1   8   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   ]   =   1   2   8   |   u   >   >   1   2   &   6   3   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   ]   =   1   2   8   |   u   >   >   6   &   6   3   ;   h   e   a   p   [   o   u   t   I   d   x   +   +   ]   =   1   2   8   |   u   &   6   3   ;   i   +   +   }   }   h   e   a   p   [   o   u   t   I   d   x   ]   =   0   ;   r   e   t   u   r   n       o   u   t   I   d   x   -   s   t   a   r   t   I   d   x   }   ;   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   )   ;   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       _   _   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   )   =   >   {   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   v   a   l   u   e   >   >   2   ]   ;   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   )   {   s   t   r   =   U   T   F   8   T   o   S   t   r   i   n   g   (   p   a   y   l   o   a   d   ,   l   e   n   g   t   h   ,   t   r   u   e   )   }   e   l   s   e   {   s   t   r   =   "   "   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   g   t   h   ;   +   +   i   )   {   s   t   r   +   =   S   t   r   i   n   g   .   f   r   o   m   C   h   a   r   C   o   d   e   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   [   p   a   y   l   o   a   d   +   i   ]   )   }   }   _   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   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   b   a   s   e   >   >   2   ]   =   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   "   )   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   [   p   t   r   +   i   ]   =   c   h   a   r   C   o   d   e   }   }   }   e   l   s   e   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   .   s   e   t   (   v   a   l   u   e   ,   p   t   r   )   }   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   }   ,   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   =   g   l   o   b   a   l   T   h   i   s   .   T   e   x   t   D   e   c   o   d   e   r   ?   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   ,   i   g   n   o   r   e   N   u   l   )   =   >   {   v   a   r       i   d   x   =   p   t   r   >   >   1   ;   v   a   r       e   n   d   I   d   x   =   f   i   n   d   S   t   r   i   n   g   E   n   d   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   1   6   )   ,   i   d   x   ,   m   a   x   B   y   t   e   s   T   o   R   e   a   d   /   2   ,   i   g   n   o   r   e   N   u   l   )   ;   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   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   1   6   )   .   s   l   i   c   e   (   i   d   x   ,   e   n   d   I   d   x   )   )   ;   v   a   r       s   t   r   =   "   "   ;   f   o   r   (   v   a   r       i   =   i   d   x   ;   i   <   e   n   d   I   d   x   ;   +   +   i   )   {   v   a   r       c   o   d   e   U   n   i   t   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   1   6   )   [   i   ]   ;   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   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   1   6   )   [   o   u   t   P   t   r   >   >   1   ]   =   c   o   d   e   U   n   i   t   ;   o   u   t   P   t   r   +   =   2   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   1   6   )   [   o   u   t   P   t   r   >   >   1   ]   =   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   ,   i   g   n   o   r   e   N   u   l   )   =   >   {   v   a   r       s   t   r   =   "   "   ;   v   a   r       s   t   a   r   t   I   d   x   =   p   t   r   >   >   2   ;   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   a   r   t   I   d   x   +   i   ]   ;   i   f   (   !   u   t   f   3   2   &   &   !   i   g   n   o   r   e   N   u   l   )   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   )   =   >   {   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   +   +   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   o   u   t   P   t   r   >   >   2   ]   =   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   o   u   t   P   t   r   >   >   2   ]   =   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   =   (   r   a   w   T   y   p   e   ,   c   h   a   r   S   i   z   e   ,   n   a   m   e   )   =   >   {   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   ,   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   }   e   l   s   e   {   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   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   v   a   l   u   e   >   >   2   ]   ;   v   a   r       s   t   r   =   d   e   c   o   d   e   S   t   r   i   n   g   (   v   a   l   u   e   +   4   ,   l   e   n   g   t   h   *   c   h   a   r   S   i   z   e   ,   t   r   u   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   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   r   >   >   2   ]   =   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   }   ,   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   =   (   r   a   w   T   y   p   e   ,   n   a   m   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   ,   {   i   s   V   o   i   d   :   t   r   u   e   ,   n   a   m   e   ,   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       _   _   e   m   s   c   r   i   p   t   e   n   _   i   n   i   t   _   m   a   i   n   _   t   h   r   e   a   d   _   j   s   =   t   b   =   >   {   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   i   n   i   t   (   t   b   ,   !   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   O   R   K   E   R   ,   1   ,   !   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   E   B   ,   1   6   7   7   7   2   1   6   ,   f   a   l   s   e   )   ;   P   T   h   r   e   a   d   .   t   h   r   e   a   d   I   n   i   t   T   L   S   (   )   }   ;   v   a   r       _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   m   a   i   l   b   o   x   _   a   w   a   i   t   =   p   t   h   r   e   a   d   _   p   t   r   =   >   {   i   f   (   A   t   o   m   i   c   s   .   w   a   i   t   A   s   y   n   c   )   {   v   a   r       w   a   i   t   =   A   t   o   m   i   c   s   .   w   a   i   t   A   s   y   n   c   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   ,   p   t   h   r   e   a   d   _   p   t   r   >   >   2   ,   p   t   h   r   e   a   d   _   p   t   r   )   ;   w   a   i   t   .   v   a   l   u   e   .   t   h   e   n   (   c   h   e   c   k   M   a   i   l   b   o   x   )   ;   v   a   r       w   a   i   t   i   n   g   A   s   y   n   c   =   p   t   h   r   e   a   d   _   p   t   r   +   1   2   8   ;   A   t   o   m   i   c   s   .   s   t   o   r   e   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   ,   w   a   i   t   i   n   g   A   s   y   n   c   >   >   2   ,   1   )   }   }   ;   v   a   r       c   h   e   c   k   M   a   i   l   b   o   x   =   (   )   =   >   c   a   l   l   U   s   e   r   C   a   l   l   b   a   c   k   (   (   )   =   >   {   v   a   r       p   t   h   r   e   a   d   _   p   t   r   =   _   p   t   h   r   e   a   d   _   s   e   l   f   (   )   ;   i   f   (   p   t   h   r   e   a   d   _   p   t   r   )   {   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   m   a   i   l   b   o   x   _   a   w   a   i   t   (   p   t   h   r   e   a   d   _   p   t   r   )   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   c   h   e   c   k   _   m   a   i   l   b   o   x   (   )   }   }   )   ;   v   a   r       _   _   e   m   s   c   r   i   p   t   e   n   _   n   o   t   i   f   y   _   m   a   i   l   b   o   x   _   p   o   s   t   m   e   s   s   a   g   e   =   (   t   a   r   g   e   t   T   h   r   e   a   d   ,   c   u   r   r   T   h   r   e   a   d   I   d   )   =   >   {   i   f   (   t   a   r   g   e   t   T   h   r   e   a   d   =   =   c   u   r   r   T   h   r   e   a   d   I   d   )   {   s   e   t   T   i   m   e   o   u   t   (   c   h   e   c   k   M   a   i   l   b   o   x   )   }   e   l   s   e       i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   {   p   o   s   t   M   e   s   s   a   g   e   (   {   t   a   r   g   e   t   T   h   r   e   a   d   ,   c   m   d   :   "   c   h   e   c   k   M   a   i   l   b   o   x   "   }   )   }   e   l   s   e   {   v   a   r       w   o   r   k   e   r   =   P   T   h   r   e   a   d   .   p   t   h   r   e   a   d   s   [   t   a   r   g   e   t   T   h   r   e   a   d   ]   ;   i   f   (   !   w   o   r   k   e   r   )   {   r   e   t   u   r   n   }   w   o   r   k   e   r   .   p   o   s   t   M   e   s   s   a   g   e   (   {   c   m   d   :   "   c   h   e   c   k   M   a   i   l   b   o   x   "   }   )   }   }   ;   v   a   r       p   r   o   x   i   e   d   J   S   C   a   l   l   A   r   g   s   =   [   ]   ;   v   a   r       _   _   e   m   s   c   r   i   p   t   e   n   _   r   e   c   e   i   v   e   _   o   n   _   m   a   i   n   _   t   h   r   e   a   d   _   j   s   =   (   f   u   n   c   I   n   d   e   x   ,   e   m   A   s   m   A   d   d   r   ,   c   a   l   l   i   n   g   T   h   r   e   a   d   ,   n   u   m   C   a   l   l   A   r   g   s   ,   a   r   g   s   )   =   >   {   n   u   m   C   a   l   l   A   r   g   s   /   =   2   ;   p   r   o   x   i   e   d   J   S   C   a   l   l   A   r   g   s   .   l   e   n   g   t   h   =   n   u   m   C   a   l   l   A   r   g   s   ;   v   a   r       b   =   a   r   g   s   >   >   3   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   u   m   C   a   l   l   A   r   g   s   ;   i   +   +   )   {   i   f   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   6   4   )   [   b   +   2   *   i   ]   )   {   p   r   o   x   i   e   d   J   S   C   a   l   l   A   r   g   s   [   i   ]   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   6   4   )   [   b   +   2   *   i   +   1   ]   }   e   l   s   e   {   p   r   o   x   i   e   d   J   S   C   a   l   l   A   r   g   s   [   i   ]   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   6   4   )   [   b   +   2   *   i   +   1   ]   }   }   v   a   r       f   u   n   c   =   e   m   A   s   m   A   d   d   r   ?   A   S   M   _   C   O   N   S   T   S   [   e   m   A   s   m   A   d   d   r   ]   :   p   r   o   x   i   e   d   F   u   n   c   t   i   o   n   T   a   b   l   e   [   f   u   n   c   I   n   d   e   x   ]   ;   P   T   h   r   e   a   d   .   c   u   r   r   e   n   t   P   r   o   x   i   e   d   O   p   e   r   a   t   i   o   n   C   a   l   l   e   r   T   h   r   e   a   d   =   c   a   l   l   i   n   g   T   h   r   e   a   d   ;   v   a   r       r   t   n   =   f   u   n   c   (   .   .   .   p   r   o   x   i   e   d   J   S   C   a   l   l   A   r   g   s   )   ;   P   T   h   r   e   a   d   .   c   u   r   r   e   n   t   P   r   o   x   i   e   d   O   p   e   r   a   t   i   o   n   C   a   l   l   e   r   T   h   r   e   a   d   =   0   ;   r   e   t   u   r   n       r   t   n   }   ;   v   a   r       _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   c   l   e   a   n   u   p   =   t   h   r   e   a   d   =   >   {   i   f   (   !   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   c   l   e   a   n   u   p   T   h   r   e   a   d   (   t   h   r   e   a   d   )   ;   e   l   s   e       p   o   s   t   M   e   s   s   a   g   e   (   {   c   m   d   :   "   c   l   e   a   n   u   p   T   h   r   e   a   d   "   ,   t   h   r   e   a   d   }   )   }   ;   v   a   r       _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   s   e   t   _   s   t   r   o   n   g   r   e   f   =   t   h   r   e   a   d   =   >   {   }   ;   v   a   r       e   m   v   a   l   _   m   e   t   h   o   d   C   a   l   l   e   r   s   =   [   ]   ;   v   a   r       e   m   v   a   l   _   a   d   d   M   e   t   h   o   d   C   a   l   l   e   r   =   c   a   l   l   e   r   =   >   {   v   a   r       i   d   =   e   m   v   a   l   _   m   e   t   h   o   d   C   a   l   l   e   r   s   .   l   e   n   g   t   h   ;   e   m   v   a   l   _   m   e   t   h   o   d   C   a   l   l   e   r   s   .   p   u   s   h   (   c   a   l   l   e   r   )   ;   r   e   t   u   r   n       i   d   }   ;   v   a   r       r   e   q   u   i   r   e   R   e   g   i   s   t   e   r   e   d   T   y   p   e   =   (   r   a   w   T   y   p   e   ,   h   u   m   a   n   N   a   m   e   )   =   >   {   v   a   r       i   m   p   l   =   r   e   g   i   s   t   e   r   e   d   T   y   p   e   s   [   r   a   w   T   y   p   e   ]   ;   i   f   (   u   n   d   e   f   i   n   e   d   =   =   =   i   m   p   l   )   {   t   h   r   o   w   B   i   n   d   i   n   g   E   r   r   o   r   (   `   $   {   h   u   m   a   n   N   a   m   e   }       h   a   s       u   n   k   n   o   w   n       t   y   p   e       $   {   g   e   t   T   y   p   e   N   a   m   e   (   r   a   w   T   y   p   e   )   }   `   )   }   r   e   t   u   r   n       i   m   p   l   }   ;   v   a   r       e   m   v   a   l   _   l   o   o   k   u   p   T   y   p   e   s   =   (   a   r   g   C   o   u   n   t   ,   a   r   g   T   y   p   e   s   )   =   >   {   v   a   r       a   =   n   e   w       A   r   r   a   y   (   a   r   g   C   o   u   n   t   )   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   a   r   g   C   o   u   n   t   ;   +   +   i   )   {   a   [   i   ]   =   r   e   q   u   i   r   e   R   e   g   i   s   t   e   r   e   d   T   y   p   e   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   a   r   g   T   y   p   e   s   +   i   *   4   >   >   2   ]   ,   `   p   a   r   a   m   e   t   e   r       $   {   i   }   `   )   }   r   e   t   u   r   n       a   }   ;   v   a   r       e   m   v   a   l   _   r   e   t   u   r   n   V   a   l   u   e   =   (   t   o   R   e   t   u   r   n   W   i   r   e   ,   d   e   s   t   r   u   c   t   o   r   s   R   e   f   ,   h   a   n   d   l   e   )   =   >   {   v   a   r       d   e   s   t   r   u   c   t   o   r   s   =   [   ]   ;   v   a   r       r   e   s   u   l   t   =   t   o   R   e   t   u   r   n   W   i   r   e   (   d   e   s   t   r   u   c   t   o   r   s   ,   h   a   n   d   l   e   )   ;   i   f   (   d   e   s   t   r   u   c   t   o   r   s   .   l   e   n   g   t   h   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   d   e   s   t   r   u   c   t   o   r   s   R   e   f   >   >   2   ]   =   E   m   v   a   l   .   t   o   H   a   n   d   l   e   (   d   e   s   t   r   u   c   t   o   r   s   )   }   r   e   t   u   r   n       r   e   s   u   l   t   }   ;   v   a   r       e   m   v   a   l   _   s   y   m   b   o   l   s   =   {   }   ;   v   a   r       g   e   t   S   t   r   i   n   g   O   r   S   y   m   b   o   l   =   a   d   d   r   e   s   s   =   >   {   v   a   r       s   y   m   b   o   l   =   e   m   v   a   l   _   s   y   m   b   o   l   s   [   a   d   d   r   e   s   s   ]   ;   i   f   (   s   y   m   b   o   l   =   =   =   u   n   d   e   f   i   n   e   d   )   {   r   e   t   u   r   n       A   s   c   i   i   T   o   S   t   r   i   n   g   (   a   d   d   r   e   s   s   )   }   r   e   t   u   r   n       s   y   m   b   o   l   }   ;   v   a   r       _   _   e   m   v   a   l   _   c   r   e   a   t   e   _   i   n   v   o   k   e   r   =   (   a   r   g   C   o   u   n   t   ,   a   r   g   T   y   p   e   s   P   t   r   ,   k   i   n   d   )   =   >   {   v   a   r       G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   =   8   ;   v   a   r   [   r   e   t   T   y   p   e   ,   .   .   .   a   r   g   T   y   p   e   s   ]   =   e   m   v   a   l   _   l   o   o   k   u   p   T   y   p   e   s   (   a   r   g   C   o   u   n   t   ,   a   r   g   T   y   p   e   s   P   t   r   )   ;   v   a   r       t   o   R   e   t   u   r   n   W   i   r   e   =   r   e   t   T   y   p   e   .   t   o   W   i   r   e   T   y   p   e   .   b   i   n   d   (   r   e   t   T   y   p   e   )   ;   v   a   r       a   r   g   F   r   o   m   P   t   r   =   a   r   g   T   y   p   e   s   .   m   a   p   (   t   y   p   e   =   >   t   y   p   e   .   r   e   a   d   V   a   l   u   e   F   r   o   m   P   o   i   n   t   e   r   .   b   i   n   d   (   t   y   p   e   )   )   ;   a   r   g   C   o   u   n   t   -   -   ;   v   a   r       c   a   p   t   u   r   e   s   =   {   t   o   V   a   l   u   e   :   E   m   v   a   l   .   t   o   V   a   l   u   e   }   ;   v   a   r       a   r   g   s   =   a   r   g   F   r   o   m   P   t   r   .   m   a   p   (   (   a   r   g   F   r   o   m   P   t   r   ,   i   )   =   >   {   v   a   r       c   a   p   t   u   r   e   N   a   m   e   =   `   a   r   g   F   r   o   m   P   t   r   $   {   i   }   `   ;   c   a   p   t   u   r   e   s   [   c   a   p   t   u   r   e   N   a   m   e   ]   =   a   r   g   F   r   o   m   P   t   r   ;   r   e   t   u   r   n   `   $   {   c   a   p   t   u   r   e   N   a   m   e   }   (   a   r   g   s   $   {   i   ?   "   +   "   +   i   *   G   e   n   e   r   i   c   W   i   r   e   T   y   p   e   S   i   z   e   :   "   "   }   )   `   }   )   ;   v   a   r       f   u   n   c   t   i   o   n   B   o   d   y   ;   s   w   i   t   c   h   (   k   i   n   d   )   {   c   a   s   e       0   :   f   u   n   c   t   i   o   n   B   o   d   y   =   "   t   o   V   a   l   u   e   (   h   a   n   d   l   e   )   "   ;   b   r   e   a   k   ;   c   a   s   e       2   :   f   u   n   c   t   i   o   n   B   o   d   y   =   "   n   e   w       (   t   o   V   a   l   u   e   (   h   a   n   d   l   e   )   )   "   ;   b   r   e   a   k   ;   c   a   s   e       3   :   f   u   n   c   t   i   o   n   B   o   d   y   =   "   "   ;   b   r   e   a   k   ;   c   a   s   e       1   :   c   a   p   t   u   r   e   s   [   "   g   e   t   S   t   r   i   n   g   O   r   S   y   m   b   o   l   "   ]   =   g   e   t   S   t   r   i   n   g   O   r   S   y   m   b   o   l   ;   f   u   n   c   t   i   o   n   B   o   d   y   =   "   t   o   V   a   l   u   e   (   h   a   n   d   l   e   )   [   g   e   t   S   t   r   i   n   g   O   r   S   y   m   b   o   l   (   m   e   t   h   o   d   N   a   m   e   )   ]   "   ;   b   r   e   a   k   }   f   u   n   c   t   i   o   n   B   o   d   y   +   =   `   (   $   {   a   r   g   s   }   )   `   ;   i   f   (   !   r   e   t   T   y   p   e   .   i   s   V   o   i   d   )   {   c   a   p   t   u   r   e   s   [   "   t   o   R   e   t   u   r   n   W   i   r   e   "   ]   =   t   o   R   e   t   u   r   n   W   i   r   e   ;   c   a   p   t   u   r   e   s   [   "   e   m   v   a   l   _   r   e   t   u   r   n   V   a   l   u   e   "   ]   =   e   m   v   a   l   _   r   e   t   u   r   n   V   a   l   u   e   ;   f   u   n   c   t   i   o   n   B   o   d   y   =   `   r   e   t   u   r   n       e   m   v   a   l   _   r   e   t   u   r   n   V   a   l   u   e   (   t   o   R   e   t   u   r   n   W   i   r   e   ,       d   e   s   t   r   u   c   t   o   r   s   R   e   f   ,       $   {   f   u   n   c   t   i   o   n   B   o   d   y   }   )   `   }   f   u   n   c   t   i   o   n   B   o   d   y   =   `   r   e   t   u   r   n       f   u   n   c   t   i   o   n       (   h   a   n   d   l   e   ,       m   e   t   h   o   d   N   a   m   e   ,       d   e   s   t   r   u   c   t   o   r   s   R   e   f   ,       a   r   g   s   )       {   \   n           $   {   f   u   n   c   t   i   o   n   B   o   d   y   }   \   n           }   `   ;   v   a   r       i   n   v   o   k   e   r   F   u   n   c   t   i   o   n   =   n   e   w       F   u   n   c   t   i   o   n   (   O   b   j   e   c   t   .   k   e   y   s   (   c   a   p   t   u   r   e   s   )   ,   f   u   n   c   t   i   o   n   B   o   d   y   )   (   .   .   .   O   b   j   e   c   t   .   v   a   l   u   e   s   (   c   a   p   t   u   r   e   s   )   )   ;   v   a   r       f   u   n   c   t   i   o   n   N   a   m   e   =   `   m   e   t   h   o   d   C   a   l   l   e   r   <   (   $   {   a   r   g   T   y   p   e   s   .   m   a   p   (   t   =   >   t   .   n   a   m   e   )   }   )       =   >       $   {   r   e   t   T   y   p   e   .   n   a   m   e   }   >   `   ;   r   e   t   u   r   n       e   m   v   a   l   _   a   d   d   M   e   t   h   o   d   C   a   l   l   e   r   (   c   r   e   a   t   e   N   a   m   e   d   F   u   n   c   t   i   o   n   (   f   u   n   c   t   i   o   n   N   a   m   e   ,   i   n   v   o   k   e   r   F   u   n   c   t   i   o   n   )   )   }   ;   v   a   r       _   _   e   m   v   a   l   _   g   e   t   _   p   r   o   p   e   r   t   y   =   (   h   a   n   d   l   e   ,   k   e   y   )   =   >   {   h   a   n   d   l   e   =   E   m   v   a   l   .   t   o   V   a   l   u   e   (   h   a   n   d   l   e   )   ;   k   e   y   =   E   m   v   a   l   .   t   o   V   a   l   u   e   (   k   e   y   )   ;   r   e   t   u   r   n       E   m   v   a   l   .   t   o   H   a   n   d   l   e   (   h   a   n   d   l   e   [   k   e   y   ]   )   }   ;   v   a   r       _   _   e   m   v   a   l   _   i   n   c   r   e   f   =   h   a   n   d   l   e   =   >   {   i   f   (   h   a   n   d   l   e   >   9   )   {   e   m   v   a   l   _   h   a   n   d   l   e   s   [   h   a   n   d   l   e   +   1   ]   +   =   1   }   }   ;   v   a   r       _   _   e   m   v   a   l   _   i   n   v   o   k   e   =   (   c   a   l   l   e   r   ,   h   a   n   d   l   e   ,   m   e   t   h   o   d   N   a   m   e   ,   d   e   s   t   r   u   c   t   o   r   s   R   e   f   ,   a   r   g   s   )   =   >   e   m   v   a   l   _   m   e   t   h   o   d   C   a   l   l   e   r   s   [   c   a   l   l   e   r   ]   (   h   a   n   d   l   e   ,   m   e   t   h   o   d   N   a   m   e   ,   d   e   s   t   r   u   c   t   o   r   s   R   e   f   ,   a   r   g   s   )   ;   v   a   r       _   _   e   m   v   a   l   _   n   e   w   _   c   s   t   r   i   n   g   =   v   =   >   E   m   v   a   l   .   t   o   H   a   n   d   l   e   (   g   e   t   S   t   r   i   n   g   O   r   S   y   m   b   o   l   (   v   )   )   ;   v   a   r       _   _   e   m   v   a   l   _   r   u   n   _   d   e   s   t   r   u   c   t   o   r   s   =   h   a   n   d   l   e   =   >   {   v   a   r       d   e   s   t   r   u   c   t   o   r   s   =   E   m   v   a   l   .   t   o   V   a   l   u   e   (   h   a   n   d   l   e   )   ;   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   )   ;   _   _   e   m   v   a   l   _   d   e   c   r   e   f   (   h   a   n   d   l   e   )   }   ;   v   a   r       _   _   t   z   s   e   t   _   j   s   =   (   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   )   =   >   {   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   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   t   i   m   e   z   o   n   e   >   >   2   ]   =   s   t   d   T   i   m   e   z   o   n   e   O   f   f   s   e   t   *   6   0   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   d   a   y   l   i   g   h   t   >   >   2   ]   =   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       _   _   w   a   s   m   f   s   _   c   o   p   y   _   p   r   e   l   o   a   d   e   d   _   f   i   l   e   _   d   a   t   a   =   (   i   n   d   e   x   ,   b   u   f   f   e   r   )   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   .   s   e   t   (   w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   F   i   l   e   s   [   i   n   d   e   x   ]   .   f   i   l   e   D   a   t   a   ,   b   u   f   f   e   r   )   ;   v   a   r       w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   D   i   r   s   =   [   ]   ;   v   a   r       _   _   w   a   s   m   f   s   _   g   e   t   _   n   u   m   _   p   r   e   l   o   a   d   e   d   _   d   i   r   s   =   (   )   =   >   w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   D   i   r   s   .   l   e   n   g   t   h   ;   v   a   r       w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   F   i   l   e   s   =   [   ]   ;   v   a   r       w   a   s   m   F   S   P   r   e   l   o   a   d   i   n   g   F   l   u   s   h   e   d   =   f   a   l   s   e   ;   v   a   r       _   _   w   a   s   m   f   s   _   g   e   t   _   n   u   m   _   p   r   e   l   o   a   d   e   d   _   f   i   l   e   s   =   (   )   =   >   {   w   a   s   m   F   S   P   r   e   l   o   a   d   i   n   g   F   l   u   s   h   e   d   =   t   r   u   e   ;   r   e   t   u   r   n       w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   F   i   l   e   s   .   l   e   n   g   t   h   }   ;   v   a   r       _   _   w   a   s   m   f   s   _   g   e   t   _   p   r   e   l   o   a   d   e   d   _   c   h   i   l   d   _   p   a   t   h   =   (   i   n   d   e   x   ,   c   h   i   l   d   N   a   m   e   B   u   f   f   e   r   )   =   >   {   v   a   r       s   =   w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   D   i   r   s   [   i   n   d   e   x   ]   .   c   h   i   l   d   N   a   m   e   ;   v   a   r       l   e   n   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   s   )   +   1   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   s   ,   c   h   i   l   d   N   a   m   e   B   u   f   f   e   r   ,   l   e   n   )   }   ;   v   a   r       _   _   w   a   s   m   f   s   _   g   e   t   _   p   r   e   l   o   a   d   e   d   _   f   i   l   e   _   m   o   d   e   =   i   n   d   e   x   =   >   w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   F   i   l   e   s   [   i   n   d   e   x   ]   .   m   o   d   e   ;   v   a   r       _   _   w   a   s   m   f   s   _   g   e   t   _   p   r   e   l   o   a   d   e   d   _   f   i   l   e   _   s   i   z   e   =   i   n   d   e   x   =   >   w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   F   i   l   e   s   [   i   n   d   e   x   ]   .   f   i   l   e   D   a   t   a   .   l   e   n   g   t   h   ;   v   a   r       _   _   w   a   s   m   f   s   _   g   e   t   _   p   r   e   l   o   a   d   e   d   _   p   a   r   e   n   t   _   p   a   t   h   =   (   i   n   d   e   x   ,   p   a   r   e   n   t   P   a   t   h   B   u   f   f   e   r   )   =   >   {   v   a   r       s   =   w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   D   i   r   s   [   i   n   d   e   x   ]   .   p   a   r   e   n   t   P   a   t   h   ;   v   a   r       l   e   n   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   s   )   +   1   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   s   ,   p   a   r   e   n   t   P   a   t   h   B   u   f   f   e   r   ,   l   e   n   )   }   ;   v   a   r       _   _   w   a   s   m   f   s   _   g   e   t   _   p   r   e   l   o   a   d   e   d   _   p   a   t   h   _   n   a   m   e   =   (   i   n   d   e   x   ,   f   i   l   e   N   a   m   e   B   u   f   f   e   r   )   =   >   {   v   a   r       s   =   w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   F   i   l   e   s   [   i   n   d   e   x   ]   .   p   a   t   h   N   a   m   e   ;   v   a   r       l   e   n   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   s   )   +   1   ;   s   t   r   i   n   g   T   o   U   T   F   8   (   s   ,   f   i   l   e   N   a   m   e   B   u   f   f   e   r   ,   l   e   n   )   }   ;   v   a   r       _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   a   l   l   o   c   _   f   i   l   e   =   (   b   a   c   k   e   n   d   ,   f   i   l   e   )   =   >   w   a   s   m   F   S   $   b   a   c   k   e   n   d   s   [   b   a   c   k   e   n   d   ]   .   a   l   l   o   c   F   i   l   e   (   f   i   l   e   )   ;   v   a   r       _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   f   r   e   e   _   f   i   l   e   =   (   b   a   c   k   e   n   d   ,   f   i   l   e   )   =   >   w   a   s   m   F   S   $   b   a   c   k   e   n   d   s   [   b   a   c   k   e   n   d   ]   .   f   r   e   e   F   i   l   e   (   f   i   l   e   )   ;   v   a   r       _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   g   e   t   _   s   i   z   e   =   (   b   a   c   k   e   n   d   ,   f   i   l   e   )   =   >   w   a   s   m   F   S   $   b   a   c   k   e   n   d   s   [   b   a   c   k   e   n   d   ]   .   g   e   t   S   i   z   e   (   f   i   l   e   )   ;   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       _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   r   e   a   d   (   b   a   c   k   e   n   d   ,   f   i   l   e   ,   b   u   f   f   e   r   ,   l   e   n   g   t   h   ,   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   )   ;   i   f   (   !   w   a   s   m   F   S   $   b   a   c   k   e   n   d   s   [   b   a   c   k   e   n   d   ]   .   r   e   a   d   )   {   r   e   t   u   r   n   -   2   8   }   r   e   t   u   r   n       w   a   s   m   F   S   $   b   a   c   k   e   n   d   s   [   b   a   c   k   e   n   d   ]   .   r   e   a   d   (   f   i   l   e   ,   b   u   f   f   e   r   ,   l   e   n   g   t   h   ,   o   f   f   s   e   t   )   }   f   u   n   c   t   i   o   n       _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   s   e   t   _   s   i   z   e   (   b   a   c   k   e   n   d   ,   f   i   l   e   ,   s   i   z   e   )   {   s   i   z   e   =   b   i   g   i   n   t   T   o   I   5   3   C   h   e   c   k   e   d   (   s   i   z   e   )   ;   r   e   t   u   r   n       w   a   s   m   F   S   $   b   a   c   k   e   n   d   s   [   b   a   c   k   e   n   d   ]   .   s   e   t   S   i   z   e   (   f   i   l   e   ,   s   i   z   e   )   }   f   u   n   c   t   i   o   n       _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   w   r   i   t   e   (   b   a   c   k   e   n   d   ,   f   i   l   e   ,   b   u   f   f   e   r   ,   l   e   n   g   t   h   ,   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   )   ;   i   f   (   !   w   a   s   m   F   S   $   b   a   c   k   e   n   d   s   [   b   a   c   k   e   n   d   ]   .   w   r   i   t   e   )   {   r   e   t   u   r   n   -   2   8   }   r   e   t   u   r   n       w   a   s   m   F   S   $   b   a   c   k   e   n   d   s   [   b   a   c   k   e   n   d   ]   .   w   r   i   t   e   (   f   i   l   e   ,   b   u   f   f   e   r   ,   l   e   n   g   t   h   ,   o   f   f   s   e   t   )   }   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       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   (   g   l   o   b   a   l   T   h   i   s   .   w   i   n   d   o   w   ?   .   p   r   o   m   p   t   )   {   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       _   _   w   a   s   m   f   s   _   s   t   d   i   n   _   g   e   t   _   c   h   a   r   =   (   )   =   >   {   v   a   r       c   =   F   S   _   s   t   d   i   n   _   g   e   t   C   h   a   r   (   )   ;   i   f   (   t   y   p   e   o   f       c   =   =   =   "   n   u   m   b   e   r   "   )   {   r   e   t   u   r   n       c   }   r   e   t   u   r   n   -   1   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   n   o   w   ;   i   f   (   g   l   o   b   a   l   T   h   i   s   .   p   e   r   f   o   r   m   a   n   c   e   &   &   p   e   r   f   o   r   m   a   n   c   e   .   n   o   w   )   {   _   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   .   t   i   m   e   O   r   i   g   i   n   +   p   e   r   f   o   r   m   a   n   c   e   .   n   o   w   (   )   }   e   l   s   e   {   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   n   o   w   =   D   a   t   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   =   !   !   g   l   o   b   a   l   T   h   i   s   .   p   e   r   f   o   r   m   a   n   c   e   ?   .   n   o   w   ;   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   )   ;   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   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   6   4   )   [   p   t   i   m   e   >   >   3   ]   =   B   i   g   I   n   t   (   n   s   e   c   )   ;   r   e   t   u   r   n       0   }   f   u   n   c   t   i   o   n       g   e   t   F   u   l   l   s   c   r   e   e   n   E   l   e   m   e   n   t   (   )   {   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   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   .   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   |   |   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       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   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   u   s   h   (   )   ;   r   e   t   u   r   n       s   e   t   T   i   m   e   o   u   t   (   (   )   =   >   {   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   o   p   (   )   ;   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       p   r   e   l   o   a   d   P   l   u   g   i   n   s   =   [   ]   ;   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   "   ]   =   a   s   y   n   c       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   )   {   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   )   ;   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   )   =   >   {   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   )   ;   r   e   s   o   l   v   e   (   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   `   )   ;   r   e   j   e   c   t   (   )   }   ;   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   "   ]   =   a   s   y   n   c       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   )   {   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   )   =   >   {   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   ;   r   e   s   o   l   v   e   (   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   }   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   )   {   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   )   ;   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   (   g   e   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   :   a   b   o   r   t   (   "   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   :   a   b   o   r   t   (   "   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   S   D   L   .   s   c   r   e   e   n   >   >   2   ]   ;   f   l   a   g   s   =   f   l   a   g   s   |   8   3   8   8   6   0   8   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   S   D   L   .   s   c   r   e   e   n   >   >   2   ]   =   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   S   D   L   .   s   c   r   e   e   n   >   >   2   ]   ;   f   l   a   g   s   =   f   l   a   g   s   &   ~   8   3   8   8   6   0   8   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   S   D   L   .   s   c   r   e   e   n   >   >   2   ]   =   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   (   g   e   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   i   b   L   i   s   t   >   >   2   ]   ;   i   f   (   p   a   r   a   m   =   =   1   2   3   2   1   )   {   v   a   r       a   l   p   h   a   S   i   z   e   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   2   ]   ;   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   2   ]   ;   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   2   ]   ;   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   2   ]   ;   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   2   ]   ;   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   i   b   L   i   s   t   +   4   >   >   2   ]   ;   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   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   n   u   m   C   o   n   f   i   g   s   >   >   2   ]   =   1   }   i   f   (   c   o   n   f   i   g   &   &   c   o   n   f   i   g   _   s   i   z   e   >   0   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   c   o   n   f   i   g   >   >   2   ]   =   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   }   }   ;   f   u   n   c   t   i   o   n       _   e   g   l   B   i   n   d   A   P   I   (   a   p   i   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   2   ,   0   ,   1   ,   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   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   3   ,   0   ,   1   ,   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   )   ;   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   =   >   {   }   ,   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   )   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   b   u   f   f   e   r   s   +   i   *   4   >   >   2   ]   =   i   d   }   }   ,   M   A   X   _   T   E   M   P   _   B   U   F   F   E   R   _   S   I   Z   E   :   3   3   1   7   7   6   0   0   ,   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   ?   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   l   e   n   g   t   h   +   i   *   4   >   >   2   ]   :   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   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   r   i   n   g   +   i   *   4   >   >   2   ]   ,   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   .   s   u   b   a   r   r   a   y   (   c   b   .   p   t   r   ,   c   b   .   p   t   r   +   s   i   z   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   .   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   =   _   m   a   l   l   o   c   (   8   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   h   a   n   d   l   e   +   4   >   >   2   ]   =   _   p   t   h   r   e   a   d   _   s   e   l   f   (   )   ;   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   }   _   f   r   e   e   (   G   L   .   c   o   n   t   e   x   t   s   [   c   o   n   t   e   x   t   H   a   n   d   l   e   ]   .   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   ]   =   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   "   )   }   f   o   r   (   v   a   r       e   x   t       o   f       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   )   )   {   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   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   4   ,   0   ,   1   ,   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   )   ;   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   c   o   n   t   e   x   t   A   t   t   r   i   b   s   >   >   2   ]   ;   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   c   o   n   t   e   x   t   A   t   t   r   i   b   s   +   4   >   >   2   ]   }   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   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   5   ,   0   ,   1   ,   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   )   ;   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   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   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   6   ,   0   ,   1   ,   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   )   ;   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   8   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   3   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   8   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   4   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   8   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   5   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   1   2   3   4   4   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   8   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   6   2   0   0   2   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   2   9   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   0   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   4   0   9   6   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   1   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   1   6   7   7   7   2   1   6   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   2   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   4   0   9   6   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   3   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   4   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   5   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   1   2   3   4   4   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   3   7   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   4   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   4   0   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   -   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   4   7   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   4   8   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   5   1   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   1   2   4   3   0   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   5   2   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   4   ;   r   e   t   u   r   n       1   ;   c   a   s   e       1   2   3   5   4   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   >   >   2   ]   =   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   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   7   ,   0   ,   1   ,   n   a   t   i   v   e   D   i   s   p   l   a   y   T   y   p   e   )   ;   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   }   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   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   8   ,   0   ,   1   ,   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   )   ;   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   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   m   a   j   o   r   V   e   r   s   i   o   n   >   >   2   ]   =   1   }   i   f   (   m   i   n   o   r   V   e   r   s   i   o   n   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   m   i   n   o   r   V   e   r   s   i   o   n   >   >   2   ]   =   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   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   9   ,   0   ,   1   ,   d   i   s   p   l   a   y   ,   d   r   a   w   ,   r   e   a   d   ,   c   o   n   t   e   x   t   )   ;   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   }   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   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   1   0   ,   0   ,   1   ,   d   p   y   ,   s   u   r   f   a   c   e   )   ;   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       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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   [   s   i   g   P   t   r   +   +   ]   )   {   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   ?   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   b   u   f   >   >   2   ]   :   c   h   =   =   1   0   6   ?   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   6   4   )   [   b   u   f   >   >   3   ]   :   c   h   =   =   1   0   5   ?   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   b   u   f   >   >   2   ]   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   6   4   )   [   b   u   f   >   >   3   ]   )   ;   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   )   }   ;   v   a   r       _   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   )   =   >   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       _   e   m   s   c   r   i   p   t   e   n   _   a   s   m   _   c   o   n   s   t   _   p   t   r   =   (   c   o   d   e   ,   s   i   g   P   t   r   ,   a   r   g   b   u   f   )   =   >   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       _   e   m   s   c   r   i   p   t   e   n   _   c   h   e   c   k   _   b   l   o   c   k   i   n   g   _   a   l   l   o   w   e   d   =   (   )   =   >   {   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   e   r   r   =   s   t   r   =   >   e   r   r   (   U   T   F   8   T   o   S   t   r   i   n   g   (   s   t   r   )   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   e   x   i   t   _   w   i   t   h   _   l   i   v   e   _   r   u   n   t   i   m   e   =   (   )   =   >   {   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   u   s   h   (   )   ;   t   h   r   o   w   "   u   n   w   i   n   d   "   }   ;   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   =   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   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   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   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   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   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   )   =   >   {   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   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   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   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   )   =   >   {   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   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   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   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   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   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   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   O   E   S   =   _   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   ;   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   =   (   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   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   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   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   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   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   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   )   =   >   {   i   f   (   t   r   u   e   )   {   i   f   (   d   a   t   a   &   &   s   i   z   e   )   {   G   L   c   t   x   .   b   u   f   f   e   r   D   a   t   a   (   t   a   r   g   e   t   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   ,   u   s   a   g   e   ,   d   a   t   a   ,   s   i   z   e   )   }   e   l   s   e   {   G   L   c   t   x   .   b   u   f   f   e   r   D   a   t   a   (   t   a   r   g   e   t   ,   s   i   z   e   ,   u   s   a   g   e   )   }   r   e   t   u   r   n   }   }   ;   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   =   (   t   a   r   g   e   t   ,   o   f   f   s   e   t   ,   s   i   z   e   ,   d   a   t   a   )   =   >   {   i   f   (   t   r   u   e   )   {   s   i   z   e   &   &   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   ,   d   a   t   a   ,   s   i   z   e   )   ;   r   e   t   u   r   n   }   }   ;   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   =   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   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   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   v   =   (   b   u   f   f   e   r   ,   d   r   a   w   b   u   f   f   e   r   ,   v   a   l   u   e   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   i   v   =   (   b   u   f   f   e   r   ,   d   r   a   w   b   u   f   f   e   r   ,   v   a   l   u   e   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   u   i   v   =   (   b   u   f   f   e   r   ,   d   r   a   w   b   u   f   f   e   r   ,   v   a   l   u   e   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   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   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   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   )   =   >   {   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   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   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   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   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   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   ,   d   a   t   a   ,   i   m   a   g   e   S   i   z   e   )   ;   r   e   t   u   r   n   }   }   ;   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   =   (   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   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   ,   d   a   t   a   ,   i   m   a   g   e   S   i   z   e   )   ;   r   e   t   u   r   n   }   }   ;   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   =   (   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   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   )   =   >   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   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   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   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   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   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   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   D   e   l   e   t   e   B   u   f   f   e   r   s   =   (   n   ,   b   u   f   f   e   r   s   )   =   >   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   b   u   f   f   e   r   s   +   i   *   4   >   >   2   ]   ;   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   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   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   +   +   i   )   {   v   a   r       i   d   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   f   r   a   m   e   b   u   f   f   e   r   s   +   i   *   4   >   >   2   ]   ;   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   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   Q   u   e   r   i   e   s   =   (   n   ,   i   d   s   )   =   >   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   i   d   s   +   i   *   4   >   >   2   ]   ;   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   E   X   T   =   (   n   ,   i   d   s   )   =   >   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   i   d   s   +   i   *   4   >   >   2   ]   ;   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   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   )   =   >   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   r   e   n   d   e   r   b   u   f   f   e   r   s   +   i   *   4   >   >   2   ]   ;   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   S   a   m   p   l   e   r   s   =   (   n   ,   s   a   m   p   l   e   r   s   )   =   >   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   s   a   m   p   l   e   r   s   +   i   *   4   >   >   2   ]   ;   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   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   y   n   c   =   i   d   =   >   {   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   T   e   x   t   u   r   e   s   =   (   n   ,   t   e   x   t   u   r   e   s   )   =   >   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   t   e   x   t   u   r   e   s   +   i   *   4   >   >   2   ]   ;   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   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   =   (   n   ,   i   d   s   )   =   >   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   i   d   s   +   i   *   4   >   >   2   ]   ;   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   V   e   r   t   e   x   A   r   r   a   y   s   =   (   n   ,   v   a   o   s   )   =   >   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   n   ;   i   +   +   )   {   v   a   r       i   d   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   o   s   +   i   *   4   >   >   2   ]   ;   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   O   E   S   =   _   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   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   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   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   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   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   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   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   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   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   A   N   G   L   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   ;   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   =   _   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   ;   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   =   _   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   ;   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   =   _   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   ;   v   a   r       t   e   m   p   F   i   x   e   d   L   e   n   g   t   h   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   =   (   n   ,   b   u   f   s   )   =   >   {   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   ]   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   b   u   f   s   +   i   *   4   >   >   2   ]   }   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   E   X   T   =   _   e   m   s   c   r   i   p   t   e   n   _   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   =   _   e   m   s   c   r   i   p   t   e   n   _   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   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       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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   .   s   u   b   a   r   r   a   y   (   i   n   d   i   c   e   s   ,   i   n   d   i   c   e   s   +   s   i   z   e   )   )   ;   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   (   (   g   r   o   w   M   e   m   V   i   e   w   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   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   )   =   >   {   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   A   N   G   L   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   ;   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   =   _   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   ;   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   =   _   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   ;   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   =   _   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   ;   v   a   r       _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   E   l   e   m   e   n   t   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   =   (   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   )   =   >   {   _   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   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   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   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   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   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   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   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   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   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   }   }   ;   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   =   (   t   a   r   g   e   t   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   ,   m   a   p   p   i   n   g   .   m   e   m   +   o   f   f   s   e   t   +   l   e   n   g   t   h   )   )   }   ;   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   =   (   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   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   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   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   G   e   n   B   u   f   f   e   r   s   =   (   n   ,   b   u   f   f   e   r   s   )   =   >   {   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   F   r   a   m   e   b   u   f   f   e   r   s   =   (   n   ,   i   d   s   )   =   >   {   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   Q   u   e   r   i   e   s   =   (   n   ,   i   d   s   )   =   >   {   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   E   X   T   =   (   n   ,   i   d   s   )   =   >   {   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   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   i   d   s   +   i   +   +   *   4   >   >   2   ]   =   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   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   i   d   s   +   i   *   4   >   >   2   ]   =   i   d   }   }   ;   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   =   (   n   ,   r   e   n   d   e   r   b   u   f   f   e   r   s   )   =   >   {   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   S   a   m   p   l   e   r   s   =   (   n   ,   s   a   m   p   l   e   r   s   )   =   >   {   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   T   e   x   t   u   r   e   s   =   (   n   ,   t   e   x   t   u   r   e   s   )   =   >   {   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   r   a   n   s   f   o   r   m   F   e   e   d   b   a   c   k   s   =   (   n   ,   i   d   s   )   =   >   {   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   V   e   r   t   e   x   A   r   r   a   y   s   =   (   n   ,   a   r   r   a   y   s   )   =   >   {   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   O   E   S   =   _   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   ;   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   =   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       _   _   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   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   l   e   n   g   t   h   >   >   2   ]   =   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   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   s   i   z   e   >   >   2   ]   =   i   n   f   o   .   s   i   z   e   ;   i   f   (   t   y   p   e   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   t   y   p   e   >   >   2   ]   =   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   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   )   =   >   _   _   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   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   )   =   >   _   _   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   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   )   =   >   {   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   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   l   e   n   g   t   h   >   >   2   ]   =   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   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   l   e   n   g   t   h   >   >   2   ]   =   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   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   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   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   +   +   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   +   i   *   4   >   >   2   ]   =   r   e   s   u   l   t   [   i   ]   }   }   e   l   s   e   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   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   )   =   >   {   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   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   u   n   i   f   o   r   m   I   n   d   i   c   e   s   +   i   *   4   >   >   2   ]   )   }   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   +   +   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   +   i   *   4   >   >   2   ]   =   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   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   )   =   >   {   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   c   o   u   n   t   >   >   2   ]   =   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   ]   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   s   h   a   d   e   r   s   +   i   *   4   >   >   2   ]   =   i   d   }   }   ;   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   =   (   p   r   o   g   r   a   m   ,   n   a   m   e   )   =   >   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       w   r   i   t   e   I   5   3   T   o   I   6   4   =   (   p   t   r   ,   n   u   m   )   =   >   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   r   >   >   2   ]   =   n   u   m   ;   v   a   r       l   o   w   e   r   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   r   >   >   2   ]   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   r   +   4   >   >   2   ]   =   (   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   :   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   :   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   :   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   +   i   *   4   >   >   2   ]   =   r   e   s   u   l   t   [   i   ]   ;   b   r   e   a   k   ;   c   a   s   e       2   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   +   i   *   4   >   >   2   ]   =   r   e   s   u   l   t   [   i   ]   ;   b   r   e   a   k   ;   c   a   s   e       4   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   p   +   i   ]   =   r   e   s   u   l   t   [   i   ]   ?   1   :   0   ;   b   r   e   a   k   }   }   r   e   t   u   r   n   }   e   l   s   e   {   r   e   t   =   r   e   s   u   l   t   .   n   a   m   e   |   0   }   b   r   e   a   k   }   }   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   >   >   2   ]   =   r   e   t   ;   b   r   e   a   k   ;   c   a   s   e       2   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   >   >   2   ]   =   r   e   t   ;   b   r   e   a   k   ;   c   a   s   e       4   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   p   ]   =   r   e   t   ?   1   :   0   ;   b   r   e   a   k   }   }   ;   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   =   (   n   a   m   e   _   ,   p   )   =   >   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   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   )   =   >   {   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   v   =   (   t   a   r   g   e   t   ,   v   a   l   u   e   ,   d   a   t   a   )   =   >   {   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   d   a   t   a   >   >   2   ]   =   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   o   i   n   t   e   r   v   =   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   E   r   r   o   r   =   (   )   =   >   G   L   c   t   x   .   g   e   t   E   r   r   o   r   (   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   F   l   o   a   t   v   =   (   n   a   m   e   _   ,   p   )   =   >   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   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   )   =   >   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   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   )   =   >   {   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   r   e   s   u   l   t   }   ;   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   )   =   >   {   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   d   a   t   a   >   >   2   ]   =   r   e   t   ;   b   r   e   a   k   ;   c   a   s   e       2   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   d   a   t   a   >   >   2   ]   =   r   e   t   ;   b   r   e   a   k   ;   c   a   s   e       4   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   d   a   t   a   ]   =   r   e   t   ?   1   :   0   ;   b   r   e   a   k   ;   d   e   f   a   u   l   t   :   a   b   o   r   t   (   "   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   )   }   }   ;   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   =   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   d   a   t   a   )   =   >   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   v   =   (   n   a   m   e   _   ,   p   )   =   >   {   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   i   _   v   =   (   t   a   r   g   e   t   ,   i   n   d   e   x   ,   d   a   t   a   )   =   >   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   v   =   (   n   a   m   e   _   ,   p   )   =   >   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   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   )   =   >   {   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   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   +   i   *   4   >   >   2   ]   =   r   e   t   [   i   ]   }   }   ;   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   =   (   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   )   =   >   {   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   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   )   =   >   {   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   ]   )   ;   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   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   l   e   n   g   t   h   >   >   2   ]   =   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   v   =   (   p   r   o   g   r   a   m   ,   p   n   a   m   e   ,   p   )   =   >   {   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   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   >   >   2   ]   =   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   )   }   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   >   >   2   ]   =   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   )   }   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   >   >   2   ]   =   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   )   }   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   >   >   2   ]   =   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   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   >   >   2   ]   =   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   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   )   =   >   {   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   v   E   X   T   =   (   i   d   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   6   4   v   E   X   T   =   _   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   ;   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   =   (   i   d   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   E   X   T   =   _   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   ;   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   =   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   E   X   T   =   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   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   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   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   )   =   >   {   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   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   )   =   >   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   =   (   s   a   m   p   l   e   r   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   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   )   =   >   {   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   ]   )   ;   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   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   l   e   n   g   t   h   >   >   2   ]   =   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   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   )   =   >   {   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   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   r   a   n   g   e   >   >   2   ]   =   r   e   s   u   l   t   .   r   a   n   g   e   M   i   n   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   r   a   n   g   e   +   4   >   >   2   ]   =   r   e   s   u   l   t   .   r   a   n   g   e   M   a   x   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   r   e   c   i   s   i   o   n   >   >   2   ]   =   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   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   )   =   >   {   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   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   l   e   n   g   t   h   >   >   2   ]   =   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   v   =   (   s   h   a   d   e   r   ,   p   n   a   m   e   ,   p   )   =   >   {   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   ]   )   ;   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   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   >   >   2   ]   =   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   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   >   >   2   ]   =   s   o   u   r   c   e   L   e   n   g   t   h   }   e   l   s   e   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   >   >   2   ]   =   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       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   }   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   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   _   )   ;   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   }   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   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   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   )   =   >   {   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   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   l   u   e   s   >   >   2   ]   =   r   e   t   ;   i   f   (   l   e   n   g   t   h   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   l   e   n   g   t   h   >   >   2   ]   =   1   }   }   ;   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   =   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   =   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   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   )   =   >   {   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   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   l   e   n   g   t   h   >   >   2   ]   =   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   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   l   e   n   g   t   h   >   >   2   ]   =   0   }   i   f   (   s   i   z   e   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   s   i   z   e   >   >   2   ]   =   i   n   f   o   .   s   i   z   e   ;   i   f   (   t   y   p   e   )   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   t   y   p   e   >   >   2   ]   =   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   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   )   =   >   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   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   )   =   >   {   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   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   u   n   i   f   o   r   m   N   a   m   e   s   +   i   *   4   >   >   2   ]   )   )   ;   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   +   +   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   u   n   i   f   o   r   m   I   n   d   i   c   e   s   +   i   *   4   >   >   2   ]   =   r   e   s   u   l   t   [   i   ]   }   }   ;   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   }   }   }   }   ;   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   =   (   p   r   o   g   r   a   m   ,   n   a   m   e   )   =   >   {   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   }   }   }   r   e   t   u   r   n   -   1   }   ;   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   ;   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   }   ;   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   d   a   t   a   ;   b   r   e   a   k   ;   c   a   s   e       2   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   +   i   *   4   >   >   2   ]   =   d   a   t   a   [   i   ]   ;   b   r   e   a   k   ;   c   a   s   e       2   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   a   r   a   m   s   +   i   *   4   >   >   2   ]   =   d   a   t   a   [   i   ]   ;   b   r   e   a   k   }   }   }   }   ;   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   =   (   p   r   o   g   r   a   m   ,   l   o   c   a   t   i   o   n   ,   p   a   r   a   m   s   )   =   >   {   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   i   v   =   (   p   r   o   g   r   a   m   ,   l   o   c   a   t   i   o   n   ,   p   a   r   a   m   s   )   =   >   {   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   =   (   p   r   o   g   r   a   m   ,   l   o   c   a   t   i   o   n   ,   p   a   r   a   m   s   )   =   >   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   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   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   d   a   t   a   ;   b   r   e   a   k   ;   c   a   s   e       2   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   d   a   t   a   ;   b   r   e   a   k   ;   c   a   s   e       5   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   =   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   +   i   *   4   >   >   2   ]   =   d   a   t   a   [   i   ]   ;   b   r   e   a   k   ;   c   a   s   e       2   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   a   r   a   m   s   +   i   *   4   >   >   2   ]   =   d   a   t   a   [   i   ]   ;   b   r   e   a   k   ;   c   a   s   e       5   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   +   i   *   4   >   >   2   ]   =   M   a   t   h   .   f   r   o   u   n   d   (   d   a   t   a   [   i   ]   )   ;   b   r   e   a   k   }   }   }   }   ;   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   =   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   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   u   i   v   =   _   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   ;   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   =   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   o   i   n   t   e   r   )   =   >   {   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   "   )   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   o   i   n   t   e   r   >   >   2   ]   =   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   f   v   =   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   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   i   v   =   (   i   n   d   e   x   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   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   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   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   )   =   >   {   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   ]   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   a   c   h   m   e   n   t   s   +   i   *   4   >   >   2   ]   }   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   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   )   =   >   {   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   ]   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   a   c   h   m   e   n   t   s   +   i   *   4   >   >   2   ]   }   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   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   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   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   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   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   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   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   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   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   y   n   c   =   s   y   n   c   =   >   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   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   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   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   O   E   S   =   _   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   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   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   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   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   )   =   >   {   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   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   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   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   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   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   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   )   =   >   {   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   =   (   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   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   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       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       g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   ;   i   f   (   t   y   p   e   =   =   1   )   r   e   t   u   r   n       g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   ;   i   f   (   t   y   p   e   =   =   2   )   r   e   t   u   r   n       g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   1   6   ;   i   f   (   t   y   p   e   =   =   4   )   r   e   t   u   r   n       g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   ;   i   f   (   t   y   p   e   =   =   6   )   r   e   t   u   r   n       g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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       g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   ;   r   e   t   u   r   n       g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   _   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   )   =   >   {   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       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       t   a   r   g   e   t   =   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   )   ;   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   ,   h   e   a   p   ,   t   a   r   g   e   t   )   ;   r   e   t   u   r   n   }   }   ;   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   =   (   )   =   >   {   }   ;   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   =   (   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   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   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   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   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   v   =   (   s   a   m   p   l   e   r   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   v   a   r       p   a   r   a   m   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   ;   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   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   v   =   (   s   a   m   p   l   e   r   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   v   a   r       p   a   r   a   m   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   ;   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   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   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   )   =   >   {   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   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   =   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   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   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   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   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   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   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       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       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   )   ,   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   )   )   }   ;   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   =   (   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   )   =   >   {   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   }   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       i   n   d   e   x   =   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   )   ;   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   ,   h   e   a   p   ,   i   n   d   e   x   )   ;   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   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   )   =   >   {   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   )   ;   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   ,   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   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   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   v   =   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   v   a   r       p   a   r   a   m   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   ;   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   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   v   =   (   t   a   r   g   e   t   ,   p   n   a   m   e   ,   p   a   r   a   m   s   )   =   >   {   v   a   r       p   a   r   a   m   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   a   r   a   m   s   >   >   2   ]   ;   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   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   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   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   )   =   >   {   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   }   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   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   ,   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   )   )   ;   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   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   )   =   >   {   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   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   )   =   >   {   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   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   a   r   y   i   n   g   s   +   i   *   4   >   >   2   ]   )   )   ;   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   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   c   o   u   n   t   &   &   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   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   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   c   o   u   n   t   &   &   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   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   =   (   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   c   o   u   n   t   &   &   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   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   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   c   o   u   n   t   &   &   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   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   =   (   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   c   o   u   n   t   &   &   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   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   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   c   o   u   n   t   &   &   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   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   =   (   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   c   o   u   n   t   &   &   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   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   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   c   o   u   n   t   &   &   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   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   =   (   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   v   =   (   l   o   c   a   t   i   o   n   ,   c   o   u   n   t   ,   v   a   l   u   e   )   =   >   {   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   )   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   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   )   =   >   {   c   o   u   n   t   &   &   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   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   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   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   )   =   >   {   c   o   u   n   t   &   &   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   ,   v   a   l   u   e   >   >   2   ,   c   o   u   n   t   *   9   )   }   ;   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   =   (   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   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   )   =   >   {   c   o   u   n   t   &   &   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   ,   v   a   l   u   e   >   >   2   ,   c   o   u   n   t   *   1   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   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   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   )   )   {   i   f   (   t   r   u   e   )   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   ,   m   a   p   p   i   n   g   .   m   e   m   ,   m   a   p   p   i   n   g   .   l   e   n   g   t   h   )   }   e   l   s   e       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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   .   s   u   b   a   r   r   a   y   (   m   a   p   p   i   n   g   .   m   e   m   ,   m   a   p   p   i   n   g   .   m   e   m   +   m   a   p   p   i   n   g   .   l   e   n   g   t   h   )   )   }   _   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   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   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   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   v   =   (   i   n   d   e   x   ,   v   )   =   >   {   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   1   f   (   i   n   d   e   x   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   v   =   (   i   n   d   e   x   ,   v   )   =   >   {   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   2   f   (   i   n   d   e   x   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   v   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   v   =   (   i   n   d   e   x   ,   v   )   =   >   {   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   3   f   (   i   n   d   e   x   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   v   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   v   +   4   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   v   =   (   i   n   d   e   x   ,   v   )   =   >   {   G   L   c   t   x   .   v   e   r   t   e   x   A   t   t   r   i   b   4   f   (   i   n   d   e   x   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   v   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   v   +   4   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   F   3   2   )   [   v   +   8   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   A   N   G   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   ;   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   =   _   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   ;   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   =   _   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   ;   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   =   _   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   ;   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   =   (   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   v   =   (   i   n   d   e   x   ,   v   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   +   4   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   v   +   8   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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   v   =   (   i   n   d   e   x   ,   v   )   =   >   {   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   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   v   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   v   +   4   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   v   +   8   >   >   2   ]   ,   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   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   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       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   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       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   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   W   a   i   t   S   y   n   c   =   (   s   y   n   c   ,   f   l   a   g   s   ,   t   i   m   e   o   u   t   )   =   >   {   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   _   o   u   t   =   s   t   r   =   >   o   u   t   (   U   T   F   8   T   o   S   t   r   i   n   g   (   s   t   r   )   )   ;   v   a   r       _   e   m   s   c   r   i   p   t   e   n   _   r   a   n   d   o   m   =   (   )   =   >   M   a   t   h   .   r   a   n   d   o   m   (   )   ;   v   a   r       g   e   t   H   e   a   p   M   a   x   =   (   )   =   >   2   1   4   7   4   8   3   6   4   8   ;   v   a   r       a   l   i   g   n   M   e   m   o   r   y   =   (   s   i   z   e   ,   a   l   i   g   n   m   e   n   t   )   =   >   M   a   t   h   .   c   e   i   l   (   s   i   z   e   /   a   l   i   g   n   m   e   n   t   )   *   a   l   i   g   n   m   e   n   t   ;   v   a   r       g   r   o   w   M   e   m   o   r   y   =   s   i   z   e   =   >   {   v   a   r       o   l   d   H   e   a   p   S   i   z   e   =   w   a   s   m   M   e   m   o   r   y   .   b   u   f   f   e   r   .   b   y   t   e   L   e   n   g   t   h   ;   v   a   r       p   a   g   e   s   =   (   s   i   z   e   -   o   l   d   H   e   a   p   S   i   z   e   +   6   5   5   3   5   )   /   6   5   5   3   6   |   0   ;   t   r   y   {   w   a   s   m   M   e   m   o   r   y   .   g   r   o   w   (   p   a   g   e   s   )   ;   u   p   d   a   t   e   M   e   m   o   r   y   V   i   e   w   s   (   )   ;   r   e   t   u   r   n       1   }   c   a   t   c   h   (   e   )   {   }   }   ;   v   a   r       _   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   =   >   {   v   a   r       o   l   d   S   i   z   e   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   .   l   e   n   g   t   h   ;   r   e   q   u   e   s   t   e   d   S   i   z   e   >   >   >   =   0   ;   i   f   (   r   e   q   u   e   s   t   e   d   S   i   z   e   <   =   o   l   d   S   i   z   e   )   {   r   e   t   u   r   n       f   a   l   s   e   }   v   a   r       m   a   x   H   e   a   p   S   i   z   e   =   g   e   t   H   e   a   p   M   a   x   (   )   ;   i   f   (   r   e   q   u   e   s   t   e   d   S   i   z   e   >   m   a   x   H   e   a   p   S   i   z   e   )   {   r   e   t   u   r   n       f   a   l   s   e   }   f   o   r   (   v   a   r       c   u   t   D   o   w   n   =   1   ;   c   u   t   D   o   w   n   <   =   4   ;   c   u   t   D   o   w   n   *   =   2   )   {   v   a   r       o   v   e   r   G   r   o   w   n   H   e   a   p   S   i   z   e   =   o   l   d   S   i   z   e   *   (   1   +   .   2   /   c   u   t   D   o   w   n   )   ;   o   v   e   r   G   r   o   w   n   H   e   a   p   S   i   z   e   =   M   a   t   h   .   m   i   n   (   o   v   e   r   G   r   o   w   n   H   e   a   p   S   i   z   e   ,   r   e   q   u   e   s   t   e   d   S   i   z   e   +   1   0   0   6   6   3   2   9   6   )   ;   v   a   r       n   e   w   S   i   z   e   =   M   a   t   h   .   m   i   n   (   m   a   x   H   e   a   p   S   i   z   e   ,   a   l   i   g   n   M   e   m   o   r   y   (   M   a   t   h   .   m   a   x   (   r   e   q   u   e   s   t   e   d   S   i   z   e   ,   o   v   e   r   G   r   o   w   n   H   e   a   p   S   i   z   e   )   ,   6   5   5   3   6   )   )   ;   v   a   r       r   e   p   l   a   c   e   m   e   n   t   =   g   r   o   w   M   e   m   o   r   y   (   n   e   w   S   i   z   e   )   ;   i   f   (   r   e   p   l   a   c   e   m   e   n   t   )   {   r   e   t   u   r   n       t   r   u   e   }   }   r   e   t   u   r   n       f   a   l   s   e   }   ;   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   )   {   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   u   s   h   (   )   ;   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   (   !   M   a   i   n   L   o   o   p   .   s   e   t   I   m   m   e   d   i   a   t   e   )   {   i   f   (   g   l   o   b   a   l   T   h   i   s   .   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   =   s   e   t   I   m   m   e   d   i   a   t   e   }   e   l   s   e   {   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   ,   "   *   "   )   }   }   }   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   }   ;   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   (   g   l   o   b   a   l   T   h   i   s   .   r   e   q   u   e   s   t   A   n   i   m   a   t   i   o   n   F   r   a   m   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   )   }   e   l   s   e   {   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   (   f   u   n   c   )   }   }   }   ;   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   )   {   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   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       _   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   )   =   >   {   v   a   r       i   t   e   r   F   u   n   c   =   (   )   =   >   d   y   n   C   a   l   l   _   v   (   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       _   e   m   s   c   r   i   p   t   e   n   _   s   u   p   p   o   r   t   s   _   o   f   f   s   c   r   e   e   n   c   a   n   v   a   s   =   (   )   =   >   t   y   p   e   o   f       O   f   f   s   c   r   e   e   n   C   a   n   v   a   s   !   =   "   u   n   d   e   f   i   n   e   d   "   ;   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   "   ]   ;   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       s   p   e   c   i   a   l   H   T   M   L   T   a   r   g   e   t   s   =   [   0   ,   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   :   0   ,   t   y   p   e   o   f       w   i   n   d   o   w   !   =   "   u   n   d   e   f   i   n   e   d   "   ?   w   i   n   d   o   w   :   0   ]   ;   v   a   r       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   =   >   {   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   )   ;   r   e   t   u   r   n       G   L   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   [   t   a   r   g   e   t   .   s   l   i   c   e   (   1   )   ]   |   |   t   a   r   g   e   t   =   =   "   c   a   n   v   a   s   "   &   &   O   b   j   e   c   t   .   v   a   l   u   e   s   (   G   L   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   )   [   0   ]   |   |   s   p   e   c   i   a   l   H   T   M   L   T   a   r   g   e   t   s   [   t   a   r   g   e   t   ]   |   |   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   .   q   u   e   r   y   S   e   l   e   c   t   o   r   (   t   a   r   g   e   t   )   }   ;   v   a   r       _   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   )   =   >   {   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   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   3   2   +   (   8   >   >   2   )   ]   ;   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   :   !   !   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   a   t   t   r   i   b   u   t   e   s   +   0   ]   ,   d   e   p   t   h   :   !   !   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   a   t   t   r   i   b   u   t   e   s   +   1   ]   ,   s   t   e   n   c   i   l   :   !   !   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   a   t   t   r   i   b   u   t   e   s   +   2   ]   ,   a   n   t   i   a   l   i   a   s   :   !   !   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   a   t   t   r   i   b   u   t   e   s   +   3   ]   ,   p   r   e   m   u   l   t   i   p   l   i   e   d   A   l   p   h   a   :   !   !   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   a   t   t   r   i   b   u   t   e   s   +   4   ]   ,   p   r   e   s   e   r   v   e   D   r   a   w   i   n   g   B   u   f   f   e   r   :   !   !   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   a   t   t   r   i   b   u   t   e   s   +   5   ]   ,   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   :   !   !   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   a   t   t   r   i   b   u   t   e   s   +   1   2   ]   ,   m   a   j   o   r   V   e   r   s   i   o   n   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   3   2   +   (   1   6   >   >   2   )   ]   ,   m   i   n   o   r   V   e   r   s   i   o   n   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   3   2   +   (   2   0   >   >   2   )   ]   ,   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   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   a   t   t   r   i   b   u   t   e   s   +   2   4   ]   ,   e   x   p   l   i   c   i   t   S   w   a   p   C   o   n   t   r   o   l   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   a   t   t   r   i   b   u   t   e   s   +   2   5   ]   ,   p   r   o   x   y   C   o   n   t   e   x   t   T   o   M   a   i   n   T   h   r   e   a   d   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   a   t   t   r   3   2   +   (   2   8   >   >   2   )   ]   ,   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   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   a   t   t   r   i   b   u   t   e   s   +   3   2   ]   }   ;   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   ?   .   c   a   n   v   a   s   )   {   c   a   n   v   a   s   =   c   a   n   v   a   s   .   c   a   n   v   a   s   }   i   f   (   !   c   a   n   v   a   s   )   {   r   e   t   u   r   n       0   }   i   f   (   c   a   n   v   a   s   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   )   c   a   n   v   a   s   =   c   a   n   v   a   s   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   ;   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   )   {   v   a   r       s   u   p   p   o   r   t   s   O   f   f   s   c   r   e   e   n   C   a   n   v   a   s   =   c   a   n   v   a   s   .   t   r   a   n   s   f   e   r   C   o   n   t   r   o   l   T   o   O   f   f   s   c   r   e   e   n   |   |   _   e   m   s   c   r   i   p   t   e   n   _   s   u   p   p   o   r   t   s   _   o   f   f   s   c   r   e   e   n   c   a   n   v   a   s   (   )   &   &   c   a   n   v   a   s       i   n   s   t   a   n   c   e   o   f       O   f   f   s   c   r   e   e   n   C   a   n   v   a   s   ;   i   f   (   !   s   u   p   p   o   r   t   s   O   f   f   s   c   r   e   e   n   C   a   n   v   a   s   )   {   r   e   t   u   r   n       0   }   i   f   (   c   a   n   v   a   s   .   t   r   a   n   s   f   e   r   C   o   n   t   r   o   l   T   o   O   f   f   s   c   r   e   e   n   )   {   i   f   (   !   c   a   n   v   a   s   .   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   )   {   G   L   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   [   c   a   n   v   a   s   .   i   d   ]   =   {   c   a   n   v   a   s   :   c   a   n   v   a   s   .   t   r   a   n   s   f   e   r   C   o   n   t   r   o   l   T   o   O   f   f   s   c   r   e   e   n   (   )   ,   c   a   n   v   a   s   S   h   a   r   e   d   P   t   r   :   _   m   a   l   l   o   c   (   1   2   )   ,   i   d   :   c   a   n   v   a   s   .   i   d   }   ;   c   a   n   v   a   s   .   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   r   u   e   }   e   l   s   e       i   f   (   !   G   L   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   [   c   a   n   v   a   s   .   i   d   ]   )   {   r   e   t   u   r   n       0   }   c   a   n   v   a   s   =   G   L   .   o   f   f   s   c   r   e   e   n   C   a   n   v   a   s   e   s   [   c   a   n   v   a   s   .   i   d   ]   .   c   a   n   v   a   s   }   }   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   ;   v   a   r       _   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   a   l   l   i   n   g   _   t   h   r   e   a   d   =   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   =   =   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   )   }   ;   v   a   r       _   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   _   m   a   i   n   _   t   h   r   e   a   d   =   _   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   a   l   l   i   n   g   _   t   h   r   e   a   d   ;   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   (   p   0   )   {   r   e   t   u   r   n       G   L   .   c   o   n   t   e   x   t   s   [   p   0   ]   ?   _   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   a   l   l   i   n   g   _   t   h   r   e   a   d   (   p   0   )   :   _   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   _   m   a   i   n   _   t   h   r   e   a   d   (   p   0   )   }   v   a   r       _   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   a   l   l   i   n   g   _   t   h   r   e   a   d   =   (   c   o   n   t   e   x   t   H   a   n   d   l   e   ,   e   x   t   e   n   s   i   o   n   )   =   >   {   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   }   ;   v   a   r       _   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   _   m   a   i   n   _   t   h   r   e   a   d   =   _   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   a   l   l   i   n   g   _   t   h   r   e   a   d   ;   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   (   p   0   ,   p   1   )   {   r   e   t   u   r   n       G   L   .   c   o   n   t   e   x   t   s   [   p   0   ]   ?   _   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   a   l   l   i   n   g   _   t   h   r   e   a   d   (   p   0   ,   p   1   )   :   _   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   _   m   a   i   n   _   t   h   r   e   a   d   (   p   0   ,   p   1   )   }   v   a   r       _   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   =   >   {   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   |   |   "   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   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   1   1   ,   0   ,   1   ,   _   _   e   n   v   i   r   o   n   ,   e   n   v   i   r   o   n   _   b   u   f   )   ;   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   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   _   _   e   n   v   i   r   o   n   +   e   n   v   p   >   >   2   ]   =   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   )   {   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   )   r   e   t   u   r   n       p   r   o   x   y   T   o   M   a   i   n   T   h   r   e   a   d   (   1   2   ,   0   ,   1   ,   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   )   ;   v   a   r       s   t   r   i   n   g   s   =   g   e   t   E   n   v   S   t   r   i   n   g   s   (   )   ;   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   e   n   v   i   r   o   n   _   c   o   u   n   t   >   >   2   ]   =   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   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   e   n   v   i   r   o   n   _   b   u   f   _   s   i   z   e   >   >   2   ]   =   b   u   f   S   i   z   e   ;   r   e   t   u   r   n       0   }   v   a   r       _   g   l   A   c   t   i   v   e   T   e   x   t   u   r   e   =   _   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   ;   v   a   r       _   g   l   A   t   t   a   c   h   S   h   a   d   e   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   ;   v   a   r       _   g   l   B   i   n   d   B   u   f   f   e   r   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   B   u   f   f   e   r   ;   v   a   r       _   g   l   B   i   n   d   F   r   a   m   e   b   u   f   f   e   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   ;   v   a   r       _   g   l   B   i   n   d   S   a   m   p   l   e   r   =   _   e   m   s   c   r   i   p   t   e   n   _   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   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   T   e   x   t   u   r   e   ;   v   a   r       _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   =   _   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   ;   v   a   r       _   g   l   B   l   e   n   d   F   u   n   c   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   F   u   n   c   ;   v   a   r       _   g   l   B   u   f   f   e   r   D   a   t   a   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   u   f   f   e   r   D   a   t   a   ;   v   a   r       _   g   l   B   u   f   f   e   r   S   u   b   D   a   t   a   =   _   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   ;   v   a   r       _   g   l   C   l   e   a   r   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   ;   v   a   r       _   g   l   C   o   m   p   i   l   e   S   h   a   d   e   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   ;   v   a   r       _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   2   D   =   _   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   ;   v   a   r       _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   2   D   =   _   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   ;   v   a   r       _   g   l   C   r   e   a   t   e   P   r   o   g   r   a   m   =   _   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   ;   v   a   r       _   g   l   C   r   e   a   t   e   S   h   a   d   e   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   ;   v   a   r       _   g   l   C   u   l   l   F   a   c   e   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   u   l   l   F   a   c   e   ;   v   a   r       _   g   l   D   e   l   e   t   e   B   u   f   f   e   r   s   =   _   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   ;   v   a   r       _   g   l   D   e   l   e   t   e   F   r   a   m   e   b   u   f   f   e   r   s   =   _   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   ;   v   a   r       _   g   l   D   e   l   e   t   e   P   r   o   g   r   a   m   =   _   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   ;   v   a   r       _   g   l   D   e   l   e   t   e   S   a   m   p   l   e   r   s   =   _   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   ;   v   a   r       _   g   l   D   e   l   e   t   e   S   h   a   d   e   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   ;   v   a   r       _   g   l   D   e   l   e   t   e   T   e   x   t   u   r   e   s   =   _   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   ;   v   a   r       _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   =   _   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   ;   v   a   r       _   g   l   D   e   t   a   c   h   S   h   a   d   e   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   ;   v   a   r       _   g   l   D   i   s   a   b   l   e   =   _   e   m   s   c   r   i   p   t   e   n   _   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   =   _   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   ;   v   a   r       _   g   l   D   r   a   w   B   u   f   f   e   r   s   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   B   u   f   f   e   r   s   ;   v   a   r       _   g   l   E   n   a   b   l   e   =   _   e   m   s   c   r   i   p   t   e   n   _   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   =   _   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   ;   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   =   _   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   ;   v   a   r       _   g   l   F   r   o   n   t   F   a   c   e   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   r   o   n   t   F   a   c   e   ;   v   a   r       _   g   l   G   e   n   B   u   f   f   e   r   s   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   B   u   f   f   e   r   s   ;   v   a   r       _   g   l   G   e   n   F   r   a   m   e   b   u   f   f   e   r   s   =   _   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   ;   v   a   r       _   g   l   G   e   n   S   a   m   p   l   e   r   s   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   S   a   m   p   l   e   r   s   ;   v   a   r       _   g   l   G   e   n   T   e   x   t   u   r   e   s   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   T   e   x   t   u   r   e   s   ;   v   a   r       _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   =   _   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   ;   v   a   r       _   g   l   G   e   n   e   r   a   t   e   M   i   p   m   a   p   =   _   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   ;   v   a   r       _   g   l   G   e   t   E   r   r   o   r   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   E   r   r   o   r   ;   v   a   r       _   g   l   G   e   t   I   n   t   e   g   e   r   v   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   g   e   r   v   ;   v   a   r       _   g   l   G   e   t   P   r   o   g   r   a   m   I   n   f   o   L   o   g   =   _   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   ;   v   a   r       _   g   l   G   e   t   P   r   o   g   r   a   m   i   v   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   P   r   o   g   r   a   m   i   v   ;   v   a   r       _   g   l   G   e   t   S   h   a   d   e   r   I   n   f   o   L   o   g   =   _   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   ;   v   a   r       _   g   l   G   e   t   S   h   a   d   e   r   i   v   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   h   a   d   e   r   i   v   ;   v   a   r       _   g   l   G   e   t   S   t   r   i   n   g   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   t   r   i   n   g   ;   v   a   r       _   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   =   _   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   ;   v   a   r       _   g   l   H   i   n   t   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   H   i   n   t   ;   v   a   r       _   g   l   L   i   n   e   W   i   d   t   h   =   _   e   m   s   c   r   i   p   t   e   n   _   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   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   L   i   n   k   P   r   o   g   r   a   m   ;   v   a   r       _   g   l   P   i   x   e   l   S   t   o   r   e   i   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   i   x   e   l   S   t   o   r   e   i   ;   v   a   r       _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   =   _   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   a   r       _   g   l   S   c   i   s   s   o   r   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   c   i   s   s   o   r   ;   v   a   r       _   g   l   S   h   a   d   e   r   S   o   u   r   c   e   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   h   a   d   e   r   S   o   u   r   c   e   ;   v   a   r       _   g   l   T   e   x   I   m   a   g   e   2   D   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   I   m   a   g   e   2   D   ;   v   a   r       _   g   l   T   e   x   I   m   a   g   e   3   D   =   _   e   m   s   c   r   i   p   t   e   n   _   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   i   =   _   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   a   r       _   g   l   U   n   i   f   o   r   m   1   f   v   =   _   e   m   s   c   r   i   p   t   e   n   _   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   v   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   2   f   v   =   _   e   m   s   c   r   i   p   t   e   n   _   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   v   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   3   f   v   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   f   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   4   f   v   =   _   e   m   s   c   r   i   p   t   e   n   _   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   v   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   i   v   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   4   f   v   =   _   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   ;   v   a   r       _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   f   v   =   _   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   ;   v   a   r       _   g   l   U   s   e   P   r   o   g   r   a   m   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   s   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   4   f   =   _   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   r       _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   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   ;   v   a   r       _   g   l   V   i   e   w   p   o   r   t   =   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   i   e   w   p   o   r   t   ;   v   a   r       _   l   l   v   m   _   e   h   _   t   y   p   e   i   d   _   f   o   r   =   t   y   p   e   =   >   t   y   p   e   ;   v   a   r       i   n   i   t   R   a   n   d   o   m   F   i   l   l   =   (   )   =   >   v   i   e   w   =   >   v   i   e   w   .   s   e   t   (   c   r   y   p   t   o   .   g   e   t   R   a   n   d   o   m   V   a   l   u   e   s   (   n   e   w       U   i   n   t   8   A   r   r   a   y   (   v   i   e   w   .   b   y   t   e   L   e   n   g   t   h   )   )   )   ;   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       _   r   a   n   d   o   m   _   g   e   t   =   (   b   u   f   f   e   r   ,   s   i   z   e   )   =   >   {   r   a   n   d   o   m   F   i   l   l   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   .   s   u   b   a   r   r   a   y   (   b   u   f   f   e   r   ,   b   u   f   f   e   r   +   s   i   z   e   )   )   ;   r   e   t   u   r   n       0   }   ;   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       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       w   i   t   h   S   t   a   c   k   S   a   v   e   =   f   =   >   {   v   a   r       s   t   a   c   k   =   s   t   a   c   k   S   a   v   e   (   )   ;   v   a   r       r   e   t   =   f   (   )   ;   s   t   a   c   k   R   e   s   t   o   r   e   (   s   t   a   c   k   )   ;   r   e   t   u   r   n       r   e   t   }   ;   v   a   r       r   e   a   d   I   5   3   F   r   o   m   I   6   4   =   p   t   r   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   r   >   >   2   ]   +   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   p   t   r   +   4   >   >   2   ]   *   4   2   9   4   9   6   7   2   9   6   ;   v   a   r       r   e   a   d   I   5   3   F   r   o   m   U   6   4   =   p   t   r   =   >   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   r   >   >   2   ]   +   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   p   t   r   +   4   >   >   2   ]   *   4   2   9   4   9   6   7   2   9   6   ;   v   a   r       F   S   _   m   k   n   o   d   =   (   p   a   t   h   ,   m   o   d   e   ,   d   e   v   )   =   >   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       p   a   t   h   B   u   f   f   e   r   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ;   r   e   t   u   r   n       _   _   w   a   s   m   f   s   _   m   k   n   o   d   (   p   a   t   h   B   u   f   f   e   r   ,   m   o   d   e   ,   d   e   v   )   }   )   )   ;   v   a   r       F   S   _   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   )   }   ;   v   a   r       F   S   _   w   r   i   t   e   F   i   l   e   =   (   p   a   t   h   ,   d   a   t   a   )   =   >   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   v   a   r       p   a   t   h   B   u   f   f   e   r   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ;   v   a   r       l   e   n   =   t   y   p   e   o   f       d   a   t   a   =   =   "   s   t   r   i   n   g   "   ?   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   d   a   t   a   )   +   1   :   d   a   t   a   .   l   e   n   g   t   h   ;   v   a   r       d   a   t   a   B   u   f   f   e   r   =   _   m   a   l   l   o   c   (   l   e   n   )   ;   i   f   (   t   y   p   e   o   f       d   a   t   a   =   =   "   s   t   r   i   n   g   "   )   {   l   e   n   =   s   t   r   i   n   g   T   o   U   T   F   8   (   d   a   t   a   ,   d   a   t   a   B   u   f   f   e   r   ,   l   e   n   )   }   e   l   s   e   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   .   s   e   t   (   d   a   t   a   ,   d   a   t   a   B   u   f   f   e   r   )   }   v   a   r       r   e   t   =   _   _   w   a   s   m   f   s   _   w   r   i   t   e   _   f   i   l   e   (   p   a   t   h   B   u   f   f   e   r   ,   d   a   t   a   B   u   f   f   e   r   ,   l   e   n   )   ;   _   f   r   e   e   (   d   a   t   a   B   u   f   f   e   r   )   ;   s   t   a   c   k   R   e   s   t   o   r   e   (   s   p   )   ;   r   e   t   u   r   n       r   e   t   }   ;   v   a   r       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   ,   f   i   l   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   =   n   a   m   e   ?   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   )   ;   i   f   (   !   w   a   s   m   F   S   P   r   e   l   o   a   d   i   n   g   F   l   u   s   h   e   d   )   {   w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   F   i   l   e   s   .   p   u   s   h   (   {   p   a   t   h   N   a   m   e   ,   f   i   l   e   D   a   t   a   ,   m   o   d   e   }   )   }   e   l   s   e   {   F   S   _   c   r   e   a   t   e   (   p   a   t   h   N   a   m   e   ,   m   o   d   e   )   ;   F   S   _   w   r   i   t   e   F   i   l   e   (   p   a   t   h   N   a   m   e   ,   f   i   l   e   D   a   t   a   )   }   }   ;   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       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       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       F   S   _   h   a   n   d   l   e   d   B   y   P   r   e   l   o   a   d   P   l   u   g   i   n   =   a   s   y   n   c   (   b   y   t   e   A   r   r   a   y   ,   f   u   l   l   n   a   m   e   )   =   >   {   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   (   )   ;   f   o   r   (   v   a   r       p   l   u   g   i   n       o   f       p   r   e   l   o   a   d   P   l   u   g   i   n   s   )   {   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   )   )   {   r   e   t   u   r   n       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   )   }   }   r   e   t   u   r   n       b   y   t   e   A   r   r   a   y   }   ;   v   a   r       F   S   _   p   r   e   l   o   a   d   F   i   l   e   =   a   s   y   n   c   (   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   ,   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   }   `   )   ;   a   d   d   R   u   n   D   e   p   e   n   d   e   n   c   y   (   d   e   p   )   ;   t   r   y   {   v   a   r       b   y   t   e   A   r   r   a   y   =   u   r   l   ;   i   f   (   t   y   p   e   o   f       u   r   l   =   =   "   s   t   r   i   n   g   "   )   {   b   y   t   e   A   r   r   a   y   =   a   w   a   i   t       a   s   y   n   c   L   o   a   d   (   u   r   l   )   }   b   y   t   e   A   r   r   a   y   =   a   w   a   i   t       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   )   ;   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   )   }   }   f   i   n   a   l   l   y   {   r   e   m   o   v   e   R   u   n   D   e   p   e   n   d   e   n   c   y   (   d   e   p   )   }   }   ;   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   )   =   >   {   F   S   _   p   r   e   l   o   a   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   ,   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   )   .   t   h   e   n   (   o   n   l   o   a   d   )   .   c   a   t   c   h   (   o   n   e   r   r   o   r   )   }   ;   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   _   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   _   m   k   d   i   r   =   (   p   a   t   h   ,   m   o   d   e   =   5   1   1   )   =   >   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       b   u   f   f   e   r   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ;   r   e   t   u   r   n       _   _   w   a   s   m   f   s   _   m   k   d   i   r   (   b   u   f   f   e   r   ,   m   o   d   e   )   }   )   )   ;   v   a   r       F   S   _   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   }   }   }   ;   v   a   r       F   S   _   u   n   l   i   n   k   =   p   a   t   h   =   >   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       b   u   f   f   e   r   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ;   r   e   t   u   r   n       _   _   w   a   s   m   f   s   _   u   n   l   i   n   k   (   b   u   f   f   e   r   )   }   )   ;   v   a   r       w   a   s   m   F   S   $   b   a   c   k   e   n   d   s   =   {   }   ;   v   a   r       w   a   s   m   F   S   D   e   v   i   c   e   s   =   {   }   ;   v   a   r       w   a   s   m   F   S   D   e   v   i   c   e   S   t   r   e   a   m   s   =   {   }   ;   v   a   r       F   S   =   {   E   r   r   n   o   E   r   r   o   r   :   c   l   a   s   s       e   x   t   e   n   d   s       E   r   r   o   r   {   n   a   m   e   =   "   E   r   r   n   o   E   r   r   o   r   "   ;   m   e   s   s   a   g   e   =   "   F   S       e   r   r   o   r   "   ;   c   o   n   s   t   r   u   c   t   o   r   (   c   o   d   e   )   {   s   u   p   e   r   (   )   ;   t   h   i   s   .   e   r   r   n   o   =   c   o   d   e   }   }   ,   h   a   n   d   l   e   E   r   r   o   r   (   r   e   t   u   r   n   V   a   l   u   e   )   {   i   f   (   r   e   t   u   r   n   V   a   l   u   e   <   0   )   {   t   h   r   o   w       n   e   w       F   S   .   E   r   r   n   o   E   r   r   o   r   (   -   r   e   t   u   r   n   V   a   l   u   e   )   }   r   e   t   u   r   n       r   e   t   u   r   n   V   a   l   u   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   ,   f   i   l   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   )   {   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   ,   f   i   l   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   )   }   ,   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   )   {   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   )   ;   i   f   (   !   w   a   s   m   F   S   P   r   e   l   o   a   d   i   n   g   F   l   u   s   h   e   d   )   {   w   a   s   m   F   S   P   r   e   l   o   a   d   e   d   D   i   r   s   .   p   u   s   h   (   {   p   a   r   e   n   t   P   a   t   h   :   p   a   r   e   n   t   ,   c   h   i   l   d   N   a   m   e   :   p   a   r   t   }   )   }   e   l   s   e   {   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   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   )   {   r   e   t   u   r   n       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   )   }   ,   a   s   y   n   c       p   r   e   l   o   a   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   ,   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   )   {   r   e   t   u   r   n       F   S   _   p   r   e   l   o   a   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   ,   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   )   }   ,   r   e   a   d   F   i   l   e   (   p   a   t   h   ,   o   p   t   s   =   {   }   )   {   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       b   u   f   ,   l   e   n   g   t   h   ;   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       b   u   f   P   t   r   =   s   t   a   c   k   A   l   l   o   c   (   4   )   ;   v   a   r       s   i   z   e   P   t   r   =   s   t   a   c   k   A   l   l   o   c   (   4   )   ;   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   -   _   _   w   a   s   m   f   s   _   r   e   a   d   _   f   i   l   e   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ,   b   u   f   P   t   r   ,   s   i   z   e   P   t   r   )   )   ;   b   u   f   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   b   u   f   P   t   r   >   >   2   ]   ;   l   e   n   g   t   h   =   r   e   a   d   I   5   3   F   r   o   m   I   6   4   (   s   i   z   e   P   t   r   )   }   )   ;   r   e   t   u   r   n       o   p   t   s   .   e   n   c   o   d   i   n   g   =   =   =   "   u   t   f   8   "   ?   U   T   F   8   T   o   S   t   r   i   n   g   (   b   u   f   ,   l   e   n   g   t   h   )   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   .   s   l   i   c   e   (   b   u   f   ,   b   u   f   +   l   e   n   g   t   h   )   }   ,   c   w   d   :   (   )   =   >   U   T   F   8   T   o   S   t   r   i   n   g   (   _   _   w   a   s   m   f   s   _   g   e   t   _   c   w   d   (   )   )   ,   a   n   a   l   y   z   e   P   a   t   h   (   p   a   t   h   )   {   v   a   r       e   x   i   s   t   s   =   !   !   F   S   .   f   i   n   d   O   b   j   e   c   t   (   p   a   t   h   )   ;   r   e   t   u   r   n   {   e   x   i   s   t   s   ,   o   b   j   e   c   t   :   {   c   o   n   t   e   n   t   s   :   e   x   i   s   t   s   ?   F   S   .   r   e   a   d   F   i   l   e   (   p   a   t   h   )   :   n   u   l   l   }   }   }   ,   m   k   d   i   r   :   (   p   a   t   h   ,   m   o   d   e   )   =   >   F   S   _   m   k   d   i   r   (   p   a   t   h   ,   m   o   d   e   )   ,   m   k   d   i   r   T   r   e   e   :   (   p   a   t   h   ,   m   o   d   e   )   =   >   F   S   _   m   k   d   i   r   T   r   e   e   (   p   a   t   h   ,   m   o   d   e   )   ,   r   m   d   i   r   :   p   a   t   h   =   >   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   _   _   w   a   s   m   f   s   _   r   m   d   i   r   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   )   )   )   ,   o   p   e   n   :   (   p   a   t   h   ,   f   l   a   g   s   ,   m   o   d   e   =   4   3   8   )   =   >   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   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   ;   v   a   r       b   u   f   f   e   r   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ;   v   a   r       f   d   =   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   _   _   w   a   s   m   f   s   _   o   p   e   n   (   b   u   f   f   e   r   ,   f   l   a   g   s   ,   m   o   d   e   )   )   ;   r   e   t   u   r   n   {   f   d   }   }   )   ,   c   r   e   a   t   e   :   (   p   a   t   h   ,   m   o   d   e   )   =   >   F   S   _   c   r   e   a   t   e   (   p   a   t   h   ,   m   o   d   e   )   ,   c   l   o   s   e   :   s   t   r   e   a   m   =   >   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   -   _   _   w   a   s   m   f   s   _   c   l   o   s   e   (   s   t   r   e   a   m   .   f   d   )   )   ,   u   n   l   i   n   k   :   p   a   t   h   =   >   F   S   _   u   n   l   i   n   k   (   p   a   t   h   )   ,   c   h   d   i   r   :   p   a   t   h   =   >   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   _   _   w   a   s   m   f   s   _   c   h   d   i   r   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   )   )   ,   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       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   "   ;   v   a   r       d   a   t   a   B   u   f   f   e   r   =   _   m   a   l   l   o   c   (   l   e   n   g   t   h   )   ;   v   a   r       b   y   t   e   s   R   e   a   d   ;   i   f   (   s   e   e   k   i   n   g   )   {   b   y   t   e   s   R   e   a   d   =   _   _   w   a   s   m   f   s   _   p   r   e   a   d   (   s   t   r   e   a   m   .   f   d   ,   d   a   t   a   B   u   f   f   e   r   ,   l   e   n   g   t   h   ,   B   i   g   I   n   t   (   p   o   s   i   t   i   o   n   )   )   }   e   l   s   e   {   b   y   t   e   s   R   e   a   d   =   _   _   w   a   s   m   f   s   _   r   e   a   d   (   s   t   r   e   a   m   .   f   d   ,   d   a   t   a   B   u   f   f   e   r   ,   l   e   n   g   t   h   )   }   i   f   (   b   y   t   e   s   R   e   a   d   >   0   )   {   b   u   f   f   e   r   .   s   e   t   (   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   8   )   .   s   u   b   a   r   r   a   y   (   d   a   t   a   B   u   f   f   e   r   ,   d   a   t   a   B   u   f   f   e   r   +   b   y   t   e   s   R   e   a   d   )   ,   o   f   f   s   e   t   )   }   _   f   r   e   e   (   d   a   t   a   B   u   f   f   e   r   )   ;   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   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   )   {   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   "   ;   v   a   r       d   a   t   a   B   u   f   f   e   r   =   _   m   a   l   l   o   c   (   l   e   n   g   t   h   )   ;   f   o   r   (   v   a   r       i   =   0   ;   i   <   l   e   n   g   t   h   ;   i   +   +   )   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   [   d   a   t   a   B   u   f   f   e   r   +   i   ]   =   b   u   f   f   e   r   [   o   f   f   s   e   t   +   i   ]   }   v   a   r       b   y   t   e   s   R   e   a   d   ;   i   f   (   s   e   e   k   i   n   g   )   {   b   y   t   e   s   R   e   a   d   =   _   _   w   a   s   m   f   s   _   p   w   r   i   t   e   (   s   t   r   e   a   m   .   f   d   ,   d   a   t   a   B   u   f   f   e   r   ,   l   e   n   g   t   h   ,   B   i   g   I   n   t   (   p   o   s   i   t   i   o   n   )   )   }   e   l   s   e   {   b   y   t   e   s   R   e   a   d   =   _   _   w   a   s   m   f   s   _   w   r   i   t   e   (   s   t   r   e   a   m   .   f   d   ,   d   a   t   a   B   u   f   f   e   r   ,   l   e   n   g   t   h   )   }   _   f   r   e   e   (   d   a   t   a   B   u   f   f   e   r   )   ;   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   b   y   t   e   s   R   e   a   d   )   }   ,   w   r   i   t   e   F   i   l   e   :   (   p   a   t   h   ,   d   a   t   a   )   =   >   F   S   _   w   r   i   t   e   F   i   l   e   (   p   a   t   h   ,   d   a   t   a   )   ,   m   m   a   p   :   (   s   t   r   e   a   m   ,   l   e   n   g   t   h   ,   o   f   f   s   e   t   ,   p   r   o   t   ,   f   l   a   g   s   )   =   >   {   v   a   r       b   u   f   =   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   _   _   w   a   s   m   f   s   _   m   m   a   p   (   l   e   n   g   t   h   ,   p   r   o   t   ,   f   l   a   g   s   ,   s   t   r   e   a   m   .   f   d   ,   B   i   g   I   n   t   (   o   f   f   s   e   t   )   )   )   ;   r   e   t   u   r   n   {   p   t   r   :   b   u   f   ,   a   l   l   o   c   a   t   e   d   :   t   r   u   e   }   }   ,   m   s   y   n   c   :   (   s   t   r   e   a   m   ,   b   u   f   f   e   r   P   t   r   ,   o   f   f   s   e   t   ,   l   e   n   g   t   h   ,   m   m   a   p   F   l   a   g   s   )   =   >   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   _   _   w   a   s   m   f   s   _   m   s   y   n   c   (   b   u   f   f   e   r   P   t   r   ,   l   e   n   g   t   h   ,   m   m   a   p   F   l   a   g   s   )   )   ,   m   u   n   m   a   p   :   (   a   d   d   r   ,   l   e   n   g   t   h   )   =   >   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   _   _   w   a   s   m   f   s   _   m   u   n   m   a   p   (   a   d   d   r   ,   l   e   n   g   t   h   )   )   ,   s   y   m   l   i   n   k   :   (   t   a   r   g   e   t   ,   l   i   n   k   p   a   t   h   )   =   >   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   _   _   w   a   s   m   f   s   _   s   y   m   l   i   n   k   (   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   )   ,   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   l   i   n   k   p   a   t   h   )   )   )   ,   r   e   a   d   l   i   n   k   (   p   a   t   h   )   {   r   e   t   u   r   n       w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       b   u   f   P   t   r   =   s   t   a   c   k   A   l   l   o   c   (   4   )   ;   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   _   _   w   a   s   m   f   s   _   r   e   a   d   l   i   n   k   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ,   b   u   f   P   t   r   )   )   ;   v   a   r       r   e   a   d   B   u   f   f   e   r   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   b   u   f   P   t   r   >   >   2   ]   ;   r   e   t   u   r   n       U   T   F   8   T   o   S   t   r   i   n   g   (   r   e   a   d   B   u   f   f   e   r   )   }   )   }   ,   s   t   a   t   B   u   f   T   o   O   b   j   e   c   t   (   s   t   a   t   B   u   f   )   {   r   e   t   u   r   n   {   d   e   v   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   a   t   B   u   f   >   >   2   ]   ,   m   o   d   e   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   a   t   B   u   f   +   4   >   >   2   ]   ,   n   l   i   n   k   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   a   t   B   u   f   +   8   >   >   2   ]   ,   u   i   d   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   a   t   B   u   f   +   1   2   >   >   2   ]   ,   g   i   d   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   a   t   B   u   f   +   1   6   >   >   2   ]   ,   r   d   e   v   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   U   3   2   )   [   s   t   a   t   B   u   f   +   2   0   >   >   2   ]   ,   s   i   z   e   :   r   e   a   d   I   5   3   F   r   o   m   I   6   4   (   s   t   a   t   B   u   f   +   2   4   )   ,   b   l   k   s   i   z   e   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   s   t   a   t   B   u   f   +   3   2   >   >   2   ]   ,   b   l   o   c   k   s   :   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   3   2   )   [   s   t   a   t   B   u   f   +   3   6   >   >   2   ]   ,   a   t   i   m   e   :   r   e   a   d   I   5   3   F   r   o   m   I   6   4   (   s   t   a   t   B   u   f   +   4   0   )   ,   m   t   i   m   e   :   r   e   a   d   I   5   3   F   r   o   m   I   6   4   (   s   t   a   t   B   u   f   +   5   6   )   ,   c   t   i   m   e   :   r   e   a   d   I   5   3   F   r   o   m   I   6   4   (   s   t   a   t   B   u   f   +   7   2   )   ,   i   n   o   :   r   e   a   d   I   5   3   F   r   o   m   U   6   4   (   s   t   a   t   B   u   f   +   8   8   )   }   }   ,   s   t   a   t   (   p   a   t   h   )   {   r   e   t   u   r   n       w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       s   t   a   t   B   u   f   =   s   t   a   c   k   A   l   l   o   c   (   9   6   )   ;   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   _   _   w   a   s   m   f   s   _   s   t   a   t   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ,   s   t   a   t   B   u   f   )   )   ;   r   e   t   u   r   n       F   S   .   s   t   a   t   B   u   f   T   o   O   b   j   e   c   t   (   s   t   a   t   B   u   f   )   }   )   }   ,   l   s   t   a   t   (   p   a   t   h   )   {   r   e   t   u   r   n       w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       s   t   a   t   B   u   f   =   s   t   a   c   k   A   l   l   o   c   (   9   6   )   ;   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   _   _   w   a   s   m   f   s   _   l   s   t   a   t   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ,   s   t   a   t   B   u   f   )   )   ;   r   e   t   u   r   n       F   S   .   s   t   a   t   B   u   f   T   o   O   b   j   e   c   t   (   s   t   a   t   B   u   f   )   }   )   }   ,   c   h   m   o   d   (   p   a   t   h   ,   m   o   d   e   )   {   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       b   u   f   f   e   r   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ;   r   e   t   u   r   n       _   _   w   a   s   m   f   s   _   c   h   m   o   d   (   b   u   f   f   e   r   ,   m   o   d   e   )   }   )   )   }   ,   l   c   h   m   o   d   (   p   a   t   h   ,   m   o   d   e   )   {   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       b   u   f   f   e   r   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ;   r   e   t   u   r   n       _   _   w   a   s   m   f   s   _   l   c   h   m   o   d   (   b   u   f   f   e   r   ,   m   o   d   e   )   }   )   )   }   ,   f   c   h   m   o   d   (   f   d   ,   m   o   d   e   )   {   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   _   _   w   a   s   m   f   s   _   f   c   h   m   o   d   (   f   d   ,   m   o   d   e   )   )   }   ,   u   t   i   m   e   :   (   p   a   t   h   ,   a   t   i   m   e   ,   m   t   i   m   e   )   =   >   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   _   _   w   a   s   m   f   s   _   u   t   i   m   e   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ,   a   t   i   m   e   ,   m   t   i   m   e   )   )   )   ,   t   r   u   n   c   a   t   e   (   p   a   t   h   ,   l   e   n   )   {   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   _   _   w   a   s   m   f   s   _   t   r   u   n   c   a   t   e   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ,   B   i   g   I   n   t   (   l   e   n   )   )   )   )   }   ,   f   t   r   u   n   c   a   t   e   (   f   d   ,   l   e   n   )   {   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   _   _   w   a   s   m   f   s   _   f   t   r   u   n   c   a   t   e   (   f   d   ,   B   i   g   I   n   t   (   l   e   n   )   )   )   }   ,   f   i   n   d   O   b   j   e   c   t   (   p   a   t   h   )   {   v   a   r       r   e   s   u   l   t   =   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   _   _   w   a   s   m   f   s   _   i   d   e   n   t   i   f   y   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   )   )   ;   i   f   (   r   e   s   u   l   t   =   =   4   4   )   {   r   e   t   u   r   n       n   u   l   l   }   r   e   t   u   r   n   {   i   s   F   o   l   d   e   r   :   r   e   s   u   l   t   =   =   3   1   ,   i   s   D   e   v   i   c   e   :   f   a   l   s   e   }   }   ,   r   e   a   d   d   i   r   :   p   a   t   h   =   >   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       p   a   t   h   B   u   f   f   e   r   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ;   v   a   r       e   n   t   r   i   e   s   =   [   ]   ;   v   a   r       s   t   a   t   e   =   _   _   w   a   s   m   f   s   _   r   e   a   d   d   i   r   _   s   t   a   r   t   (   p   a   t   h   B   u   f   f   e   r   )   ;   i   f   (   !   s   t   a   t   e   )   {   t   h   r   o   w       n   e   w       E   r   r   o   r   (   "   N   o       s   u   c   h       d   i   r   e   c   t   o   r   y   "   )   }   v   a   r       e   n   t   r   y   ;   w   h   i   l   e   (   e   n   t   r   y   =   _   _   w   a   s   m   f   s   _   r   e   a   d   d   i   r   _   g   e   t   (   s   t   a   t   e   )   )   {   e   n   t   r   i   e   s   .   p   u   s   h   (   U   T   F   8   T   o   S   t   r   i   n   g   (   e   n   t   r   y   )   )   }   _   _   w   a   s   m   f   s   _   r   e   a   d   d   i   r   _   f   i   n   i   s   h   (   s   t   a   t   e   )   ;   r   e   t   u   r   n       e   n   t   r   i   e   s   }   )   ,   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       b   a   c   k   e   n   d   P   o   i   n   t   e   r   =   t   y   p   e   .   c   r   e   a   t   e   B   a   c   k   e   n   d   (   o   p   t   s   )   ;   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   _   _   w   a   s   m   f   s   _   m   o   u   n   t   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   m   o   u   n   t   p   o   i   n   t   )   ,   b   a   c   k   e   n   d   P   o   i   n   t   e   r   )   )   )   }   ,   u   n   m   o   u   n   t   :   m   o   u   n   t   p   o   i   n   t   =   >   F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   _   w   a   s   m   f   s   _   u   n   m   o   u   n   t   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   m   o   u   n   t   p   o   i   n   t   )   )   )   )   ,   m   k   n   o   d   :   (   p   a   t   h   ,   m   o   d   e   ,   d   e   v   )   =   >   F   S   _   m   k   n   o   d   (   p   a   t   h   ,   m   o   d   e   ,   d   e   v   )   ,   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   )   {   v   a   r       b   a   c   k   e   n   d   P   o   i   n   t   e   r   =   _   w   a   s   m   f   s   _   c   r   e   a   t   e   _   j   s   i   m   p   l   _   b   a   c   k   e   n   d   (   )   ;   v   a   r       d   e   f   i   n   e   d   O   p   s   =   {   u   s   e   r   R   e   a   d   :   o   p   s   .   r   e   a   d   ,   u   s   e   r   W   r   i   t   e   :   o   p   s   .   w   r   i   t   e   ,   a   l   l   o   c   F   i   l   e   :   f   i   l   e   =   >   {   w   a   s   m   F   S   D   e   v   i   c   e   S   t   r   e   a   m   s   [   f   i   l   e   ]   =   {   }   }   ,   f   r   e   e   F   i   l   e   :   f   i   l   e   =   >   {   w   a   s   m   F   S   D   e   v   i   c   e   S   t   r   e   a   m   s   [   f   i   l   e   ]   =   u   n   d   e   f   i   n   e   d   }   ,   g   e   t   S   i   z   e   :   f   i   l   e   =   >   {   }   ,   s   e   t   S   i   z   e   :   (   f   i   l   e   ,   s   i   z   e   )   =   >   0   ,   r   e   a   d   :   (   f   i   l   e   ,   b   u   f   f   e   r   ,   l   e   n   g   t   h   ,   o   f   f   s   e   t   )   =   >   {   v   a   r       b   u   f   f   e   r   A   r   r   a   y   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   .   s   u   b   a   r   r   a   y   (   b   u   f   f   e   r   ,   b   u   f   f   e   r   +   l   e   n   g   t   h   )   ;   t   r   y   {   v   a   r       b   y   t   e   s   R   e   a   d   =   d   e   f   i   n   e   d   O   p   s   .   u   s   e   r   R   e   a   d   (   w   a   s   m   F   S   D   e   v   i   c   e   S   t   r   e   a   m   s   [   f   i   l   e   ]   ,   b   u   f   f   e   r   A   r   r   a   y   ,   0   ,   l   e   n   g   t   h   ,   o   f   f   s   e   t   )   }   c   a   t   c   h   (   e   )   {   r   e   t   u   r   n   -   e   .   e   r   r   n   o   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   .   s   e   t   (   b   u   f   f   e   r   A   r   r   a   y   ,   b   u   f   f   e   r   )   ;   r   e   t   u   r   n       b   y   t   e   s   R   e   a   d   }   ,   w   r   i   t   e   :   (   f   i   l   e   ,   b   u   f   f   e   r   ,   l   e   n   g   t   h   ,   o   f   f   s   e   t   )   =   >   {   v   a   r       b   u   f   f   e   r   A   r   r   a   y   =   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   .   s   u   b   a   r   r   a   y   (   b   u   f   f   e   r   ,   b   u   f   f   e   r   +   l   e   n   g   t   h   )   ;   t   r   y   {   v   a   r       b   y   t   e   s   W   r   i   t   t   e   n   =   d   e   f   i   n   e   d   O   p   s   .   u   s   e   r   W   r   i   t   e   (   w   a   s   m   F   S   D   e   v   i   c   e   S   t   r   e   a   m   s   [   f   i   l   e   ]   ,   b   u   f   f   e   r   A   r   r   a   y   ,   0   ,   l   e   n   g   t   h   ,   o   f   f   s   e   t   )   }   c   a   t   c   h   (   e   )   {   r   e   t   u   r   n   -   e   .   e   r   r   n   o   }   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   .   s   e   t   (   b   u   f   f   e   r   A   r   r   a   y   ,   b   u   f   f   e   r   )   ;   r   e   t   u   r   n       b   y   t   e   s   W   r   i   t   t   e   n   }   }   ;   w   a   s   m   F   S   $   b   a   c   k   e   n   d   s   [   b   a   c   k   e   n   d   P   o   i   n   t   e   r   ]   =   d   e   f   i   n   e   d   O   p   s   ;   w   a   s   m   F   S   D   e   v   i   c   e   s   [   d   e   v   ]   =   b   a   c   k   e   n   d   P   o   i   n   t   e   r   }   ,   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   )   {   i   f   (   t   y   p   e   o   f       p   a   r   e   n   t   !   =   "   s   t   r   i   n   g   "   )   {   t   h   r   o   w       n   e   w       E   r   r   o   r   (   "   O   n   l   y       s   t   r   i   n   g       p   a   t   h   s       a   r   e       a   c   c   e   p   t   e   d   "   )   }   v   a   r       p   a   t   h   =   P   A   T   H   .   j   o   i   n   2   (   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   ,   {   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   }   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   )   }   }   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   )   }   ,   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   }   v   a   r       d   e   v   i   c   e   B   a   c   k   e   n   d   =   w   a   s   m   F   S   D   e   v   i   c   e   s   [   d   e   v   ]   ;   i   f   (   !   d   e   v   i   c   e   B   a   c   k   e   n   d   )   {   t   h   r   o   w       n   e   w       E   r   r   o   r   (   "   I   n   v   a   l   i   d       d   e   v   i   c   e       I   D   .   "   )   }   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   _   w   a   s   m   f   s   _   c   r   e   a   t   e   _   f   i   l   e   (   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   p   a   t   h   )   ,   m   o   d   e   ,   d   e   v   i   c   e   B   a   c   k   e   n   d   )   )   )   }   ,   r   e   n   a   m   e   (   o   l   d   P   a   t   h   ,   n   e   w   P   a   t   h   )   {   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   w   i   t   h   S   t   a   c   k   S   a   v   e   (   (   )   =   >   {   v   a   r       o   l   d   P   a   t   h   B   u   f   f   e   r   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   o   l   d   P   a   t   h   )   ;   v   a   r       n   e   w   P   a   t   h   B   u   f   f   e   r   =   s   t   r   i   n   g   T   o   U   T   F   8   O   n   S   t   a   c   k   (   n   e   w   P   a   t   h   )   ;   r   e   t   u   r   n       _   _   w   a   s   m   f   s   _   r   e   n   a   m   e   (   o   l   d   P   a   t   h   B   u   f   f   e   r   ,   n   e   w   P   a   t   h   B   u   f   f   e   r   )   }   )   )   }   ,   l   l   s   e   e   k   (   s   t   r   e   a   m   ,   o   f   f   s   e   t   ,   w   h   e   n   c   e   )   {   r   e   t   u   r   n       F   S   .   h   a   n   d   l   e   E   r   r   o   r   (   _   _   w   a   s   m   f   s   _   l   l   s   e   e   k   (   s   t   r   e   a   m   .   f   d   ,   B   i   g   I   n   t   (   o   f   f   s   e   t   )   ,   w   h   e   n   c   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   )   =   >   {   (   g   r   o   w   M   e   m   V   i   e   w   s   (   )   ,   H   E   A   P   8   )   .   s   e   t   (   a   r   r   a   y   ,   b   u   f   f   e   r   )   }   ;   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       p   r   e   v   i   o   u   s   A   s   y   n   c   =   A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a   ;   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   )   {   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   o   p   (   )   ;   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   )   }   v   a   r       a   s   y   n   c   M   o   d   e   =   o   p   t   s   ?   .   a   s   y   n   c   ;   r   u   n   t   i   m   e   K   e   e   p   a   l   i   v   e   P   u   s   h   (   )   ;   i   f   (   A   s   y   n   c   i   f   y   .   c   u   r   r   D   a   t   a   !   =   p   r   e   v   i   o   u   s   A   s   y   n   c   )   {   r   e   t   u   r   n       A   s   y   n   c   i   f   y   .   w   h   e   n   D   o   n   e   (   )   .   t   h   e   n   (   o   n   D   o   n   e   )   }   r   e   t   =   o   n   D   o   n   e   (   r   e   t   )   ;   i   f   (   a   s   y   n   c   M   o   d   e   )   r   e   t   u   r   n       P   r   o   m   i   s   e   .   r   e   s   o   l   v   e   (   r   e   t   )   ;   r   e   t   u   r   n       r   e   t   }   ;   v   a   r       c   w   r   a   p   =   (   i   d   e   n   t   ,   r   e   t   u   r   n   T   y   p   e   ,   a   r   g   T   y   p   e   s   ,   o   p   t   s   )   =   >   {   v   a   r       n   u   m   e   r   i   c   A   r   g   s   =   !   a   r   g   T   y   p   e   s   |   |   a   r   g   T   y   p   e   s   .   e   v   e   r   y   (   t   y   p   e   =   >   t   y   p   e   =   =   =   "   n   u   m   b   e   r   "   |   |   t   y   p   e   =   =   =   "   b   o   o   l   e   a   n   "   )   ;   v   a   r       n   u   m   e   r   i   c   R   e   t   =   r   e   t   u   r   n   T   y   p   e   !   =   =   "   s   t   r   i   n   g   "   ;   i   f   (   n   u   m   e   r   i   c   R   e   t   &   &   n   u   m   e   r   i   c   A   r   g   s   &   &   !   o   p   t   s   )   {   r   e   t   u   r   n       g   e   t   C   F   u   n   c   (   i   d   e   n   t   )   }   r   e   t   u   r   n   (   .   .   .   a   r   g   s   )   =   >   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       F   S   _   c   r   e   a   t   e   P   a   t   h   =   F   S   .   c   r   e   a   t   e   P   a   t   h   ;   P   T   h   r   e   a   d   .   i   n   i   t   (   )   ;   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   (   )   )   ;   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   )   )   ;   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   (   )   ;   r   e   g   i   s   t   e   r   P   r   e   M   a   i   n   L   o   o   p   (   (   )   =   >   {   i   f   (   G   L   .   c   u   r   r   e   n   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   s   P   r   o   x   i   e   d   &   &   !   G   L   .   c   u   r   r   e   n   t   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   &   &   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   G   L   c   t   x   .   c   o   m   m   i   t   )   {   G   L   .   c   u   r   r   e   n   t   C   o   n   t   e   x   t   .   G   L   c   t   x   .   c   o   m   m   i   t   (   )   }   }   )   ;   {   i   n   i   t   M   e   m   o   r   y   (   )   ;   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   "   ]   ;   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   (   )   (   )   }   }   }   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   w   r   a   p   "   ]   =   c   w   r   a   p   ;   M   o   d   u   l   e   [   "   F   S   _   p   r   e   l   o   a   d   F   i   l   e   "   ]   =   F   S   _   p   r   e   l   o   a   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   a   t   a   F   i   l   e   "   ]   =   F   S   _   c   r   e   a   t   e   D   a   t   a   F   i   l   e   ;   v   a   r       p   r   o   x   i   e   d   F   u   n   c   t   i   o   n   T   a   b   l   e   =   [   _   p   r   o   c   _   e   x   i   t   ,   e   x   i   t   O   n   M   a   i   n   T   h   r   e   a   d   ,   _   e   g   l   B   i   n   d   A   P   I   ,   _   e   g   l   C   h   o   o   s   e   C   o   n   f   i   g   ,   _   e   g   l   C   r   e   a   t   e   C   o   n   t   e   x   t   ,   _   e   g   l   C   r   e   a   t   e   W   i   n   d   o   w   S   u   r   f   a   c   e   ,   _   e   g   l   G   e   t   C   o   n   f   i   g   A   t   t   r   i   b   ,   _   e   g   l   G   e   t   D   i   s   p   l   a   y   ,   _   e   g   l   I   n   i   t   i   a   l   i   z   e   ,   _   e   g   l   M   a   k   e   C   u   r   r   e   n   t   ,   _   e   g   l   S   w   a   p   B   u   f   f   e   r   s   ,   _   e   n   v   i   r   o   n   _   g   e   t   ,   _   e   n   v   i   r   o   n   _   s   i   z   e   s   _   g   e   t   ]   ;   v   a   r       A   S   M   _   C   O   N   S   T   S   =   {   3   1   7   6   9   9   :   (   )   =   >   {   c   o   n   s   t       w   o   r   k   l   e   t   N   o   d   e   =   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   W   o   r   k   l   e   t   N   o   d   e   _   G   l   o   b   a   l   _   C   p   p   ;   i   f   (   w   o   r   k   l   e   t   N   o   d   e   )   {   w   o   r   k   l   e   t   N   o   d   e   .   p   o   r   t   .   p   o   s   t   M   e   s   s   a   g   e   (   {   t   y   p   e   :   "   s   t   o   p   P   l   a   y   b   a   c   k   "   }   )   }   }   ,   3   1   7   8   3   9   :   (   )   =   >   {   c   o   n   s   t       r   a   n   d   I   n   d   e   x   =   M   a   t   h   .   f   l   o   o   r   (   M   a   t   h   .   r   a   n   d   o   m   (   )   *   1   0   0   )   ;   v   a   r       j   s   S   t   r   i   n   g   =   "   /   p   r   e   s   e   t   s   /   p   r   e   s   e   t   _   "   +   r   a   n   d   I   n   d   e   x   +   "   .   m   i   l   k   "   ;   v   a   r       l   e   n   g   t   h   B   y   t   e   s   =   l   e   n   g   t   h   B   y   t   e   s   U   T   F   8   (   j   s   S   t   r   i   n   g   )   +   1   ;   r   e   t   u   r   n       s   t   r   i   n   g   T   o   N   e   w   U   T   F   8   (   j   s   S   t   r   i   n   g   )   }   ,   3   1   8   0   2   6   :   (   )   =   >   {   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   =   5   ;   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       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       p   a   t   h   N   a   m   e   =   c   u   r   r   e   n   t   O   r   i   g   i   n   +   "   /   t   e   x   t   u   r   e   s   "   ;   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   o   l   e   .   l   o   g   (   "   $   t   e   x   s   [   "   +   i   +   "   ]   :       "   ,   $   t   e   x   s   [   i   ]   )   ;   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   }   c   o   n   s   o   l   e   .   l   o   g   (   "   S   c   a   n   n   e   d       "   +   $   s   h   d   s   [   0   ]   +   "       S   h   a   d   e   r   s   .   "   )   ;   s   e   t   T   i   m   e   o   u   t   (   f   u   n   c   t   i   o   n   (   )   {   g   e   t   S   h   a   d   e   r   s   (   )   }   ,   2   5   0   0   )   }   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   (   )   }   v   a   r       l   a   s   t   S   o   n   g   F   i   l   e   N   a   m   e   =   "   "   ;   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       u   n   i   q   u   e   F   i   l   e   N   a   m   e   =   `   /   s   n   d   /   s   o   n   g   _   $   {   D   a   t   e   .   n   o   w   (   )   }   .   w   a   v   `   ;   c   o   n   s   o   l   e   .   l   o   g   (   `   J   S       E   v   e   n   t   :       R   e   c   e   i   v   e   d       n   e   w       s   o   n   g   .       W   r   i   t   i   n   g       t   o       u   n   i   q   u   e       p   a   t   h   :       $   {   u   n   i   q   u   e   F   i   l   e   N   a   m   e   }   `   )   ;   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   (   u   n   i   q   u   e   F   i   l   e   N   a   m   e   ,   f   i   l   l   )   ;   i   f   (   l   a   s   t   S   o   n   g   F   i   l   e   N   a   m   e   &   &   F   S   .   a   n   a   l   y   z   e   P   a   t   h   (   l   a   s   t   S   o   n   g   F   i   l   e   N   a   m   e   )   .   e   x   i   s   t   s   )   {   F   S   .   u   n   l   i   n   k   (   l   a   s   t   S   o   n   g   F   i   l   e   N   a   m   e   )   ;   c   o   n   s   o   l   e   .   l   o   g   (   `   J   S       E   v   e   n   t   :       C   l   e   a   n   e   d       u   p       p   r   e   v   i   o   u   s       s   o   n   g       f   i   l   e   :       $   {   l   a   s   t   S   o   n   g   F   i   l   e   N   a   m   e   }   `   )   }   l   a   s   t   S   o   n   g   F   i   l   e   N   a   m   e   =   u   n   i   q   u   e   F   i   l   e   N   a   m   e   ;   s   e   t   T   i   m   e   o   u   t   (   f   u   n   c   t   i   o   n   (   )   {   M   o   d   u   l   e   .   c   c   a   l   l   (   "   p   l   "   ,   n   u   l   l   ,   [   "   s   t   r   i   n   g   "   ]   ,   [   u   n   i   q   u   e   F   i   l   e   N   a   m   e   ]   )   ;   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   }   )   }   ,   2   5   0   )   }   )   ;   f   u   n   c   t   i   o   n       s   n   d   (   )   {   l   e   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   (   )   )   ;   l   e   t       s   o   n   g   S   r   c   =   $   s   n   g   s   [   r   a   n   d   S   o   n   g   +   5   ]   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   S   o   n   g   :       "   ,   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   (   "   #   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   5   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   .   g   e   t   C   u   s   t   o   m   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   (   "   #   c   r   e   a   t   e   S   p   r   i   t   e   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   .   c   r   e   a   t   e   S   p   r   i   t   e   (   )   }   )   ;   f   u   n   c   t   i   o   n       g   e   t   S   h   a   d   e   r   s   (   )   {   f   o   r   (   v   a   r       i   =   0   ;   i   <   1   0   0   ;   i   +   +   )   {   v   a   r       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   (   )   )   ;   v   a   r       m   i   l   k   S   r   c   =   $   s   h   d   s   [   r   a   n   d   S   h   d   +   5   ]   ;   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   (   i   )   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   G   o   t       "   +   "   /   p   r   e   s   e   t   s   /   p   r   e   s   e   t   _   "   +   i   +   "   .   m   i   l   k       f   r   o   m       "   +   m   i   l   k   S   r   c   +   "   .   "   )   }   M   o   d   u   l   e   .   a   d   d   P   a   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   .   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   e   3   )   }   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   ;   s   c   a   n   T   e   x   t   u   r   e   s   (   )   ;   s   c   a   n   S   o   n   g   s   (   )   ;   s   c   a   n   S   h   a   d   e   r   s   (   )   ;   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   ]   )   }   )   }   }   ;   f   u   n   c   t   i   o   n       j   s   _   f   e   e   d   _   s   t   r   e   a   m   _   d   a   t   a   _   t   o   _   p   r   o   j   e   c   t   m   (   p   m   _   h   a   n   d   l   e   ,   b   u   f   f   e   r   _   s   i   z   e   )   {   c   o   n   s   t       a   n   a   l   y   s   e   r   =   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   S   t   r   e   a   m   A   n   a   l   y   s   e   r   ;   c   o   n   s   t       p   c   m   B   u   f   f   e   r   =   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   S   t   r   e   a   m   B   u   f   f   e   r   ;   i   f   (   !   a   n   a   l   y   s   e   r   |   |   !   p   c   m   B   u   f   f   e   r   |   |   p   c   m   B   u   f   f   e   r   .   l   e   n   g   t   h   !   =   =   b   u   f   f   e   r   _   s   i   z   e   )   {   r   e   t   u   r   n   }   a   n   a   l   y   s   e   r   .   g   e   t   F   l   o   a   t   T   i   m   e   D   o   m   a   i   n   D   a   t   a   (   p   c   m   B   u   f   f   e   r   )   ;   M   o   d   u   l   e   .   p   r   o   j   e   c   t   m   _   p   c   m   _   a   d   d   _   f   l   o   a   t   (   p   m   _   h   a   n   d   l   e   ,   p   c   m   B   u   f   f   e   r   ,   p   c   m   B   u   f   f   e   r   .   l   e   n   g   t   h   ,   1   )   }   f   u   n   c   t   i   o   n       j   s   _   i   n   i   t   i   a   l   i   z   e   _   s   t   r   e   a   m   _   a   n   a   l   y   s   e   r   (   )   {   c   o   n   s   t       a   u   d   i   o   C   o   n   t   e   x   t   =   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   A   u   d   i   o   C   o   n   t   e   x   t   _   G   l   o   b   a   l   _   C   p   p   ;   c   o   n   s   t       a   u   d   i   o   E   l   e   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   (   "   a   u   d   i   o   -   s   t   r   e   a   m   -   e   l   e   m   e   n   t   "   )   ;   i   f   (   !   a   u   d   i   o   C   o   n   t   e   x   t   |   |   !   a   u   d   i   o   E   l   e   m   e   n   t   )   {   c   o   n   s   o   l   e   .   e   r   r   o   r   (   "   J   S       S   t   r   e   a   m       I   n   i   t   :       A   u   d   i   o   C   o   n   t   e   x   t       o   r       a   u   d   i   o       e   l   e   m   e   n   t       n   o   t       f   o   u   n   d   .   "   )   ;   r   e   t   u   r   n   }   c   o   n   s   t       a   n   a   l   y   s   e   r   =   a   u   d   i   o   C   o   n   t   e   x   t   .   c   r   e   a   t   e   A   n   a   l   y   s   e   r   (   )   ;   a   n   a   l   y   s   e   r   .   f   f   t   S   i   z   e   =   2   0   4   8   ;   c   o   n   s   t       s   o   u   r   c   e   =   a   u   d   i   o   C   o   n   t   e   x   t   .   c   r   e   a   t   e   M   e   d   i   a   E   l   e   m   e   n   t   S   o   u   r   c   e   (   a   u   d   i   o   E   l   e   m   e   n   t   )   ;   s   o   u   r   c   e   .   c   o   n   n   e   c   t   (   a   n   a   l   y   s   e   r   )   ;   a   n   a   l   y   s   e   r   .   c   o   n   n   e   c   t   (   a   u   d   i   o   C   o   n   t   e   x   t   .   d   e   s   t   i   n   a   t   i   o   n   )   ;   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   S   t   r   e   a   m   A   n   a   l   y   s   e   r   =   a   n   a   l   y   s   e   r   ;   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   S   t   r   e   a   m   B   u   f   f   e   r   =   n   e   w       F   l   o   a   t   3   2   A   r   r   a   y   (   a   n   a   l   y   s   e   r   .   f   f   t   S   i   z   e   )   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   J   S       S   t   r   e   a   m       I   n   i   t   :       M   e   d   i   a       e   l   e   m   e   n   t       a   n   d       a   n   a   l   y   s   e   r       c   o   n   n   e   c   t   e   d   .   "   )   }   f   u   n   c   t   i   o   n       j   s   _   i   n   i   t   i   a   l   i   z   e   _   w   o   r   k   l   e   t   _   s   y   s   t   e   m   _   o   n   c   e   (   p   m   _   h   a   n   d   l   e   _   f   o   r   _   a   d   d   p   c   m   )   {   i   f   (   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   A   u   d   i   o   C   o   n   t   e   x   t   _   G   l   o   b   a   l   _   C   p   p   )   {   r   e   t   u   r   n   }   t   r   y   {   c   o   n   s   t       a   u   d   i   o   C   o   n   t   e   x   t   =   n   e   w   (   w   i   n   d   o   w   .   A   u   d   i   o   C   o   n   t   e   x   t   |   |   w   i   n   d   o   w   .   w   e   b   k   i   t   A   u   d   i   o   C   o   n   t   e   x   t   )   ;   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   A   u   d   i   o   C   o   n   t   e   x   t   _   G   l   o   b   a   l   _   C   p   p   =   a   u   d   i   o   C   o   n   t   e   x   t   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   J   S       A   u   d   i   o       I   n   i   t   :       W   e   b       A   u   d   i   o       c   o   n   t   e   x   t       c   r   e   a   t   e   d   .   "   )   ;   (   a   s   y   n   c   (   )   =   >   {   a   w   a   i   t       a   u   d   i   o   C   o   n   t   e   x   t   .   a   u   d   i   o   W   o   r   k   l   e   t   .   a   d   d   M   o   d   u   l   e   (   "   p   r   o   j   e   c   t   m   _   a   u   d   i   o   _   p   r   o   c   e   s   s   o   r   .   j   s   "   )   ;   c   o   n   s   t       w   o   r   k   l   e   t   N   o   d   e   =   n   e   w       A   u   d   i   o   W   o   r   k   l   e   t   N   o   d   e   (   a   u   d   i   o   C   o   n   t   e   x   t   ,   "   p   r   o   j   e   c   t   m   -   a   u   d   i   o   -   p   r   o   c   e   s   s   o   r   "   )   ;   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   W   o   r   k   l   e   t   N   o   d   e   _   G   l   o   b   a   l   _   C   p   p   =   w   o   r   k   l   e   t   N   o   d   e   ;   w   o   r   k   l   e   t   N   o   d   e   .   p   o   r   t   .   o   n   m   e   s   s   a   g   e   =   e   v   e   n   t   =   >   {   i   f   (   e   v   e   n   t   .   d   a   t   a   .   t   y   p   e   =   =   =   "   p   c   m   D   a   t   a   "   &   &   M   o   d   u   l   e   .   p   r   o   j   e   c   t   m   _   p   c   m   _   a   d   d   _   f   l   o   a   t   )   {   M   o   d   u   l   e   .   p   r   o   j   e   c   t   m   _   p   c   m   _   a   d   d   _   f   l   o   a   t   (   p   m   _   h   a   n   d   l   e   _   f   o   r   _   a   d   d   p   c   m   ,   e   v   e   n   t   .   d   a   t   a   .   a   u   d   i   o   D   a   t   a   ,   e   v   e   n   t   .   d   a   t   a   .   s   a   m   p   l   e   s   P   e   r   C   h   a   n   n   e   l   ,   e   v   e   n   t   .   d   a   t   a   .   c   h   a   n   n   e   l   s   F   o   r   P   M   )   }   }   ;   w   o   r   k   l   e   t   N   o   d   e   .   c   o   n   n   e   c   t   (   a   u   d   i   o   C   o   n   t   e   x   t   .   d   e   s   t   i   n   a   t   i   o   n   )   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   J   S       A   u   d   i   o       I   n   i   t   :       A   u   d   i   o   W   o   r   k   l   e   t   N   o   d   e       c   r   e   a   t   e   d       a   n   d       c   o   n   n   e   c   t   e   d       p   e   r   m   a   n   e   n   t   l   y   .   "   )   }   )   (   )   }   c   a   t   c   h   (   e   )   {   c   o   n   s   o   l   e   .   e   r   r   o   r   (   "   J   S       A   u   d   i   o       I   n   i   t   :       F   a   i   l   e   d       t   o       i   n   i   t   i   a   l   i   z   e       w   o   r   k   l   e   t       s   y   s   t   e   m   :   "   ,   e   )   }   r   e   t   u   r   n   }   f   u   n   c   t   i   o   n       j   s   _   l   o   a   d   _   s   o   n   g   _   i   n   t   o   _   w   o   r   k   l   e   t   (   p   a   t   h   _   i   n   _   v   f   s   ,   l   o   o   p   ,   s   t   a   r   t   _   p   l   a   y   i   n   g   )   {   c   o   n   s   t       f   i   l   e   P   a   t   h   =   U   T   F   8   T   o   S   t   r   i   n   g   (   p   a   t   h   _   i   n   _   v   f   s   )   ;   c   o   n   s   t       a   u   d   i   o   C   o   n   t   e   x   t   =   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   A   u   d   i   o   C   o   n   t   e   x   t   _   G   l   o   b   a   l   _   C   p   p   ;   c   o   n   s   t       w   o   r   k   l   e   t   N   o   d   e   =   w   i   n   d   o   w   .   p   r   o   j   e   c   t   M   W   o   r   k   l   e   t   N   o   d   e   _   G   l   o   b   a   l   _   C   p   p   ;   i   f   (   !   a   u   d   i   o   C   o   n   t   e   x   t   |   |   !   w   o   r   k   l   e   t   N   o   d   e   )   {   r   e   t   u   r   n   }   a   s   y   n   c       f   u   n   c   t   i   o   n       d   e   c   o   d   e   A   n   d   S   e   n   d   (   )   {   t   r   y   {   c   o   n   s   t       f   i   l   e   D   a   t   a   U   i   n   t   8   A   r   r   a   y   =   F   S   .   r   e   a   d   F   i   l   e   (   f   i   l   e   P   a   t   h   )   ;   c   o   n   s   o   l   e   .   l   o   g   (   `   J   S       L   o   a   d       S   o   n   g   :       R   e   a   d       $   {   f   i   l   e   D   a   t   a   U   i   n   t   8   A   r   r   a   y   .   l   e   n   g   t   h   }       b   y   t   e   s       f   r   o   m       $   {   f   i   l   e   P   a   t   h   }   .   `   )   ;   i   f   (   f   i   l   e   D   a   t   a   U   i   n   t   8   A   r   r   a   y   .   l   e   n   g   t   h   =   =   =   0   )   {   r   e   t   u   r   n   }   c   o   n   s   t       a   u   d   i   o   D   a   t   a   A   r   r   a   y   B   u   f   f   e   r   =   f   i   l   e   D   a   t   a   U   i   n   t   8   A   r   r   a   y   .   b   u   f   f   e   r   .   s   l   i   c   e   (   f   i   l   e   D   a   t   a   U   i   n   t   8   A   r   r   a   y   .   b   y   t   e   O   f   f   s   e   t   ,   f   i   l   e   D   a   t   a   U   i   n   t   8   A   r   r   a   y   .   b   y   t   e   O   f   f   s   e   t   +   f   i   l   e   D   a   t   a   U   i   n   t   8   A   r   r   a   y   .   b   y   t   e   L   e   n   g   t   h   )   ;   i   f   (   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   "   )   {   a   w   a   i   t       a   u   d   i   o   C   o   n   t   e   x   t   .   r   e   s   u   m   e   (   )   }   c   o   n   s   t       d   e   c   o   d   e   d   B   u   f   f   e   r   =   a   w   a   i   t       a   u   d   i   o   C   o   n   t   e   x   t   .   d   e   c   o   d   e   A   u   d   i   o   D   a   t   a   (   a   u   d   i   o   D   a   t   a   A   r   r   a   y   B   u   f   f   e   r   )   ;   c   o   n   s   o   l   e   .   l   o   g   (   `   J   S       L   o   a   d       S   o   n   g   :       D   e   c   o   d   e   d       b   u   f   f   e   r   .       D   u   r   a   t   i   o   n   :       $   {   d   e   c   o   d   e   d   B   u   f   f   e   r   .   d   u   r   a   t   i   o   n   .   t   o   F   i   x   e   d   (   2   )   }   s   .       S   e   n   d   i   n   g       t   o       w   o   r   k   l   e   t   .   `   )   ;   c   o   n   s   t       r   a   w   C   h   a   n   n   e   l   D   a   t   a   =   A   r   r   a   y   .   f   r   o   m   (   {   l   e   n   g   t   h   :   d   e   c   o   d   e   d   B   u   f   f   e   r   .   n   u   m   b   e   r   O   f   C   h   a   n   n   e   l   s   }   ,   (   _   ,   i   )   =   >   d   e   c   o   d   e   d   B   u   f   f   e   r   .   g   e   t   C   h   a   n   n   e   l   D   a   t   a   (   i   )   )   ;   w   o   r   k   l   e   t   N   o   d   e   .   p   o   r   t   .   p   o   s   t   M   e   s   s   a   g   e   (   {   t   y   p   e   :   "   l   o   a   d   W   a   v   D   a   t   a   "   ,   c   h   a   n   n   e   l   D   a   t   a   :   r   a   w   C   h   a   n   n   e   l   D   a   t   a   ,   s   a   m   p   l   e   R   a   t   e   :   d   e   c   o   d   e   d   B   u   f   f   e   r   .   s   a   m   p   l   e   R   a   t   e   ,   l   o   o   p   ,   s   t   a   r   t   P   l   a   y   i   n   g   :   s   t   a   r   t   _   p   l   a   y   i   n   g   }   )   }   c   a   t   c   h   (   e   )   {   c   o   n   s   o   l   e   .   e   r   r   o   r   (   "   J   S       L   o   a   d       S   o   n   g   :       E   r   r   o   r       d   u   r   i   n   g       d   e   c   o   d   e       a   n   d       s   e   n   d   :   "   ,   e   )   }   }   d   e   c   o   d   e   A   n   d   S   e   n   d   (   )   ;   r   e   t   u   r   n   }   f   u   n   c   t   i   o   n       g   e   t   C   u   s   t   o   m   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   2   "   )   .   i   n   n   e   r   H   T   M   L   ;   c   o   n   s   o   l   e   .   l   o   g   (   "   G   e   t   t   i   n   g       p   r   e   s   e   t   :       "   +   p   t   h   )   ;   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   _   c   u   s   t   o   m   .   m   i   l   k   "   ,   s   f   i   l   )   ;   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   _   c   u   s   t   o   m   .   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   "   }   ,   2   0   )   }   }   )   ;   f   f   .   s   e   n   d   (   n   u   l   l   )   ;   r   e   t   u   r   n   }   f   u   n   c   t   i   o   n       g   e   t   S   h   a   d   e   r   (   n   u   m   )   {   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   o   l   e   .   l   o   g   (   "   G   e   t   t   i   n   g       p   r   e   s   e   t   :       "   +   p   t   h   )   ;   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   _   "   +   n   u   m   +   "   .   m   i   l   k   "   ,   s   f   i   l   )   ;   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       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   "   }   ,   2   0   )   }   }   )   ;   f   f   .   s   e   n   d   (   n   u   l   l   )   ;   r   e   t   u   r   n   }   v   a   r       _   _   Z   d   l   P   v   m   ,   _   p   t   h   r   e   a   d   _   s   e   l   f   ,   _   p   l   ,   _   s   e   t   _   a   u   d   i   o   _   s   o   u   r   c   e   _   t   o   _   s   t   r   e   a   m   ,   _   s   t   o   p   _   w   o   r   k   l   e   t   _   p   l   a   y   b   a   c   k   ,   _   m   a   i   n   ,   _   _   _   g   e   t   T   y   p   e   N   a   m   e   ,   _   _   e   m   b   i   n   d   _   i   n   i   t   i   a   l   i   z   e   _   b   i   n   d   i   n   g   s   ,   _   _   Z   d   a   P   v   ,   _   f   r   e   e   ,   _   m   a   l   l   o   c   ,   _   p   r   o   j   e   c   t   m   _   t   o   u   c   h   ,   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   f   r   e   e   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   t   l   s   _   i   n   i   t   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   i   n   i   t   ,   _   _   _   s   e   t   _   t   h   r   e   a   d   _   s   t   a   t   e   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   c   r   a   s   h   e   d   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   r   u   n   _   j   s   _   o   n   _   m   a   i   n   _   t   h   r   e   a   d   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   f   r   e   e   _   d   a   t   a   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   e   x   i   t   ,   _   s   t   r   n   d   u   p   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   c   h   e   c   k   _   m   a   i   l   b   o   x   ,   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   m   a   l   l   o   c   ,   _   _   Z   d   a   P   v   m   ,   _   _   Z   d   l   P   v   ,   _   _   Z   n   a   j   ,   _   _   Z   n   a   j   S   t   1   1   a   l   i   g   n   _   v   a   l   _   t   ,   _   _   Z   n   w   j   ,   _   _   Z   n   w   j   S   t   1   1   a   l   i   g   n   _   v   a   l   _   t   ,   _   _   _   l   i   b   c   _   c   a   l   l   o   c   ,   _   _   _   l   i   b   c   _   f   r   e   e   ,   _   _   _   l   i   b   c   _   m   a   l   l   o   c   ,   _   _   _   l   i   b   c   _   r   e   a   l   l   o   c   ,   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   c   a   l   l   o   c   ,   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   r   e   a   l   l   o   c   ,   _   m   a   l   l   o   c   _   s   i   z   e   ,   _   m   a   l   l   o   c   _   u   s   a   b   l   e   _   s   i   z   e   ,   _   r   e   a   l   l   o   c   f   ,   _   s   e   t   T   h   r   e   w   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   t   e   m   p   r   e   t   _   s   e   t   ,   _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   s   e   t   _   l   i   m   i   t   s   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   r   e   s   t   o   r   e   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   a   l   l   o   c   ,   _   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   ,   _   _   _   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   ,   _   _   _   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   ,   _   _   _   c   x   a   _   c   a   n   _   c   a   t   c   h   ,   _   _   _   c   x   a   _   g   e   t   _   e   x   c   e   p   t   i   o   n   _   p   t   r   ,   _   _   e   m   s   c   r   i   p   t   e   n   _   w   a   s   m   _   w   o   r   k   e   r   _   i   n   i   t   i   a   l   i   z   e   ,   _   _   w   a   s   m   f   s   _   r   e   a   d   _   f   i   l   e   ,   _   _   w   a   s   m   f   s   _   w   r   i   t   e   _   f   i   l   e   ,   _   _   w   a   s   m   f   s   _   m   k   d   i   r   ,   _   _   w   a   s   m   f   s   _   r   m   d   i   r   ,   _   _   w   a   s   m   f   s   _   o   p   e   n   ,   _   _   w   a   s   m   f   s   _   m   k   n   o   d   ,   _   _   w   a   s   m   f   s   _   u   n   l   i   n   k   ,   _   _   w   a   s   m   f   s   _   c   h   d   i   r   ,   _   _   w   a   s   m   f   s   _   s   y   m   l   i   n   k   ,   _   _   w   a   s   m   f   s   _   r   e   a   d   l   i   n   k   ,   _   _   w   a   s   m   f   s   _   w   r   i   t   e   ,   _   _   w   a   s   m   f   s   _   p   w   r   i   t   e   ,   _   _   w   a   s   m   f   s   _   c   h   m   o   d   ,   _   _   w   a   s   m   f   s   _   f   c   h   m   o   d   ,   _   _   w   a   s   m   f   s   _   l   c   h   m   o   d   ,   _   _   w   a   s   m   f   s   _   l   l   s   e   e   k   ,   _   _   w   a   s   m   f   s   _   r   e   n   a   m   e   ,   _   _   w   a   s   m   f   s   _   r   e   a   d   ,   _   _   w   a   s   m   f   s   _   p   r   e   a   d   ,   _   _   w   a   s   m   f   s   _   t   r   u   n   c   a   t   e   ,   _   _   w   a   s   m   f   s   _   f   t   r   u   n   c   a   t   e   ,   _   _   w   a   s   m   f   s   _   c   l   o   s   e   ,   _   _   w   a   s   m   f   s   _   m   m   a   p   ,   _   _   w   a   s   m   f   s   _   m   s   y   n   c   ,   _   _   w   a   s   m   f   s   _   m   u   n   m   a   p   ,   _   _   w   a   s   m   f   s   _   u   t   i   m   e   ,   _   _   w   a   s   m   f   s   _   s   t   a   t   ,   _   _   w   a   s   m   f   s   _   l   s   t   a   t   ,   _   _   w   a   s   m   f   s   _   m   o   u   n   t   ,   _   _   w   a   s   m   f   s   _   i   d   e   n   t   i   f   y   ,   _   _   w   a   s   m   f   s   _   r   e   a   d   d   i   r   _   s   t   a   r   t   ,   _   _   w   a   s   m   f   s   _   r   e   a   d   d   i   r   _   g   e   t   ,   _   _   w   a   s   m   f   s   _   r   e   a   d   d   i   r   _   f   i   n   i   s   h   ,   _   _   w   a   s   m   f   s   _   g   e   t   _   c   w   d   ,   _   w   a   s   m   f   s   _   c   r   e   a   t   e   _   j   s   i   m   p   l   _   b   a   c   k   e   n   d   ,   _   w   a   s   m   f   s   _   c   r   e   a   t   e   _   f   i   l   e   ,   _   w   a   s   m   f   s   _   u   n   m   o   u   n   t   ,   d   y   n   C   a   l   l   _   v   i   i   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   ,   d   y   n   C   a   l   l   _   v   i   ,   d   y   n   C   a   l   l   _   v   i   i   i   ,   d   y   n   C   a   l   l   _   f   i   i   i   ,   d   y   n   C   a   l   l   _   v   i   i   ,   d   y   n   C   a   l   l   _   v   ,   d   y   n   C   a   l   l   _   i   i   ,   d   y   n   C   a   l   l   _   i   ,   d   y   n   C   a   l   l   _   v   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   v   i   f   ,   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   f   i   i   ,   d   y   n   C   a   l   l   _   f   i   i   f   ,   d   y   n   C   a   l   l   _   i   i   f   ,   d   y   n   C   a   l   l   _   v   i   i   f   ,   d   y   n   C   a   l   l   _   v   i   f   f   f   f   ,   d   y   n   C   a   l   l   _   v   f   ,   d   y   n   C   a   l   l   _   d   i   ,   d   y   n   C   a   l   l   _   i   i   d   d   d   d   ,   d   y   n   C   a   l   l   _   d   i   d   ,   d   y   n   C   a   l   l   _   i   i   i   d   d   ,   d   y   n   C   a   l   l   _   v   f   f   f   f   ,   d   y   n   C   a   l   l   _   v   f   f   ,   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   v   f   i   ,   d   y   n   C   a   l   l   _   v   i   f   f   ,   d   y   n   C   a   l   l   _   v   i   f   f   f   ,   d   y   n   C   a   l   l   _   v   f   f   f   ,   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   v   i   i   f   i   ,   d   y   n   C   a   l   l   _   j   i   j   i   ,   d   y   n   C   a   l   l   _   i   i   d   i   i   i   i   ,   d   y   n   C   a   l   l   _   j   ,   d   y   n   C   a   l   l   _   v   i   i   j   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   d   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   j   i   i   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   d   i   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   j   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   j   j   ,   d   y   n   C   a   l   l   _   i   i   i   i   i   i   j   j   ,   d   y   n   C   a   l   l   _   j   i   ,   d   y   n   C   a   l   l   _   i   i   i   i   j   ,   d   y   n   C   a   l   l   _   i   i   j   ,   _   a   s   y   n   c   i   f   y   _   s   t   a   r   t   _   u   n   w   i   n   d   ,   _   a   s   y   n   c   i   f   y   _   s   t   o   p   _   u   n   w   i   n   d   ,   _   a   s   y   n   c   i   f   y   _   s   t   a   r   t   _   r   e   w   i   n   d   ,   _   a   s   y   n   c   i   f   y   _   s   t   o   p   _   r   e   w   i   n   d   ,   _   _   i   n   d   i   r   e   c   t   _   f   u   n   c   t   i   o   n   _   t   a   b   l   e   ,   w   a   s   m   T   a   b   l   e   ;   f   u   n   c   t   i   o   n       a   s   s   i   g   n   W   a   s   m   E   x   p   o   r   t   s   (   w   a   s   m   E   x   p   o   r   t   s   )   {   _   _   Z   d   l   P   v   m   =   M   o   d   u   l   e   [   "   _   _   Z   d   l   P   v   m   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   T   h   "   ]   ;   _   p   t   h   r   e   a   d   _   s   e   l   f   =   w   a   s   m   E   x   p   o   r   t   s   [   "   U   h   "   ]   ;   _   p   l   =   M   o   d   u   l   e   [   "   _   p   l   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   V   h   "   ]   ;   _   s   e   t   _   a   u   d   i   o   _   s   o   u   r   c   e   _   t   o   _   s   t   r   e   a   m   =   M   o   d   u   l   e   [   "   _   s   e   t   _   a   u   d   i   o   _   s   o   u   r   c   e   _   t   o   _   s   t   r   e   a   m   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   W   h   "   ]   ;   _   s   t   o   p   _   w   o   r   k   l   e   t   _   p   l   a   y   b   a   c   k   =   M   o   d   u   l   e   [   "   _   s   t   o   p   _   w   o   r   k   l   e   t   _   p   l   a   y   b   a   c   k   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   X   h   "   ]   ;   _   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   [   "   Z   h   "   ]   ;   _   _   _   g   e   t   T   y   p   e   N   a   m   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   _   h   "   ]   ;   _   _   e   m   b   i   n   d   _   i   n   i   t   i   a   l   i   z   e   _   b   i   n   d   i   n   g   s   =   w   a   s   m   E   x   p   o   r   t   s   [   "   $   h   "   ]   ;   _   _   Z   d   a   P   v   =   M   o   d   u   l   e   [   "   _   _   Z   d   a   P   v   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   a   i   "   ]   ;   _   f   r   e   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   b   i   "   ]   ;   _   m   a   l   l   o   c   =   w   a   s   m   E   x   p   o   r   t   s   [   "   c   i   "   ]   ;   _   p   r   o   j   e   c   t   m   _   t   o   u   c   h   =   M   o   d   u   l   e   [   "   _   p   r   o   j   e   c   t   m   _   t   o   u   c   h   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   d   i   "   ]   ;   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   f   r   e   e   =   M   o   d   u   l   e   [   "   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   f   r   e   e   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   e   i   "   ]   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   t   l   s   _   i   n   i   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   f   i   "   ]   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   i   n   i   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   g   i   "   ]   ;   _   _   _   s   e   t   _   t   h   r   e   a   d   _   s   t   a   t   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   h   i   "   ]   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   c   r   a   s   h   e   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   i   i   "   ]   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   r   u   n   _   j   s   _   o   n   _   m   a   i   n   _   t   h   r   e   a   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   j   i   "   ]   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   f   r   e   e   _   d   a   t   a   =   w   a   s   m   E   x   p   o   r   t   s   [   "   k   i   "   ]   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   e   x   i   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   l   i   "   ]   ;   _   s   t   r   n   d   u   p   =   M   o   d   u   l   e   [   "   _   s   t   r   n   d   u   p   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   m   i   "   ]   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   c   h   e   c   k   _   m   a   i   l   b   o   x   =   w   a   s   m   E   x   p   o   r   t   s   [   "   n   i   "   ]   ;   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   m   a   l   l   o   c   =   M   o   d   u   l   e   [   "   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   m   a   l   l   o   c   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   o   i   "   ]   ;   _   _   Z   d   a   P   v   m   =   M   o   d   u   l   e   [   "   _   _   Z   d   a   P   v   m   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   p   i   "   ]   ;   _   _   Z   d   l   P   v   =   M   o   d   u   l   e   [   "   _   _   Z   d   l   P   v   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   q   i   "   ]   ;   _   _   Z   n   a   j   =   M   o   d   u   l   e   [   "   _   _   Z   n   a   j   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   r   i   "   ]   ;   _   _   Z   n   a   j   S   t   1   1   a   l   i   g   n   _   v   a   l   _   t   =   M   o   d   u   l   e   [   "   _   _   Z   n   a   j   S   t   1   1   a   l   i   g   n   _   v   a   l   _   t   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   s   i   "   ]   ;   _   _   Z   n   w   j   =   M   o   d   u   l   e   [   "   _   _   Z   n   w   j   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   t   i   "   ]   ;   _   _   Z   n   w   j   S   t   1   1   a   l   i   g   n   _   v   a   l   _   t   =   M   o   d   u   l   e   [   "   _   _   Z   n   w   j   S   t   1   1   a   l   i   g   n   _   v   a   l   _   t   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   u   i   "   ]   ;   _   _   _   l   i   b   c   _   c   a   l   l   o   c   =   M   o   d   u   l   e   [   "   _   _   _   l   i   b   c   _   c   a   l   l   o   c   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   v   i   "   ]   ;   _   _   _   l   i   b   c   _   f   r   e   e   =   M   o   d   u   l   e   [   "   _   _   _   l   i   b   c   _   f   r   e   e   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   w   i   "   ]   ;   _   _   _   l   i   b   c   _   m   a   l   l   o   c   =   M   o   d   u   l   e   [   "   _   _   _   l   i   b   c   _   m   a   l   l   o   c   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   x   i   "   ]   ;   _   _   _   l   i   b   c   _   r   e   a   l   l   o   c   =   M   o   d   u   l   e   [   "   _   _   _   l   i   b   c   _   r   e   a   l   l   o   c   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   y   i   "   ]   ;   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   c   a   l   l   o   c   =   M   o   d   u   l   e   [   "   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   c   a   l   l   o   c   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   z   i   "   ]   ;   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   r   e   a   l   l   o   c   =   M   o   d   u   l   e   [   "   _   e   m   s   c   r   i   p   t   e   n   _   b   u   i   l   t   i   n   _   r   e   a   l   l   o   c   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   A   i   "   ]   ;   _   m   a   l   l   o   c   _   s   i   z   e   =   M   o   d   u   l   e   [   "   _   m   a   l   l   o   c   _   s   i   z   e   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   B   i   "   ]   ;   _   m   a   l   l   o   c   _   u   s   a   b   l   e   _   s   i   z   e   =   M   o   d   u   l   e   [   "   _   m   a   l   l   o   c   _   u   s   a   b   l   e   _   s   i   z   e   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   C   i   "   ]   ;   _   r   e   a   l   l   o   c   f   =   M   o   d   u   l   e   [   "   _   r   e   a   l   l   o   c   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   D   i   "   ]   ;   _   s   e   t   T   h   r   e   w   =   w   a   s   m   E   x   p   o   r   t   s   [   "   E   i   "   ]   ;   _   _   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   [   "   F   i   "   ]   ;   _   e   m   s   c   r   i   p   t   e   n   _   s   t   a   c   k   _   s   e   t   _   l   i   m   i   t   s   =   w   a   s   m   E   x   p   o   r   t   s   [   "   G   i   "   ]   ;   _   _   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   [   "   H   i   "   ]   ;   _   _   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   [   "   I   i   "   ]   ;   _   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   [   "   J   i   "   ]   ;   _   _   _   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   [   "   K   i   "   ]   ;   _   _   _   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   [   "   L   i   "   ]   ;   _   _   _   c   x   a   _   c   a   n   _   c   a   t   c   h   =   w   a   s   m   E   x   p   o   r   t   s   [   "   M   i   "   ]   ;   _   _   _   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   [   "   N   i   "   ]   ;   _   _   e   m   s   c   r   i   p   t   e   n   _   w   a   s   m   _   w   o   r   k   e   r   _   i   n   i   t   i   a   l   i   z   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   O   i   "   ]   ;   _   _   w   a   s   m   f   s   _   r   e   a   d   _   f   i   l   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   P   i   "   ]   ;   _   _   w   a   s   m   f   s   _   w   r   i   t   e   _   f   i   l   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   Q   i   "   ]   ;   _   _   w   a   s   m   f   s   _   m   k   d   i   r   =   w   a   s   m   E   x   p   o   r   t   s   [   "   R   i   "   ]   ;   _   _   w   a   s   m   f   s   _   r   m   d   i   r   =   w   a   s   m   E   x   p   o   r   t   s   [   "   S   i   "   ]   ;   _   _   w   a   s   m   f   s   _   o   p   e   n   =   w   a   s   m   E   x   p   o   r   t   s   [   "   T   i   "   ]   ;   _   _   w   a   s   m   f   s   _   m   k   n   o   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   U   i   "   ]   ;   _   _   w   a   s   m   f   s   _   u   n   l   i   n   k   =   w   a   s   m   E   x   p   o   r   t   s   [   "   V   i   "   ]   ;   _   _   w   a   s   m   f   s   _   c   h   d   i   r   =   w   a   s   m   E   x   p   o   r   t   s   [   "   W   i   "   ]   ;   _   _   w   a   s   m   f   s   _   s   y   m   l   i   n   k   =   w   a   s   m   E   x   p   o   r   t   s   [   "   X   i   "   ]   ;   _   _   w   a   s   m   f   s   _   r   e   a   d   l   i   n   k   =   w   a   s   m   E   x   p   o   r   t   s   [   "   Y   i   "   ]   ;   _   _   w   a   s   m   f   s   _   w   r   i   t   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   Z   i   "   ]   ;   _   _   w   a   s   m   f   s   _   p   w   r   i   t   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   _   i   "   ]   ;   _   _   w   a   s   m   f   s   _   c   h   m   o   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   $   i   "   ]   ;   _   _   w   a   s   m   f   s   _   f   c   h   m   o   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   a   j   "   ]   ;   _   _   w   a   s   m   f   s   _   l   c   h   m   o   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   b   j   "   ]   ;   _   _   w   a   s   m   f   s   _   l   l   s   e   e   k   =   w   a   s   m   E   x   p   o   r   t   s   [   "   c   j   "   ]   ;   _   _   w   a   s   m   f   s   _   r   e   n   a   m   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   d   j   "   ]   ;   _   _   w   a   s   m   f   s   _   r   e   a   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   e   j   "   ]   ;   _   _   w   a   s   m   f   s   _   p   r   e   a   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   f   j   "   ]   ;   _   _   w   a   s   m   f   s   _   t   r   u   n   c   a   t   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   g   j   "   ]   ;   _   _   w   a   s   m   f   s   _   f   t   r   u   n   c   a   t   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   h   j   "   ]   ;   _   _   w   a   s   m   f   s   _   c   l   o   s   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   i   j   "   ]   ;   _   _   w   a   s   m   f   s   _   m   m   a   p   =   w   a   s   m   E   x   p   o   r   t   s   [   "   j   j   "   ]   ;   _   _   w   a   s   m   f   s   _   m   s   y   n   c   =   w   a   s   m   E   x   p   o   r   t   s   [   "   k   j   "   ]   ;   _   _   w   a   s   m   f   s   _   m   u   n   m   a   p   =   w   a   s   m   E   x   p   o   r   t   s   [   "   l   j   "   ]   ;   _   _   w   a   s   m   f   s   _   u   t   i   m   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   m   j   "   ]   ;   _   _   w   a   s   m   f   s   _   s   t   a   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   n   j   "   ]   ;   _   _   w   a   s   m   f   s   _   l   s   t   a   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   o   j   "   ]   ;   _   _   w   a   s   m   f   s   _   m   o   u   n   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   p   j   "   ]   ;   _   _   w   a   s   m   f   s   _   i   d   e   n   t   i   f   y   =   w   a   s   m   E   x   p   o   r   t   s   [   "   q   j   "   ]   ;   _   _   w   a   s   m   f   s   _   r   e   a   d   d   i   r   _   s   t   a   r   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   r   j   "   ]   ;   _   _   w   a   s   m   f   s   _   r   e   a   d   d   i   r   _   g   e   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   s   j   "   ]   ;   _   _   w   a   s   m   f   s   _   r   e   a   d   d   i   r   _   f   i   n   i   s   h   =   w   a   s   m   E   x   p   o   r   t   s   [   "   t   j   "   ]   ;   _   _   w   a   s   m   f   s   _   g   e   t   _   c   w   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   u   j   "   ]   ;   _   w   a   s   m   f   s   _   c   r   e   a   t   e   _   j   s   i   m   p   l   _   b   a   c   k   e   n   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   v   j   "   ]   ;   _   w   a   s   m   f   s   _   c   r   e   a   t   e   _   f   i   l   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   w   j   "   ]   ;   _   w   a   s   m   f   s   _   u   n   m   o   u   n   t   =   w   a   s   m   E   x   p   o   r   t   s   [   "   x   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   y   j   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   z   j   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   A   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   =   d   y   n   C   a   l   l   s   [   "   v   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   B   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   C   j   "   ]   ;   d   y   n   C   a   l   l   _   f   i   i   i   =   d   y   n   C   a   l   l   s   [   "   f   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   D   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   E   j   "   ]   ;   d   y   n   C   a   l   l   _   v   =   d   y   n   C   a   l   l   s   [   "   v   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   F   j   "   ]   ;   d   y   n   C   a   l   l   _   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   G   j   "   ]   ;   d   y   n   C   a   l   l   _   i   =   d   y   n   C   a   l   l   s   [   "   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   H   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   I   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   f   =   d   y   n   C   a   l   l   s   [   "   v   i   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   J   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   K   j   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   L   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   M   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   N   j   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   O   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   i   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   P   j   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   Q   j   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   R   j   "   ]   ;   d   y   n   C   a   l   l   _   f   i   i   =   d   y   n   C   a   l   l   s   [   "   f   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   S   j   "   ]   ;   d   y   n   C   a   l   l   _   f   i   i   f   =   d   y   n   C   a   l   l   s   [   "   f   i   i   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   T   j   "   ]   ;   d   y   n   C   a   l   l   _   i   i   f   =   d   y   n   C   a   l   l   s   [   "   i   i   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   U   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   f   =   d   y   n   C   a   l   l   s   [   "   v   i   i   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   V   j   "   ]   ;   d   y   n   C   a   l   l   _   v   i   f   f   f   f   =   d   y   n   C   a   l   l   s   [   "   v   i   f   f   f   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   W   j   "   ]   ;   d   y   n   C   a   l   l   _   v   f   =   d   y   n   C   a   l   l   s   [   "   v   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   X   j   "   ]   ;   d   y   n   C   a   l   l   _   d   i   =   d   y   n   C   a   l   l   s   [   "   d   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   Y   j   "   ]   ;   d   y   n   C   a   l   l   _   i   i   d   d   d   d   =   d   y   n   C   a   l   l   s   [   "   i   i   d   d   d   d   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   Z   j   "   ]   ;   d   y   n   C   a   l   l   _   d   i   d   =   d   y   n   C   a   l   l   s   [   "   d   i   d   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   _   j   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   d   d   =   d   y   n   C   a   l   l   s   [   "   i   i   i   d   d   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   $   j   "   ]   ;   d   y   n   C   a   l   l   _   v   f   f   f   f   =   d   y   n   C   a   l   l   s   [   "   v   f   f   f   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   a   k   "   ]   ;   d   y   n   C   a   l   l   _   v   f   f   =   d   y   n   C   a   l   l   s   [   "   v   f   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   b   k   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   c   k   "   ]   ;   d   y   n   C   a   l   l   _   v   f   i   =   d   y   n   C   a   l   l   s   [   "   v   f   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   d   k   "   ]   ;   d   y   n   C   a   l   l   _   v   i   f   f   =   d   y   n   C   a   l   l   s   [   "   v   i   f   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   e   k   "   ]   ;   d   y   n   C   a   l   l   _   v   i   f   f   f   =   d   y   n   C   a   l   l   s   [   "   v   i   f   f   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   f   k   "   ]   ;   d   y   n   C   a   l   l   _   v   f   f   f   =   d   y   n   C   a   l   l   s   [   "   v   f   f   f   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   g   k   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   i   i   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   h   k   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   f   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   f   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   i   k   "   ]   ;   d   y   n   C   a   l   l   _   j   i   j   i   =   d   y   n   C   a   l   l   s   [   "   j   i   j   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   j   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   d   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   d   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   k   k   "   ]   ;   d   y   n   C   a   l   l   _   j   =   d   y   n   C   a   l   l   s   [   "   j   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   l   k   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   j   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   j   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   m   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   d   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   d   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   n   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   o   k   "   ]   ;   d   y   n   C   a   l   l   _   j   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   j   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   p   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   i   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   q   k   "   ]   ;   d   y   n   C   a   l   l   _   d   i   i   i   =   d   y   n   C   a   l   l   s   [   "   d   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   r   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   s   k   "   ]   ;   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   v   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   t   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   i   i   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   i   i   i   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   u   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   j   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   j   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   v   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   j   j   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   j   j   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   w   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   i   i   j   j   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   i   i   j   j   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   x   k   "   ]   ;   d   y   n   C   a   l   l   _   j   i   =   d   y   n   C   a   l   l   s   [   "   j   i   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   y   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   i   i   j   =   d   y   n   C   a   l   l   s   [   "   i   i   i   i   j   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   z   k   "   ]   ;   d   y   n   C   a   l   l   _   i   i   j   =   d   y   n   C   a   l   l   s   [   "   i   i   j   "   ]   =   w   a   s   m   E   x   p   o   r   t   s   [   "   A   k   "   ]   ;   _   a   s   y   n   c   i   f   y   _   s   t   a   r   t   _   u   n   w   i   n   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   B   k   "   ]   ;   _   a   s   y   n   c   i   f   y   _   s   t   o   p   _   u   n   w   i   n   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   C   k   "   ]   ;   _   a   s   y   n   c   i   f   y   _   s   t   a   r   t   _   r   e   w   i   n   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   D   k   "   ]   ;   _   a   s   y   n   c   i   f   y   _   s   t   o   p   _   r   e   w   i   n   d   =   w   a   s   m   E   x   p   o   r   t   s   [   "   E   k   "   ]   ;   _   _   i   n   d   i   r   e   c   t   _   f   u   n   c   t   i   o   n   _   t   a   b   l   e   =   w   a   s   m   T   a   b   l   e   =   w   a   s   m   E   x   p   o   r   t   s   [   "   Y   h   "   ]   }   v   a   r       w   a   s   m   I   m   p   o   r   t   s   ;   f   u   n   c   t   i   o   n       a   s   s   i   g   n   W   a   s   m   I   m   p   o   r   t   s   (   )   {   w   a   s   m   I   m   p   o   r   t   s   =   {   b   a   :   _   _   _   a   s   s   e   r   t   _   f   a   i   l   ,   p   :   _   _   _   c   x   a   _   b   e   g   i   n   _   c   a   t   c   h   ,   v   :   _   _   _   c   x   a   _   e   n   d   _   c   a   t   c   h   ,   b   :   _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   2   ,   j   :   _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   3   ,   E   :   _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   4   ,   j   a   :   _   _   _   c   x   a   _   f   i   n   d   _   m   a   t   c   h   i   n   g   _   c   a   t   c   h   _   5   ,   K   a   :   _   _   _   c   x   a   _   r   e   t   h   r   o   w   ,   s   :   _   _   _   c   x   a   _   t   h   r   o   w   ,   F   a   :   _   _   _   c   x   a   _   u   n   c   a   u   g   h   t   _   e   x   c   e   p   t   i   o   n   s   ,   c   :   _   _   _   r   e   s   u   m   e   E   x   c   e   p   t   i   o   n   ,   I   b   :   _   _   a   b   o   r   t   _   j   s   ,   B   a   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   b   i   g   i   n   t   ,   h   b   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   b   o   o   l   ,   f   b   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   e   m   v   a   l   ,   A   a   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   f   l   o   a   t   ,   C   :   _   _   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   ,   y   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   m   e   m   o   r   y   _   v   i   e   w   ,   g   b   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   s   t   d   _   s   t   r   i   n   g   ,   o   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   ,   i   b   :   _   _   e   m   b   i   n   d   _   r   e   g   i   s   t   e   r   _   v   o   i   d   ,   P   b   :   _   _   e   m   s   c   r   i   p   t   e   n   _   i   n   i   t   _   m   a   i   n   _   t   h   r   e   a   d   _   j   s   ,   J   b   :   _   _   e   m   s   c   r   i   p   t   e   n   _   n   o   t   i   f   y   _   m   a   i   l   b   o   x   _   p   o   s   t   m   e   s   s   a   g   e   ,   N   b   :   _   _   e   m   s   c   r   i   p   t   e   n   _   r   e   c   e   i   v   e   _   o   n   _   m   a   i   n   _   t   h   r   e   a   d   _   j   s   ,   B   b   :   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   c   l   e   a   n   u   p   ,   O   b   :   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   m   a   i   l   b   o   x   _   a   w   a   i   t   ,   R   b   :   _   _   e   m   s   c   r   i   p   t   e   n   _   t   h   r   e   a   d   _   s   e   t   _   s   t   r   o   n   g   r   e   f   ,   q   a   :   _   _   e   m   v   a   l   _   c   r   e   a   t   e   _   i   n   v   o   k   e   r   ,   b   b   :   _   _   e   m   v   a   l   _   d   e   c   r   e   f   ,   k   b   :   _   _   e   m   v   a   l   _   g   e   t   _   p   r   o   p   e   r   t   y   ,   C   a   :   _   _   e   m   v   a   l   _   i   n   c   r   e   f   ,   p   a   :   _   _   e   m   v   a   l   _   i   n   v   o   k   e   ,   o   b   :   _   _   e   m   v   a   l   _   n   e   w   _   c   s   t   r   i   n   g   ,   j   b   :   _   _   e   m   v   a   l   _   r   u   n   _   d   e   s   t   r   u   c   t   o   r   s   ,   C   b   :   _   _   t   z   s   e   t   _   j   s   ,   x   b   :   _   _   w   a   s   m   f   s   _   c   o   p   y   _   p   r   e   l   o   a   d   e   d   _   f   i   l   e   _   d   a   t   a   ,   v   b   :   _   _   w   a   s   m   f   s   _   g   e   t   _   n   u   m   _   p   r   e   l   o   a   d   e   d   _   d   i   r   s   ,   w   b   :   _   _   w   a   s   m   f   s   _   g   e   t   _   n   u   m   _   p   r   e   l   o   a   d   e   d   _   f   i   l   e   s   ,   t   b   :   _   _   w   a   s   m   f   s   _   g   e   t   _   p   r   e   l   o   a   d   e   d   _   c   h   i   l   d   _   p   a   t   h   ,   r   b   :   _   _   w   a   s   m   f   s   _   g   e   t   _   p   r   e   l   o   a   d   e   d   _   f   i   l   e   _   m   o   d   e   ,   y   b   :   _   _   w   a   s   m   f   s   _   g   e   t   _   p   r   e   l   o   a   d   e   d   _   f   i   l   e   _   s   i   z   e   ,   u   b   :   _   _   w   a   s   m   f   s   _   g   e   t   _   p   r   e   l   o   a   d   e   d   _   p   a   r   e   n   t   _   p   a   t   h   ,   s   b   :   _   _   w   a   s   m   f   s   _   g   e   t   _   p   r   e   l   o   a   d   e   d   _   p   a   t   h   _   n   a   m   e   ,   q   b   :   _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   a   l   l   o   c   _   f   i   l   e   ,   D   a   :   _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   f   r   e   e   _   f   i   l   e   ,   p   b   :   _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   g   e   t   _   s   i   z   e   ,   n   b   :   _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   r   e   a   d   ,   l   b   :   _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   s   e   t   _   s   i   z   e   ,   m   b   :   _   _   w   a   s   m   f   s   _   j   s   i   m   p   l   _   w   r   i   t   e   ,   A   b   :   _   _   w   a   s   m   f   s   _   s   t   d   i   n   _   g   e   t   _   c   h   a   r   ,   L   b   :   _   c   l   o   c   k   _   t   i   m   e   _   g   e   t   ,   H   d   :   _   e   g   l   B   i   n   d   A   P   I   ,   m   e   :   _   e   g   l   C   h   o   o   s   e   C   o   n   f   i   g   ,   b   e   :   _   e   g   l   C   r   e   a   t   e   C   o   n   t   e   x   t   ,   S   d   :   _   e   g   l   C   r   e   a   t   e   W   i   n   d   o   w   S   u   r   f   a   c   e   ,   F   :   _   e   g   l   G   e   t   C   o   n   f   i   g   A   t   t   r   i   b   ,   S   e   :   _   e   g   l   G   e   t   D   i   s   p   l   a   y   ,   H   e   :   _   e   g   l   I   n   i   t   i   a   l   i   z   e   ,   b   d   :   _   e   g   l   M   a   k   e   C   u   r   r   e   n   t   ,   l   h   :   _   e   g   l   S   w   a   p   B   u   f   f   e   r   s   ,   N   a   :   _   e   m   s   c   r   i   p   t   e   n   _   a   s   m   _   c   o   n   s   t   _   i   n   t   ,   b   f   :   _   e   m   s   c   r   i   p   t   e   n   _   a   s   m   _   c   o   n   s   t   _   p   t   r   ,   M   b   :   _   e   m   s   c   r   i   p   t   e   n   _   c   h   e   c   k   _   b   l   o   c   k   i   n   g   _   a   l   l   o   w   e   d   ,   t   :   _   e   m   s   c   r   i   p   t   e   n   _   d   a   t   e   _   n   o   w   ,   T   :   _   e   m   s   c   r   i   p   t   e   n   _   e   r   r   ,   Q   b   :   _   e   m   s   c   r   i   p   t   e   n   _   e   x   i   t   _   w   i   t   h   _   l   i   v   e   _   r   u   n   t   i   m   e   ,   R   :   _   e   m   s   c   r   i   p   t   e   n   _   g   e   t   _   n   o   w   ,   Z   g   :   _   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   ,   Y   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   A   t   t   a   c   h   S   h   a   d   e   r   ,   Q   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   e   g   i   n   Q   u   e   r   y   ,   p   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   ,   r   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   ,   X   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   ,   W   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   B   u   f   f   e   r   ,   o   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   ,   p   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   ,   V   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   ,   U   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   ,   t   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   S   a   m   p   l   e   r   ,   T   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   i   n   d   T   e   x   t   u   r   e   ,   k   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   ,   x   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   ,   g   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   ,   S   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   C   o   l   o   r   ,   R   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   ,   Q   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   ,   P   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   l   e   n   d   F   u   n   c   ,   O   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   ,   C   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   ,   N   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   B   u   f   f   e   r   D   a   t   a   ,   M   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   ,   L   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   ,   K   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   ,   S   c   :   _   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   ,   T   c   :   _   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   ,   V   c   :   _   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   ,   U   c   :   _   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   ,   J   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   C   o   l   o   r   ,   I   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   l   e   a   r   D   e   p   t   h   f   ,   H   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   ,   D   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   ,   g   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   ,   G   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   o   l   o   r   M   a   s   k   ,   F   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   ,   E   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   ,   W   d   :   _   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   ,   D   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   ,   V   d   :   _   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   ,   Q   c   :   _   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   ,   C   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   ,   B   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   ,   X   d   :   _   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   ,   A   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   ,   z   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   ,   y   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   C   u   l   l   F   a   c   e   ,   w   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   ,   v   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   ,   u   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   ,   T   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   ,   r   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   ,   t   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   ,   v   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   ,   s   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   ,   E   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   l   e   t   e   S   y   n   c   ,   r   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   ,   j   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   ,   v   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   ,   f   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   ,   q   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   p   t   h   F   u   n   c   ,   p   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   p   t   h   M   a   s   k   ,   o   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   e   p   t   h   R   a   n   g   e   f   ,   n   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   ,   m   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   i   s   a   b   l   e   ,   l   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   ,   k   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   A   r   r   a   y   s   ,   J   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   ,   b   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   ,   V   b   :   _   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   ,   d   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   ,   W   b   :   _   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   ,   K   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   D   r   a   w   B   u   f   f   e   r   s   ,   a   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   ,   c   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   ,   j   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   ,   H   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   ,   $   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   I   n   s   t   a   n   c   e   d   A   N   G   L   E   ,   S   b   :   _   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   ,   U   b   :   _   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   ,   c   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   ,   _   d   :   _   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   ,   i   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   a   b   l   e   ,   h   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   ,   P   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   d   Q   u   e   r   y   ,   o   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   E   n   d   Q   u   e   r   y   E   X   T   ,   q   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   ,   G   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   e   n   c   e   S   y   n   c   ,   g   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   i   n   i   s   h   ,   f   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   l   u   s   h   ,   y   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   ,   e   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   ,   d   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   ,   A   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   ,   c   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   F   r   o   n   t   F   a   c   e   ,   b   g   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   B   u   f   f   e   r   s   ,   $   f   :   _   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   ,   U   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   Q   u   e   r   i   e   s   ,   s   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   ,   _   f   :   _   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   ,   w   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   S   a   m   p   l   e   r   s   ,   Z   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   n   T   e   x   t   u   r   e   s   ,   i   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   ,   u   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   ,   e   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   ,   a   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   ,   Y   f   :   _   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   ,   X   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   ,   L   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   ,   M   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   ,   O   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   ,   W   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   ,   V   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   ,   T   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   B   o   o   l   e   a   n   v   ,   y   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   ,   S   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   ,   L   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   ,   R   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   E   r   r   o   r   ,   Q   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   F   l   o   a   t   v   ,   d   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   ,   P   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   ,   z   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   ,   B   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   ,   s   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   ,   O   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   I   n   t   e   g   e   r   v   ,   Z   b   :   _   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   ,   e   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   ,   M   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   ,   N   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   ,   i   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   ,   k   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   ,   h   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   ,   N   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   ,   j   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   ,   O   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   Q   u   e   r   y   i   v   ,   m   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   ,   L   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   ,   n   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   ,   o   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   ,   I   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   ,   H   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   ,   G   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   ,   K   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   h   a   d   e   r   i   v   ,   F   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   t   r   i   n   g   ,   R   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   t   r   i   n   g   i   ,   A   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   G   e   t   S   y   n   c   i   v   ,   E   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   ,   D   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   ,   m   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   ,   N   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   ,   P   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   ,   A   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   ,   C   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   ,   B   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   ,   e   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   ,   k   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   ,   j   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   ,   w   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   ,   z   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   ,   x   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   ,   v   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   H   i   n   t   ,   b   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   ,   a   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   ,   u   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   B   u   f   f   e   r   ,   t   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   E   n   a   b   l   e   d   ,   s   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   ,   r   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   P   r   o   g   r   a   m   ,   R   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   Q   u   e   r   y   ,   q   h   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   Q   u   e   r   y   E   X   T   ,   q   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   ,   u   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   S   a   m   p   l   e   r   ,   p   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   S   h   a   d   e   r   ,   F   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   S   y   n   c   ,   o   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   I   s   T   e   x   t   u   r   e   ,   h   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   ,   t   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   ,   d   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   ,   m   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   L   i   n   e   W   i   d   t   h   ,   l   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   L   i   n   k   P   r   o   g   r   a   m   ,   z   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   ,   g   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   ,   k   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   P   i   x   e   l   S   t   o   r   e   i   ,   f   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   ,   j   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   ,   h   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   ,   d   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   ,   c   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   ,   n   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   ,   $   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   a   d   B   u   f   f   e   r   ,   h   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   R   e   a   d   P   i   x   e   l   s   ,   g   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   ,   f   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   ,   B   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   ,   f   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   ,   e   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   ,   q   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   ,   p   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   ,   s   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   ,   r   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   ,   d   f   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   c   i   s   s   o   r   ,   c   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   ,   a   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   ,   $   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   F   u   n   c   ,   _   e   :   _   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   ,   Z   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   M   a   s   k   ,   Y   e   :   _   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   ,   X   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   S   t   e   n   c   i   l   O   p   ,   W   e   :   _   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   ,   V   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   I   m   a   g   e   2   D   ,   Z   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   I   m   a   g   e   3   D   ,   U   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   ,   T   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   ,   R   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   ,   Q   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   ,   $   b   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   S   t   o   r   a   g   e   2   D   ,   _   b   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   T   e   x   S   t   o   r   a   g   e   3   D   ,   P   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   ,   Y   d   :   _   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   ,   n   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   ,   O   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   f   ,   N   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   f   v   ,   M   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   i   ,   L   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   i   v   ,   c   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   u   i   ,   Z   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   1   u   i   v   ,   K   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   f   ,   J   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   f   v   ,   I   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   i   ,   G   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   i   v   ,   a   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   u   i   ,   Y   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   2   u   i   v   ,   F   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   f   ,   E   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   f   v   ,   D   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   i   ,   C   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   i   v   ,   $   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   u   i   ,   X   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   3   u   i   v   ,   B   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   f   ,   A   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   f   v   ,   z   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   i   ,   y   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   i   v   ,   _   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   u   i   ,   W   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   i   f   o   r   m   4   u   i   v   ,   K   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   ,   x   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   ,   J   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   ,   G   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   ,   w   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   ,   I   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   ,   E   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   ,   v   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   ,   F   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   ,   D   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   ,   M   d   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   n   m   a   p   B   u   f   f   e   r   ,   u   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   U   s   e   P   r   o   g   r   a   m   ,   t   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   ,   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   1   f   ,   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   1   f   v   ,   q   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   ,   p   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   ,   o   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   ,   n   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   ,   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   4   f   ,   k   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   ,   l   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   ,   _   g   :   _   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   ,   X   b   :   _   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   ,   e   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   ,   Y   b   :   _   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   ,   i   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   ,   g   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   ,   h   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   ,   f   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   ,   l   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   ,   j   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   ,   i   e   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   V   i   e   w   p   o   r   t   ,   C   c   :   _   e   m   s   c   r   i   p   t   e   n   _   g   l   W   a   i   t   S   y   n   c   ,   z   b   :   _   e   m   s   c   r   i   p   t   e   n   _   o   u   t   ,   R   h   :   _   e   m   s   c   r   i   p   t   e   n   _   r   a   n   d   o   m   ,   E   b   :   _   e   m   s   c   r   i   p   t   e   n   _   r   e   s   i   z   e   _   h   e   a   p   ,   y   f   :   _   e   m   s   c   r   i   p   t   e   n   _   s   e   t   _   m   a   i   n   _   l   o   o   p   ,   n   f   :   _   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   ,   w   d   :   _   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   ,   m   c   :   _   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   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   ,   I   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   ,   G   b   :   _   e   n   v   i   r   o   n   _   g   e   t   ,   H   b   :   _   e   n   v   i   r   o   n   _   s   i   z   e   s   _   g   e   t   ,   J   a   :   _   e   x   i   t   ,   T   b   :   g   e   t   C   u   s   t   o   m   S   h   a   d   e   r   ,   K   b   :   g   e   t   S   h   a   d   e   r   ,   x   a   :   _   g   l   A   c   t   i   v   e   T   e   x   t   u   r   e   ,   w   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   ,   A   :   _   g   l   B   i   n   d   F   r   a   m   e   b   u   f   f   e   r   ,   X   :   _   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   ,   U   :   _   g   l   B   i   n   d   V   e   r   t   e   x   A   r   r   a   y   ,   O   a   :   _   g   l   B   l   e   n   d   F   u   n   c   ,   I   :   _   g   l   B   u   f   f   e   r   D   a   t   a   ,   J   :   _   g   l   B   u   f   f   e   r   S   u   b   D   a   t   a   ,   a   h   :   _   g   l   C   l   e   a   r   ,   T   a   :   _   g   l   C   o   m   p   i   l   e   S   h   a   d   e   r   ,   Q   :   _   g   l   C   o   m   p   r   e   s   s   e   d   T   e   x   I   m   a   g   e   2   D   ,   y   h   :   _   g   l   C   o   p   y   T   e   x   S   u   b   I   m   a   g   e   2   D   ,   Z   a   :   _   g   l   C   r   e   a   t   e   P   r   o   g   r   a   m   ,   V   a   :   _   g   l   C   r   e   a   t   e   S   h   a   d   e   r   ,   J   f   :   _   g   l   C   u   l   l   F   a   c   e   ,   F   h   :   _   g   l   D   e   l   e   t   e   B   u   f   f   e   r   s   ,   A   h   :   _   g   l   D   e   l   e   t   e   F   r   a   m   e   b   u   f   f   e   r   s   ,   Y   a   :   _   g   l   D   e   l   e   t   e   P   r   o   g   r   a   m   ,   a   b   :   _   g   l   D   e   l   e   t   e   S   a   m   p   l   e   r   s   ,   n   a   :   _   g   l   D   e   l   e   t   e   S   h   a   d   e   r   ,   y   a   :   _   g   l   D   e   l   e   t   e   T   e   x   t   u   r   e   s   ,   E   h   :   _   g   l   D   e   l   e   t   e   V   e   r   t   e   x   A   r   r   a   y   s   ,   v   a   :   _   g   l   D   e   t   a   c   h   S   h   a   d   e   r   ,   r   a   :   _   g   l   D   i   s   a   b   l   e   ,   Q   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   ,   z   h   :   _   g   l   D   r   a   w   B   u   f   f   e   r   s   ,   D   h   :   _   g   l   D   r   a   w   E   l   e   m   e   n   t   s   ,   s   a   :   _   g   l   E   n   a   b   l   e   ,   k   a   :   _   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   ,   P   a   :   _   g   l   F   r   a   m   e   b   u   f   f   e   r   T   e   x   t   u   r   e   2   D   ,   U   f   :   _   g   l   F   r   o   n   t   F   a   c   e   ,   G   h   :   _   g   l   G   e   n   B   u   f   f   e   r   s   ,   C   h   :   _   g   l   G   e   n   F   r   a   m   e   b   u   f   f   e   r   s   ,   c   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   ,   R   a   :   _   g   l   G   e   n   V   e   r   t   e   x   A   r   r   a   y   s   ,   $   a   :   _   g   l   G   e   n   e   r   a   t   e   M   i   p   m   a   p   ,   a   a   :   _   g   l   G   e   t   E   r   r   o   r   ,   W   :   _   g   l   G   e   t   I   n   t   e   g   e   r   v   ,   W   a   :   _   g   l   G   e   t   P   r   o   g   r   a   m   I   n   f   o   L   o   g   ,   u   a   :   _   g   l   G   e   t   P   r   o   g   r   a   m   i   v   ,   Q   h   :   _   g   l   G   e   t   S   h   a   d   e   r   I   n   f   o   L   o   g   ,   S   a   :   _   g   l   G   e   t   S   h   a   d   e   r   i   v   ,   z   a   :   _   g   l   G   e   t   S   t   r   i   n   g   ,   N   :   _   g   l   G   e   t   U   n   i   f   o   r   m   L   o   c   a   t   i   o   n   ,   h   a   :   _   g   l   H   i   n   t   ,   L   a   :   _   g   l   L   i   n   e   W   i   d   t   h   ,   X   a   :   _   g   l   L   i   n   k   P   r   o   g   r   a   m   ,   P   :   _   g   l   P   i   x   e   l   S   t   o   r   e   i   ,   Y   :   _   g   l   S   a   m   p   l   e   r   P   a   r   a   m   e   t   e   r   i   ,   x   g   :   _   g   l   S   c   i   s   s   o   r   ,   U   a   :   _   g   l   S   h   a   d   e   r   S   o   u   r   c   e   ,   L   :   _   g   l   T   e   x   I   m   a   g   e   2   D   ,   _   a   :   _   g   l   T   e   x   I   m   a   g   e   3   D   ,   u   :   _   g   l   T   e   x   P   a   r   a   m   e   t   e   r   i   ,   P   h   :   _   g   l   U   n   i   f   o   r   m   1   f   v   ,   O   h   :   _   g   l   U   n   i   f   o   r   m   1   i   v   ,   N   h   :   _   g   l   U   n   i   f   o   r   m   2   f   v   ,   M   h   :   _   g   l   U   n   i   f   o   r   m   2   i   v   ,   L   h   :   _   g   l   U   n   i   f   o   r   m   3   f   v   ,   K   h   :   _   g   l   U   n   i   f   o   r   m   4   f   v   ,   J   h   :   _   g   l   U   n   i   f   o   r   m   4   i   v   ,   I   h   :   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   3   x   4   f   v   ,   H   h   :   _   g   l   U   n   i   f   o   r   m   M   a   t   r   i   x   4   f   v   ,   S   :   _   g   l   U   s   e   P   r   o   g   r   a   m   ,   M   a   :   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   4   f   ,   l   a   :   _   g   l   V   e   r   t   e   x   A   t   t   r   i   b   P   o   i   n   t   e   r   ,   Z   :   _   g   l   V   i   e   w   p   o   r   t   ,   i   a   :   i   n   v   o   k   e   _   d   i   ,   u   h   :   i   n   v   o   k   e   _   d   i   d   ,   E   a   :   i   n   v   o   k   e   _   d   i   i   i   ,   x   h   :   i   n   v   o   k   e   _   f   i   i   ,   m   :   i   n   v   o   k   e   _   f   i   i   f   ,   m   a   :   i   n   v   o   k   e   _   f   i   i   i   ,   q   :   i   n   v   o   k   e   _   i   ,   e   :   i   n   v   o   k   e   _   i   i   ,   d   b   :   i   n   v   o   k   e   _   i   i   d   d   d   d   ,   w   h   :   i   n   v   o   k   e   _   i   i   f   ,   f   :   i   n   v   o   k   e   _   i   i   i   ,   t   h   :   i   n   v   o   k   e   _   i   i   i   d   d   ,   h   :   i   n   v   o   k   e   _   i   i   i   i   ,   n   :   i   n   v   o   k   e   _   i   i   i   i   i   ,   D   b   :   i   n   v   o   k   e   _   i   i   i   i   i   d   ,   o   :   i   n   v   o   k   e   _   i   i   i   i   i   i   ,   w   :   i   n   v   o   k   e   _   i   i   i   i   i   i   i   ,   K   :   i   n   v   o   k   e   _   i   i   i   i   i   i   i   i   ,   f   a   :   i   n   v   o   k   e   _   i   i   i   i   i   i   i   i   i   i   i   i   ,   H   a   :   i   n   v   o   k   e   _   j   ,   g   a   :   i   n   v   o   k   e   _   j   i   i   i   i   ,   i   :   i   n   v   o   k   e   _   v   ,   t   a   :   i   n   v   o   k   e   _   v   f   ,   k   :   i   n   v   o   k   e   _   v   i   ,   e   b   :   i   n   v   o   k   e   _   v   i   f   ,   _   :   i   n   v   o   k   e   _   v   i   f   f   f   f   ,   d   :   i   n   v   o   k   e   _   v   i   i   ,   d   a   :   i   n   v   o   k   e   _   v   i   i   f   ,   g   :   i   n   v   o   k   e   _   v   i   i   i   ,   l   :   i   n   v   o   k   e   _   v   i   i   i   i   ,   z   :   i   n   v   o   k   e   _   v   i   i   i   i   i   ,   r   :   i   n   v   o   k   e   _   v   i   i   i   i   i   i   ,   D   :   i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   ,   G   :   i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   i   ,   $   :   i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   i   i   ,   O   :   i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   i   i   i   ,   e   a   :   i   n   v   o   k   e   _   v   i   i   i   i   i   i   i   i   i   i   i   i   i   i   i   ,   G   a   :   i   n   v   o   k   e   _   v   i   i   j   i   i   ,   v   h   :   j   s   _   f   e   e   d   _   s   t   r   e   a   m   _   d   a   t   a   _   t   o   _   p   r   o   j   e   c   t   m   ,   x   c   :   j   s   _   i   n   i   t   i   a   l   i   z   e   _   s   t   r   e   a   m   _   a   n   a   l   y   s   e   r   ,   I   c   :   j   s   _   i   n   i   t   i   a   l   i   z   e   _   w   o   r   k   l   e   t   _   s   y   s   t   e   m   _   o   n   c   e   ,   B   h   :   j   s   _   l   o   a   d   _   s   o   n   g   _   i   n   t   o   _   w   o   r   k   l   e   t   ,   B   :   _   l   l   v   m   _   e   h   _   t   y   p   e   i   d   _   f   o   r   ,   a   :   w   a   s   m   M   e   m   o   r   y   ,   F   b   :   _   r   a   n   d   o   m   _   g   e   t   }   }   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   {   d   y   n   C   a   l   l   _   v   i   i   i   i   (   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   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       d   y   n   C   a   l   l   _   i   i   i   (   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   (   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       d   y   n   C   a   l   l   _   i   i   i   i   (   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   n   d   e   x   ,   a   1   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   d   y   n   C   a   l   l   _   v   i   (   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   (   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   {   d   y   n   C   a   l   l   _   v   i   i   i   (   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   _   f   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       d   y   n   C   a   l   l   _   f   i   i   i   (   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   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   {   d   y   n   C   a   l   l   _   v   i   i   (   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   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       d   y   n   C   a   l   l   _   i   i   (   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   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   {   d   y   n   C   a   l   l   _   v   i   f   (   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   n   d   e   x   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   d   y   n   C   a   l   l   _   v   (   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   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       d   y   n   C   a   l   l   _   i   i   d   d   d   d   (   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   {   d   y   n   C   a   l   l   _   v   i   i   i   i   i   i   (   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   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   {   d   y   n   C   a   l   l   _   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   )   }   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   {   d   y   n   C   a   l   l   _   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   )   }   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   {   d   y   n   C   a   l   l   _   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   )   }   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       d   y   n   C   a   l   l   _   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   )   }   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       d   y   n   C   a   l   l   _   i   i   i   i   i   i   (   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       d   y   n   C   a   l   l   _   i   i   i   i   i   (   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   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   {   d   y   n   C   a   l   l   _   v   i   i   i   i   i   (   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   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       d   y   n   C   a   l   l   _   i   i   i   i   i   i   i   (   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   _   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       d   y   n   C   a   l   l   _   f   i   i   (   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       d   y   n   C   a   l   l   _   f   i   i   f   (   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       d   y   n   C   a   l   l   _   i   (   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       d   y   n   C   a   l   l   _   i   i   f   (   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   {   d   y   n   C   a   l   l   _   v   i   i   f   (   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   {   d   y   n   C   a   l   l   _   v   i   f   f   f   f   (   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   {   d   y   n   C   a   l   l   _   v   f   (   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       d   y   n   C   a   l   l   _   d   i   (   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       d   y   n   C   a   l   l   _   d   i   d   (   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       d   y   n   C   a   l   l   _   i   i   i   d   d   (   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   _   j   (   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       d   y   n   C   a   l   l   _   j   (   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   )   ;   r   e   t   u   r   n       0   n   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   v   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   {   d   y   n   C   a   l   l   _   v   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   )   }   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   j   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   {   d   y   n   C   a   l   l   _   v   i   i   j   i   i   (   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   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       d   y   n   C   a   l   l   _   i   i   i   i   i   d   (   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   _   j   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       d   y   n   C   a   l   l   _   j   i   i   i   i   (   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   )   ;   r   e   t   u   r   n       0   n   }   }   f   u   n   c   t   i   o   n       i   n   v   o   k   e   _   d   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       d   y   n   C   a   l   l   _   d   i   i   i   (   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   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   ,   a   1   1   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   r   e   t   u   r   n       d   y   n   C   a   l   l   _   i   i   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   ,   a   1   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   i   i   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   ,   a   1   1   ,   a   1   2   ,   a   1   3   ,   a   1   4   ,   a   1   5   )   {   v   a   r       s   p   =   s   t   a   c   k   S   a   v   e   (   )   ;   t   r   y   {   d   y   n   C   a   l   l   _   v   i   i   i   i   i   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   ,   a   1   1   ,   a   1   2   ,   a   1   3   ,   a   1   4   ,   a   1   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       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   }   i   f   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   |   |   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   R   )   {   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   )   ;   i   n   i   t   R   u   n   t   i   m   e   (   )   ;   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   (   )   }   }   v   a   r       w   a   s   m   E   x   p   o   r   t   s   ;   i   f   (   !   (   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   P   T   H   R   E   A   D   |   |   E   N   V   I   R   O   N   M   E   N   T   _   I   S   _   W   A   S   M   _   W   O   R   K   E   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   (   )   )   ;   r   u   n   (   )   }   i   f   (   r   u   n   t   i   m   e   I   n   i   t   i   a   l   i   z   e   d   )   {   m   o   d   u   l   e   R   t   n   =   M   o   d   u   l   e   }   e   l   s   e   {   m   o   d   u   l   e   R   t   n   =   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   }   )   }   
   ;   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   ;   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   )   ;   v   a   r       i   s   P   t   h   r   e   a   d   =   g   l   o   b   a   l   T   h   i   s   .   s   e   l   f   ?   .   n   a   m   e   ?   .   s   t   a   r   t   s   W   i   t   h   (   "   e   m   -   p   t   h   r   e   a   d   "   )   ;   i   s   P   t   h   r   e   a   d   &   &   c   r   e   a   t   e   M   o   d   u   l   e   (   )   ;   v   a   r       i   s   W   W   =   g   l   o   b   a   l   T   h   i   s   .   s   e   l   f   ?   .   n   a   m   e   =   =   "   e   m   -   w   w   "   ;   i   s   W   W   |   |   =   !   !   g   l   o   b   a   l   T   h   i   s   .   A   u   d   i   o   W   o   r   k   l   e   t   G   l   o   b   a   l   S   c   o   p   e   ;   i   s   W   W   &   &   c   r   e   a   t   e   M   o   d   u   l   e   (   )   ;   
   