NPU5TTOXP2YIHHCCBXLLDHBBCC2TAINCBOZUMCRTPHM4WXQHBUKQC EFSO7K7SWZTGY6HPRHJYPJ5SDA2P4ZQ77FBIFX72IAZ33VEY6ZOQC PRYVVWOS47BUSXKAROAKMCOBAU7J4344YR5EOACFLIUL2JKBMVCQC 37ZVW7SWNUU3ZAE3MRPNJZIOPCHQL6UCN4T4PKSF5AHGIZNVILXAC MVXKPBHZNTJKXVDTOTPGWTLTLBO76RXGYWATWIXIL66DKVMVLDWAC Z5HLXU4PJWWJJDBCK52NBD6PIRIA3TAN2BKZB5HBYFGIDBX4F5HAC NHNP76LGNIVNIDMSDILAKEVSWFQ4LKNCYXVQEGKKJ75TSRPEBVEQC BULPIBEGL7TMK6CVIE7IS7WGAHGOSUJBGJSFQK542MOWGHP2ADQQC ZPUQSPQPQFVRUIHGLAWW3IDBYODIWDHO62HAC3WWF5TM3CIJGHNQC TGHAJBESCIEGWUE2D3FGLNOIAYT4D2IRGZKRXRMTUFW7QZETC7OAC MUJTM6REGQAK3LZTIFWGJRXE2UPCM4HSLXQYSF5ITLXLS6JCVPMQC SVJZZDC3K6AKAXHGRNAZKRE2ZXEKJANNLG7LSSUZJARFBL5F7C4AC MXA3RZYKUI4UF2ISY7JEF6VKX6NOPZMZH5SLLCZHRJKFIXXXDPSAC ODLKHO7BO2AODYO2OEQ6D4NSNBT5GR3CKLUXWMDLRYXL7DJOI7BAC 76TK2E3QZ3CWH3VOQVI7SSZ3LN5LTTQQS26Y6YUSMVC7BDU4ZKZAC WLJCIXYMSTCNSYCFOEBQNDLBZ5D2Z3WTF4E4WYL5CFGIJ434FKNQC ILOA5BYFTQKBSHLFMMZUVPQ2JXBFJD62ERQFBTDK2WSRXUN525VQC YJJ4X4JGABMVA5JBQW5UAWI543P3Y7NDVFTOHA6LIDA5KSFGUFNQC 5ZA3BRNYWKSGEBJ4JLA4UBC3LJPT5JBWYCU7PQYRSGX6MJMEWDIQC LXTTOB33N2HCUZFIUDRQGGBVHK2HODRG4NBLH6RXRQZDCHF27BSAC function Text.pos_at_start_of_cursor_screen_line(State)Text.populate_screen_line_starting_pos(State, State.cursor1.line)local cursor_line_cache = State.line_cache[State.cursor1.line]for i=#cursor_line_cache.screen_line_starting_pos,1,-1 dolocal spos = cursor_line_cache.screen_line_starting_pos[i]if spos <= State.cursor1.pos then
function Text.pos_at_start_of_screen_line(State, loc1)Text.populate_screen_line_starting_pos(State, loc1.line)local line_cache = State.line_cache[loc1.line]for i=#line_cache.screen_line_starting_pos,1,-1 dolocal spos = line_cache.screen_line_starting_pos[i]if spos <= loc1.pos then
function Text.pos_at_start_of_cursor_screen_lineB(State)local x = Margin_left + Text.screen_line_width(State, State.cursor1.line, #line_cache.screen_line_starting_pos) + AB_paddingText.populate_screen_line_starting_posB(State, State.cursor1.line, x)local cursor_line_cache = State.line_cache[State.cursor1.line]for i=#cursor_line_cache.screen_line_starting_posB,1,-1 dolocal sposB = cursor_line_cache.screen_line_starting_posB[i]if sposB <= State.cursor1.posB then
function Text.pos_at_start_of_screen_lineB(State, loc1)local x = Margin_left + Text.screen_line_width(State, loc1.line, #line_cache.screen_line_starting_pos) + AB_paddingText.populate_screen_line_starting_posB(State, loc1.line, x)local line_cache = State.line_cache[loc1.line]for i=#line_cache.screen_line_starting_posB,1,-1 dolocal sposB = line_cache.screen_line_starting_posB[i]if sposB <= loc1.posB then